diff --git a/Gulpfile.mjs b/Gulpfile.mjs index 3e59276b4d69..2abc07253411 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -22,6 +22,7 @@ import glob from "glob"; import { resolve as importMetaResolve } from "import-meta-resolve"; import rollupBabelSource from "./scripts/rollup-plugin-babel-source.js"; +import rollupStandaloneInternals from "./scripts/rollup-plugin-standalone-internals.js"; import formatCode from "./scripts/utils/formatCode.js"; import { log } from "./scripts/utils/logger.cjs"; @@ -175,6 +176,8 @@ async function generateRuntimeHelpers() { ); } +const kebabToCamel = str => str.replace(/-[a-z]/g, c => c[1].toUpperCase()); + function generateStandalone() { const dest = "./packages/babel-standalone/src/generated/"; return gulp @@ -183,16 +186,21 @@ function generateStandalone() { through.obj((file, enc, callback) => { log("Generating @babel/standalone files"); const pluginConfig = JSON.parse(file.contents); - let imports = ""; - let list = ""; + let imports = `import makeNoopPlugin from "../make-noop-plugin";`; + let exportDecls = ""; + let exportsList = ""; let allList = ""; - for (const plugin of pluginConfig) { - const camelPlugin = plugin.replace(/-[a-z]/g, c => - c[1].toUpperCase() - ); + for (const plugin of pluginConfig.noopPlugins) { + const camelPlugin = kebabToCamel(plugin); + exportDecls += `${camelPlugin} = makeNoopPlugin(),`; + allList += `"${plugin}": ${camelPlugin},`; + } + + for (const plugin of pluginConfig.externalPlugins) { + const camelPlugin = kebabToCamel(plugin); imports += `import ${camelPlugin} from "@babel/plugin-${plugin}";`; - list += `${camelPlugin},`; + exportsList += `${camelPlugin},`; allList += `"${plugin}": ${camelPlugin},`; } @@ -201,7 +209,8 @@ function generateStandalone() { * To re-generate run 'yarn gulp generate-standalone' */ ${imports} -export {${list}}; +export const ${exportDecls.slice(0, -1)}; +export {${exportsList}}; export const all: { [k: string]: any } = {${allList}};`; file.path = "plugins.ts"; file.contents = Buffer.from(formatCode(fileContents, dest)); @@ -385,6 +394,7 @@ function buildRollup(packages, buildStandalone) { throw new Error("Rollup aborted due to warnings above"); }, plugins: [ + buildStandalone && rollupStandaloneInternals(), rollupBabelSource(), rollupReplace({ preventAssignment: true, diff --git a/packages/babel-core/src/parser/util/missing-plugin-helper.ts b/packages/babel-core/src/parser/util/missing-plugin-helper.ts index 7726dcd6aaf2..08df50beba2c 100644 --- a/packages/babel-core/src/parser/util/missing-plugin-helper.ts +++ b/packages/babel-core/src/parser/util/missing-plugin-helper.ts @@ -8,46 +8,6 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-do-expressions", }, }, - classProperties: { - syntax: { - name: "@babel/plugin-syntax-class-properties", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties", - }, - transform: { - name: "@babel/plugin-proposal-class-properties", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-class-properties", - }, - }, - classPrivateProperties: { - syntax: { - name: "@babel/plugin-syntax-class-properties", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties", - }, - transform: { - name: "@babel/plugin-proposal-class-properties", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-class-properties", - }, - }, - classPrivateMethods: { - syntax: { - name: "@babel/plugin-syntax-class-properties", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties", - }, - transform: { - name: "@babel/plugin-proposal-private-methods", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-private-methods", - }, - }, - classStaticBlock: { - syntax: { - name: "@babel/plugin-syntax-class-static-block", - url: "https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-syntax-class-static-block", - }, - transform: { - name: "@babel/plugin-proposal-class-static-block", - url: "https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-class-static-block", - }, - }, decimal: { syntax: { name: "@babel/plugin-syntax-decimal", @@ -74,12 +34,6 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-do-expressions", }, }, - dynamicImport: { - syntax: { - name: "@babel/plugin-syntax-dynamic-import", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-dynamic-import", - }, - }, exportDefaultFrom: { syntax: { name: "@babel/plugin-syntax-export-default-from", @@ -90,16 +44,6 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-default-from", }, }, - exportNamespaceFrom: { - syntax: { - name: "@babel/plugin-syntax-export-namespace-from", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-namespace-from", - }, - transform: { - name: "@babel/plugin-proposal-export-namespace-from", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-namespace-from", - }, - }, flow: { syntax: { name: "@babel/plugin-syntax-flow", @@ -130,12 +74,6 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-sent", }, }, - importMeta: { - syntax: { - name: "@babel/plugin-syntax-import-meta", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-meta", - }, - }, jsx: { syntax: { name: "@babel/plugin-syntax-jsx", @@ -152,32 +90,6 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-assertions", }, }, - moduleStringNames: { - syntax: { - name: "@babel/plugin-syntax-module-string-names", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-module-string-names", - }, - }, - numericSeparator: { - syntax: { - name: "@babel/plugin-syntax-numeric-separator", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-numeric-separator", - }, - transform: { - name: "@babel/plugin-proposal-numeric-separator", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-numeric-separator", - }, - }, - optionalChaining: { - syntax: { - name: "@babel/plugin-syntax-optional-chaining", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-chaining", - }, - transform: { - name: "@babel/plugin-proposal-optional-chaining", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-optional-chaining", - }, - }, pipelineOperator: { syntax: { name: "@babel/plugin-syntax-pipeline-operator", @@ -188,16 +100,6 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-pipeline-operator", }, }, - privateIn: { - syntax: { - name: "@babel/plugin-syntax-private-property-in-object", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-private-property-in-object", - }, - transform: { - name: "@babel/plugin-proposal-private-property-in-object", - url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-private-property-in-object", - }, - }, recordAndTuple: { syntax: { name: "@babel/plugin-syntax-record-and-tuple", @@ -249,6 +151,68 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-async-generator-functions", }, }, + classProperties: { + syntax: { + name: "@babel/plugin-syntax-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties", + }, + transform: { + name: "@babel/plugin-proposal-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-class-properties", + }, + }, + classPrivateProperties: { + syntax: { + name: "@babel/plugin-syntax-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties", + }, + transform: { + name: "@babel/plugin-proposal-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-class-properties", + }, + }, + classPrivateMethods: { + syntax: { + name: "@babel/plugin-syntax-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties", + }, + transform: { + name: "@babel/plugin-proposal-private-methods", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-private-methods", + }, + }, + classStaticBlock: { + syntax: { + name: "@babel/plugin-syntax-class-static-block", + url: "https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-syntax-class-static-block", + }, + transform: { + name: "@babel/plugin-proposal-class-static-block", + url: "https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-class-static-block", + }, + }, + dynamicImport: { + syntax: { + name: "@babel/plugin-syntax-dynamic-import", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-dynamic-import", + }, + }, + exportNamespaceFrom: { + syntax: { + name: "@babel/plugin-syntax-export-namespace-from", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-namespace-from", + }, + transform: { + name: "@babel/plugin-proposal-export-namespace-from", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-namespace-from", + }, + }, + importMeta: { + syntax: { + name: "@babel/plugin-syntax-import-meta", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-meta", + }, + }, logicalAssignment: { syntax: { name: "@babel/plugin-syntax-logical-assignment-operators", @@ -259,6 +223,22 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-logical-assignment-operators", }, }, + moduleStringNames: { + syntax: { + name: "@babel/plugin-syntax-module-string-names", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-module-string-names", + }, + }, + numericSeparator: { + syntax: { + name: "@babel/plugin-syntax-numeric-separator", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-numeric-separator", + }, + transform: { + name: "@babel/plugin-proposal-numeric-separator", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-numeric-separator", + }, + }, nullishCoalescingOperator: { syntax: { name: "@babel/plugin-syntax-nullish-coalescing-operator", @@ -289,6 +269,26 @@ const pluginNameMap: Record< url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-optional-catch-binding", }, }, + optionalChaining: { + syntax: { + name: "@babel/plugin-syntax-optional-chaining", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-chaining", + }, + transform: { + name: "@babel/plugin-proposal-optional-chaining", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-optional-chaining", + }, + }, + privateIn: { + syntax: { + name: "@babel/plugin-syntax-private-property-in-object", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-private-property-in-object", + }, + transform: { + name: "@babel/plugin-proposal-private-property-in-object", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-private-property-in-object", + }, + }, }; //todo: we don't have plugin-syntax-private-property-in-object diff --git a/packages/babel-standalone/package.json b/packages/babel-standalone/package.json index 83a31ef352cb..05075cb99595 100644 --- a/packages/babel-standalone/package.json +++ b/packages/babel-standalone/package.json @@ -38,9 +38,6 @@ "@babel/plugin-proposal-throw-expressions": "workspace:^", "@babel/plugin-proposal-unicode-property-regex": "workspace:^", "@babel/plugin-proposal-unicode-sets-regex": "workspace:^", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-decimal": "workspace:^", "@babel/plugin-syntax-decorators": "workspace:^", "@babel/plugin-syntax-destructuring-private": "workspace:^", @@ -50,14 +47,10 @@ "@babel/plugin-syntax-function-bind": "workspace:^", "@babel/plugin-syntax-function-sent": "workspace:^", "@babel/plugin-syntax-import-assertions": "workspace:^", - "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-jsx": "workspace:^", "@babel/plugin-syntax-module-blocks": "workspace:^", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-pipeline-operator": "workspace:^", "@babel/plugin-syntax-record-and-tuple": "workspace:^", - "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-typescript": "workspace:^", "@babel/plugin-transform-arrow-functions": "workspace:^", "@babel/plugin-transform-async-to-generator": "workspace:^", diff --git a/packages/babel-standalone/scripts/pluginConfig.json b/packages/babel-standalone/scripts/pluginConfig.json index 52528ac61a2a..8ea84da6e37d 100644 --- a/packages/babel-standalone/scripts/pluginConfig.json +++ b/packages/babel-standalone/scripts/pluginConfig.json @@ -1,101 +1,115 @@ -[ - "external-helpers", - "syntax-async-generators", - "syntax-class-properties", - "syntax-class-static-block", - "syntax-decimal", - "syntax-decorators", - "syntax-destructuring-private", - "syntax-do-expressions", - "syntax-export-default-from", - "syntax-flow", - "syntax-function-bind", - "syntax-function-sent", - "syntax-module-blocks", - "syntax-import-meta", - "syntax-jsx", - "syntax-import-assertions", - "syntax-object-rest-spread", - "syntax-optional-catch-binding", - "syntax-pipeline-operator", - "syntax-record-and-tuple", - "syntax-top-level-await", - "syntax-typescript", - "proposal-async-generator-functions", - "proposal-class-properties", - "proposal-class-static-block", - "proposal-decorators", - "proposal-destructuring-private", - "proposal-do-expressions", - "proposal-duplicate-named-capturing-groups-regex", - "proposal-dynamic-import", - "proposal-export-default-from", - "proposal-export-namespace-from", - "proposal-function-bind", - "proposal-function-sent", - "proposal-json-strings", - "proposal-logical-assignment-operators", - "proposal-nullish-coalescing-operator", - "proposal-numeric-separator", - "proposal-object-rest-spread", - "proposal-optional-catch-binding", - "proposal-optional-chaining", - "proposal-pipeline-operator", - "proposal-private-methods", - "proposal-private-property-in-object", - "proposal-record-and-tuple", - "proposal-throw-expressions", - "proposal-unicode-property-regex", - "proposal-unicode-sets-regex", - "transform-async-to-generator", - "transform-arrow-functions", - "transform-block-scoped-functions", - "transform-block-scoping", - "transform-classes", - "transform-computed-properties", - "transform-destructuring", - "transform-dotall-regex", - "transform-duplicate-keys", - "transform-exponentiation-operator", - "transform-flow-comments", - "transform-flow-strip-types", - "transform-for-of", - "transform-function-name", - "transform-instanceof", - "transform-jscript", - "transform-literals", - "transform-member-expression-literals", - "transform-modules-amd", - "transform-modules-commonjs", - "transform-modules-systemjs", - "transform-modules-umd", - "transform-named-capturing-groups-regex", - "transform-new-target", - "transform-object-assign", - "transform-object-super", - "transform-object-set-prototype-of-to-assign", - "transform-parameters", - "transform-property-literals", - "transform-property-mutators", - "transform-proto-to-assign", - "transform-react-constant-elements", - "transform-react-display-name", - "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", - "transform-reserved-words", - "transform-runtime", - "transform-shorthand-properties", - "transform-spread", - "transform-sticky-regex", - "transform-strict-mode", - "transform-template-literals", - "transform-typeof-symbol", - "transform-typescript", - "transform-unicode-escapes", - "transform-unicode-regex" -] +{ + "noopPlugins": [ + "syntax-async-generators", + "syntax-class-properties", + "syntax-class-static-block", + "syntax-import-meta", + "syntax-object-rest-spread", + "syntax-optional-catch-binding", + "syntax-top-level-await" + ], + "unexposedNoopPlugins": [ + "syntax-logical-assignment-operators", + "syntax-nullish-coalescing-operator", + "syntax-dynamic-import", + "syntax-export-namespace-from", + "syntax-module-string-names", + "syntax-numeric-separator", + "syntax-optional-chaining", + "syntax-private-property-in-object" + ], + "externalPlugins": [ + "external-helpers", + "syntax-decimal", + "syntax-decorators", + "syntax-destructuring-private", + "syntax-do-expressions", + "syntax-export-default-from", + "syntax-flow", + "syntax-function-bind", + "syntax-function-sent", + "syntax-module-blocks", + "syntax-jsx", + "syntax-import-assertions", + "syntax-pipeline-operator", + "syntax-record-and-tuple", + "syntax-typescript", + "proposal-async-generator-functions", + "proposal-class-properties", + "proposal-class-static-block", + "proposal-decorators", + "proposal-destructuring-private", + "proposal-do-expressions", + "proposal-duplicate-named-capturing-groups-regex", + "proposal-dynamic-import", + "proposal-export-default-from", + "proposal-export-namespace-from", + "proposal-function-bind", + "proposal-function-sent", + "proposal-json-strings", + "proposal-logical-assignment-operators", + "proposal-nullish-coalescing-operator", + "proposal-numeric-separator", + "proposal-object-rest-spread", + "proposal-optional-catch-binding", + "proposal-optional-chaining", + "proposal-pipeline-operator", + "proposal-private-methods", + "proposal-private-property-in-object", + "proposal-record-and-tuple", + "proposal-throw-expressions", + "proposal-unicode-property-regex", + "proposal-unicode-sets-regex", + "transform-async-to-generator", + "transform-arrow-functions", + "transform-block-scoped-functions", + "transform-block-scoping", + "transform-classes", + "transform-computed-properties", + "transform-destructuring", + "transform-dotall-regex", + "transform-duplicate-keys", + "transform-exponentiation-operator", + "transform-flow-comments", + "transform-flow-strip-types", + "transform-for-of", + "transform-function-name", + "transform-instanceof", + "transform-jscript", + "transform-literals", + "transform-member-expression-literals", + "transform-modules-amd", + "transform-modules-commonjs", + "transform-modules-systemjs", + "transform-modules-umd", + "transform-named-capturing-groups-regex", + "transform-new-target", + "transform-object-assign", + "transform-object-super", + "transform-object-set-prototype-of-to-assign", + "transform-parameters", + "transform-property-literals", + "transform-property-mutators", + "transform-proto-to-assign", + "transform-react-constant-elements", + "transform-react-display-name", + "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", + "transform-reserved-words", + "transform-runtime", + "transform-shorthand-properties", + "transform-spread", + "transform-sticky-regex", + "transform-strict-mode", + "transform-template-literals", + "transform-typeof-symbol", + "transform-typescript", + "transform-unicode-escapes", + "transform-unicode-regex" + ] +} diff --git a/packages/babel-standalone/src/generated/plugins.ts b/packages/babel-standalone/src/generated/plugins.ts index eb7555aca349..977eee8a7892 100644 --- a/packages/babel-standalone/src/generated/plugins.ts +++ b/packages/babel-standalone/src/generated/plugins.ts @@ -2,10 +2,8 @@ * This file is auto-generated! Do not modify it directly. * To re-generate run 'yarn gulp generate-standalone' */ +import makeNoopPlugin from "../make-noop-plugin"; import externalHelpers from "@babel/plugin-external-helpers"; -import syntaxAsyncGenerators from "@babel/plugin-syntax-async-generators"; -import syntaxClassProperties from "@babel/plugin-syntax-class-properties"; -import syntaxClassStaticBlock from "@babel/plugin-syntax-class-static-block"; import syntaxDecimal from "@babel/plugin-syntax-decimal"; import syntaxDecorators from "@babel/plugin-syntax-decorators"; import syntaxDestructuringPrivate from "@babel/plugin-syntax-destructuring-private"; @@ -15,14 +13,10 @@ import syntaxFlow from "@babel/plugin-syntax-flow"; import syntaxFunctionBind from "@babel/plugin-syntax-function-bind"; import syntaxFunctionSent from "@babel/plugin-syntax-function-sent"; import syntaxModuleBlocks from "@babel/plugin-syntax-module-blocks"; -import syntaxImportMeta from "@babel/plugin-syntax-import-meta"; import syntaxJsx from "@babel/plugin-syntax-jsx"; import syntaxImportAssertions from "@babel/plugin-syntax-import-assertions"; -import syntaxObjectRestSpread from "@babel/plugin-syntax-object-rest-spread"; -import syntaxOptionalCatchBinding from "@babel/plugin-syntax-optional-catch-binding"; import syntaxPipelineOperator from "@babel/plugin-syntax-pipeline-operator"; import syntaxRecordAndTuple from "@babel/plugin-syntax-record-and-tuple"; -import syntaxTopLevelAwait from "@babel/plugin-syntax-top-level-await"; import syntaxTypescript from "@babel/plugin-syntax-typescript"; import proposalAsyncGeneratorFunctions from "@babel/plugin-proposal-async-generator-functions"; import proposalClassProperties from "@babel/plugin-proposal-class-properties"; @@ -101,11 +95,15 @@ import transformTypeofSymbol from "@babel/plugin-transform-typeof-symbol"; import transformTypescript from "@babel/plugin-transform-typescript"; import transformUnicodeEscapes from "@babel/plugin-transform-unicode-escapes"; import transformUnicodeRegex from "@babel/plugin-transform-unicode-regex"; +export const syntaxAsyncGenerators = makeNoopPlugin(), + syntaxClassProperties = makeNoopPlugin(), + syntaxClassStaticBlock = makeNoopPlugin(), + syntaxImportMeta = makeNoopPlugin(), + syntaxObjectRestSpread = makeNoopPlugin(), + syntaxOptionalCatchBinding = makeNoopPlugin(), + syntaxTopLevelAwait = makeNoopPlugin(); export { externalHelpers, - syntaxAsyncGenerators, - syntaxClassProperties, - syntaxClassStaticBlock, syntaxDecimal, syntaxDecorators, syntaxDestructuringPrivate, @@ -115,14 +113,10 @@ export { syntaxFunctionBind, syntaxFunctionSent, syntaxModuleBlocks, - syntaxImportMeta, syntaxJsx, syntaxImportAssertions, - syntaxObjectRestSpread, - syntaxOptionalCatchBinding, syntaxPipelineOperator, syntaxRecordAndTuple, - syntaxTopLevelAwait, syntaxTypescript, proposalAsyncGeneratorFunctions, proposalClassProperties, @@ -203,10 +197,14 @@ export { transformUnicodeRegex, }; export const all: { [k: string]: any } = { - "external-helpers": externalHelpers, "syntax-async-generators": syntaxAsyncGenerators, "syntax-class-properties": syntaxClassProperties, "syntax-class-static-block": syntaxClassStaticBlock, + "syntax-import-meta": syntaxImportMeta, + "syntax-object-rest-spread": syntaxObjectRestSpread, + "syntax-optional-catch-binding": syntaxOptionalCatchBinding, + "syntax-top-level-await": syntaxTopLevelAwait, + "external-helpers": externalHelpers, "syntax-decimal": syntaxDecimal, "syntax-decorators": syntaxDecorators, "syntax-destructuring-private": syntaxDestructuringPrivate, @@ -216,14 +214,10 @@ export const all: { [k: string]: any } = { "syntax-function-bind": syntaxFunctionBind, "syntax-function-sent": syntaxFunctionSent, "syntax-module-blocks": syntaxModuleBlocks, - "syntax-import-meta": syntaxImportMeta, "syntax-jsx": syntaxJsx, "syntax-import-assertions": syntaxImportAssertions, - "syntax-object-rest-spread": syntaxObjectRestSpread, - "syntax-optional-catch-binding": syntaxOptionalCatchBinding, "syntax-pipeline-operator": syntaxPipelineOperator, "syntax-record-and-tuple": syntaxRecordAndTuple, - "syntax-top-level-await": syntaxTopLevelAwait, "syntax-typescript": syntaxTypescript, "proposal-async-generator-functions": proposalAsyncGeneratorFunctions, "proposal-class-properties": proposalClassProperties, diff --git a/packages/babel-standalone/src/make-noop-plugin.ts b/packages/babel-standalone/src/make-noop-plugin.ts new file mode 100644 index 000000000000..9a44702e04f9 --- /dev/null +++ b/packages/babel-standalone/src/make-noop-plugin.ts @@ -0,0 +1,4 @@ +export default function makeNoopPlugin() { + let p; + return ((p = (() => ({})) as any).default = p); +} diff --git a/packages/babel-standalone/src/plugin-utils-shim.ts b/packages/babel-standalone/src/plugin-utils-shim.ts new file mode 100644 index 000000000000..86f9f60aafb5 --- /dev/null +++ b/packages/babel-standalone/src/plugin-utils-shim.ts @@ -0,0 +1,9 @@ +/** + * Since we bundle @babel/core, we don't need @babel/helper-plugin-utils + * to handle older versions. + */ + +export function declare(x: any) { + return x; +} +export { declare as declarePreset }; diff --git a/packages/babel-standalone/src/preset-stage-3.ts b/packages/babel-standalone/src/preset-stage-3.ts index 1a8e257edf5b..f4f67041caa4 100644 --- a/packages/babel-standalone/src/preset-stage-3.ts +++ b/packages/babel-standalone/src/preset-stage-3.ts @@ -11,8 +11,6 @@ export default (_: any, { loose = false } = {}) => { if (!process.env.BABEL_8_BREAKING) { // These are Stage 4 plugins.push( - babelPlugins.syntaxImportMeta, - babelPlugins.syntaxTopLevelAwait, babelPlugins.proposalExportNamespaceFrom, babelPlugins.proposalLogicalAssignmentOperators, [babelPlugins.proposalOptionalChaining, { loose }], diff --git a/scripts/rollup-plugin-standalone-internals.js b/scripts/rollup-plugin-standalone-internals.js new file mode 100644 index 000000000000..4b8e879faa0e --- /dev/null +++ b/scripts/rollup-plugin-standalone-internals.js @@ -0,0 +1,41 @@ +import fs from "fs"; +import { fileURLToPath } from "url"; + +const standaloneURL = new URL("../packages/babel-standalone/", import.meta.url); +const inStandalone = path => + fileURLToPath(new URL(path, standaloneURL)).replace(/\\/g, "/"); +const { noopPlugins, unexposedNoopPlugins } = JSON.parse( + fs.readFileSync(new URL("./scripts/pluginConfig.json", standaloneURL), "utf8") +); + +const pluginUtilsID = "@babel/helper-plugin-utils"; + +const generatedPluginsPath = inStandalone("./src/generated/plugins.ts"); +const makeNoopPluginPath = inStandalone("./src/make-noop-plugin.ts"); +const pluginUtilsShimPath = inStandalone("./src/plugin-utils-shim.ts"); + +const toCamel = str => str.replace(/-[a-z]/g, c => c[1].toUpperCase()); + +const internalPlugins = new Map([ + ...noopPlugins.map(plugin => [ + `@babel/plugin-${plugin}`, + `export { ${toCamel(plugin)} as default } from "${generatedPluginsPath}"`, + ]), + ...unexposedNoopPlugins.map(plugin => [ + `@babel/plugin-${plugin}`, + `import makeNoopPlugin from "${makeNoopPluginPath}"; export default makeNoopPlugin()`, + ]), +]); + +export default function () { + return { + name: "standalone-internals", + load(id) { + return internalPlugins.get(id) ?? null; + }, + resolveId(specifier) { + if (specifier === pluginUtilsID) return pluginUtilsShimPath; + return internalPlugins.has(specifier) ? specifier : null; + }, + }; +} diff --git a/yarn.lock b/yarn.lock index 77b886d1e377..c87d507b17fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1985,7 +1985,7 @@ __metadata: languageName: unknown linkType: soft -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -3646,9 +3646,6 @@ __metadata: "@babel/plugin-proposal-throw-expressions": "workspace:^" "@babel/plugin-proposal-unicode-property-regex": "workspace:^" "@babel/plugin-proposal-unicode-sets-regex": "workspace:^" - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-class-properties": ^7.12.13 - "@babel/plugin-syntax-class-static-block": ^7.14.5 "@babel/plugin-syntax-decimal": "workspace:^" "@babel/plugin-syntax-decorators": "workspace:^" "@babel/plugin-syntax-destructuring-private": "workspace:^" @@ -3658,14 +3655,10 @@ __metadata: "@babel/plugin-syntax-function-bind": "workspace:^" "@babel/plugin-syntax-function-sent": "workspace:^" "@babel/plugin-syntax-import-assertions": "workspace:^" - "@babel/plugin-syntax-import-meta": ^7.10.4 "@babel/plugin-syntax-jsx": "workspace:^" "@babel/plugin-syntax-module-blocks": "workspace:^" - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 "@babel/plugin-syntax-pipeline-operator": "workspace:^" "@babel/plugin-syntax-record-and-tuple": "workspace:^" - "@babel/plugin-syntax-top-level-await": ^7.14.5 "@babel/plugin-syntax-typescript": "workspace:^" "@babel/plugin-transform-arrow-functions": "workspace:^" "@babel/plugin-transform-async-to-generator": "workspace:^"