From 405c1aaad8fdd64cbde33db684a5a39a496e239b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Sat, 11 Jan 2020 04:31:29 -0500 Subject: [PATCH] Merge env-standalone to babel-standalone (#10821) * feat: add babel-preset-env to babel-standalone * chore: copy preset-env-standalone test * polish: tune warning message when babel-preset-env-standalone is loaded --- packages/babel-standalone/package.json | 4 ++ .../scripts/pluginConfig.json | 3 + .../babel-standalone/src/generated/plugins.js | 9 +++ packages/babel-standalone/src/index.js | 16 ++++-- packages/babel-standalone/test/babel.js | 55 +++++++++++++++++++ 5 files changed, 83 insertions(+), 4 deletions(-) diff --git a/packages/babel-standalone/package.json b/packages/babel-standalone/package.json index cc8740729f1e..4229bfcfb0ce 100644 --- a/packages/babel-standalone/package.json +++ b/packages/babel-standalone/package.json @@ -18,6 +18,7 @@ "@babel/plugin-proposal-class-properties": "^7.7.4", "@babel/plugin-proposal-decorators": "^7.7.4", "@babel/plugin-proposal-do-expressions": "^7.7.4", + "@babel/plugin-proposal-dynamic-import": "^7.7.4", "@babel/plugin-proposal-export-default-from": "^7.7.4", "@babel/plugin-proposal-export-namespace-from": "^7.7.4", "@babel/plugin-proposal-function-bind": "^7.7.4", @@ -48,6 +49,7 @@ "@babel/plugin-syntax-object-rest-spread": "^7.7.4", "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", "@babel/plugin-syntax-pipeline-operator": "^7.7.7", + "@babel/plugin-syntax-top-level-await": "^7.7.4", "@babel/plugin-syntax-typescript": "^7.7.4", "@babel/plugin-transform-arrow-functions": "^7.7.4", "@babel/plugin-transform-async-to-generator": "^7.7.4", @@ -71,6 +73,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.7.5", "@babel/plugin-transform-modules-systemjs": "^7.7.4", "@babel/plugin-transform-modules-umd": "^7.7.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", "@babel/plugin-transform-new-target": "^7.7.4", "@babel/plugin-transform-object-assign": "^7.7.4", "@babel/plugin-transform-object-set-prototype-of-to-assign": "^7.7.4", @@ -97,6 +100,7 @@ "@babel/plugin-transform-typeof-symbol": "^7.7.4", "@babel/plugin-transform-typescript": "^7.7.4", "@babel/plugin-transform-unicode-regex": "^7.7.4", + "@babel/preset-env": "^7.7.4", "@babel/preset-flow": "^7.7.4", "@babel/preset-react": "^7.7.4", "@babel/preset-typescript": "^7.7.7" diff --git a/packages/babel-standalone/scripts/pluginConfig.json b/packages/babel-standalone/scripts/pluginConfig.json index 338d1d1f1bc9..9d58160962ee 100644 --- a/packages/babel-standalone/scripts/pluginConfig.json +++ b/packages/babel-standalone/scripts/pluginConfig.json @@ -15,11 +15,13 @@ "syntax-object-rest-spread", "syntax-optional-catch-binding", "syntax-pipeline-operator", + "syntax-top-level-await", "syntax-typescript", "proposal-async-generator-functions", "proposal-class-properties", "proposal-decorators", "proposal-do-expressions", + "proposal-dynamic-import", "proposal-export-default-from", "proposal-export-namespace-from", "proposal-function-bind", @@ -57,6 +59,7 @@ "transform-modules-commonjs", "transform-modules-systemjs", "transform-modules-umd", + "transform-named-capturing-groups-regex", "transform-new-target", "transform-object-assign", "transform-object-super", diff --git a/packages/babel-standalone/src/generated/plugins.js b/packages/babel-standalone/src/generated/plugins.js index 3967a839565c..313ccd07bbc0 100644 --- a/packages/babel-standalone/src/generated/plugins.js +++ b/packages/babel-standalone/src/generated/plugins.js @@ -19,11 +19,13 @@ import syntaxJsx from "@babel/plugin-syntax-jsx"; 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 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"; import proposalDecorators from "@babel/plugin-proposal-decorators"; import proposalDoExpressions from "@babel/plugin-proposal-do-expressions"; +import proposalDynamicImport from "@babel/plugin-proposal-dynamic-import"; import proposalExportDefaultFrom from "@babel/plugin-proposal-export-default-from"; import proposalExportNamespaceFrom from "@babel/plugin-proposal-export-namespace-from"; import proposalFunctionBind from "@babel/plugin-proposal-function-bind"; @@ -61,6 +63,7 @@ import transformModulesAmd from "@babel/plugin-transform-modules-amd"; import transformModulesCommonjs from "@babel/plugin-transform-modules-commonjs"; import transformModulesSystemjs from "@babel/plugin-transform-modules-systemjs"; import transformModulesUmd from "@babel/plugin-transform-modules-umd"; +import transformNamedCapturingGroupsRegex from "@babel/plugin-transform-named-capturing-groups-regex"; import transformNewTarget from "@babel/plugin-transform-new-target"; import transformObjectAssign from "@babel/plugin-transform-object-assign"; import transformObjectSuper from "@babel/plugin-transform-object-super"; @@ -105,11 +108,13 @@ export { syntaxObjectRestSpread, syntaxOptionalCatchBinding, syntaxPipelineOperator, + syntaxTopLevelAwait, syntaxTypescript, proposalAsyncGeneratorFunctions, proposalClassProperties, proposalDecorators, proposalDoExpressions, + proposalDynamicImport, proposalExportDefaultFrom, proposalExportNamespaceFrom, proposalFunctionBind, @@ -147,6 +152,7 @@ export { transformModulesCommonjs, transformModulesSystemjs, transformModulesUmd, + transformNamedCapturingGroupsRegex, transformNewTarget, transformObjectAssign, transformObjectSuper, @@ -192,11 +198,13 @@ export const all = { "syntax-object-rest-spread": syntaxObjectRestSpread, "syntax-optional-catch-binding": syntaxOptionalCatchBinding, "syntax-pipeline-operator": syntaxPipelineOperator, + "syntax-top-level-await": syntaxTopLevelAwait, "syntax-typescript": syntaxTypescript, "proposal-async-generator-functions": proposalAsyncGeneratorFunctions, "proposal-class-properties": proposalClassProperties, "proposal-decorators": proposalDecorators, "proposal-do-expressions": proposalDoExpressions, + "proposal-dynamic-import": proposalDynamicImport, "proposal-export-default-from": proposalExportDefaultFrom, "proposal-export-namespace-from": proposalExportNamespaceFrom, "proposal-function-bind": proposalFunctionBind, @@ -234,6 +242,7 @@ export const all = { "transform-modules-commonjs": transformModulesCommonjs, "transform-modules-systemjs": transformModulesSystemjs, "transform-modules-umd": transformModulesUmd, + "transform-named-capturing-groups-regex": transformNamedCapturingGroupsRegex, "transform-new-target": transformNewTarget, "transform-object-assign": transformObjectAssign, "transform-object-super": transformObjectSuper, diff --git a/packages/babel-standalone/src/index.js b/packages/babel-standalone/src/index.js index cdd68b31bf6b..cc7870028095 100644 --- a/packages/babel-standalone/src/index.js +++ b/packages/babel-standalone/src/index.js @@ -21,8 +21,9 @@ import presetStage0 from "./preset-stage-0"; import presetStage1 from "./preset-stage-1"; import presetStage2 from "./preset-stage-2"; import presetStage3 from "./preset-stage-3"; -import presetReact from "@babel/preset-react"; +import presetEnv from "@babel/preset-env"; import presetFlow from "@babel/preset-flow"; +import presetReact from "@babel/preset-react"; import presetTypescript from "@babel/preset-typescript"; import { runScripts } from "./transformScriptTags"; @@ -136,9 +137,15 @@ export function registerPlugins(newPlugins: { */ export function registerPreset(name: string, preset: Object | Function): void { if (Object.prototype.hasOwnProperty.call(availablePresets, name)) { - console.warn( - `A preset named "${name}" is already registered, it will be overridden`, - ); + if (name === "env") { + console.warn( + "@babel/preset-env is now included in @babel/standalone, please remove @babel/preset-env-standalone", + ); + } else { + console.warn( + `A preset named "${name}" is already registered, it will be overridden`, + ); + } } availablePresets[name] = preset; } @@ -163,6 +170,7 @@ registerPlugins(all); // Want to get rid of this whitelist of presets? // Wait! Please read https://github.com/babel/babel/pull/6177 first. registerPresets({ + env: presetEnv, es2015: preset2015, es2016: () => { return { diff --git a/packages/babel-standalone/test/babel.js b/packages/babel-standalone/test/babel.js index 056bfafca847..8fd2b8a60d56 100644 --- a/packages/babel-standalone/test/babel.js +++ b/packages/babel-standalone/test/babel.js @@ -110,6 +110,61 @@ ).toThrow(/Invalid plugin specified in Babel options: "lolfail"/); }); + describe("env preset", () => { + it("works w/o targets", () => { + const output = Babel.transform("const a = 1;", { + sourceType: "script", + presets: ["env"], + }).code; + expect(output).toBe("var a = 1;"); + }); + + it("doesn't transpile `const` with chrome 60", () => { + const output = Babel.transform("const a = 1;", { + sourceType: "script", + presets: [ + [ + "env", + { + targets: { + chrome: 60, + }, + }, + ], + ], + }).code; + expect(output).toBe("const a = 1;"); + }); + + it("transpiles `const` with chrome 60 and preset-es2015", () => { + const output = Babel.transform("const a = 1;", { + sourceType: "script", + presets: [ + [ + "env", + { + targets: { + chrome: 60, + }, + }, + ], + "es2015", + ], + }).code; + expect(output).toBe("var a = 1;"); + }); + + it("uses transform-new-targets plugin", () => { + const output = Babel.transform("function Foo() {new.target}", { + sourceType: "script", + presets: ["env"], + }).code; + expect(output).toBe( + "function Foo() {\n this instanceof Foo ? this.constructor : void 0;\n}", + ); + }); + }); + describe("custom plugins and presets", () => { const lolizer = () => ({ visitor: {