Skip to content

Commit

Permalink
add RSC entrypoint for jsx-runtime (#28217)
Browse files Browse the repository at this point in the history
Adds a new entrypoint for the production jsx-runtime when using
react-server condition. Currently the entrypoints are the same but in
the future we will potentially change the implementation of the runtime
in ways that can only be optimized for react-server constraints and we
want to have the entrypoint already separated so environments using it
will be pulling in the right version
  • Loading branch information
gnoff authored Feb 2, 2024
1 parent cf925eb commit 00f9acb
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 2 deletions.
9 changes: 9 additions & 0 deletions packages/react/jsx-runtime.react-server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
export {Fragment, jsx, jsxs} from './src/jsx/ReactJSXServer';
7 changes: 7 additions & 0 deletions packages/react/npm/jsx-runtime.react-server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

if (process.env.NODE_ENV === 'production') {
module.exports = require('./cjs/react-jsx-runtime.react-server.production.min.js');
} else {
module.exports = require('./cjs/react-jsx-runtime.react-server.development.js');
}
5 changes: 4 additions & 1 deletion packages/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@
"default": "./index.js"
},
"./package.json": "./package.json",
"./jsx-runtime": "./jsx-runtime.js",
"./jsx-runtime": {
"react-server": "./jsx-runtime.react-server.js",
"default": "./jsx-runtime.js"
},
"./jsx-dev-runtime": "./jsx-dev-runtime.js",
"./src/*": "./src/*"
},
Expand Down
22 changes: 22 additions & 0 deletions packages/react/src/jsx/ReactJSXServer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

// These are implementations of the jsx APIs for React Server runtimes.
import {REACT_FRAGMENT_TYPE} from 'shared/ReactSymbols';
import {
jsxWithValidationStatic,
jsxWithValidationDynamic,
} from './ReactJSXElementValidator';
import {jsx as jsxProd} from './ReactJSXElement';
const jsx: any = __DEV__ ? jsxWithValidationDynamic : jsxProd;
// we may want to special case jsxs internally to take advantage of static children.
// for now we can ship identical prod functions
const jsxs: any = __DEV__ ? jsxWithValidationStatic : jsxProd;

export {REACT_FRAGMENT_TYPE as Fragment, jsx, jsxs};
14 changes: 13 additions & 1 deletion scripts/rollup/bundles.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,18 @@ const bundles = [
externals: ['react', 'ReactNativeInternalFeatureFlags'],
},

/******* React JSX Runtime React Server *******/
{
bundleTypes: [NODE_DEV, NODE_PROD],
moduleType: ISOMORPHIC,
entry: 'react/src/jsx/ReactJSXServer.js',
name: 'react-jsx-runtime.react-server',
global: 'JSXRuntime',
minifyWithProdErrorCodes: false,
wrapWithModuleBoundaries: false,
externals: ['react', 'ReactNativeInternalFeatureFlags'],
},

/******* React JSX DEV Runtime *******/
{
bundleTypes: [
Expand Down Expand Up @@ -176,7 +188,7 @@ const bundles = [
externals: ['react'],
},

/******* React DOM Shared Subset *******/
/******* React DOM React Server *******/
{
bundleTypes: [NODE_DEV, NODE_PROD],
moduleType: RENDERER,
Expand Down

0 comments on commit 00f9acb

Please sign in to comment.