From 748897be0772d3569c92c26e061ba05ac26563b4 Mon Sep 17 00:00:00 2001 From: Luna Ruan Date: Tue, 17 Mar 2020 01:16:53 -0700 Subject: [PATCH] =?UTF-8?q?Add=20experimental=20version=20of=20the=20`babe?= =?UTF-8?q?l-plugin-transform-react-=E2=80=A6=20(#11154)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add next option for babel-plugin-transform-react-jsx * address review comments * chore: update test fixtures * Update fixture * Add "columnNumber" to the new React transform * Update windows fixtures * Delete unused output.js * Update windows tests * Fix windows again * fix comments Co-authored-by: Huáng Jùnliàng Co-authored-by: Nicolò Ribaudo Co-authored-by: Moti Zilberman --- .../package.json | 16 + .../src/index.js | 799 ++++++++++++++++++ .../src/index.js | 2 +- .../.npmignore | 3 + .../package.json | 26 + .../src/index.js | 43 + .../fixtures/linux/auto-import-dev/input.js | 10 + .../linux/auto-import-dev/options.json | 5 + .../fixtures/linux/auto-import-dev/output.mjs | 36 + .../input.js | 10 + .../options.json | 9 + .../fixtures/linux/classic-runtime/input.js | 10 + .../linux/classic-runtime/options.json | 4 + .../fixtures/linux/classic-runtime/output.js | 42 + .../test/fixtures/linux/fragments/input.js | 1 + .../test/fixtures/linux/fragments/output.js | 11 + .../linux/handle-fragments-with-key/input.js | 1 + .../linux/handle-fragments-with-key/output.js | 9 + .../linux/handle-nonstatic-children/input.js | 1 + .../linux/handle-nonstatic-children/output.js | 19 + .../linux/handle-static-children/input.js | 6 + .../linux/handle-static-children/output.js | 23 + .../test/fixtures/linux/options.json | 9 + .../linux/source-and-self-defined/input.js | 10 + .../source-and-self-defined/options.json | 10 + .../windows/auto-import-dev-windows/input.js | 10 + .../auto-import-dev-windows/options.json | 4 + .../auto-import-dev-windows/output.mjs | 36 + .../windows/classic-runtime-windows/input.js | 10 + .../classic-runtime-windows/options.json | 3 + .../windows/classic-runtime-windows/output.js | 42 + .../input.js | 10 + .../options.json | 8 + .../windows/fragments-windows/input.js | 1 + .../windows/fragments-windows/output.js | 11 + .../input.js | 1 + .../output.js | 9 + .../input.js | 5 + .../output.js | 19 + .../handle-static-children-windows/input.js | 6 + .../handle-static-children-windows/output.js | 23 + .../test/fixtures/windows/options.json | 9 + .../source-and-self-defined-windows/input.js | 10 + .../options.json | 10 + .../test/index.js | 3 + .../test/fixtures/react-source/options.json | 3 +- .../package.json | 1 + .../src/index.js | 108 +-- .../src/transform-automatic.js | 43 + .../src/transform-classic.js | 98 +++ .../input.js | 10 + .../options.json | 4 + .../output.mjs | 14 + .../input.js | 10 + .../options.json | 4 + .../output.js | 13 + .../complicated-scope-module/input.js | 15 + .../complicated-scope-module/options.json | 4 + .../complicated-scope-module/output.mjs | 25 + .../complicated-scope-script/input.js | 15 + .../complicated-scope-script/options.json | 4 + .../complicated-scope-script/output.js | 25 + .../import-source-pragma/input.js | 2 + .../import-source-pragma/output.mjs | 6 + .../nextAutoImport/import-source/input.js | 1 + .../nextAutoImport/import-source/options.json | 5 + .../nextAutoImport/import-source/output.mjs | 5 + .../fixtures/nextAutoImport/no-jsx/input.js | 1 + .../fixtures/nextAutoImport/no-jsx/output.mjs | 1 + .../test/fixtures/nextAutoImport/options.json | 4 + .../nextAutoImport/react-defined/input.js | 10 + .../nextAutoImport/react-defined/options.json | 3 + .../nextAutoImport/react-defined/output.mjs | 15 + .../input.js | 13 + .../input.js | 3 + .../output.mjs | 5 + .../nextReact/arrow-functions/input.js | 7 + .../nextReact/arrow-functions/output.mjs | 17 + .../fixtures/nextReact/assignment/input.js | 1 + .../fixtures/nextReact/assignment/output.mjs | 5 + .../input.js | 13 + .../output.mjs | 8 + .../input.js | 6 + .../output.mjs | 7 + .../display-name-export-default/input.mjs | 5 + .../display-name-export-default/output.mjs | 6 + .../display-name-if-missing/input.js | 13 + .../display-name-if-missing/output.mjs | 12 + .../display-name-object-declaration/input.js | 7 + .../output.mjs | 8 + .../display-name-property-assignment/input.js | 5 + .../output.mjs | 6 + .../input.js | 5 + .../output.mjs | 6 + .../exec.js | 32 + .../options.json | 16 + .../exec.js | 32 + .../options.json | 16 + .../input.js | 4 + .../output.mjs | 5 + .../handle-fragments-with-key/input.js | 3 + .../handle-fragments-with-key/output.mjs | 4 + .../input.js | 1 + .../output.mjs | 4 + .../nextReact/handle-fragments/input.js | 1 + .../nextReact/handle-fragments/output.mjs | 6 + .../handle-nonstatic-children/input.js | 5 + .../handle-nonstatic-children/output.mjs | 5 + .../nextReact/handle-static-children/input.js | 6 + .../handle-static-children/output.mjs | 6 + .../honor-custom-jsx-comment/input.js | 6 + .../honor-custom-jsx-comment/output.mjs | 13 + .../jsx-with-retainlines-option/input.js | 1 + .../jsx-with-retainlines-option/options.json | 3 + .../jsx-with-retainlines-option/output.mjs | 1 + .../jsx-without-retainlines-option/input.js | 1 + .../jsx-without-retainlines-option/output.mjs | 5 + .../nextReact/key-undefined-works/input.js | 2 + .../nextReact/key-undefined-works/output.mjs | 8 + .../input.js | 17 + .../options.json | 8 + .../output.mjs | 31 + .../test/fixtures/nextReact/options.json | 9 + .../input.js | 2 + .../output.mjs | 6 + .../nextReact/should-add-quotes-es3/input.js | 1 + .../should-add-quotes-es3/options.json | 6 + .../should-add-quotes-es3/output.mjs | 10 + .../should-allow-constructor-as-prop/input.js | 1 + .../output.mjs | 5 + .../input.js | 1 + .../output.mjs | 3 + .../input.js | 1 + .../output.mjs | 5 + .../should-allow-js-namespacing/blacklist.js | 1 + .../should-allow-js-namespacing/input.js | 1 + .../should-allow-js-namespacing/output.mjs | 3 + .../should-allow-nested-fragments/input.js | 12 + .../should-allow-nested-fragments/output.mjs | 21 + .../input.js | 15 + .../output.mjs | 17 + .../should-convert-simple-tags/input.js | 1 + .../should-convert-simple-tags/output.mjs | 3 + .../should-convert-simple-text/input.js | 1 + .../should-convert-simple-text/output.mjs | 5 + .../should-disallow-spread-children/input.js | 1 + .../options.json | 3 + .../should-disallow-xml-namespacing/input.js | 1 + .../options.json | 3 + .../should-escape-xhtml-jsxattribute/input.js | 3 + .../output.mjs | 13 + .../should-escape-xhtml-jsxtext/input.js | 12 + .../should-escape-xhtml-jsxtext/output.mjs | 38 + .../input.js | 11 + .../output.mjs | 15 + .../input.js | 1 + .../output.mjs | 5 + .../input.js | 5 + .../output.mjs | 10 + .../input.js | 16 + .../output.mjs | 8 + .../input.js | 1 + .../output.mjs | 10 + .../input.js | 1 + .../output.mjs | 6 + .../input.js | 1 + .../output.mjs | 5 + .../input.js | 1 + .../output.mjs | 5 + .../input.js | 10 + .../output.mjs | 11 + .../should-properly-handle-keys/input.js | 7 + .../should-properly-handle-keys/output.mjs | 8 + .../input.js | 2 + .../output.mjs | 5 + .../should-quote-jsx-attributes/input.js | 1 + .../should-quote-jsx-attributes/output.mjs | 6 + .../input.js | 1 + .../options.json | 11 + .../output.mjs | 5 + .../input.js | 1 + .../options.json | 12 + .../input.js | 1 + .../output.mjs | 3 + .../input.js | 3 + .../output.mjs | 6 + .../input.js | 3 + .../output.mjs | 5 + .../input.js | 1 + .../options.json | 13 + .../input.js | 4 + .../options.json | 3 + .../fixtures/nextReact/this-tag-name/input.js | 1 + .../nextReact/this-tag-name/output.mjs | 5 + .../input.js | 1 + .../output.mjs | 7 + .../input.js | 1 + .../output.mjs | 7 + .../input.js | 13 + .../input.js | 4 + .../output.js | 4 + .../nextReactClassic/arrow-functions/input.js | 8 + .../arrow-functions/output.js | 16 + .../nextReactClassic/assignment/input.js | 2 + .../nextReactClassic/assignment/output.js | 4 + .../input.js | 14 + .../output.js | 2 + .../does-not-add-source-self-windows/exec.js | 31 + .../options.json | 15 + .../does-not-add-source-self/exec.js | 31 + .../does-not-add-source-self/options.json | 15 + .../input.js | 6 + .../output.js | 2 + .../input.js | 9 + .../options.json | 5 + .../output.js | 8 + .../honor-custom-jsx-comment/input.js | 9 + .../honor-custom-jsx-comment/output.js | 8 + .../honor-custom-jsx-pragma-option/input.js | 8 + .../options.json | 5 + .../honor-custom-jsx-pragma-option/output.js | 6 + .../jsx-with-retainlines-option/input.js | 3 + .../jsx-with-retainlines-option/options.json | 3 + .../jsx-with-retainlines-option/output.js | 3 + .../jsx-without-retainlines-option/input.js | 3 + .../jsx-without-retainlines-option/output.js | 2 + .../fixtures/nextReactClassic/options.json | 9 + .../input.js | 3 + .../output.js | 4 + .../should-add-quotes-es3/input.js | 3 + .../should-add-quotes-es3/options.json | 6 + .../should-add-quotes-es3/output.js | 9 + .../should-allow-constructor-as-prop/input.js | 3 + .../output.js | 4 + .../input.js | 3 + .../output.js | 2 + .../input.js | 3 + .../output.js | 4 + .../should-allow-js-namespacing/blacklist.js | 1 + .../should-allow-js-namespacing/input.js | 3 + .../should-allow-js-namespacing/output.js | 2 + .../should-allow-nested-fragments/input.js | 14 + .../should-allow-nested-fragments/output.js | 2 + .../input.js | 4 + .../output.js | 4 + .../should-allow-pragmafrag-and-frag/input.js | 5 + .../output.js | 6 + .../input.js | 17 + .../output.js | 5 + .../should-convert-simple-tags/input.js | 3 + .../should-convert-simple-tags/output.js | 2 + .../should-convert-simple-text/input.js | 3 + .../should-convert-simple-text/output.js | 2 + .../should-disallow-spread-children/input.js | 3 + .../options.json | 3 + .../should-disallow-xml-namespacing/input.js | 3 + .../options.json | 3 + .../should-escape-xhtml-jsxattribute/input.js | 5 + .../output.js | 10 + .../should-escape-xhtml-jsxtext/input.js | 14 + .../should-escape-xhtml-jsxtext/output.js | 10 + .../input.js | 13 + .../output.js | 10 + .../input.js | 3 + .../output.js | 2 + .../input.js | 7 + .../output.js | 2 + .../input.js | 18 + .../output.js | 7 + .../input.js | 3 + .../output.js | 9 + .../input.js | 3 + .../output.js | 4 + .../input.js | 3 + .../output.js | 2 + .../input.js | 3 + .../output.js | 2 + .../input.js | 12 + .../output.js | 9 + .../should-quote-jsx-attributes/input.js | 3 + .../should-quote-jsx-attributes/output.js | 4 + .../input.js | 3 + .../options.json | 12 + .../output.js | 4 + .../input.js | 3 + .../options.json | 12 + .../input.js | 3 + .../output.js | 2 + .../input.js | 3 + .../options.json | 13 + .../input.js | 4 + .../options.json | 3 + .../nextReactClassic/this-tag-name/input.js | 3 + .../nextReactClassic/this-tag-name/output.js | 2 + .../input.js | 5 + .../options.json | 3 + .../input.js | 4 + .../output.js | 5 + .../input.js | 3 + .../output.js | 6 + .../input.js | 3 + .../output.js | 6 + .../input.js | 2 + .../output.js | 2 + .../options.json | 2 +- .../options.json | 2 +- .../test/fixtures/runtime/classic/input.js | 1 + .../fixtures/runtime/classic/options.json | 3 + .../test/fixtures/runtime/classic/output.js | 1 + .../runtime/defaults-to-classic/input.js | 1 + .../runtime/defaults-to-classic/options.json | 3 + .../runtime/defaults-to-classic/output.js | 1 + .../fixtures/runtime/invalid-runtime/input.js | 1 + .../runtime/invalid-runtime/options.json | 4 + .../runtime/pragma-runtime-classsic/input.js | 3 + .../pragma-runtime-classsic/options.json | 10 + .../runtime/pragma-runtime-classsic/output.js | 2 + .../runtime/runtime-automatic/input.js | 1 + .../runtime/runtime-automatic/options.json | 10 + .../runtime/runtime-automatic/output.js | 5 + packages/babel-preset-react/package.json | 1 + packages/babel-preset-react/src/index.js | 28 +- .../input.js | 1 + .../options.json | 4 + .../output.js | 11 + .../development-runtime-automatic/input.js | 1 + .../options.json | 4 + .../development-runtime-automatic/output.js | 11 + .../preset-options/runtime-automatic/input.js | 1 + .../runtime-automatic/options.json | 3 + .../runtime-automatic/output.js | 5 + .../preset-options/runtime-classic/input.js | 1 + .../runtime-classic/options.json | 3 + .../preset-options/runtime-classic/output.js | 3 + packages/babel-standalone/package.json | 1 + .../scripts/pluginConfig.json | 1 + .../babel-standalone/src/generated/plugins.js | 3 + 337 files changed, 3311 insertions(+), 105 deletions(-) create mode 100644 packages/babel-helper-builder-react-jsx-experimental/package.json create mode 100644 packages/babel-helper-builder-react-jsx-experimental/src/index.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/.npmignore create mode 100644 packages/babel-plugin-transform-react-jsx-development/package.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/src/index.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime-with-source-self-plugins/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime-with-source-self-plugins/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/source-and-self-defined/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/source-and-self-defined/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-with-source-self-plugins-windows/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-with-source-self-plugins-windows/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/fragments-windows/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/fragments-windows/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-fragments-with-key-windows/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-fragments-with-key-windows/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-nonstatic-children-windows/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-nonstatic-children-windows/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-static-children-windows/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-static-children-windows/output.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/source-and-self-defined-windows/input.js create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/source-and-self-defined-windows/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-development/test/index.js create mode 100644 packages/babel-plugin-transform-react-jsx/src/transform-automatic.js create mode 100644 packages/babel-plugin-transform-react-jsx/src/transform-classic.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source-pragma/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source-pragma/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/no-jsx/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/no-jsx/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/.should-properly-handle-comments-adjacent-to-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/adds-appropriate-newlines-when-using-spread-attribute/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/adds-appropriate-newlines-when-using-spread-attribute/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/arrow-functions/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/arrow-functions/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/assignment/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/assignment/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/concatenates-adjacent-string-literals/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/concatenates-adjacent-string-literals/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-assignment-expression/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-assignment-expression/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-export-default/input.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-export-default/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-if-missing/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-if-missing/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-object-declaration/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-object-declaration/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-property-assignment/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-property-assignment/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-variable-declaration/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-variable-declaration/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic-windows/exec.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic-windows/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic/exec.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/dont-coerce-expression-containers/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/dont-coerce-expression-containers/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-key/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-key/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-no-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-no-children/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-nonstatic-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-nonstatic-children/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-static-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-static-children/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/honor-custom-jsx-comment/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/honor-custom-jsx-comment/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-without-retainlines-option/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-without-retainlines-option/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/key-undefined-works/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/key-undefined-works/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/pragma-works-with-no-space-at-the-end/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/pragma-works-with-no-space-at-the-end/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-constructor-as-prop/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-constructor-as-prop/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-deeper-js-namespacing/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-deeper-js-namespacing/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-elements-as-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-elements-as-attributes/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/blacklist.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-nested-fragments/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-nested-fragments/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-avoid-wrapping-in-extra-parens-if-not-needed/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-tags/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-tags/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-text/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-text/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-spread-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-spread-children/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-xml-namespacing/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-xml-namespacing/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxattribute/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxattribute/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxtext/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxtext/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-attributed-elements/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-attributed-elements/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-has-own-property-correctly/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-has-own-property-correctly/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-have-correct-comma-in-nested-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-have-correct-comma-in-nested-children/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-insert-commas-after-expressions-before-whitespace/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-insert-commas-after-expressions-before-whitespace/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-add-quotes-to-identifier-names/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-add-quotes-to-identifier-names/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-mangle-expressioncontainer-attribute-values/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-mangle-expressioncontainer-attribute-values/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-nbsp-even-coupled-with-other-whitespace/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-tags-with-a-single-child-of-nbsp/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-tags-with-a-single-child-of-nbsp/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-comments-between-props/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-comments-between-props/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-keys/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-keys/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-null-prop-spread/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-null-prop-spread/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-quote-jsx-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-quote-jsx-attributes/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-throw-error-namespaces-if-not-flag/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-throw-error-namespaces-if-not-flag/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-transform-known-hyphenated-tags/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-transform-known-hyphenated-tags/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-createElement-when-key-comes-after-spread/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-createElement-when-key-comes-after-spread/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-jsx-when-key-comes-before-spread/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-jsx-when-key-comes-before-spread/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-is-set/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-is-set/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-pragma-is-set.1/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-pragma-is-set.1/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/this-tag-name/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/this-tag-name/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-last-spread-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-last-spread-attributes/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-middle-spread-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-middle-spread-attributes/output.mjs create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/.should-properly-handle-comments-adjacent-to-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/adds-appropriate-newlines-when-using-spread-attribute/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/adds-appropriate-newlines-when-using-spread-attribute/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/arrow-functions/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/arrow-functions/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/assignment/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/assignment/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/concatenates-adjacent-string-literals/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/concatenates-adjacent-string-literals/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self-windows/exec.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self-windows/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self/exec.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/dont-coerce-expression-containers/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/dont-coerce-expression-containers/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-without-retainlines-option/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-without-retainlines-option/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/pragma-works-with-no-space-at-the-end/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/pragma-works-with-no-space-at-the-end/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-constructor-as-prop/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-constructor-as-prop/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-deeper-js-namespacing/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-deeper-js-namespacing/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-elements-as-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-elements-as-attributes/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/blacklist.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-nested-fragments/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-nested-fragments/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-no-pragmafrag-if-frag-unused/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-no-pragmafrag-if-frag-unused/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-pragmafrag-and-frag/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-pragmafrag-and-frag/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-avoid-wrapping-in-extra-parens-if-not-needed/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-tags/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-tags/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-text/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-text/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-spread-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-spread-children/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-xml-namespacing/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-xml-namespacing/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxattribute/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxattribute/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxtext/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxtext/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-attributed-elements/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-attributed-elements/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-has-own-property-correctly/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-has-own-property-correctly/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-have-correct-comma-in-nested-children/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-have-correct-comma-in-nested-children/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-insert-commas-after-expressions-before-whitespace/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-insert-commas-after-expressions-before-whitespace/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-add-quotes-to-identifier-names/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-add-quotes-to-identifier-names/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-mangle-expressioncontainer-attribute-values/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-mangle-expressioncontainer-attribute-values/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-nbsp-even-coupled-with-other-whitespace/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-tags-with-a-single-child-of-nbsp/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-tags-with-a-single-child-of-nbsp/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-properly-handle-comments-between-props/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-properly-handle-comments-between-props/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-quote-jsx-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-quote-jsx-attributes/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-throw-error-namespaces-if-not-flag/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-throw-error-namespaces-if-not-flag/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-transform-known-hyphenated-tags/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-transform-known-hyphenated-tags/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-is-set/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-is-set/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-pragma-is-set/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-pragma-is-set/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/this-tag-name/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/this-tag-name/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/throw-if-pragma-set-but-not-pragmafrag-and-frag-used/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/throw-if-pragma-set-but-not-pragmafrag-and-frag-used/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-first-spread-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-first-spread-attributes/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-last-spread-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-last-spread-attributes/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-middle-spread-attributes/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-middle-spread-attributes/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/react/pragma-works-with-no-space-at-the-end/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/react/pragma-works-with-no-space-at-the-end/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/invalid-runtime/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/invalid-runtime/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/output.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/output.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/input.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/options.json create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/output.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/input.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/options.json create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/output.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/input.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/options.json create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/output.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/input.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/options.json create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/output.js diff --git a/packages/babel-helper-builder-react-jsx-experimental/package.json b/packages/babel-helper-builder-react-jsx-experimental/package.json new file mode 100644 index 0000000000..5142bc965a --- /dev/null +++ b/packages/babel-helper-builder-react-jsx-experimental/package.json @@ -0,0 +1,16 @@ +{ + "name": "@babel/helper-builder-react-jsx-experimental", + "version": "7.8.3", + "description": "Helper function to build react jsx", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-builder-react-jsx-experimental", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "main": "lib/index.js", + "dependencies": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.8.3", + "esutils": "^2.0.0" + } +} diff --git a/packages/babel-helper-builder-react-jsx-experimental/src/index.js b/packages/babel-helper-builder-react-jsx-experimental/src/index.js new file mode 100644 index 0000000000..45532536b9 --- /dev/null +++ b/packages/babel-helper-builder-react-jsx-experimental/src/index.js @@ -0,0 +1,799 @@ +import esutils from "esutils"; +import * as t from "@babel/types"; +import { addNamed, addNamespace, isModule } from "@babel/helper-module-imports"; + +export function helper(babel, options) { + const FILE_NAME_VAR = "_jsxFileName"; + + const JSX_SOURCE_ANNOTATION_REGEX = /\*?\s*@jsxImportSource\s+([^\s]+)/; + const JSX_RUNTIME_ANNOTATION_REGEX = /\*?\s*@jsxRuntime\s+([^\s]+)/; + + const JSX_ANNOTATION_REGEX = /\*?\s*@jsx\s+([^\s]+)/; + const JSX_FRAG_ANNOTATION_REGEX = /\*?\s*@jsxFrag\s+([^\s]+)/; + + // This is the number of possible import names + // development: jsxDEV, Fragment, createElement + // production: jsx, jsxs, Fragment, createElement + const IMPORT_NAME_SIZE = options.development ? 3 : 4; + + const { + importSource: IMPORT_SOURCE_DEFAULT = "react", + runtime: RUNTIME_DEFAULT = "automatic", + pragma: PRAGMA_DEFAULT = "React.createElement", + pragmaFrag: PRAGMA_FRAG_DEFAULT = "React.Fragment", + } = options; + + return { + JSXNamespacedName(path, state) { + const throwIfNamespace = + state.opts.throwIfNamespace === undefined + ? true + : !!state.opts.throwIfNamespace; + if (throwIfNamespace) { + throw path.buildCodeFrameError( + `Namespace tags are not supported by default. React's JSX doesn't support namespace tags. \ +You can set \`throwIfNamespace: false\` to bypass this warning.`, + ); + } + }, + + JSXSpreadChild(path) { + throw path.buildCodeFrameError( + "Spread children are not supported in React.", + ); + }, + + JSXElement: { + exit(path, file) { + let callExpr; + if ( + file.get("@babel/plugin-react-jsx/runtime") === "classic" || + shouldUseCreateElement(path) + ) { + callExpr = buildCreateElementCall(path, file); + } else { + callExpr = buildJSXElementCall(path, file); + } + + path.replaceWith(t.inherits(callExpr, path.node)); + }, + }, + + JSXFragment: { + exit(path, file) { + let callExpr; + if (file.get("@babel/plugin-react-jsx/runtime") === "classic") { + callExpr = buildCreateElementFragmentCall(path, file); + } else { + callExpr = buildJSXFragmentCall(path, file); + } + + path.replaceWith(t.inherits(callExpr, path.node)); + }, + }, + + JSXAttribute(path) { + if (t.isJSXElement(path.node.value)) { + path.node.value = t.jsxExpressionContainer(path.node.value); + } + }, + + Program: { + enter(path, state) { + if (hasJSX(path)) { + const { file } = state; + let runtime = RUNTIME_DEFAULT; + + // For jsx mode + let source = IMPORT_SOURCE_DEFAULT; + let sourceSet = !!options.importSource; + + // For createElement mode + let pragma = PRAGMA_DEFAULT; + let pragmaFrag = PRAGMA_FRAG_DEFAULT; + let pragmaSet = !!options.pragma; + let pragmaFragSet = !!options.pragmaFrag; + + if (file.ast.comments) { + for (const comment of (file.ast.comments: Array)) { + const sourceMatches = JSX_SOURCE_ANNOTATION_REGEX.exec( + comment.value, + ); + if (sourceMatches) { + source = sourceMatches[1]; + sourceSet = true; + } + + const runtimeMatches = JSX_RUNTIME_ANNOTATION_REGEX.exec( + comment.value, + ); + if (runtimeMatches) { + runtime = runtimeMatches[1]; + } + + const jsxMatches = JSX_ANNOTATION_REGEX.exec(comment.value); + if (jsxMatches) { + pragma = jsxMatches[1]; + pragmaSet = true; + } + const jsxFragMatches = JSX_FRAG_ANNOTATION_REGEX.exec( + comment.value, + ); + if (jsxFragMatches) { + pragmaFrag = jsxFragMatches[1]; + pragmaFragSet = true; + } + } + } + + state.set("@babel/plugin-react-jsx/runtime", runtime); + if (runtime === "classic") { + if (sourceSet) { + throw path.buildCodeFrameError( + `importSource cannot be set when runtime is classic.`, + ); + } + state.set( + "@babel/plugin-react-jsx/createElementIdentifier", + createIdentifierParser(pragma), + ); + state.set( + "@babel/plugin-react-jsx/jsxFragIdentifier", + createIdentifierParser(pragmaFrag), + ); + state.set("@babel/plugin-react-jsx/usedFragment", false); + state.set("@babel/plugin-react-jsx/pragmaSet", pragmaSet); + state.set("@babel/plugin-react-jsx/pragmaFragSet", pragmaFragSet); + } else if (runtime === "automatic") { + if (pragmaSet || pragmaFragSet) { + throw path.buildCodeFrameError( + `pragma and pragmaFrag cannot be set when runtime is automatic.`, + ); + } + + const importName = addAutoImports(path, { + ...state.opts, + source, + }); + + state.set( + "@babel/plugin-react-jsx/jsxIdentifier", + createIdentifierParser( + createIdentifierName( + path, + options.development ? "jsxDEV" : "jsx", + importName, + ), + ), + ); + state.set( + "@babel/plugin-react-jsx/jsxStaticIdentifier", + createIdentifierParser( + createIdentifierName( + path, + options.development ? "jsxDEV" : "jsxs", + importName, + ), + ), + ); + + state.set( + "@babel/plugin-react-jsx/createElementIdentifier", + createIdentifierParser( + createIdentifierName(path, "createElement", importName), + ), + ); + + state.set( + "@babel/plugin-react-jsx/jsxFragIdentifier", + createIdentifierParser( + createIdentifierName(path, "Fragment", importName), + ), + ); + } else { + throw path.buildCodeFrameError( + `Runtime must be either "classic" or "automatic".`, + ); + } + } + }, + + exit(path, state) { + if ( + state.get("@babel/plugin-react-jsx/runtime") === "classic" && + state.get("@babel/plugin-react-jsx/pragmaSet") && + state.get("@babel/plugin-react-jsx/usedFragment") && + !state.get("@babel/plugin-react-jsx/pragmaFragSet") + ) { + throw new Error( + "transform-react-jsx: pragma has been set but " + + "pragmaFrag has not been set", + ); + } + }, + }, + }; + + // We want to use React.createElement, even in the case of + // jsx, for
to distinguish it + // from
. This is an intermediary + // step while we deprecate key spread from props. Afterwards, + // we will stop using createElement in the transform. + function shouldUseCreateElement(path) { + const openingPath = path.get("openingElement"); + const attributes = openingPath.node.attributes; + + let seenPropsSpread = false; + for (let i = 0; i < attributes.length; i++) { + const attr = attributes[i]; + if ( + seenPropsSpread && + t.isJSXAttribute(attr) && + attr.name.name === "key" + ) { + return true; + } else if (t.isJSXSpreadAttribute(attr)) { + seenPropsSpread = true; + } + } + return false; + } + + function createIdentifierName(path, name, importName) { + if (isModule(path)) { + const identifierName = `${importName[name]}`; + return identifierName; + } else { + return `${importName[name]}.${name}`; + } + } + + function getImportNames(parentPath) { + const imports = new Set(); + + parentPath.traverse({ + "JSXElement|JSXFragment"(path) { + if (path.type === "JSXFragment") imports.add("Fragment"); + const openingPath = path.get("openingElement"); + const validChildren = openingPath.parent.children.filter( + child => + !t.isJSXEmptyExpression(child) && + !(t.isJSXText(child) && child.value.trim() === ""), + ); + + let importName; + if (path.type === "JSXElement" && shouldUseCreateElement(path)) { + importName = "createElement"; + } else if (options.development) { + importName = "jsxDEV"; + } else if (validChildren.length > 1) { + importName = "jsxs"; + } else { + importName = "jsx"; + } + imports.add(importName); + + if (imports.size === IMPORT_NAME_SIZE) { + path.stop(); + } + }, + }); + return imports; + } + + function hasJSX(parentPath) { + let fileHasJSX = false; + parentPath.traverse({ + "JSXElement|JSXFragment"(path) { + fileHasJSX = true; + path.stop(); + }, + }); + + return fileHasJSX; + } + + function getSource(source, importName) { + switch (importName) { + case "Fragment": + return `${source}/${ + options.development ? "jsx-dev-runtime" : "jsx-runtime" + }`; + case "jsxDEV": + return `${source}/jsx-dev-runtime`; + case "jsx": + case "jsxs": + return `${source}/jsx-runtime`; + case "createElement": + return source; + } + } + + function addAutoImports(path, state) { + const imports = getImportNames(path, state); + if (isModule(path)) { + // import {jsx} from "react"; + // import {createElement} from "react"; + const importMap = {}; + + imports.forEach(importName => { + if (!importMap[importName]) { + importMap[importName] = addNamed( + path, + importName, + getSource(state.source, importName), + { + importedInterop: "uncompiled", + ensureLiveReference: true, + }, + ).name; + } + }); + + return importMap; + } else { + const importMap = {}; + const sourceMap = {}; + imports.forEach(importName => { + const source = getSource(state.source, importName); + if (!importMap[importName]) { + if (!sourceMap[source]) { + // var _react = require("react") + sourceMap[source] = addNamespace(path, source, { + importedInterop: "uncompiled", + ensureLiveReference: true, + }).name; + } + + importMap[importName] = sourceMap[source]; + } + }); + return importMap; + } + } + + function createIdentifierParser(id) { + return () => { + return id + .split(".") + .map(name => t.identifier(name)) + .reduce((object, property) => t.memberExpression(object, property)); + }; + } + + function makeTrace(fileNameIdentifier, lineNumber, column0Based) { + const fileLineLiteral = + lineNumber != null ? t.numericLiteral(lineNumber) : t.nullLiteral(); + + const fileColumnLiteral = + column0Based != null + ? t.numericLiteral(column0Based + 1) + : t.nullLiteral(); + + const fileNameProperty = t.objectProperty( + t.identifier("fileName"), + fileNameIdentifier, + ); + const lineNumberProperty = t.objectProperty( + t.identifier("lineNumber"), + fileLineLiteral, + ); + const columnNumberProperty = t.objectProperty( + t.identifier("columnNumber"), + fileColumnLiteral, + ); + return t.objectExpression([ + fileNameProperty, + lineNumberProperty, + columnNumberProperty, + ]); + } + + function makeSource(path, state) { + const location = path.node.openingElement.loc; + if (!location) { + // the element was generated and doesn't have location information + return; + } + + if (!state.fileNameIdentifier) { + const { filename = "" } = state; + + const fileNameIdentifier = path.scope.generateUidIdentifier( + FILE_NAME_VAR, + ); + const scope = path.hub.getScope(); + if (scope) { + scope.push({ + id: fileNameIdentifier, + init: t.stringLiteral(filename), + }); + } + state.fileNameIdentifier = fileNameIdentifier; + } + + return makeTrace( + state.fileNameIdentifier, + location.start.line, + location.start.column, + ); + } + + function convertJSXIdentifier(node, parent) { + if (t.isJSXIdentifier(node)) { + if (node.name === "this" && t.isReferenced(node, parent)) { + return t.thisExpression(); + } else if (esutils.keyword.isIdentifierNameES6(node.name)) { + node.type = "Identifier"; + } else { + return t.stringLiteral(node.name); + } + } else if (t.isJSXMemberExpression(node)) { + return t.memberExpression( + convertJSXIdentifier(node.object, node), + convertJSXIdentifier(node.property, node), + ); + } else if (t.isJSXNamespacedName(node)) { + /** + * If the flag "throwIfNamespace" is false + * print XMLNamespace like string literal + */ + return t.stringLiteral(`${node.namespace.name}:${node.name.name}`); + } + + return node; + } + + function convertAttributeValue(node) { + if (t.isJSXExpressionContainer(node)) { + return node.expression; + } else { + return node; + } + } + + function convertAttribute(node) { + const value = convertAttributeValue(node.value || t.booleanLiteral(true)); + + if (t.isJSXSpreadAttribute(node)) { + return t.spreadElement(node.argument); + } + + if (t.isStringLiteral(value) && !t.isJSXExpressionContainer(node.value)) { + value.value = value.value.replace(/\n\s+/g, " "); + + // "raw" JSXText should not be used from a StringLiteral because it needs to be escaped. + if (value.extra && value.extra.raw) { + delete value.extra.raw; + } + } + + if (t.isJSXNamespacedName(node.name)) { + node.name = t.stringLiteral( + node.name.namespace.name + ":" + node.name.name.name, + ); + } else if (esutils.keyword.isIdentifierNameES6(node.name.name)) { + node.name.type = "Identifier"; + } else { + node.name = t.stringLiteral(node.name.name); + } + + return t.inherits(t.objectProperty(node.name, value), node); + } + + // Builds JSX into: + // Production: React.jsx(type, arguments, key) + // Development: React.jsxDEV(type, arguments, key, isStaticChildren, source, self) + function buildJSXElementCall(path, file) { + const openingPath = path.get("openingElement"); + openingPath.parent.children = t.react.buildChildren(openingPath.parent); + + const tagExpr = convertJSXIdentifier( + openingPath.node.name, + openingPath.node, + ); + const args = []; + + let tagName; + if (t.isIdentifier(tagExpr)) { + tagName = tagExpr.name; + } else if (t.isLiteral(tagExpr)) { + tagName = tagExpr.value; + } + + const state = { + tagExpr: tagExpr, + tagName: tagName, + args: args, + }; + + if (options.pre) { + options.pre(state, file); + } + + let attribs = []; + let key; + let source; + let self; + + // for React.jsx, key, __source (dev), and __self (dev) is passed in as + // a separate argument rather than in the args object. We go through the + // props and filter out these three keywords so we can pass them in + // as separate arguments later + for (let i = 0; i < openingPath.node.attributes.length; i++) { + const attr = openingPath.node.attributes[i]; + if (t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name)) { + if (attr.name.name === "key") { + key = convertAttribute(attr).value; + } else if ( + attr.name.name === "__source" || + attr.name.name === "__self" + ) { + throw path.buildCodeFrameError( + `__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config.`, + ); + } else { + // If someone is still using the __source and __self Babel plugins + // filter the results out + attribs.push(attr); + } + } else { + attribs.push(attr); + } + } + + if (attribs.length || path.node.children.length) { + attribs = buildJSXOpeningElementAttributes( + attribs, + file, + path.node.children, + ); + } else { + // attributes should never be null + attribs = t.objectExpression([]); + } + + args.push(attribs); + + if (!options.development) { + if (key !== undefined) { + args.push(key); + } + } else { + // isStaticChildren, __source, and __self are only used in development + // automatically include __source and __self in this plugin + // so we can eliminate the need for separate Babel plugins in Babel 8 + source = makeSource(path, file); + self = t.thisExpression(); + args.push( + key === undefined ? path.scope.buildUndefinedNode() : key, + t.booleanLiteral(path.node.children.length > 1), + source ?? path.scope.buildUndefinedNode(), + self, + ); + } + + if (options.post) { + options.post(state, file); + } + + return ( + state.call || + t.callExpression( + path.node.children.length > 1 ? state.jsxStaticCallee : state.jsxCallee, + args, + ) + ); + } + + // Builds props for React.jsx. This function adds children into the props + // and ensures that props is always an object + function buildJSXOpeningElementAttributes(attribs, file, children) { + const _attribs = attribs.filter( + prop => + !( + t.isJSXAttribute(prop) && + prop.name && + (prop.name.name === "__source" || prop.name.name === "__self") + ), + ); + + const props = _attribs.map(convertAttribute); + + // In React.jsx, children is no longer a separate argument, but passed in + // through the argument object + if (children && children.length > 0) { + if (children.length === 1) { + props.push(t.objectProperty(t.identifier("children"), children[0])); + } else { + props.push( + t.objectProperty( + t.identifier("children"), + t.arrayExpression(children), + ), + ); + } + } + + return t.objectExpression(props); + } + + // Builds JSX Fragment <> into + // Production: React.jsx(type, arguments) + // Development: React.jsxDEV(type, { children}) + function buildJSXFragmentCall(path, file) { + const openingPath = path.get("openingElement"); + openingPath.parent.children = t.react.buildChildren(openingPath.parent); + + const args = []; + const tagName = null; + const tagExpr = file.get("@babel/plugin-react-jsx/jsxFragIdentifier")(); + + const state = { + tagExpr: tagExpr, + tagName: tagName, + args: args, + }; + + if (options.pre) { + options.pre(state, file); + } + + let childrenNode; + if (path.node.children.length > 0) { + if (path.node.children.length === 1) { + childrenNode = path.node.children[0]; + } else { + childrenNode = t.arrayExpression(path.node.children); + } + } + + args.push( + t.objectExpression( + childrenNode !== undefined + ? [t.objectProperty(t.identifier("children"), childrenNode)] + : [], + ), + ); + + if (options.development) { + args.push( + path.scope.buildUndefinedNode(), + t.booleanLiteral(path.node.children.length > 1), + ); + } + + if (options.post) { + options.post(state, file); + } + + return ( + state.call || + t.callExpression( + path.node.children.length > 1 ? state.jsxStaticCallee : state.jsxCallee, + args, + ) + ); + } + + function buildCreateElementFragmentCall(path, file) { + if (options.filter && !options.filter(path.node, file)) { + return; + } + + const openingPath = path.get("openingElement"); + openingPath.parent.children = t.react.buildChildren(openingPath.parent); + + const args = []; + const tagName = null; + const tagExpr = file.get("@babel/plugin-react-jsx/jsxFragIdentifier")(); + + const state = { + tagExpr: tagExpr, + tagName: tagName, + args: args, + }; + + if (options.pre) { + options.pre(state, file); + } + + // no attributes are allowed with <> syntax + args.push(t.nullLiteral(), ...path.node.children); + + if (options.post) { + options.post(state, file); + } + + file.set("@babel/plugin-react-jsx/usedFragment", true); + return state.call || t.callExpression(state.createElementCallee, args); + } + + // Builds JSX into: + // Production: React.createElement(type, arguments, children) + // Development: React.createElement(type, arguments, children, source, self) + function buildCreateElementCall(path, file) { + const openingPath = path.get("openingElement"); + openingPath.parent.children = t.react.buildChildren(openingPath.parent); + + const tagExpr = convertJSXIdentifier( + openingPath.node.name, + openingPath.node, + ); + const args = []; + + let tagName; + if (t.isIdentifier(tagExpr)) { + tagName = tagExpr.name; + } else if (t.isLiteral(tagExpr)) { + tagName = tagExpr.value; + } + + const state = { + tagExpr: tagExpr, + tagName: tagName, + args: args, + }; + + if (options.pre) { + options.pre(state, file); + } + + const attribs = buildCreateElementOpeningElementAttributes( + path, + openingPath.node.attributes, + file, + ); + + args.push(attribs, ...path.node.children); + + if (options.post) { + options.post(state, file); + } + + return state.call || t.callExpression(state.createElementCallee, args); + } + + /** + * The logic for this is quite terse. It's because we need to + * support spread elements. We loop over all attributes, + * breaking on spreads, we then push a new object containing + * all prior attributes to an array for later processing. + */ + function buildCreateElementOpeningElementAttributes(path, attribs, file) { + // We want source and self to be automatically included in the future + // so we will error when we see it + + const hasSourceSelf = attribs.some( + prop => + t.isJSXAttribute(prop) && + prop.name && + (prop.name.name === "__source" || prop.name.name === "__self"), + ); + + if (hasSourceSelf) { + throw path.buildCodeFrameError( + `__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config.`, + ); + } + + if (options.development) { + attribs.push( + t.jsxAttribute( + t.jsxIdentifier("__source"), + t.jsxExpressionContainer(makeSource(path, file)), + ), + ); + attribs.push( + t.jsxAttribute( + t.jsxIdentifier("__self"), + t.jsxExpressionContainer(t.thisExpression()), + ), + ); + } + + const props = attribs.map(convertAttribute); + + return props.length > 0 ? t.objectExpression(props) : t.nullLiteral(); + } +} diff --git a/packages/babel-helper-builder-react-jsx/src/index.js b/packages/babel-helper-builder-react-jsx/src/index.js index 64b136923f..b0050c6375 100644 --- a/packages/babel-helper-builder-react-jsx/src/index.js +++ b/packages/babel-helper-builder-react-jsx/src/index.js @@ -15,7 +15,7 @@ export default function(opts) { if (opts.throwIfNamespace) { throw path.buildCodeFrameError( `Namespace tags are not supported by default. React's JSX doesn't support namespace tags. \ -You can turn on the 'throwIfNamespace' flag to bypass this warning.`, +You can set \`throwIfNamespace: false\` to bypass this warning.`, ); } }; diff --git a/packages/babel-plugin-transform-react-jsx-development/.npmignore b/packages/babel-plugin-transform-react-jsx-development/.npmignore new file mode 100644 index 0000000000..f980694583 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/.npmignore @@ -0,0 +1,3 @@ +src +test +*.log diff --git a/packages/babel-plugin-transform-react-jsx-development/package.json b/packages/babel-plugin-transform-react-jsx-development/package.json new file mode 100644 index 0000000000..62fa8fe8a8 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/package.json @@ -0,0 +1,26 @@ +{ + "name": "@babel/plugin-transform-react-jsx-development", + "version": "7.8.3", + "description": "Turn JSX into React function calls in development", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-jsx-development", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "main": "lib/index.js", + "keywords": [ + "babel-plugin" + ], + "dependencies": { + "@babel/helper-builder-react-jsx-experimental": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "devDependencies": { + "@babel/core": "^7.8.3", + "@babel/helper-plugin-test-runner": "^7.8.3" + } +} diff --git a/packages/babel-plugin-transform-react-jsx-development/src/index.js b/packages/babel-plugin-transform-react-jsx-development/src/index.js new file mode 100644 index 0000000000..b0c0d4d0f4 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/src/index.js @@ -0,0 +1,43 @@ +import jsx from "@babel/plugin-syntax-jsx"; +import { helper } from "@babel/helper-builder-react-jsx-experimental"; +import { declare } from "@babel/helper-plugin-utils"; +import { types as t } from "@babel/core"; + +export default declare((api, options) => { + const visitor = helper(api, { + pre(state) { + const tagName = state.tagName; + const args = state.args; + if (t.react.isCompatTag(tagName)) { + args.push(t.stringLiteral(tagName)); + } else { + args.push(state.tagExpr); + } + }, + + post(state, pass) { + if (pass.get("@babel/plugin-react-jsx/runtime") === "classic") { + state.createElementCallee = pass.get( + "@babel/plugin-react-jsx/createElementIdentifier", + )(); + } else { + state.jsxCallee = pass.get("@babel/plugin-react-jsx/jsxIdentifier")(); + state.jsxStaticCallee = pass.get( + "@babel/plugin-react-jsx/jsxStaticIdentifier", + )(); + state.createElementCallee = pass.get( + "@babel/plugin-react-jsx/createElementIdentifier", + )(); + } + }, + + ...options, + development: true, + }); + + return { + name: "transform-react-jsx", + inherits: jsx, + visitor, + }; +}); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/input.js new file mode 100644 index 0000000000..28cff70081 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ +); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/options.json new file mode 100644 index 0000000000..3773ed52bd --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/options.json @@ -0,0 +1,5 @@ +{ + "plugins": ["transform-react-jsx-development"], + "sourceType": "module", + "os": ["linux", "darwin"] +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/output.mjs b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/output.mjs new file mode 100644 index 0000000000..8b0fc87276 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/output.mjs @@ -0,0 +1,36 @@ +import { createElement as _createElement } from "react"; +import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime"; +import { Fragment as _Fragment } from "react/jsx-dev-runtime"; +var _jsxFileName = "/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/input.js"; + +var x = _jsxDEV(_Fragment, { + children: _jsxDEV("div", { + children: [_jsxDEV("div", {}, "1", false, { + fileName: _jsxFileName, + lineNumber: 4, + columnNumber: 7 + }, this), _jsxDEV("div", { + meow: "wolf" + }, "2", false, { + fileName: _jsxFileName, + lineNumber: 5, + columnNumber: 7 + }, this), _jsxDEV("div", {}, "3", false, { + fileName: _jsxFileName, + lineNumber: 6, + columnNumber: 7 + }, this), _createElement("div", { ...props, + key: "4", + __source: { + fileName: _jsxFileName, + lineNumber: 7, + columnNumber: 7 + }, + __self: this + })] + }, void 0, true, { + fileName: _jsxFileName, + lineNumber: 3, + columnNumber: 5 + }, this) +}, void 0, false); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime-with-source-self-plugins/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime-with-source-self-plugins/input.js new file mode 100644 index 0000000000..28cff70081 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime-with-source-self-plugins/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ +); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime-with-source-self-plugins/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime-with-source-self-plugins/options.json new file mode 100644 index 0000000000..b41228b7e3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime-with-source-self-plugins/options.json @@ -0,0 +1,9 @@ +{ + "plugins": [ + ["transform-react-jsx-development", { "runtime": "classic" }], + "transform-react-jsx-source", + "transform-react-jsx-self" + ], + "os": ["linux", "darwin"], + "throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config." +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/input.js new file mode 100644 index 0000000000..6f1e6e91c6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ + ); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/options.json new file mode 100644 index 0000000000..5f1b689d65 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/options.json @@ -0,0 +1,4 @@ +{ + "plugins": [["transform-react-jsx-development", { "runtime": "classic" }]], + "os": ["linux", "darwin"] +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/output.js new file mode 100644 index 0000000000..dc7259198b --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/output.js @@ -0,0 +1,42 @@ +var _jsxFileName = "/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/input.js"; +var x = React.createElement(React.Fragment, null, React.createElement("div", { + __source: { + fileName: _jsxFileName, + lineNumber: 3, + columnNumber: 5 + }, + __self: this +}, React.createElement("div", { + key: "1", + __source: { + fileName: _jsxFileName, + lineNumber: 4, + columnNumber: 9 + }, + __self: this +}), React.createElement("div", { + key: "2", + meow: "wolf", + __source: { + fileName: _jsxFileName, + lineNumber: 5, + columnNumber: 9 + }, + __self: this +}), React.createElement("div", { + key: "3", + __source: { + fileName: _jsxFileName, + lineNumber: 6, + columnNumber: 9 + }, + __self: this +}), React.createElement("div", { ...props, + key: "4", + __source: { + fileName: _jsxFileName, + lineNumber: 7, + columnNumber: 9 + }, + __self: this +}))); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/input.js new file mode 100644 index 0000000000..4b7a883375 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/input.js @@ -0,0 +1 @@ +var x = <>
; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/output.js new file mode 100644 index 0000000000..efb7281b22 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/output.js @@ -0,0 +1,11 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/input.js"; + +var x = _reactJsxDevRuntime.jsxDEV(_reactJsxDevRuntime.Fragment, { + children: _reactJsxDevRuntime.jsxDEV("div", {}, void 0, false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 11 + }, this) +}, void 0, false); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/input.js new file mode 100644 index 0000000000..c9f991d0f1 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/input.js @@ -0,0 +1 @@ +var x = ; diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/output.js new file mode 100644 index 0000000000..34beb8ddb5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/output.js @@ -0,0 +1,9 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/input.js"; + +var x = _reactJsxDevRuntime.jsxDEV(React.Fragment, {}, "foo", false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 9 +}, this); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/input.js new file mode 100644 index 0000000000..26223d3167 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/input.js @@ -0,0 +1 @@ +var x =
{[, ]}
; diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/output.js new file mode 100644 index 0000000000..96d880cf0d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/output.js @@ -0,0 +1,19 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/input.js"; + +var x = _reactJsxDevRuntime.jsxDEV("div", { + children: [_reactJsxDevRuntime.jsxDEV("span", {}, "0", false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 16 + }, this), _reactJsxDevRuntime.jsxDEV("span", {}, "1", false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 36 + }, this)] +}, void 0, false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 9 +}, this); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/input.js new file mode 100644 index 0000000000..582e8568c0 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/input.js @@ -0,0 +1,6 @@ +var x = ( +
+ + {[, ]} +
+); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/output.js new file mode 100644 index 0000000000..69422fd6aa --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/output.js @@ -0,0 +1,23 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/input.js"; + +var x = _reactJsxDevRuntime.jsxDEV("div", { + children: [_reactJsxDevRuntime.jsxDEV("span", {}, void 0, false, { + fileName: _jsxFileName, + lineNumber: 3, + columnNumber: 5 + }, this), [_reactJsxDevRuntime.jsxDEV("span", {}, "0", false, { + fileName: _jsxFileName, + lineNumber: 4, + columnNumber: 7 + }, this), _reactJsxDevRuntime.jsxDEV("span", {}, "1", false, { + fileName: _jsxFileName, + lineNumber: 4, + columnNumber: 27 + }, this)]] +}, void 0, true, { + fileName: _jsxFileName, + lineNumber: 2, + columnNumber: 3 +}, this); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/options.json new file mode 100644 index 0000000000..10f3a57264 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/options.json @@ -0,0 +1,9 @@ +{ + "plugins": [ + "external-helpers", + "transform-react-jsx-development", + "transform-react-display-name", + "transform-arrow-functions" + ], + "os": ["linux", "darwin"] +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/source-and-self-defined/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/source-and-self-defined/input.js new file mode 100644 index 0000000000..28cff70081 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/source-and-self-defined/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ +); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/source-and-self-defined/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/source-and-self-defined/options.json new file mode 100644 index 0000000000..563321ae53 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/source-and-self-defined/options.json @@ -0,0 +1,10 @@ +{ + "plugins": [ + "transform-react-jsx-development", + "transform-react-jsx-source", + "transform-react-jsx-self" + ], + "sourceType": "module", + "os": ["linux", "darwin"], + "throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config." +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/input.js new file mode 100644 index 0000000000..28cff70081 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ +); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/options.json new file mode 100644 index 0000000000..6eee73c411 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["transform-react-jsx-development"], + "sourceType": "module" +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/output.mjs b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/output.mjs new file mode 100644 index 0000000000..de311163a3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/auto-import-dev-windows/output.mjs @@ -0,0 +1,36 @@ +import { createElement as _createElement } from "react"; +import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime"; +import { Fragment as _Fragment } from "react/jsx-dev-runtime"; +var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\auto-import-dev-windows\\input.js"; + +var x = _jsxDEV(_Fragment, { + children: _jsxDEV("div", { + children: [_jsxDEV("div", {}, "1", false, { + fileName: _jsxFileName, + lineNumber: 4, + columnNumber: 7 + }, this), _jsxDEV("div", { + meow: "wolf" + }, "2", false, { + fileName: _jsxFileName, + lineNumber: 5, + columnNumber: 7 + }, this), _jsxDEV("div", {}, "3", false, { + fileName: _jsxFileName, + lineNumber: 6, + columnNumber: 7 + }, this), _createElement("div", { ...props, + key: "4", + __source: { + fileName: _jsxFileName, + lineNumber: 7, + columnNumber: 7 + }, + __self: this + })] + }, void 0, true, { + fileName: _jsxFileName, + lineNumber: 3, + columnNumber: 5 + }, this) +}, void 0, false); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/input.js new file mode 100644 index 0000000000..28cff70081 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ +); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/options.json new file mode 100644 index 0000000000..802b778068 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/options.json @@ -0,0 +1,3 @@ +{ + "plugins": [["transform-react-jsx-development", { "runtime": "classic" }]] +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/output.js new file mode 100644 index 0000000000..2db556c3be --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-windows/output.js @@ -0,0 +1,42 @@ +var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\classic-runtime-windows\\input.js"; +var x = React.createElement(React.Fragment, null, React.createElement("div", { + __source: { + fileName: _jsxFileName, + lineNumber: 3, + columnNumber: 5 + }, + __self: this +}, React.createElement("div", { + key: "1", + __source: { + fileName: _jsxFileName, + lineNumber: 4, + columnNumber: 7 + }, + __self: this +}), React.createElement("div", { + key: "2", + meow: "wolf", + __source: { + fileName: _jsxFileName, + lineNumber: 5, + columnNumber: 7 + }, + __self: this +}), React.createElement("div", { + key: "3", + __source: { + fileName: _jsxFileName, + lineNumber: 6, + columnNumber: 7 + }, + __self: this +}), React.createElement("div", { ...props, + key: "4", + __source: { + fileName: _jsxFileName, + lineNumber: 7, + columnNumber: 7 + }, + __self: this +}))); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-with-source-self-plugins-windows/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-with-source-self-plugins-windows/input.js new file mode 100644 index 0000000000..28cff70081 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-with-source-self-plugins-windows/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ +); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-with-source-self-plugins-windows/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-with-source-self-plugins-windows/options.json new file mode 100644 index 0000000000..cee6ae74ec --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/classic-runtime-with-source-self-plugins-windows/options.json @@ -0,0 +1,8 @@ +{ + "plugins": [ + ["transform-react-jsx-development", { "runtime": "classic" }], + "transform-react-jsx-source", + "transform-react-jsx-self" + ], + "throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config." +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/fragments-windows/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/fragments-windows/input.js new file mode 100644 index 0000000000..4b7a883375 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/fragments-windows/input.js @@ -0,0 +1 @@ +var x = <>
; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/fragments-windows/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/fragments-windows/output.js new file mode 100644 index 0000000000..9c56371d6f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/fragments-windows/output.js @@ -0,0 +1,11 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\fragments-windows\\input.js"; + +var x = _reactJsxDevRuntime.jsxDEV(_reactJsxDevRuntime.Fragment, { + children: _reactJsxDevRuntime.jsxDEV("div", {}, void 0, false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 11 + }, this) +}, void 0, false); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-fragments-with-key-windows/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-fragments-with-key-windows/input.js new file mode 100644 index 0000000000..9d4dbf1746 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-fragments-with-key-windows/input.js @@ -0,0 +1 @@ +var x = ; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-fragments-with-key-windows/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-fragments-with-key-windows/output.js new file mode 100644 index 0000000000..33f7bb2e73 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-fragments-with-key-windows/output.js @@ -0,0 +1,9 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\handle-fragments-with-key-windows\\input.js"; + +var x = _reactJsxDevRuntime.jsxDEV(React.Fragment, {}, "foo", false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 9 +}, this); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-nonstatic-children-windows/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-nonstatic-children-windows/input.js new file mode 100644 index 0000000000..c2e26f4e7d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-nonstatic-children-windows/input.js @@ -0,0 +1,5 @@ +var x = ( +
+ {[, ]} +
+); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-nonstatic-children-windows/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-nonstatic-children-windows/output.js new file mode 100644 index 0000000000..c05d80a46e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-nonstatic-children-windows/output.js @@ -0,0 +1,19 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\handle-nonstatic-children-windows\\input.js"; + +var x = _reactJsxDevRuntime.jsxDEV("div", { + children: [_reactJsxDevRuntime.jsxDEV("span", {}, '0', false, { + fileName: _jsxFileName, + lineNumber: 3, + columnNumber: 11 + }, this), _reactJsxDevRuntime.jsxDEV("span", {}, '1', false, { + fileName: _jsxFileName, + lineNumber: 3, + columnNumber: 31 + }, this)] +}, void 0, false, { + fileName: _jsxFileName, + lineNumber: 2, + columnNumber: 5 +}, this); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-static-children-windows/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-static-children-windows/input.js new file mode 100644 index 0000000000..1d59d09f08 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-static-children-windows/input.js @@ -0,0 +1,6 @@ +var x = ( +
+ + {[, ]} +
+); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-static-children-windows/output.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-static-children-windows/output.js new file mode 100644 index 0000000000..85b5e50040 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/handle-static-children-windows/output.js @@ -0,0 +1,23 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\handle-static-children-windows\\input.js"; + +var x = _reactJsxDevRuntime.jsxDEV("div", { + children: [_reactJsxDevRuntime.jsxDEV("span", {}, void 0, false, { + fileName: _jsxFileName, + lineNumber: 3, + columnNumber: 9 + }, this), [_reactJsxDevRuntime.jsxDEV("span", {}, '0', false, { + fileName: _jsxFileName, + lineNumber: 4, + columnNumber: 11 + }, this), _reactJsxDevRuntime.jsxDEV("span", {}, '1', false, { + fileName: _jsxFileName, + lineNumber: 4, + columnNumber: 31 + }, this)]] +}, void 0, true, { + fileName: _jsxFileName, + lineNumber: 2, + columnNumber: 5 +}, this); diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/options.json new file mode 100644 index 0000000000..9cac84b414 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/options.json @@ -0,0 +1,9 @@ +{ + "plugins": [ + "external-helpers", + "transform-react-jsx-development", + "transform-react-display-name", + "transform-arrow-functions" + ], + "os": ["win32"] +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/source-and-self-defined-windows/input.js b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/source-and-self-defined-windows/input.js new file mode 100644 index 0000000000..7f63bbaf38 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/source-and-self-defined-windows/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ + ); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/source-and-self-defined-windows/options.json b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/source-and-self-defined-windows/options.json new file mode 100644 index 0000000000..5dc6b8ebc5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/fixtures/windows/source-and-self-defined-windows/options.json @@ -0,0 +1,10 @@ +{ + "plugins": [ + "transform-react-jsx-development", + "transform-react-jsx-source", + "transform-react-jsx-self" + ], + "sourceType": "module", + "os": ["windows"], + "throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config." +} diff --git a/packages/babel-plugin-transform-react-jsx-development/test/index.js b/packages/babel-plugin-transform-react-jsx-development/test/index.js new file mode 100644 index 0000000000..1b534b8fc6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-development/test/index.js @@ -0,0 +1,3 @@ +import runner from "@babel/helper-plugin-test-runner"; + +runner(__dirname); diff --git a/packages/babel-plugin-transform-react-jsx-self/test/fixtures/react-source/options.json b/packages/babel-plugin-transform-react-jsx-self/test/fixtures/react-source/options.json index 5a2d48a4a8..c3ef5d45f6 100644 --- a/packages/babel-plugin-transform-react-jsx-self/test/fixtures/react-source/options.json +++ b/packages/babel-plugin-transform-react-jsx-self/test/fixtures/react-source/options.json @@ -1,3 +1,4 @@ { - "plugins": ["syntax-jsx", "transform-react-jsx-self"] + "plugins": ["syntax-jsx", "transform-react-jsx-self"], + "sourceType": "script" } diff --git a/packages/babel-plugin-transform-react-jsx/package.json b/packages/babel-plugin-transform-react-jsx/package.json index efeaaa87b9..07dd78aefc 100644 --- a/packages/babel-plugin-transform-react-jsx/package.json +++ b/packages/babel-plugin-transform-react-jsx/package.json @@ -13,6 +13,7 @@ ], "dependencies": { "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx-experimental": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" }, diff --git a/packages/babel-plugin-transform-react-jsx/src/index.js b/packages/babel-plugin-transform-react-jsx/src/index.js index a655b30b69..4e0c5b69b3 100644 --- a/packages/babel-plugin-transform-react-jsx/src/index.js +++ b/packages/babel-plugin-transform-react-jsx/src/index.js @@ -1,100 +1,18 @@ +/* eslint-disable-next-line @babel/development/plugin-name */ +import transformClassic from "./transform-classic"; +/* eslint-disable-next-line @babel/development/plugin-name */ +import transformAutomatic from "./transform-automatic"; import { declare } from "@babel/helper-plugin-utils"; -import jsx from "@babel/plugin-syntax-jsx"; -import helper from "@babel/helper-builder-react-jsx"; -import { types as t } from "@babel/core"; export default declare((api, options) => { - api.assertVersion(7); + const { runtime = "classic" } = options; - const THROW_IF_NAMESPACE = - options.throwIfNamespace === undefined ? true : !!options.throwIfNamespace; - - const PRAGMA_DEFAULT = options.pragma || "React.createElement"; - const PRAGMA_FRAG_DEFAULT = options.pragmaFrag || "React.Fragment"; - - const JSX_ANNOTATION_REGEX = /\*?\s*@jsx\s+([^\s]+)/; - const JSX_FRAG_ANNOTATION_REGEX = /\*?\s*@jsxFrag\s+([^\s]+)/; - - // returns a closure that returns an identifier or memberExpression node - // based on the given id - const createIdentifierParser = (id: string) => () => { - return id - .split(".") - .map(name => t.identifier(name)) - .reduce((object, property) => t.memberExpression(object, property)); - }; - - const visitor = helper({ - pre(state) { - const tagName = state.tagName; - const args = state.args; - if (t.react.isCompatTag(tagName)) { - args.push(t.stringLiteral(tagName)); - } else { - args.push(state.tagExpr); - } - }, - - post(state, pass) { - state.callee = pass.get("jsxIdentifier")(); - }, - - throwIfNamespace: THROW_IF_NAMESPACE, - }); - - visitor.Program = { - enter(path, state) { - const { file } = state; - - let pragma = PRAGMA_DEFAULT; - let pragmaFrag = PRAGMA_FRAG_DEFAULT; - let pragmaSet = !!options.pragma; - let pragmaFragSet = !!options.pragmaFrag; - - if (file.ast.comments) { - for (const comment of (file.ast.comments: Array)) { - const jsxMatches = JSX_ANNOTATION_REGEX.exec(comment.value); - if (jsxMatches) { - pragma = jsxMatches[1]; - pragmaSet = true; - } - const jsxFragMatches = JSX_FRAG_ANNOTATION_REGEX.exec(comment.value); - if (jsxFragMatches) { - pragmaFrag = jsxFragMatches[1]; - pragmaFragSet = true; - } - } - } - - state.set("jsxIdentifier", createIdentifierParser(pragma)); - state.set("jsxFragIdentifier", createIdentifierParser(pragmaFrag)); - state.set("usedFragment", false); - state.set("pragmaSet", pragmaSet); - state.set("pragmaFragSet", pragmaFragSet); - }, - exit(path, state) { - if ( - state.get("pragmaSet") && - state.get("usedFragment") && - !state.get("pragmaFragSet") - ) { - throw new Error( - "transform-react-jsx: pragma has been set but " + - "pragmaFrag has not been set", - ); - } - }, - }; - - visitor.JSXAttribute = function(path) { - if (t.isJSXElement(path.node.value)) { - path.node.value = t.jsxExpressionContainer(path.node.value); - } - }; - - return { - name: "transform-react-jsx", - inherits: jsx, - visitor, - }; + // we throw a warning in helper-builder-react-jsx-experimental if runtime + // is neither automatic or classic because we will remove this file + // in v8.0.0 + if (runtime === "classic") { + return transformClassic(api, options); + } else { + return transformAutomatic(api, options); + } }); diff --git a/packages/babel-plugin-transform-react-jsx/src/transform-automatic.js b/packages/babel-plugin-transform-react-jsx/src/transform-automatic.js new file mode 100644 index 0000000000..71f41a5de7 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/src/transform-automatic.js @@ -0,0 +1,43 @@ +import jsx from "@babel/plugin-syntax-jsx"; +import { helper } from "@babel/helper-builder-react-jsx-experimental"; +import { declare } from "@babel/helper-plugin-utils"; +import { types as t } from "@babel/core"; + +export default declare((api, options) => { + const visitor = helper(api, { + pre(state) { + const tagName = state.tagName; + const args = state.args; + if (t.react.isCompatTag(tagName)) { + args.push(t.stringLiteral(tagName)); + } else { + args.push(state.tagExpr); + } + }, + + post(state, pass) { + if (pass.get("@babel/plugin-react-jsx/runtime") === "classic") { + state.createElementCallee = pass.get( + "@babel/plugin-react-jsx/createElementIdentifier", + )(); + } else { + state.jsxCallee = pass.get("@babel/plugin-react-jsx/jsxIdentifier")(); + state.jsxStaticCallee = pass.get( + "@babel/plugin-react-jsx/jsxStaticIdentifier", + )(); + state.createElementCallee = pass.get( + "@babel/plugin-react-jsx/createElementIdentifier", + )(); + } + }, + + ...options, + development: false, + }); + + return { + name: "transform-react-jsx", + inherits: jsx, + visitor, + }; +}); diff --git a/packages/babel-plugin-transform-react-jsx/src/transform-classic.js b/packages/babel-plugin-transform-react-jsx/src/transform-classic.js new file mode 100644 index 0000000000..e76d29b034 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/src/transform-classic.js @@ -0,0 +1,98 @@ +import { declare } from "@babel/helper-plugin-utils"; +import jsx from "@babel/plugin-syntax-jsx"; +import helper from "@babel/helper-builder-react-jsx"; +import { types as t } from "@babel/core"; + +export default declare((api, options) => { + const THROW_IF_NAMESPACE = + options.throwIfNamespace === undefined ? true : !!options.throwIfNamespace; + + const PRAGMA_DEFAULT = options.pragma || "React.createElement"; + const PRAGMA_FRAG_DEFAULT = options.pragmaFrag || "React.Fragment"; + + const JSX_ANNOTATION_REGEX = /\*?\s*@jsx\s+([^\s]+)/; + const JSX_FRAG_ANNOTATION_REGEX = /\*?\s*@jsxFrag\s+([^\s]+)/; + + // returns a closure that returns an identifier or memberExpression node + // based on the given id + const createIdentifierParser = (id: string) => () => { + return id + .split(".") + .map(name => t.identifier(name)) + .reduce((object, property) => t.memberExpression(object, property)); + }; + + const visitor = helper({ + pre(state) { + const tagName = state.tagName; + const args = state.args; + if (t.react.isCompatTag(tagName)) { + args.push(t.stringLiteral(tagName)); + } else { + args.push(state.tagExpr); + } + }, + + post(state, pass) { + state.callee = pass.get("jsxIdentifier")(); + }, + + throwIfNamespace: THROW_IF_NAMESPACE, + }); + + visitor.Program = { + enter(path, state) { + const { file } = state; + + let pragma = PRAGMA_DEFAULT; + let pragmaFrag = PRAGMA_FRAG_DEFAULT; + let pragmaSet = !!options.pragma; + let pragmaFragSet = !!options.pragmaFrag; + + if (file.ast.comments) { + for (const comment of (file.ast.comments: Array)) { + const jsxMatches = JSX_ANNOTATION_REGEX.exec(comment.value); + if (jsxMatches) { + pragma = jsxMatches[1]; + pragmaSet = true; + } + const jsxFragMatches = JSX_FRAG_ANNOTATION_REGEX.exec(comment.value); + if (jsxFragMatches) { + pragmaFrag = jsxFragMatches[1]; + pragmaFragSet = true; + } + } + } + + state.set("jsxIdentifier", createIdentifierParser(pragma)); + state.set("jsxFragIdentifier", createIdentifierParser(pragmaFrag)); + state.set("usedFragment", false); + state.set("pragmaSet", pragmaSet); + state.set("pragmaFragSet", pragmaFragSet); + }, + exit(path, state) { + if ( + state.get("pragmaSet") && + state.get("usedFragment") && + !state.get("pragmaFragSet") + ) { + throw new Error( + "transform-react-jsx: pragma has been set but " + + "pragmaFrag has not been set", + ); + } + }, + }; + + visitor.JSXAttribute = function(path) { + if (t.isJSXElement(path.node.value)) { + path.node.value = t.jsxExpressionContainer(path.node.value); + } + }; + + return { + name: "transform-react-jsx", + inherits: jsx, + visitor, + }; +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/input.js new file mode 100644 index 0000000000..3a24e66a05 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ +); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/options.json new file mode 100644 index 0000000000..1c3260292f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/options.json @@ -0,0 +1,4 @@ +{ + "plugins": [["transform-react-jsx", { "runtime": "automatic" }]], + "sourceType": "module" +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/output.mjs new file mode 100644 index 0000000000..386cac2a47 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-module/output.mjs @@ -0,0 +1,14 @@ +import { createElement as _createElement } from "react"; +import { jsxs as _jsxs } from "react/jsx-runtime"; +import { jsx as _jsx } from "react/jsx-runtime"; +import { Fragment as _Fragment } from "react/jsx-runtime"; + +var x = _jsx(_Fragment, { + children: _jsxs("div", { + children: [_jsx("div", {}, "1"), _jsx("div", { + meow: "wolf" + }, "2"), _jsx("div", {}, "3"), _createElement("div", { ...props, + key: "4" + })] + }) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/input.js new file mode 100644 index 0000000000..3a24e66a05 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/input.js @@ -0,0 +1,10 @@ +var x = ( + <> +
+
+
+
+
+
+ +); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/options.json new file mode 100644 index 0000000000..0ab40c5a69 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/options.json @@ -0,0 +1,4 @@ +{ + "plugins": [["transform-react-jsx", { "runtime": "automatic" }]], + "sourceType": "script" +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/output.js new file mode 100644 index 0000000000..9c3f75a6d6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/auto-import-react-source-type-script/output.js @@ -0,0 +1,13 @@ +var _react = require("react"); + +var _reactJsxRuntime = require("react/jsx-runtime"); + +var x = _reactJsxRuntime.jsx(_reactJsxRuntime.Fragment, { + children: _reactJsxRuntime.jsxs("div", { + children: [_reactJsxRuntime.jsx("div", {}, "1"), _reactJsxRuntime.jsx("div", { + meow: "wolf" + }, "2"), _reactJsxRuntime.jsx("div", {}, "3"), _react.createElement("div", { ...props, + key: "4" + })] + }) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/input.js new file mode 100644 index 0000000000..3cbea31e43 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/input.js @@ -0,0 +1,15 @@ +const Bar = () => { + const Foo = () => { + const Component = ({thing, ..._react}) => { + if (!thing) { + var _react2 = "something useless"; + var b = _react3(); + var c = _react5(); + var jsx = 1; + var _jsx = 2; + return
; + }; + return ; + }; + } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/options.json new file mode 100644 index 0000000000..1c3260292f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/options.json @@ -0,0 +1,4 @@ +{ + "plugins": [["transform-react-jsx", { "runtime": "automatic" }]], + "sourceType": "module" +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/output.mjs new file mode 100644 index 0000000000..bec94b2a34 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-module/output.mjs @@ -0,0 +1,25 @@ +import { jsx as _jsx2 } from "react/jsx-runtime"; + +const Bar = () => { + const Foo = () => { + const Component = ({ + thing, + ..._react + }) => { + if (!thing) { + var _react2 = "something useless"; + + var b = _react3(); + + var c = _react5(); + + var jsx = 1; + var _jsx = 2; + return _jsx2("div", {}); + } + + ; + return _jsx2("span", {}); + }; + }; +}; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/input.js new file mode 100644 index 0000000000..3cbea31e43 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/input.js @@ -0,0 +1,15 @@ +const Bar = () => { + const Foo = () => { + const Component = ({thing, ..._react}) => { + if (!thing) { + var _react2 = "something useless"; + var b = _react3(); + var c = _react5(); + var jsx = 1; + var _jsx = 2; + return
; + }; + return ; + }; + } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/options.json new file mode 100644 index 0000000000..0ab40c5a69 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/options.json @@ -0,0 +1,4 @@ +{ + "plugins": [["transform-react-jsx", { "runtime": "automatic" }]], + "sourceType": "script" +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/output.js new file mode 100644 index 0000000000..cb5ea61c1a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/complicated-scope-script/output.js @@ -0,0 +1,25 @@ +var _reactJsxRuntime = require("react/jsx-runtime"); + +const Bar = () => { + const Foo = () => { + const Component = ({ + thing, + ..._react + }) => { + if (!thing) { + var _react2 = "something useless"; + + var b = _react3(); + + var c = _react5(); + + var jsx = 1; + var _jsx = 2; + return _reactJsxRuntime.jsx("div", {}); + } + + ; + return _reactJsxRuntime.jsx("span", {}); + }; + }; +}; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source-pragma/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source-pragma/input.js new file mode 100644 index 0000000000..8384da556f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source-pragma/input.js @@ -0,0 +1,2 @@ +/** @jsxImportSource baz */ +var x = (
); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source-pragma/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source-pragma/output.mjs new file mode 100644 index 0000000000..0049c23592 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source-pragma/output.mjs @@ -0,0 +1,6 @@ +import { jsx as _jsx } from "baz/jsx-runtime"; + +/** @jsxImportSource baz */ +var x = _jsx("div", { + children: _jsx("span", {}) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/input.js new file mode 100644 index 0000000000..6a6f1f219c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/input.js @@ -0,0 +1 @@ +var x = (
); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/options.json new file mode 100644 index 0000000000..669a4d7c9a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-react-jsx", { "importSource": "foo", "runtime": "automatic" }] + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/output.mjs new file mode 100644 index 0000000000..05dafe98f5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/import-source/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "foo/jsx-runtime"; + +var x = _jsx("div", { + children: _jsx("span", {}) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/no-jsx/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/no-jsx/input.js new file mode 100644 index 0000000000..3ea99257fd --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/no-jsx/input.js @@ -0,0 +1 @@ +var foo = "
"; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/no-jsx/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/no-jsx/output.mjs new file mode 100644 index 0000000000..9afe2bdf3f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/no-jsx/output.mjs @@ -0,0 +1 @@ +var foo = "
"; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/options.json new file mode 100644 index 0000000000..1c3260292f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/options.json @@ -0,0 +1,4 @@ +{ + "plugins": [["transform-react-jsx", { "runtime": "automatic" }]], + "sourceType": "module" +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/input.js new file mode 100644 index 0000000000..bde12661d8 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/input.js @@ -0,0 +1,10 @@ +import * as react from "react"; +var y = react.createElement("div", {foo: 1}); +var x = ( +
+
+
+
+
+
+); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/options.json new file mode 100644 index 0000000000..350f3e4158 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/options.json @@ -0,0 +1,3 @@ +{ + "plugins": [["transform-react-jsx", { "runtime": "automatic" }]] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/output.mjs new file mode 100644 index 0000000000..f4eec3ebc1 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextAutoImport/react-defined/output.mjs @@ -0,0 +1,15 @@ +import { createElement as _createElement } from "react"; +import { jsx as _jsx } from "react/jsx-runtime"; +import { jsxs as _jsxs } from "react/jsx-runtime"; +import * as react from "react"; +var y = react.createElement("div", { + foo: 1 +}); + +var x = _jsxs("div", { + children: [_jsx("div", {}, "1"), _jsx("div", { + meow: "wolf" + }, "2"), _jsx("div", {}, "3"), _createElement("div", { ...props, + key: "4" + })] +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/.should-properly-handle-comments-adjacent-to-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/.should-properly-handle-comments-adjacent-to-children/input.js new file mode 100644 index 0000000000..412984681e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/.should-properly-handle-comments-adjacent-to-children/input.js @@ -0,0 +1,13 @@ +var x = ( +
+ {/* A comment at the beginning */} + {/* A second comment at the beginning */} + + {/* A nested comment */} + + {/* A sandwiched comment */} +
+ {/* A comment at the end */} + {/* A second comment at the end */} +
+); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/adds-appropriate-newlines-when-using-spread-attribute/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/adds-appropriate-newlines-when-using-spread-attribute/input.js new file mode 100644 index 0000000000..2c800f1558 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/adds-appropriate-newlines-when-using-spread-attribute/input.js @@ -0,0 +1,3 @@ + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/adds-appropriate-newlines-when-using-spread-attribute/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/adds-appropriate-newlines-when-using-spread-attribute/output.mjs new file mode 100644 index 0000000000..a13dad887a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/adds-appropriate-newlines-when-using-spread-attribute/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx(Component, { ...props, + sound: "moo" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/arrow-functions/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/arrow-functions/input.js new file mode 100644 index 0000000000..91f343d349 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/arrow-functions/input.js @@ -0,0 +1,7 @@ +var foo = function () { + return () => ; +}; + +var bar = function () { + return () => ; +}; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/arrow-functions/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/arrow-functions/output.mjs new file mode 100644 index 0000000000..28e5fdfc6a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/arrow-functions/output.mjs @@ -0,0 +1,17 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var foo = function () { + var _this = this; + + return function () { + return _jsx(_this, {}); + }; +}; + +var bar = function () { + var _this2 = this; + + return function () { + return _jsx(_this2.foo, {}); + }; +}; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/assignment/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/assignment/input.js new file mode 100644 index 0000000000..4caacb6aa1 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/assignment/input.js @@ -0,0 +1 @@ +var div = diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/assignment/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/assignment/output.mjs new file mode 100644 index 0000000000..4b779c6c76 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/assignment/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var div = _jsx(Component, { ...props, + foo: "bar" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/concatenates-adjacent-string-literals/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/concatenates-adjacent-string-literals/input.js new file mode 100644 index 0000000000..f3f30af044 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/concatenates-adjacent-string-literals/input.js @@ -0,0 +1,13 @@ +var x = +
+ foo + {"bar"} + baz +
+ buz + bang +
+ qux + {null} + quack +
diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/concatenates-adjacent-string-literals/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/concatenates-adjacent-string-literals/output.mjs new file mode 100644 index 0000000000..9d0b0f28a2 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/concatenates-adjacent-string-literals/output.mjs @@ -0,0 +1,8 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import { jsxs as _jsxs } from "react/jsx-runtime"; + +var x = _jsxs("div", { + children: ["foo", "bar", "baz", _jsx("div", { + children: "buz bang" + }), "qux", null, "quack"] +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-assignment-expression/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-assignment-expression/input.js new file mode 100644 index 0000000000..5b06299bc0 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-assignment-expression/input.js @@ -0,0 +1,6 @@ +var Component; +Component = React.createClass({ + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-assignment-expression/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-assignment-expression/output.mjs new file mode 100644 index 0000000000..12fa356793 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-assignment-expression/output.mjs @@ -0,0 +1,7 @@ +var Component; +Component = React.createClass({ + displayName: "Component", + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-export-default/input.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-export-default/input.mjs new file mode 100644 index 0000000000..4331da16ef --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-export-default/input.mjs @@ -0,0 +1,5 @@ +export default React.createClass({ + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-export-default/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-export-default/output.mjs new file mode 100644 index 0000000000..6714246222 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-export-default/output.mjs @@ -0,0 +1,6 @@ +export default React.createClass({ + displayName: "input", + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-if-missing/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-if-missing/input.js new file mode 100644 index 0000000000..73cb1e0d33 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-if-missing/input.js @@ -0,0 +1,13 @@ +var Whateva = React.createClass({ + displayName: "Whatever", + render: function render() { + return null; + } +}); + +var Bar = React.createClass({ + "displayName": "Ba", + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-if-missing/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-if-missing/output.mjs new file mode 100644 index 0000000000..a2bfac0833 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-if-missing/output.mjs @@ -0,0 +1,12 @@ +var Whateva = React.createClass({ + displayName: "Whatever", + render: function render() { + return null; + } +}); +var Bar = React.createClass({ + "displayName": "Ba", + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-object-declaration/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-object-declaration/input.js new file mode 100644 index 0000000000..904383aab8 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-object-declaration/input.js @@ -0,0 +1,7 @@ +exports = { + Component: React.createClass({ + render: function render() { + return null; + } + }) +}; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-object-declaration/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-object-declaration/output.mjs new file mode 100644 index 0000000000..e6565826f5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-object-declaration/output.mjs @@ -0,0 +1,8 @@ +exports = { + Component: React.createClass({ + displayName: "Component", + render: function render() { + return null; + } + }) +}; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-property-assignment/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-property-assignment/input.js new file mode 100644 index 0000000000..d9d2c1ad66 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-property-assignment/input.js @@ -0,0 +1,5 @@ +exports.Component = React.createClass({ + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-property-assignment/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-property-assignment/output.mjs new file mode 100644 index 0000000000..e08bf5d35d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-property-assignment/output.mjs @@ -0,0 +1,6 @@ +exports.Component = React.createClass({ + displayName: "Component", + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-variable-declaration/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-variable-declaration/input.js new file mode 100644 index 0000000000..1d32784d13 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-variable-declaration/input.js @@ -0,0 +1,5 @@ +var Component = React.createClass({ + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-variable-declaration/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-variable-declaration/output.mjs new file mode 100644 index 0000000000..d6393b0105 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/display-name-variable-declaration/output.mjs @@ -0,0 +1,6 @@ +var Component = React.createClass({ + displayName: "Component", + render: function render() { + return null; + } +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic-windows/exec.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic-windows/exec.js new file mode 100644 index 0000000000..f122206b35 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic-windows/exec.js @@ -0,0 +1,32 @@ +var actual = transform( + `var x = ( + <> +
+
+
+
+
+
+ + );`, + Object.assign({}, opts, { filename: 'C:\\fake\\path\\mock.js' }) +).code; + +var expected = +`import { createElement as _createElement } from "react"; +import { jsxs as _jsxs } from "react/jsx-runtime"; +import { jsx as _jsx } from "react/jsx-runtime"; +import { Fragment as _Fragment } from "react/jsx-runtime"; +var _jsxFileName = "C:\\\\fake\\\\path\\\\mock.js"; + +var x = _jsx(_Fragment, { + children: _jsxs("div", { + children: [_jsx("div", {}, "1"), _jsx("div", { + meow: "wolf" + }, "2"), _jsx("div", {}, "3"), _createElement("div", { ...props, + key: "4" + })] + }) +});`; + +expect(actual).toBe(expected); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic-windows/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic-windows/options.json new file mode 100644 index 0000000000..c94bc204de --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic-windows/options.json @@ -0,0 +1,16 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "autoImport": "namedExports", + "runtime": "automatic" + } + ], + "transform-react-jsx-source", + "transform-react-jsx-self" + ], + "sourceType": "module", + "os": ["win32"], + "throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic/exec.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic/exec.js new file mode 100644 index 0000000000..e6e063c636 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic/exec.js @@ -0,0 +1,32 @@ +var actual = transform( + `var x = ( + <> +
+
+
+
+
+
+ + );`, + Object.assign({}, opts, { filename: '/fake/path/mock.js' }) +).code; + +var expected = +`import { createElement as _createElement } from "react"; +import { jsxs as _jsxs } from "react/jsx-runtime"; +import { jsx as _jsx } from "react/jsx-runtime"; +import { Fragment as _Fragment } from "react/jsx-runtime"; +var _jsxFileName = "/fake/path/mock.js"; + +var x = _jsx(_Fragment, { + children: _jsxs("div", { + children: [_jsx("div", {}, "1"), _jsx("div", { + meow: "wolf" + }, "2"), _jsx("div", {}, "3"), _createElement("div", { ...props, + key: "4" + })] + }) +});`; + +expect(actual).toBe(expected); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic/options.json new file mode 100644 index 0000000000..0d217ed23c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/does-not-add-source-self-automatic/options.json @@ -0,0 +1,16 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "autoImport": "namedExports", + "runtime": "automatic" + } + ], + "transform-react-jsx-source", + "transform-react-jsx-self" + ], + "sourceType": "module", + "os": ["linux", "darwin"], + "throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/dont-coerce-expression-containers/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/dont-coerce-expression-containers/input.js new file mode 100644 index 0000000000..c8da550222 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/dont-coerce-expression-containers/input.js @@ -0,0 +1,4 @@ + + To get started, edit index.ios.js!!!{"\n"} + Press Cmd+R to reload + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/dont-coerce-expression-containers/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/dont-coerce-expression-containers/output.mjs new file mode 100644 index 0000000000..e3d32ba4f9 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/dont-coerce-expression-containers/output.mjs @@ -0,0 +1,5 @@ +import { jsxs as _jsxs } from "react/jsx-runtime"; + +_jsxs(Text, { + children: ["To get started, edit index.ios.js!!!", "\n", "Press Cmd+R to reload"] +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-key/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-key/input.js new file mode 100644 index 0000000000..9fac2d0f98 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-key/input.js @@ -0,0 +1,3 @@ +import * as React from "react"; + +var x = ; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-key/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-key/output.mjs new file mode 100644 index 0000000000..2de900d3a3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-key/output.mjs @@ -0,0 +1,4 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import * as React from "react"; + +var x = _jsx(React.Fragment, {}, "foo"); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-no-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-no-children/input.js new file mode 100644 index 0000000000..d766356c98 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-no-children/input.js @@ -0,0 +1 @@ +var x = <>; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-no-children/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-no-children/output.mjs new file mode 100644 index 0000000000..0244f87df1 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments-with-no-children/output.mjs @@ -0,0 +1,4 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import { Fragment as _Fragment } from "react/jsx-runtime"; + +var x = _jsx(_Fragment, {}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments/input.js new file mode 100644 index 0000000000..d2a2902b85 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments/input.js @@ -0,0 +1 @@ +var x = <>
\ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments/output.mjs new file mode 100644 index 0000000000..19103d494e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-fragments/output.mjs @@ -0,0 +1,6 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import { Fragment as _Fragment } from "react/jsx-runtime"; + +var x = _jsx(_Fragment, { + children: _jsx("div", {}) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-nonstatic-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-nonstatic-children/input.js new file mode 100644 index 0000000000..e0fab82c49 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-nonstatic-children/input.js @@ -0,0 +1,5 @@ +var x = ( +
+ {[, ]} +
+); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-nonstatic-children/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-nonstatic-children/output.mjs new file mode 100644 index 0000000000..26f074358c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-nonstatic-children/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var x = _jsx("div", { + children: [_jsx("span", {}, '0'), _jsx("span", {}, '1')] +}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-static-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-static-children/input.js new file mode 100644 index 0000000000..fbe28fd373 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-static-children/input.js @@ -0,0 +1,6 @@ +var x = ( +
+ + {[, ]} +
+); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-static-children/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-static-children/output.mjs new file mode 100644 index 0000000000..7d6867ace0 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/handle-static-children/output.mjs @@ -0,0 +1,6 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import { jsxs as _jsxs } from "react/jsx-runtime"; + +var x = _jsxs("div", { + children: [_jsx("span", {}), [_jsx("span", {}, '0'), _jsx("span", {}, '1')]] +}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/honor-custom-jsx-comment/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/honor-custom-jsx-comment/input.js new file mode 100644 index 0000000000..69b21ce257 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/honor-custom-jsx-comment/input.js @@ -0,0 +1,6 @@ +; + +var profile =
+ +

{[user.firstName, user.lastName].join(" ")}

+
; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/honor-custom-jsx-comment/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/honor-custom-jsx-comment/output.mjs new file mode 100644 index 0000000000..dd50d9528b --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/honor-custom-jsx-comment/output.mjs @@ -0,0 +1,13 @@ +import { jsxs as _jsxs } from "react/jsx-runtime"; +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx(Foo, {}); + +var profile = _jsxs("div", { + children: [_jsx("img", { + src: "avatar.png", + className: "profile" + }), _jsx("h3", { + children: [user.firstName, user.lastName].join(" ") + })] +}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/input.js new file mode 100644 index 0000000000..1addddeb15 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/input.js @@ -0,0 +1 @@ +var div =
test
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/options.json new file mode 100644 index 0000000000..97925bbcb6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/options.json @@ -0,0 +1,3 @@ +{ + "retainLines": true +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/output.mjs new file mode 100644 index 0000000000..028212c148 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-with-retainlines-option/output.mjs @@ -0,0 +1 @@ +import { jsx as _jsx } from "react/jsx-runtime";var div = _jsx("div", { children: "test" }); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-without-retainlines-option/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-without-retainlines-option/input.js new file mode 100644 index 0000000000..1addddeb15 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-without-retainlines-option/input.js @@ -0,0 +1 @@ +var div =
test
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-without-retainlines-option/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-without-retainlines-option/output.mjs new file mode 100644 index 0000000000..439bf254fd --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/jsx-without-retainlines-option/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var div = _jsx("div", { + children: "test" +}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/key-undefined-works/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/key-undefined-works/input.js new file mode 100644 index 0000000000..23d79e4ffb --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/key-undefined-works/input.js @@ -0,0 +1,2 @@ +const props = {foo: true}; +var x = (
) diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/key-undefined-works/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/key-undefined-works/output.mjs new file mode 100644 index 0000000000..793e880d0b --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/key-undefined-works/output.mjs @@ -0,0 +1,8 @@ +import { createElement as _createElement } from "react"; +const props = { + foo: true +}; + +var x = _createElement("div", { ...props, + key: undefined +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/input.js new file mode 100644 index 0000000000..87ccec557d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/input.js @@ -0,0 +1,17 @@ +class App extends React.Component { + render() { + const navbarHeader =
+ + + +
; + + return
+ +
; + } +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/options.json new file mode 100644 index 0000000000..721403cf39 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/options.json @@ -0,0 +1,8 @@ +{ + "plugins": [ + ["external-helpers", { "helperVersion": "7.100.0" }], + "transform-react-constant-elements", + "transform-classes", + "syntax-jsx" + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/output.mjs new file mode 100644 index 0000000000..0b217c67e6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/optimisation.react.constant-elements/output.mjs @@ -0,0 +1,31 @@ +var _ref = /*#__PURE__*/
+ + + +
; + +let App = /*#__PURE__*/function (_React$Component) { + babelHelpers.inherits(App, _React$Component); + + var _super = babelHelpers.createSuper(App); + + function App() { + babelHelpers.classCallCheck(this, App); + return _super.apply(this, arguments); + } + + babelHelpers.createClass(App, [{ + key: "render", + value: function render() { + const navbarHeader = _ref; + return
+ +
; + } + }]); + return App; +}(React.Component); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/options.json new file mode 100644 index 0000000000..8bbe364582 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/options.json @@ -0,0 +1,9 @@ +{ + "plugins": [ + "external-helpers", + ["transform-react-jsx", { "runtime": "automatic" }], + "transform-react-display-name", + "transform-arrow-functions" + ], + "sourceType": "module" +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/pragma-works-with-no-space-at-the-end/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/pragma-works-with-no-space-at-the-end/input.js new file mode 100644 index 0000000000..73a676f679 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/pragma-works-with-no-space-at-the-end/input.js @@ -0,0 +1,2 @@ +/* @jsxImportSource foo*/ +
Hi
; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/pragma-works-with-no-space-at-the-end/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/pragma-works-with-no-space-at-the-end/output.mjs new file mode 100644 index 0000000000..7f8eea819d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/pragma-works-with-no-space-at-the-end/output.mjs @@ -0,0 +1,6 @@ +import { jsx as _jsx } from "foo/jsx-runtime"; + +/* @jsxImportSource foo*/ +_jsx("div", { + children: "Hi" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/input.js new file mode 100644 index 0000000000..a47734ffb3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/input.js @@ -0,0 +1 @@ +var es3 = ; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/options.json new file mode 100644 index 0000000000..05afa82f88 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + ["transform-react-jsx", { "runtime": "automatic" }], + "transform-property-literals" + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/output.mjs new file mode 100644 index 0000000000..cc534377ff --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-add-quotes-es3/output.mjs @@ -0,0 +1,10 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var es3 = _jsx(F, { + aaa: true, + "new": true, + "const": true, + "var": true, + "default": true, + "foo-bar": true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-constructor-as-prop/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-constructor-as-prop/input.js new file mode 100644 index 0000000000..29c24a7630 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-constructor-as-prop/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-constructor-as-prop/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-constructor-as-prop/output.mjs new file mode 100644 index 0000000000..6335551d5c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-constructor-as-prop/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx(Component, { + constructor: "foo" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-deeper-js-namespacing/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-deeper-js-namespacing/input.js new file mode 100644 index 0000000000..158b9a9dee --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-deeper-js-namespacing/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-deeper-js-namespacing/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-deeper-js-namespacing/output.mjs new file mode 100644 index 0000000000..a3932e252e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-deeper-js-namespacing/output.mjs @@ -0,0 +1,3 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx(Namespace.DeepNamespace.Component, {}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-elements-as-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-elements-as-attributes/input.js new file mode 100644 index 0000000000..240f6d37ae --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-elements-as-attributes/input.js @@ -0,0 +1 @@ +
/> diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-elements-as-attributes/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-elements-as-attributes/output.mjs new file mode 100644 index 0000000000..f78723563c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-elements-as-attributes/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("div", { + attr: _jsx("div", {}) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/blacklist.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/blacklist.js new file mode 100644 index 0000000000..980df45724 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/blacklist.js @@ -0,0 +1 @@ +React.createElement(Namespace.Component, null); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/input.js new file mode 100644 index 0000000000..6c104620cf --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/output.mjs new file mode 100644 index 0000000000..068c945bc5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-js-namespacing/output.mjs @@ -0,0 +1,3 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx(Namespace.Component, {}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-nested-fragments/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-nested-fragments/input.js new file mode 100644 index 0000000000..73b5cad558 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-nested-fragments/input.js @@ -0,0 +1,12 @@ +
+ < > + <> + Hello + world + + <> + Goodbye + world + + +
diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-nested-fragments/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-nested-fragments/output.mjs new file mode 100644 index 0000000000..d549233634 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-allow-nested-fragments/output.mjs @@ -0,0 +1,21 @@ +import { jsxs as _jsxs } from "react/jsx-runtime"; +import { Fragment as _Fragment } from "react/jsx-runtime"; +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("div", { + children: _jsxs(_Fragment, { + children: [_jsxs(_Fragment, { + children: [_jsx("span", { + children: "Hello" + }), _jsx("span", { + children: "world" + })] + }), _jsxs(_Fragment, { + children: [_jsx("span", { + children: "Goodbye" + }), _jsx("span", { + children: "world" + })] + })] + }) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js new file mode 100644 index 0000000000..0304845f88 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js @@ -0,0 +1,15 @@ +var x =
+ +
; + +var x =
+ {props.children} +
; + +var x = + {props.children} +; + +var x = + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-avoid-wrapping-in-extra-parens-if-not-needed/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-avoid-wrapping-in-extra-parens-if-not-needed/output.mjs new file mode 100644 index 0000000000..4e5907bd05 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-avoid-wrapping-in-extra-parens-if-not-needed/output.mjs @@ -0,0 +1,17 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var x = _jsx("div", { + children: _jsx(Component, {}) +}); + +var x = _jsx("div", { + children: props.children +}); + +var x = _jsx(Composite, { + children: props.children +}); + +var x = _jsx(Composite, { + children: _jsx(Composite2, {}) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-tags/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-tags/input.js new file mode 100644 index 0000000000..b6d801a6bc --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-tags/input.js @@ -0,0 +1 @@ +var x =
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-tags/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-tags/output.mjs new file mode 100644 index 0000000000..b35b58bc54 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-tags/output.mjs @@ -0,0 +1,3 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var x = _jsx("div", {}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-text/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-text/input.js new file mode 100644 index 0000000000..42c927f15a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-text/input.js @@ -0,0 +1 @@ +var x =
text
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-text/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-text/output.mjs new file mode 100644 index 0000000000..59f4813364 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-convert-simple-text/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var x = _jsx("div", { + children: "text" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-spread-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-spread-children/input.js new file mode 100644 index 0000000000..6a05e108dc --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-spread-children/input.js @@ -0,0 +1 @@ +
{...children}
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-spread-children/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-spread-children/options.json new file mode 100644 index 0000000000..bcb773e343 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-spread-children/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Spread children are not supported in React." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-xml-namespacing/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-xml-namespacing/input.js new file mode 100644 index 0000000000..50df717c12 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-xml-namespacing/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-xml-namespacing/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-xml-namespacing/options.json new file mode 100644 index 0000000000..746037e9f5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-disallow-xml-namespacing/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxattribute/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxattribute/input.js new file mode 100644 index 0000000000..addae3b9f8 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxattribute/input.js @@ -0,0 +1,3 @@ +
; +
; +
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxattribute/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxattribute/output.mjs new file mode 100644 index 0000000000..2d3ad6e2ac --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxattribute/output.mjs @@ -0,0 +1,13 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("div", { + id: "w\xF4w" +}); + +_jsx("div", { + id: "\\w" +}); + +_jsx("div", { + id: "w < w" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxtext/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxtext/input.js new file mode 100644 index 0000000000..2104766109 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxtext/input.js @@ -0,0 +1,12 @@ +
wow
; +
wôw
; + +
w & w
; +
w & w
; + +
w   w
; +
this should not parse as unicode: \u00a0
; +
this should parse as nbsp:  
; +
this should parse as unicode: {'\u00a0 '}
; + +
w < w
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxtext/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxtext/output.mjs new file mode 100644 index 0000000000..21926fc11b --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-escape-xhtml-jsxtext/output.mjs @@ -0,0 +1,38 @@ +import { jsxs as _jsxs } from "react/jsx-runtime"; +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("div", { + children: "wow" +}); + +_jsx("div", { + children: "w\xF4w" +}); + +_jsx("div", { + children: "w & w" +}); + +_jsx("div", { + children: "w & w" +}); + +_jsx("div", { + children: "w \xA0 w" +}); + +_jsx("div", { + children: "this should not parse as unicode: \\u00a0" +}); + +_jsx("div", { + children: "this should parse as nbsp: \xA0 " +}); + +_jsxs("div", { + children: ["this should parse as unicode: ", '\u00a0 '] +}); + +_jsx("div", { + children: "w < w" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-attributed-elements/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-attributed-elements/input.js new file mode 100644 index 0000000000..e179659161 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-attributed-elements/input.js @@ -0,0 +1,11 @@ +var HelloMessage = React.createClass({ + render: function() { + return
Hello {this.props.name}
; + } +}); + +React.render( + Sebastian + +} />, mountNode); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-attributed-elements/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-attributed-elements/output.mjs new file mode 100644 index 0000000000..c8bd7d9ca4 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-attributed-elements/output.mjs @@ -0,0 +1,15 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import { jsxs as _jsxs } from "react/jsx-runtime"; +var HelloMessage = React.createClass({ + displayName: "HelloMessage", + render: function () { + return _jsxs("div", { + children: ["Hello ", this.props.name] + }); + } +}); +React.render(_jsx(HelloMessage, { + name: _jsx("span", { + children: "Sebastian" + }) +}), mountNode); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-has-own-property-correctly/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-has-own-property-correctly/input.js new file mode 100644 index 0000000000..4d5e8fb63c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-has-own-property-correctly/input.js @@ -0,0 +1 @@ +testing; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-has-own-property-correctly/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-has-own-property-correctly/output.mjs new file mode 100644 index 0000000000..13b9b81dd5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-handle-has-own-property-correctly/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("hasOwnProperty", { + children: "testing" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-have-correct-comma-in-nested-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-have-correct-comma-in-nested-children/input.js new file mode 100644 index 0000000000..fa82e1cd08 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-have-correct-comma-in-nested-children/input.js @@ -0,0 +1,5 @@ +var x =
+

+ {foo}
{bar}
+
+
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-have-correct-comma-in-nested-children/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-have-correct-comma-in-nested-children/output.mjs new file mode 100644 index 0000000000..98492e28e5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-have-correct-comma-in-nested-children/output.mjs @@ -0,0 +1,10 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import { jsxs as _jsxs } from "react/jsx-runtime"; + +var x = _jsxs("div", { + children: [_jsx("div", { + children: _jsx("br", {}) + }), _jsxs(Component, { + children: [foo, _jsx("br", {}), bar] + }), _jsx("br", {})] +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-insert-commas-after-expressions-before-whitespace/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-insert-commas-after-expressions-before-whitespace/input.js new file mode 100644 index 0000000000..92541bbb35 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-insert-commas-after-expressions-before-whitespace/input.js @@ -0,0 +1,16 @@ +var x = +
+
diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-insert-commas-after-expressions-before-whitespace/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-insert-commas-after-expressions-before-whitespace/output.mjs new file mode 100644 index 0000000000..c054ae2ac6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-insert-commas-after-expressions-before-whitespace/output.mjs @@ -0,0 +1,8 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var x = _jsx("div", { + attr1: "foo" + "bar", + attr2: "foo" + "bar" + "baz" + "bug", + attr3: "foo" + "bar" + "baz" + "bug", + attr4: "baz" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-add-quotes-to-identifier-names/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-add-quotes-to-identifier-names/input.js new file mode 100644 index 0000000000..44d58a60fe --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-add-quotes-to-identifier-names/input.js @@ -0,0 +1 @@ +var e = ; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-add-quotes-to-identifier-names/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-add-quotes-to-identifier-names/output.mjs new file mode 100644 index 0000000000..92604cf540 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-add-quotes-to-identifier-names/output.mjs @@ -0,0 +1,10 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var e = _jsx(F, { + aaa: true, + new: true, + const: true, + var: true, + default: true, + "foo-bar": true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-mangle-expressioncontainer-attribute-values/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-mangle-expressioncontainer-attribute-values/input.js new file mode 100644 index 0000000000..acecaa910f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-mangle-expressioncontainer-attribute-values/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-mangle-expressioncontainer-attribute-values/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-mangle-expressioncontainer-attribute-values/output.mjs new file mode 100644 index 0000000000..f00d3908f2 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-mangle-expressioncontainer-attribute-values/output.mjs @@ -0,0 +1,6 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("button", { + "data-value": "a value\n with\nnewlines\n and spaces", + children: "Button" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js new file mode 100644 index 0000000000..38d8acbab5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js @@ -0,0 +1 @@ +
 
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-nbsp-even-coupled-with-other-whitespace/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-nbsp-even-coupled-with-other-whitespace/output.mjs new file mode 100644 index 0000000000..7c75d440f3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-nbsp-even-coupled-with-other-whitespace/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("div", { + children: "\xA0 " +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-tags-with-a-single-child-of-nbsp/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-tags-with-a-single-child-of-nbsp/input.js new file mode 100644 index 0000000000..0e05a7be8d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-tags-with-a-single-child-of-nbsp/input.js @@ -0,0 +1 @@ +
 
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-tags-with-a-single-child-of-nbsp/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-tags-with-a-single-child-of-nbsp/output.mjs new file mode 100644 index 0000000000..4cd811612d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-not-strip-tags-with-a-single-child-of-nbsp/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("div", { + children: "\xA0" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-comments-between-props/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-comments-between-props/input.js new file mode 100644 index 0000000000..8b1943e8f6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-comments-between-props/input.js @@ -0,0 +1,10 @@ +var x = ( +
+ +
+); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-comments-between-props/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-comments-between-props/output.mjs new file mode 100644 index 0000000000..0a9d389b76 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-comments-between-props/output.mjs @@ -0,0 +1,11 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var x = _jsx("div", { + /* a multi-line + comment */ + attr1: "foo", + children: _jsx("span", { + // a double-slash comment + attr2: "bar" + }) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-keys/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-keys/input.js new file mode 100644 index 0000000000..336592502a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-keys/input.js @@ -0,0 +1,7 @@ +var x = ( +
+
+
+
+
+); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-keys/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-keys/output.mjs new file mode 100644 index 0000000000..6d3806f422 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-keys/output.mjs @@ -0,0 +1,8 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import { jsxs as _jsxs } from "react/jsx-runtime"; + +var x = _jsxs("div", { + children: [_jsx("div", {}, "1"), _jsx("div", { + meow: "wolf" + }, "2"), _jsx("div", {}, "3")] +}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-null-prop-spread/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-null-prop-spread/input.js new file mode 100644 index 0000000000..e0b99b87da --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-null-prop-spread/input.js @@ -0,0 +1,2 @@ +var foo = null; +var x =
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-null-prop-spread/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-null-prop-spread/output.mjs new file mode 100644 index 0000000000..b50ab710c5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-properly-handle-null-prop-spread/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +var foo = null; + +var x = _jsx("div", { ...foo +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-quote-jsx-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-quote-jsx-attributes/input.js new file mode 100644 index 0000000000..c794650e94 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-quote-jsx-attributes/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-quote-jsx-attributes/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-quote-jsx-attributes/output.mjs new file mode 100644 index 0000000000..65841ee76a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-quote-jsx-attributes/output.mjs @@ -0,0 +1,6 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("button", { + "data-value": "a value", + children: "Button" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/input.js new file mode 100644 index 0000000000..48d051a951 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/options.json new file mode 100644 index 0000000000..01032c9b06 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/options.json @@ -0,0 +1,11 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "throwIfNamespace": false, + "runtime": "automatic" + } + ] + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/output.mjs new file mode 100644 index 0000000000..6b1a400adb --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-support-xml-namespaces-if-flag/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("f:image", { + "n:attr": true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-throw-error-namespaces-if-not-flag/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-throw-error-namespaces-if-not-flag/input.js new file mode 100644 index 0000000000..4888b2b705 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-throw-error-namespaces-if-not-flag/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-throw-error-namespaces-if-not-flag/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-throw-error-namespaces-if-not-flag/options.json new file mode 100644 index 0000000000..a950825ce2 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-throw-error-namespaces-if-not-flag/options.json @@ -0,0 +1,12 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "throwIfNamespace": true, + "runtime": "automatic" + } + ] + ], + "throws": "Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-transform-known-hyphenated-tags/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-transform-known-hyphenated-tags/input.js new file mode 100644 index 0000000000..1cb54dd688 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-transform-known-hyphenated-tags/input.js @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-transform-known-hyphenated-tags/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-transform-known-hyphenated-tags/output.mjs new file mode 100644 index 0000000000..bfb38b62b4 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-transform-known-hyphenated-tags/output.mjs @@ -0,0 +1,3 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx("font-face", {}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-createElement-when-key-comes-after-spread/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-createElement-when-key-comes-after-spread/input.js new file mode 100644 index 0000000000..927a4174b6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-createElement-when-key-comes-after-spread/input.js @@ -0,0 +1,3 @@ +var x = ( +
+); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-createElement-when-key-comes-after-spread/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-createElement-when-key-comes-after-spread/output.mjs new file mode 100644 index 0000000000..5fe42670bb --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-createElement-when-key-comes-after-spread/output.mjs @@ -0,0 +1,6 @@ +import { createElement as _createElement } from "react"; + +var x = _createElement("div", { ...props, + key: "1", + foo: "bar" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-jsx-when-key-comes-before-spread/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-jsx-when-key-comes-before-spread/input.js new file mode 100644 index 0000000000..650a8354fe --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-jsx-when-key-comes-before-spread/input.js @@ -0,0 +1,3 @@ +var x = ( +
+); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-jsx-when-key-comes-before-spread/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-jsx-when-key-comes-before-spread/output.mjs new file mode 100644 index 0000000000..7e4836adba --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-use-jsx-when-key-comes-before-spread/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var x = _jsx("div", { ...props, + foo: "bar" +}, "1"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-is-set/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-is-set/input.js new file mode 100644 index 0000000000..1addddeb15 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-is-set/input.js @@ -0,0 +1 @@ +var div =
test
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-is-set/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-is-set/options.json new file mode 100644 index 0000000000..4c953facac --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-is-set/options.json @@ -0,0 +1,13 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "runtime": "automatic", + "pragma": "foo" + } + ] + ], + "sourceType": "module", + "throws": "pragma and pragmaFrag cannot be set when runtime is automatic." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-pragma-is-set.1/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-pragma-is-set.1/input.js new file mode 100644 index 0000000000..cf33e0165a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-pragma-is-set.1/input.js @@ -0,0 +1,4 @@ +/** @jsx foo */ +/** @jsx bar */ + +var div =
test
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-pragma-is-set.1/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-pragma-is-set.1/options.json new file mode 100644 index 0000000000..3f3adc0cc7 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/should-warn-when-pragma-or-pragmaFrag-pragma-is-set.1/options.json @@ -0,0 +1,3 @@ +{ + "throws": "pragma and pragmaFrag cannot be set when runtime is automatic." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/this-tag-name/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/this-tag-name/input.js new file mode 100644 index 0000000000..f65588acf7 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/this-tag-name/input.js @@ -0,0 +1 @@ +var div = test; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/this-tag-name/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/this-tag-name/output.mjs new file mode 100644 index 0000000000..b27f50e65b --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/this-tag-name/output.mjs @@ -0,0 +1,5 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +var div = _jsx(this.foo, { + children: "test" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-last-spread-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-last-spread-attributes/input.js new file mode 100644 index 0000000000..ce7fb5b60f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-last-spread-attributes/input.js @@ -0,0 +1 @@ + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-last-spread-attributes/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-last-spread-attributes/output.mjs new file mode 100644 index 0000000000..bad39dd847 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-last-spread-attributes/output.mjs @@ -0,0 +1,7 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx(Component, { + y: 2, + z: true, + ...x +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-middle-spread-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-middle-spread-attributes/input.js new file mode 100644 index 0000000000..919adaebb4 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-middle-spread-attributes/input.js @@ -0,0 +1 @@ + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-middle-spread-attributes/output.mjs b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-middle-spread-attributes/output.mjs new file mode 100644 index 0000000000..11c49ec080 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReact/wraps-props-in-react-spread-for-middle-spread-attributes/output.mjs @@ -0,0 +1,7 @@ +import { jsx as _jsx } from "react/jsx-runtime"; + +_jsx(Component, { + y: 2, + ...x, + z: true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/.should-properly-handle-comments-adjacent-to-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/.should-properly-handle-comments-adjacent-to-children/input.js new file mode 100644 index 0000000000..412984681e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/.should-properly-handle-comments-adjacent-to-children/input.js @@ -0,0 +1,13 @@ +var x = ( +
+ {/* A comment at the beginning */} + {/* A second comment at the beginning */} + + {/* A nested comment */} + + {/* A sandwiched comment */} +
+ {/* A comment at the end */} + {/* A second comment at the end */} +
+); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/adds-appropriate-newlines-when-using-spread-attribute/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/adds-appropriate-newlines-when-using-spread-attribute/input.js new file mode 100644 index 0000000000..e09c3885b7 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/adds-appropriate-newlines-when-using-spread-attribute/input.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/adds-appropriate-newlines-when-using-spread-attribute/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/adds-appropriate-newlines-when-using-spread-attribute/output.js new file mode 100644 index 0000000000..921266525f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/adds-appropriate-newlines-when-using-spread-attribute/output.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ +React.createElement(Component, { ...props, + sound: "moo" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/arrow-functions/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/arrow-functions/input.js new file mode 100644 index 0000000000..146b5b55bc --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/arrow-functions/input.js @@ -0,0 +1,8 @@ +/** @jsxRuntime classic */ +var foo = function () { + return () => ; +}; + +var bar = function () { + return () => ; +}; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/arrow-functions/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/arrow-functions/output.js new file mode 100644 index 0000000000..2319716dfc --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/arrow-functions/output.js @@ -0,0 +1,16 @@ +/** @jsxRuntime classic */ +var foo = function () { + var _this = this; + + return function () { + return React.createElement(_this, null); + }; +}; + +var bar = function () { + var _this2 = this; + + return function () { + return React.createElement(_this2.foo, null); + }; +}; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/assignment/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/assignment/input.js new file mode 100644 index 0000000000..3cfebe4848 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/assignment/input.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +var div = diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/assignment/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/assignment/output.js new file mode 100644 index 0000000000..2d33efe028 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/assignment/output.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ +var div = React.createElement(Component, { ...props, + foo: "bar" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/concatenates-adjacent-string-literals/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/concatenates-adjacent-string-literals/input.js new file mode 100644 index 0000000000..f6bc6c9137 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/concatenates-adjacent-string-literals/input.js @@ -0,0 +1,14 @@ +/** @jsxRuntime classic */ +var x = +
+ foo + {"bar"} + baz +
+ buz + bang +
+ qux + {null} + quack +
diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/concatenates-adjacent-string-literals/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/concatenates-adjacent-string-literals/output.js new file mode 100644 index 0000000000..18a64b8eaa --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/concatenates-adjacent-string-literals/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +var x = React.createElement("div", null, "foo", "bar", "baz", React.createElement("div", null, "buz bang"), "qux", null, "quack"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self-windows/exec.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self-windows/exec.js new file mode 100644 index 0000000000..94ca9d4c3f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self-windows/exec.js @@ -0,0 +1,31 @@ +var actual = transform( + `/** @jsxRuntime classic */ + var x = ( + <> +
+
+
+
+
+
+ + );`, + Object.assign({}, opts, { filename: 'C:\\fake\\path\\mock.js' }) +).code; + +var expected = +`var _jsxFileName = "C:\\\\fake\\\\path\\\\mock.js"; + +/** @jsxRuntime classic */ +var x = React.createElement(React.Fragment, null, React.createElement("div", null, React.createElement("div", { + key: "1" +}), React.createElement("div", { + key: "2", + meow: "wolf" +}), React.createElement("div", { + key: "3" +}), React.createElement("div", { ...props, + key: "4" +})));`; + +expect(actual).toBe(expected); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self-windows/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self-windows/options.json new file mode 100644 index 0000000000..756c676d8e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self-windows/options.json @@ -0,0 +1,15 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "runtime": "automatic" + } + ], + "transform-react-jsx-source", + "transform-react-jsx-self" + ], + "sourceType": "module", + "os": ["win32"], + "throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self/exec.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self/exec.js new file mode 100644 index 0000000000..9806f201de --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self/exec.js @@ -0,0 +1,31 @@ +var actual = transform( + `/** @jsxRuntime classic */ + var x = ( + <> +
+
+
+
+
+
+ + );`, + Object.assign({}, opts, { filename: '/fake/path/mock.js' }) +).code; + +var expected = +`var _jsxFileName = "/fake/path/mock.js"; + +/** @jsxRuntime classic */ +var x = React.createElement(React.Fragment, null, React.createElement("div", null, React.createElement("div", { + key: "1" +}), React.createElement("div", { + key: "2", + meow: "wolf" +}), React.createElement("div", { + key: "3" +}), React.createElement("div", { ...props, + key: "4" +})));`; + +expect(actual).toBe(expected); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self/options.json new file mode 100644 index 0000000000..6803cc2197 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/does-not-add-source-self/options.json @@ -0,0 +1,15 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "runtime": "automatic" + } + ], + "transform-react-jsx-source", + "transform-react-jsx-self" + ], + "sourceType": "module", + "os": ["linux", "darwin"], + "throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/dont-coerce-expression-containers/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/dont-coerce-expression-containers/input.js new file mode 100644 index 0000000000..94a0cf377b --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/dont-coerce-expression-containers/input.js @@ -0,0 +1,6 @@ +/** @jsxRuntime classic */ + + + To get started, edit index.ios.js!!!{"\n"} + Press Cmd+R to reload + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/dont-coerce-expression-containers/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/dont-coerce-expression-containers/output.js new file mode 100644 index 0000000000..4c34d75664 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/dont-coerce-expression-containers/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +React.createElement(Text, null, "To get started, edit index.ios.js!!!", "\n", "Press Cmd+R to reload"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/input.js new file mode 100644 index 0000000000..69fe030d07 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/input.js @@ -0,0 +1,9 @@ +/** @jsx dom */ +/** @jsxRuntime classic */ + +; + +var profile =
+ +

{[user.firstName, user.lastName].join(" ")}

+
; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/options.json new file mode 100644 index 0000000000..3ad1bbd803 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-react-jsx", { "pragma": "foo.bar", "runtime": "automatic" }] + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/output.js new file mode 100644 index 0000000000..8a16fa51ad --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment-if-jsx-pragma-option-set/output.js @@ -0,0 +1,8 @@ +/** @jsx dom */ + +/** @jsxRuntime classic */ +dom(Foo, null); +var profile = dom("div", null, dom("img", { + src: "avatar.png", + className: "profile" +}), dom("h3", null, [user.firstName, user.lastName].join(" "))); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment/input.js new file mode 100644 index 0000000000..69fe030d07 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment/input.js @@ -0,0 +1,9 @@ +/** @jsx dom */ +/** @jsxRuntime classic */ + +; + +var profile =
+ +

{[user.firstName, user.lastName].join(" ")}

+
; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment/output.js new file mode 100644 index 0000000000..8a16fa51ad --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-comment/output.js @@ -0,0 +1,8 @@ +/** @jsx dom */ + +/** @jsxRuntime classic */ +dom(Foo, null); +var profile = dom("div", null, dom("img", { + src: "avatar.png", + className: "profile" +}), dom("h3", null, [user.firstName, user.lastName].join(" "))); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/input.js new file mode 100644 index 0000000000..3ddd98910a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/input.js @@ -0,0 +1,8 @@ +/** @jsxRuntime classic */ + +; + +var profile =
+ +

{[user.firstName, user.lastName].join(" ")}

+
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/options.json new file mode 100644 index 0000000000..b2f377aecd --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-react-jsx", { "pragma": "dom", "runtime": "automatic" }] + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/output.js new file mode 100644 index 0000000000..901d0380b4 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/honor-custom-jsx-pragma-option/output.js @@ -0,0 +1,6 @@ +/** @jsxRuntime classic */ +dom(Foo, null); +var profile = dom("div", null, dom("img", { + src: "avatar.png", + className: "profile" +}), dom("h3", null, [user.firstName, user.lastName].join(" "))); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/input.js new file mode 100644 index 0000000000..7925155a5f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var div =
test
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/options.json new file mode 100644 index 0000000000..97925bbcb6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/options.json @@ -0,0 +1,3 @@ +{ + "retainLines": true +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/output.js new file mode 100644 index 0000000000..f356827adf --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-with-retainlines-option/output.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var div = React.createElement("div", null, "test"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-without-retainlines-option/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-without-retainlines-option/input.js new file mode 100644 index 0000000000..7925155a5f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-without-retainlines-option/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var div =
test
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-without-retainlines-option/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-without-retainlines-option/output.js new file mode 100644 index 0000000000..2833a1567b --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/jsx-without-retainlines-option/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +var div = React.createElement("div", null, "test"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/options.json new file mode 100644 index 0000000000..a2a30a0fea --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/options.json @@ -0,0 +1,9 @@ +{ + "plugins": [ + "external-helpers", + "syntax-jsx", + ["transform-react-jsx", { "runtime": "automatic" }], + "transform-react-display-name", + "transform-arrow-functions" + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/pragma-works-with-no-space-at-the-end/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/pragma-works-with-no-space-at-the-end/input.js new file mode 100644 index 0000000000..51b521e971 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/pragma-works-with-no-space-at-the-end/input.js @@ -0,0 +1,3 @@ +/* @jsx foo*/ +/* @jsxRuntime classic*/ +
Hi
; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/pragma-works-with-no-space-at-the-end/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/pragma-works-with-no-space-at-the-end/output.js new file mode 100644 index 0000000000..4d728dbbc3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/pragma-works-with-no-space-at-the-end/output.js @@ -0,0 +1,4 @@ +/* @jsx foo*/ + +/* @jsxRuntime classic*/ +foo("div", null, "Hi"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/input.js new file mode 100644 index 0000000000..85136cce1e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var es3 = ; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/options.json new file mode 100644 index 0000000000..05afa82f88 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + ["transform-react-jsx", { "runtime": "automatic" }], + "transform-property-literals" + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/output.js new file mode 100644 index 0000000000..cf80f498ee --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-add-quotes-es3/output.js @@ -0,0 +1,9 @@ +/** @jsxRuntime classic */ +var es3 = React.createElement(F, { + aaa: true, + "new": true, + "const": true, + "var": true, + "default": true, + "foo-bar": true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-constructor-as-prop/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-constructor-as-prop/input.js new file mode 100644 index 0000000000..800405ccf1 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-constructor-as-prop/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-constructor-as-prop/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-constructor-as-prop/output.js new file mode 100644 index 0000000000..1156e9ad21 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-constructor-as-prop/output.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ +React.createElement(Component, { + constructor: "foo" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-deeper-js-namespacing/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-deeper-js-namespacing/input.js new file mode 100644 index 0000000000..b1901371c7 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-deeper-js-namespacing/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-deeper-js-namespacing/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-deeper-js-namespacing/output.js new file mode 100644 index 0000000000..f65f2feac3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-deeper-js-namespacing/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +React.createElement(Namespace.DeepNamespace.Component, null); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-elements-as-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-elements-as-attributes/input.js new file mode 100644 index 0000000000..03e9c398f6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-elements-as-attributes/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +
/> diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-elements-as-attributes/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-elements-as-attributes/output.js new file mode 100644 index 0000000000..857f385cb5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-elements-as-attributes/output.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ +React.createElement("div", { + attr: React.createElement("div", null) +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/blacklist.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/blacklist.js new file mode 100644 index 0000000000..980df45724 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/blacklist.js @@ -0,0 +1 @@ +React.createElement(Namespace.Component, null); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/input.js new file mode 100644 index 0000000000..2efe6a4507 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/output.js new file mode 100644 index 0000000000..fff105f6d0 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-js-namespacing/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +React.createElement(Namespace.Component, null); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-nested-fragments/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-nested-fragments/input.js new file mode 100644 index 0000000000..272313559a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-nested-fragments/input.js @@ -0,0 +1,14 @@ +/** @jsxRuntime classic */ + +
+ < > + <> + Hello + world + + <> + Goodbye + world + + +
diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-nested-fragments/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-nested-fragments/output.js new file mode 100644 index 0000000000..60487d4536 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-nested-fragments/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +React.createElement("div", null, React.createElement(React.Fragment, null, React.createElement(React.Fragment, null, React.createElement("span", null, "Hello"), React.createElement("span", null, "world")), React.createElement(React.Fragment, null, React.createElement("span", null, "Goodbye"), React.createElement("span", null, "world")))); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-no-pragmafrag-if-frag-unused/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-no-pragmafrag-if-frag-unused/input.js new file mode 100644 index 0000000000..6502862189 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-no-pragmafrag-if-frag-unused/input.js @@ -0,0 +1,4 @@ +/** @jsx dom */ +/** @jsxRuntime classic */ + +
no fragment is used
diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-no-pragmafrag-if-frag-unused/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-no-pragmafrag-if-frag-unused/output.js new file mode 100644 index 0000000000..7bee4e0fd6 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-no-pragmafrag-if-frag-unused/output.js @@ -0,0 +1,4 @@ +/** @jsx dom */ + +/** @jsxRuntime classic */ +dom("div", null, "no fragment is used"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-pragmafrag-and-frag/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-pragmafrag-and-frag/input.js new file mode 100644 index 0000000000..1935a8d935 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-pragmafrag-and-frag/input.js @@ -0,0 +1,5 @@ +/** @jsx dom */ +/** @jsxFrag DomFrag */ +/** @jsxRuntime classic */ + +<> diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-pragmafrag-and-frag/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-pragmafrag-and-frag/output.js new file mode 100644 index 0000000000..3de4670bb1 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-allow-pragmafrag-and-frag/output.js @@ -0,0 +1,6 @@ +/** @jsx dom */ + +/** @jsxFrag DomFrag */ + +/** @jsxRuntime classic */ +dom(DomFrag, null); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js new file mode 100644 index 0000000000..96e5ee53a3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js @@ -0,0 +1,17 @@ +/** @jsxRuntime classic */ + +var x =
+ +
; + +var x =
+ {props.children} +
; + +var x = + {props.children} +; + +var x = + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-avoid-wrapping-in-extra-parens-if-not-needed/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-avoid-wrapping-in-extra-parens-if-not-needed/output.js new file mode 100644 index 0000000000..09e7376748 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-avoid-wrapping-in-extra-parens-if-not-needed/output.js @@ -0,0 +1,5 @@ +/** @jsxRuntime classic */ +var x = React.createElement("div", null, React.createElement(Component, null)); +var x = React.createElement("div", null, props.children); +var x = React.createElement(Composite, null, props.children); +var x = React.createElement(Composite, null, React.createElement(Composite2, null)); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-tags/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-tags/input.js new file mode 100644 index 0000000000..b44c9df498 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-tags/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var x =
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-tags/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-tags/output.js new file mode 100644 index 0000000000..381438c5ff --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-tags/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +var x = React.createElement("div", null); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-text/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-text/input.js new file mode 100644 index 0000000000..58ce60409d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-text/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var x =
text
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-text/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-text/output.js new file mode 100644 index 0000000000..de532be0e8 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-convert-simple-text/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +var x = React.createElement("div", null, "text"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-spread-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-spread-children/input.js new file mode 100644 index 0000000000..f038248817 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-spread-children/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +
{...children}
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-spread-children/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-spread-children/options.json new file mode 100644 index 0000000000..bcb773e343 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-spread-children/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Spread children are not supported in React." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-xml-namespacing/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-xml-namespacing/input.js new file mode 100644 index 0000000000..bf7dfa85e4 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-xml-namespacing/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-xml-namespacing/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-xml-namespacing/options.json new file mode 100644 index 0000000000..746037e9f5 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-disallow-xml-namespacing/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxattribute/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxattribute/input.js new file mode 100644 index 0000000000..e2bf4e81ff --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxattribute/input.js @@ -0,0 +1,5 @@ +/** @jsxRuntime classic */ + +
; +
; +
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxattribute/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxattribute/output.js new file mode 100644 index 0000000000..62d7d5b7b3 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxattribute/output.js @@ -0,0 +1,10 @@ +/** @jsxRuntime classic */ +React.createElement("div", { + id: "w\xF4w" +}); +React.createElement("div", { + id: "\\w" +}); +React.createElement("div", { + id: "w < w" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxtext/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxtext/input.js new file mode 100644 index 0000000000..c8ace08745 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxtext/input.js @@ -0,0 +1,14 @@ +/** @jsxRuntime classic */ + +
wow
; +
wôw
; + +
w & w
; +
w & w
; + +
w   w
; +
this should not parse as unicode: \u00a0
; +
this should parse as nbsp:  
; +
this should parse as unicode: {'\u00a0 '}
; + +
w < w
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxtext/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxtext/output.js new file mode 100644 index 0000000000..f454df922d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-escape-xhtml-jsxtext/output.js @@ -0,0 +1,10 @@ +/** @jsxRuntime classic */ +React.createElement("div", null, "wow"); +React.createElement("div", null, "w\xF4w"); +React.createElement("div", null, "w & w"); +React.createElement("div", null, "w & w"); +React.createElement("div", null, "w \xA0 w"); +React.createElement("div", null, "this should not parse as unicode: \\u00a0"); +React.createElement("div", null, "this should parse as nbsp: \xA0 "); +React.createElement("div", null, "this should parse as unicode: ", '\u00a0 '); +React.createElement("div", null, "w < w"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-attributed-elements/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-attributed-elements/input.js new file mode 100644 index 0000000000..d988773463 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-attributed-elements/input.js @@ -0,0 +1,13 @@ +/** @jsxRuntime classic */ + +var HelloMessage = React.createClass({ + render: function() { + return
Hello {this.props.name}
; + } +}); + +React.render( + Sebastian + +} />, mountNode); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-attributed-elements/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-attributed-elements/output.js new file mode 100644 index 0000000000..1243c0396c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-attributed-elements/output.js @@ -0,0 +1,10 @@ +/** @jsxRuntime classic */ +var HelloMessage = React.createClass({ + displayName: "HelloMessage", + render: function () { + return React.createElement("div", null, "Hello ", this.props.name); + } +}); +React.render(React.createElement(HelloMessage, { + name: React.createElement("span", null, "Sebastian") +}), mountNode); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-has-own-property-correctly/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-has-own-property-correctly/input.js new file mode 100644 index 0000000000..ae52aae15d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-has-own-property-correctly/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +testing; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-has-own-property-correctly/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-has-own-property-correctly/output.js new file mode 100644 index 0000000000..6712b7d9ed --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-handle-has-own-property-correctly/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +React.createElement("hasOwnProperty", null, "testing"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-have-correct-comma-in-nested-children/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-have-correct-comma-in-nested-children/input.js new file mode 100644 index 0000000000..e52b86a63c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-have-correct-comma-in-nested-children/input.js @@ -0,0 +1,7 @@ +/** @jsxRuntime classic */ + +var x =
+

+ {foo}
{bar}
+
+
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-have-correct-comma-in-nested-children/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-have-correct-comma-in-nested-children/output.js new file mode 100644 index 0000000000..dbf0abc890 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-have-correct-comma-in-nested-children/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +var x = React.createElement("div", null, React.createElement("div", null, React.createElement("br", null)), React.createElement(Component, null, foo, React.createElement("br", null), bar), React.createElement("br", null)); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-insert-commas-after-expressions-before-whitespace/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-insert-commas-after-expressions-before-whitespace/input.js new file mode 100644 index 0000000000..0ae0d87be7 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-insert-commas-after-expressions-before-whitespace/input.js @@ -0,0 +1,18 @@ +/** @jsxRuntime classic */ + +var x = +
+
diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-insert-commas-after-expressions-before-whitespace/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-insert-commas-after-expressions-before-whitespace/output.js new file mode 100644 index 0000000000..6b74708096 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-insert-commas-after-expressions-before-whitespace/output.js @@ -0,0 +1,7 @@ +/** @jsxRuntime classic */ +var x = React.createElement("div", { + attr1: "foo" + "bar", + attr2: "foo" + "bar" + "baz" + "bug", + attr3: "foo" + "bar" + "baz" + "bug", + attr4: "baz" +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-add-quotes-to-identifier-names/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-add-quotes-to-identifier-names/input.js new file mode 100644 index 0000000000..46d290d40a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-add-quotes-to-identifier-names/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var e = ; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-add-quotes-to-identifier-names/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-add-quotes-to-identifier-names/output.js new file mode 100644 index 0000000000..316e48957b --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-add-quotes-to-identifier-names/output.js @@ -0,0 +1,9 @@ +/** @jsxRuntime classic */ +var e = React.createElement(F, { + aaa: true, + new: true, + const: true, + var: true, + default: true, + "foo-bar": true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-mangle-expressioncontainer-attribute-values/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-mangle-expressioncontainer-attribute-values/input.js new file mode 100644 index 0000000000..ae5c7e9ea9 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-mangle-expressioncontainer-attribute-values/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-mangle-expressioncontainer-attribute-values/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-mangle-expressioncontainer-attribute-values/output.js new file mode 100644 index 0000000000..f4b00c3114 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-mangle-expressioncontainer-attribute-values/output.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ +React.createElement("button", { + "data-value": "a value\n with\nnewlines\n and spaces" +}, "Button"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js new file mode 100644 index 0000000000..789953ea0e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +
 
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-nbsp-even-coupled-with-other-whitespace/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-nbsp-even-coupled-with-other-whitespace/output.js new file mode 100644 index 0000000000..4d0d07b347 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-nbsp-even-coupled-with-other-whitespace/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +React.createElement("div", null, "\xA0 "); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-tags-with-a-single-child-of-nbsp/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-tags-with-a-single-child-of-nbsp/input.js new file mode 100644 index 0000000000..f6f9afef72 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-tags-with-a-single-child-of-nbsp/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +
 
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-tags-with-a-single-child-of-nbsp/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-tags-with-a-single-child-of-nbsp/output.js new file mode 100644 index 0000000000..bddba3c736 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-not-strip-tags-with-a-single-child-of-nbsp/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +React.createElement("div", null, "\xA0"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-properly-handle-comments-between-props/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-properly-handle-comments-between-props/input.js new file mode 100644 index 0000000000..2e3a655a52 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-properly-handle-comments-between-props/input.js @@ -0,0 +1,12 @@ +/** @jsxRuntime classic */ + +var x = ( +
+ +
+); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-properly-handle-comments-between-props/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-properly-handle-comments-between-props/output.js new file mode 100644 index 0000000000..3b70990d4a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-properly-handle-comments-between-props/output.js @@ -0,0 +1,9 @@ +/** @jsxRuntime classic */ +var x = React.createElement("div", { + /* a multi-line + comment */ + attr1: "foo" +}, React.createElement("span", { + // a double-slash comment + attr2: "bar" +})); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-quote-jsx-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-quote-jsx-attributes/input.js new file mode 100644 index 0000000000..399eddb8b4 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-quote-jsx-attributes/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-quote-jsx-attributes/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-quote-jsx-attributes/output.js new file mode 100644 index 0000000000..3c85b458ca --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-quote-jsx-attributes/output.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ +React.createElement("button", { + "data-value": "a value" +}, "Button"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/input.js new file mode 100644 index 0000000000..c5de49d376 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/options.json new file mode 100644 index 0000000000..c5af191ffe --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/options.json @@ -0,0 +1,12 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "pragma": "h", + "throwIfNamespace": false, + "runtime": "automatic" + } + ] + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/output.js new file mode 100644 index 0000000000..4ffc02d7cd --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-support-xml-namespaces-if-flag/output.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ +h("f:image", { + "n:attr": true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-throw-error-namespaces-if-not-flag/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-throw-error-namespaces-if-not-flag/input.js new file mode 100644 index 0000000000..2734035ec0 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-throw-error-namespaces-if-not-flag/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-throw-error-namespaces-if-not-flag/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-throw-error-namespaces-if-not-flag/options.json new file mode 100644 index 0000000000..426249807e --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-throw-error-namespaces-if-not-flag/options.json @@ -0,0 +1,12 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "pragma": "h", + "throwIfNamespace": true + } + ] + ], + "throws": "Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-transform-known-hyphenated-tags/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-transform-known-hyphenated-tags/input.js new file mode 100644 index 0000000000..65294a1b6c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-transform-known-hyphenated-tags/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-transform-known-hyphenated-tags/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-transform-known-hyphenated-tags/output.js new file mode 100644 index 0000000000..fba27cd617 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-transform-known-hyphenated-tags/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +React.createElement("font-face", null); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-is-set/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-is-set/input.js new file mode 100644 index 0000000000..7925155a5f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-is-set/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var div =
test
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-is-set/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-is-set/options.json new file mode 100644 index 0000000000..2c19d76eee --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-is-set/options.json @@ -0,0 +1,13 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "runtime": "automatic", + "importSource": "foo" + } + ] + ], + "sourceType": "module", + "throws": "importSource cannot be set when runtime is classic." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-pragma-is-set/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-pragma-is-set/input.js new file mode 100644 index 0000000000..8d4d4fb301 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-pragma-is-set/input.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ +/** @jsxImportSource foo */ + +var div =
test
; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-pragma-is-set/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-pragma-is-set/options.json new file mode 100644 index 0000000000..a25dd07e91 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/should-warn-when-importSource-pragma-is-set/options.json @@ -0,0 +1,3 @@ +{ + "throws": "importSource cannot be set when runtime is classic." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/this-tag-name/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/this-tag-name/input.js new file mode 100644 index 0000000000..dff2c5b0e8 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/this-tag-name/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var div = test; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/this-tag-name/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/this-tag-name/output.js new file mode 100644 index 0000000000..6d648121ef --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/this-tag-name/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +var div = React.createElement(this.foo, null, "test"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/throw-if-pragma-set-but-not-pragmafrag-and-frag-used/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/throw-if-pragma-set-but-not-pragmafrag-and-frag-used/input.js new file mode 100644 index 0000000000..c361fa6b7a --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/throw-if-pragma-set-but-not-pragmafrag-and-frag-used/input.js @@ -0,0 +1,5 @@ +/** @jsx dom */ +/** @jsxRuntime classic */ + + +<> diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/throw-if-pragma-set-but-not-pragmafrag-and-frag-used/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/throw-if-pragma-set-but-not-pragmafrag-and-frag-used/options.json new file mode 100644 index 0000000000..1bfb659b3c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/throw-if-pragma-set-but-not-pragmafrag-and-frag-used/options.json @@ -0,0 +1,3 @@ +{ + "throws": "transform-react-jsx: pragma has been set but pragmaFrag has not been set" +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-first-spread-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-first-spread-attributes/input.js new file mode 100644 index 0000000000..e9ada7436f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-first-spread-attributes/input.js @@ -0,0 +1,4 @@ +/** @jsxRuntime classic */ + + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-first-spread-attributes/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-first-spread-attributes/output.js new file mode 100644 index 0000000000..453b9b393f --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-first-spread-attributes/output.js @@ -0,0 +1,5 @@ +/** @jsxRuntime classic */ +React.createElement(Component, { ...x, + y: 2, + z: true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-last-spread-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-last-spread-attributes/input.js new file mode 100644 index 0000000000..547ac8c773 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-last-spread-attributes/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-last-spread-attributes/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-last-spread-attributes/output.js new file mode 100644 index 0000000000..456f978e69 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-last-spread-attributes/output.js @@ -0,0 +1,6 @@ +/** @jsxRuntime classic */ +React.createElement(Component, { + y: 2, + z: true, + ...x +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-middle-spread-attributes/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-middle-spread-attributes/input.js new file mode 100644 index 0000000000..592896ed56 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-middle-spread-attributes/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + + diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-middle-spread-attributes/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-middle-spread-attributes/output.js new file mode 100644 index 0000000000..db55c968cf --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/nextReactClassic/wraps-props-in-react-spread-for-middle-spread-attributes/output.js @@ -0,0 +1,6 @@ +/** @jsxRuntime classic */ +React.createElement(Component, { + y: 2, + ...x, + z: true +}); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/pragma-works-with-no-space-at-the-end/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/pragma-works-with-no-space-at-the-end/input.js new file mode 100644 index 0000000000..1a449a8487 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/pragma-works-with-no-space-at-the-end/input.js @@ -0,0 +1,2 @@ +/* @jsx foo*/ +
Hi
; \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/pragma-works-with-no-space-at-the-end/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/pragma-works-with-no-space-at-the-end/output.js new file mode 100644 index 0000000000..31b6fe25a4 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/pragma-works-with-no-space-at-the-end/output.js @@ -0,0 +1,2 @@ +/* @jsx foo*/ +foo("div", null, "Hi"); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/should-disallow-xml-namespacing/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/should-disallow-xml-namespacing/options.json index 8285c733a0..746037e9f5 100644 --- a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/should-disallow-xml-namespacing/options.json +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/should-disallow-xml-namespacing/options.json @@ -1,3 +1,3 @@ { - "throws": "Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can turn on the 'throwIfNamespace' flag to bypass this warning." + "throws": "Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning." } diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/should-throw-error-namespaces-if-not-flag/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/should-throw-error-namespaces-if-not-flag/options.json index 261ae77277..426249807e 100644 --- a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/should-throw-error-namespaces-if-not-flag/options.json +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/should-throw-error-namespaces-if-not-flag/options.json @@ -8,5 +8,5 @@ } ] ], - "throws": "Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can turn on the 'throwIfNamespace' flag to bypass this warning." + "throws": "Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning." } diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/input.js new file mode 100644 index 0000000000..6a6f1f219c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/input.js @@ -0,0 +1 @@ +var x = (
); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/options.json new file mode 100644 index 0000000000..d160ab6860 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/options.json @@ -0,0 +1,3 @@ +{ + "plugins": [["transform-react-jsx", { "runtime": "classic" }]] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/output.js new file mode 100644 index 0000000000..0e2ff2c53c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/classic/output.js @@ -0,0 +1 @@ +var x = React.createElement("div", null, React.createElement("span", null)); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/input.js new file mode 100644 index 0000000000..6a6f1f219c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/input.js @@ -0,0 +1 @@ +var x = (
); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/options.json new file mode 100644 index 0000000000..4f654b8206 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-react-jsx"] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/output.js new file mode 100644 index 0000000000..0e2ff2c53c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/defaults-to-classic/output.js @@ -0,0 +1 @@ +var x = React.createElement("div", null, React.createElement("span", null)); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/invalid-runtime/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/invalid-runtime/input.js new file mode 100644 index 0000000000..6a6f1f219c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/invalid-runtime/input.js @@ -0,0 +1 @@ +var x = (
); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/invalid-runtime/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/invalid-runtime/options.json new file mode 100644 index 0000000000..2fb8c2b01d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/invalid-runtime/options.json @@ -0,0 +1,4 @@ +{ + "plugins": [["transform-react-jsx", { "runtime": "invalidOption" }]], + "throws": "Runtime must be either \"classic\" or \"automatic\"." +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/input.js new file mode 100644 index 0000000000..0b5717e407 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/input.js @@ -0,0 +1,3 @@ +/** @jsxRuntime classic */ + +var x = (
); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/options.json new file mode 100644 index 0000000000..e963e89a9c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/options.json @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "runtime": "automatic" + } + ] + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/output.js new file mode 100644 index 0000000000..6858ec8240 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/pragma-runtime-classsic/output.js @@ -0,0 +1,2 @@ +/** @jsxRuntime classic */ +var x = React.createElement("div", null, React.createElement("span", null)); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/input.js new file mode 100644 index 0000000000..6a6f1f219c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/input.js @@ -0,0 +1 @@ +var x = (
); \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/options.json new file mode 100644 index 0000000000..e963e89a9c --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/options.json @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "transform-react-jsx", + { + "runtime": "automatic" + } + ] + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/output.js new file mode 100644 index 0000000000..969d29e3a9 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/runtime/runtime-automatic/output.js @@ -0,0 +1,5 @@ +var _reactJsxRuntime = require("react/jsx-runtime"); + +var x = _reactJsxRuntime.jsx("div", { + children: _reactJsxRuntime.jsx("span", {}) +}); diff --git a/packages/babel-preset-react/package.json b/packages/babel-preset-react/package.json index ef7f424bee..8f591db6de 100644 --- a/packages/babel-preset-react/package.json +++ b/packages/babel-preset-react/package.json @@ -14,6 +14,7 @@ "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", "@babel/plugin-transform-react-jsx": "^7.8.3", + "@babel/plugin-transform-react-jsx-development": "^7.8.3", "@babel/plugin-transform-react-jsx-self": "^7.8.3", "@babel/plugin-transform-react-jsx-source": "^7.8.3" }, diff --git a/packages/babel-preset-react/src/index.js b/packages/babel-preset-react/src/index.js index aaf358ea59..58c7f9028b 100644 --- a/packages/babel-preset-react/src/index.js +++ b/packages/babel-preset-react/src/index.js @@ -1,5 +1,6 @@ import { declare } from "@babel/helper-plugin-utils"; import transformReactJSX from "@babel/plugin-transform-react-jsx"; +import transformReactJSXDevelopment from "@babel/plugin-transform-react-jsx-development"; import transformReactDisplayName from "@babel/plugin-transform-react-display-name"; import transformReactJSXSource from "@babel/plugin-transform-react-jsx-source"; import transformReactJSXSelf from "@babel/plugin-transform-react-jsx-self"; @@ -7,13 +8,15 @@ import transformReactJSXSelf from "@babel/plugin-transform-react-jsx-self"; export default declare((api, opts) => { api.assertVersion(7); - const pragma = opts.pragma || "React.createElement"; - const pragmaFrag = opts.pragmaFrag || "React.Fragment"; + const pragma = opts.pragma; + const pragmaFrag = opts.pragmaFrag; const throwIfNamespace = opts.throwIfNamespace === undefined ? true : !!opts.throwIfNamespace; const development = !!opts.development; const useBuiltIns = !!opts.useBuiltIns; const { useSpread } = opts; + const runtime = opts.runtime || "classic"; + const importSource = opts.importSource; if (typeof development !== "boolean") { throw new Error( @@ -21,16 +24,29 @@ export default declare((api, opts) => { ); } + const transformReactJSXPlugin = + runtime === "automatic" && development + ? transformReactJSXDevelopment + : transformReactJSX; + return { plugins: [ [ - transformReactJSX, - { pragma, pragmaFrag, throwIfNamespace, useBuiltIns, useSpread }, + transformReactJSXPlugin, + { + importSource, + pragma, + pragmaFrag, + runtime, + throwIfNamespace, + useBuiltIns, + useSpread, + }, ], transformReactDisplayName, - development && transformReactJSXSource, - development && transformReactJSXSelf, + development && runtime === "classic" && transformReactJSXSource, + development && runtime === "classic" && transformReactJSXSelf, ].filter(Boolean), }; }); diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/input.js b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/input.js new file mode 100644 index 0000000000..378e2ae67b --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/input.js @@ -0,0 +1 @@ + diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/options.json b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/options.json new file mode 100644 index 0000000000..5ad045f3cc --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/options.json @@ -0,0 +1,4 @@ +{ + "presets": [["react", { "runtime": "automatic", "development": true }]], + "os": ["win32"] +} diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/output.js b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/output.js new file mode 100644 index 0000000000..7a4bd1d2e9 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic-windows/output.js @@ -0,0 +1,11 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-preset-react\\test\\fixtures\\preset-options\\development-runtime-automatic-windows\\input.js"; + +_reactJsxDevRuntime.jsxDEV(Foo, { + bar: "baz" +}, void 0, false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 1 +}, this); diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/input.js b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/input.js new file mode 100644 index 0000000000..378e2ae67b --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/input.js @@ -0,0 +1 @@ + diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/options.json b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/options.json new file mode 100644 index 0000000000..afe69b43a8 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/options.json @@ -0,0 +1,4 @@ +{ + "presets": [["react", { "runtime": "automatic", "development": true }]], + "os": ["linux", "darwin"] +} diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/output.js b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/output.js new file mode 100644 index 0000000000..4f7997f3b0 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/output.js @@ -0,0 +1,11 @@ +var _reactJsxDevRuntime = require("react/jsx-dev-runtime"); + +var _jsxFileName = "/packages/babel-preset-react/test/fixtures/preset-options/development-runtime-automatic/input.js"; + +_reactJsxDevRuntime.jsxDEV(Foo, { + bar: "baz" +}, void 0, false, { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 1 +}, this); diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/input.js b/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/input.js new file mode 100644 index 0000000000..378e2ae67b --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/input.js @@ -0,0 +1 @@ + diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/options.json b/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/options.json new file mode 100644 index 0000000000..f9d93007e6 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/options.json @@ -0,0 +1,3 @@ +{ + "presets": [["react", { "runtime": "automatic" }]] +} diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/output.js b/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/output.js new file mode 100644 index 0000000000..cad915782e --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-automatic/output.js @@ -0,0 +1,5 @@ +var _reactJsxRuntime = require("react/jsx-runtime"); + +_reactJsxRuntime.jsx(Foo, { + bar: "baz" +}); diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/input.js b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/input.js new file mode 100644 index 0000000000..378e2ae67b --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/input.js @@ -0,0 +1 @@ + diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/options.json b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/options.json new file mode 100644 index 0000000000..feb8a2e82f --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/options.json @@ -0,0 +1,3 @@ +{ + "presets": [["react", { "runtime": "classic" }]] +} diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/output.js b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/output.js new file mode 100644 index 0000000000..835263a79b --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic/output.js @@ -0,0 +1,3 @@ +React.createElement(Foo, { + bar: "baz" +}); diff --git a/packages/babel-standalone/package.json b/packages/babel-standalone/package.json index cd2e5e0619..81029770dc 100644 --- a/packages/babel-standalone/package.json +++ b/packages/babel-standalone/package.json @@ -87,6 +87,7 @@ "@babel/plugin-transform-react-inline-elements": "^7.8.3", "@babel/plugin-transform-react-jsx": "^7.8.3", "@babel/plugin-transform-react-jsx-compat": "^7.8.3", + "@babel/plugin-transform-react-jsx-development": "^7.8.3", "@babel/plugin-transform-react-jsx-self": "^7.8.3", "@babel/plugin-transform-react-jsx-source": "^7.8.3", "@babel/plugin-transform-regenerator": "^7.8.7", diff --git a/packages/babel-standalone/scripts/pluginConfig.json b/packages/babel-standalone/scripts/pluginConfig.json index 9d58160962..c8f4003254 100644 --- a/packages/babel-standalone/scripts/pluginConfig.json +++ b/packages/babel-standalone/scripts/pluginConfig.json @@ -73,6 +73,7 @@ "transform-react-inline-elements", "transform-react-jsx", "transform-react-jsx-compat", + "transform-react-jsx-development", "transform-react-jsx-self", "transform-react-jsx-source", "transform-regenerator", diff --git a/packages/babel-standalone/src/generated/plugins.js b/packages/babel-standalone/src/generated/plugins.js index 313ccd07bb..dac39efb82 100644 --- a/packages/babel-standalone/src/generated/plugins.js +++ b/packages/babel-standalone/src/generated/plugins.js @@ -77,6 +77,7 @@ import transformReactDisplayName from "@babel/plugin-transform-react-display-nam import transformReactInlineElements from "@babel/plugin-transform-react-inline-elements"; import transformReactJsx from "@babel/plugin-transform-react-jsx"; import transformReactJsxCompat from "@babel/plugin-transform-react-jsx-compat"; +import transformReactJsxDevelopment from "@babel/plugin-transform-react-jsx-development"; import transformReactJsxSelf from "@babel/plugin-transform-react-jsx-self"; import transformReactJsxSource from "@babel/plugin-transform-react-jsx-source"; import transformRegenerator from "@babel/plugin-transform-regenerator"; @@ -166,6 +167,7 @@ export { transformReactInlineElements, transformReactJsx, transformReactJsxCompat, + transformReactJsxDevelopment, transformReactJsxSelf, transformReactJsxSource, transformRegenerator, @@ -256,6 +258,7 @@ export const all = { "transform-react-inline-elements": transformReactInlineElements, "transform-react-jsx": transformReactJsx, "transform-react-jsx-compat": transformReactJsxCompat, + "transform-react-jsx-development": transformReactJsxDevelopment, "transform-react-jsx-self": transformReactJsxSelf, "transform-react-jsx-source": transformReactJsxSource, "transform-regenerator": transformRegenerator,