diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-18/index.js b/packages/core/integration-tests/test/integration/jsx-automatic-18/index.js new file mode 100644 index 00000000000..8d097d55d7f --- /dev/null +++ b/packages/core/integration-tests/test/integration/jsx-automatic-18/index.js @@ -0,0 +1 @@ +module.exports =
; diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-18/node_modules/react/jsx-dev-runtime.js b/packages/core/integration-tests/test/integration/jsx-automatic-18/node_modules/react/jsx-dev-runtime.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-18/node_modules/react/jsx-runtime.js b/packages/core/integration-tests/test/integration/jsx-automatic-18/node_modules/react/jsx-runtime.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-18/node_modules/react/package.json b/packages/core/integration-tests/test/integration/jsx-automatic-18/node_modules/react/package.json new file mode 100644 index 00000000000..bcbea4166f7 --- /dev/null +++ b/packages/core/integration-tests/test/integration/jsx-automatic-18/node_modules/react/package.json @@ -0,0 +1,3 @@ +{ + "name": "react" +} diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-18/package.json b/packages/core/integration-tests/test/integration/jsx-automatic-18/package.json new file mode 100644 index 00000000000..70ac62a29af --- /dev/null +++ b/packages/core/integration-tests/test/integration/jsx-automatic-18/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "dependencies": { + "react": "18.0.0-rc.0-next-9a7e6bf0d-2022011" + } +} diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-18/yarn.lock b/packages/core/integration-tests/test/integration/jsx-automatic-18/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-experimental/index.js b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/index.js new file mode 100644 index 00000000000..8d097d55d7f --- /dev/null +++ b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/index.js @@ -0,0 +1 @@ +module.exports =
; diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-experimental/node_modules/react/jsx-dev-runtime.js b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/node_modules/react/jsx-dev-runtime.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-experimental/node_modules/react/jsx-runtime.js b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/node_modules/react/jsx-runtime.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-experimental/node_modules/react/package.json b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/node_modules/react/package.json new file mode 100644 index 00000000000..bcbea4166f7 --- /dev/null +++ b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/node_modules/react/package.json @@ -0,0 +1,3 @@ +{ + "name": "react" +} diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-experimental/package.json b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/package.json new file mode 100644 index 00000000000..7dacf6d452b --- /dev/null +++ b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "dependencies": { + "react": "0.0.0-d5e1bf0-aee1b" + } +} diff --git a/packages/core/integration-tests/test/integration/jsx-automatic-experimental/yarn.lock b/packages/core/integration-tests/test/integration/jsx-automatic-experimental/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/transpilation.js b/packages/core/integration-tests/test/transpilation.js index 78dff41cd09..c5e52a89bc7 100644 --- a/packages/core/integration-tests/test/transpilation.js +++ b/packages/core/integration-tests/test/transpilation.js @@ -203,6 +203,26 @@ describe('transpilation', function () { assert(file.includes('_jsxDevRuntime.jsxDEV("div"')); }); + it('should support the automatic JSX runtime with React 18 prereleases', async function () { + let b = await bundle( + path.join(__dirname, '/integration/jsx-automatic-18/index.js'), + ); + + let file = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); + assert(file.includes('react/jsx-dev-runtime')); + assert(file.includes('_jsxDevRuntime.jsxDEV("div"')); + }); + + it('should support the automatic JSX runtime with experimental React versions', async function () { + let b = await bundle( + path.join(__dirname, '/integration/jsx-automatic-experimental/index.js'), + ); + + let file = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); + assert(file.includes('react/jsx-dev-runtime')); + assert(file.includes('_jsxDevRuntime.jsxDEV("div"')); + }); + it('should support the automatic JSX runtime with preact with alias', async function () { let b = await bundle( path.join( diff --git a/packages/transformers/js/src/JSTransformer.js b/packages/transformers/js/src/JSTransformer.js index 16b1e2e546d..e65989c700b 100644 --- a/packages/transformers/js/src/JSTransformer.js +++ b/packages/transformers/js/src/JSTransformer.js @@ -22,7 +22,7 @@ const JSX_PRAGMA = { react: { pragma: 'React.createElement', pragmaFrag: 'React.Fragment', - automatic: '>= 17.0.0', + automatic: '>= 17.0.0 || >= 0.0.0-0 < 0.0.0', }, preact: { pragma: 'h', @@ -220,7 +220,9 @@ export default (new Transformer({ automaticVersion && !compilerOptions?.jsxFactory && minReactLibVersion != null && - semver.satisfies(minReactLibVersion, automaticVersion); + semver.satisfies(minReactLibVersion, automaticVersion, { + includePrerelease: true, + }); if (automaticJSXRuntime) { jsxImportSource = reactLib;