From ca6c10e27722b8eb6a66b0cf398df7879d7a619b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 18 Jan 2022 18:21:19 -0500 Subject: [PATCH 01/20] test: extract printer test to skip-bundled --- packages/babel-generator/test/index.js | 13 ------------- .../babel-generator/test/printer.skip-bundled.js | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 packages/babel-generator/test/printer.skip-bundled.js diff --git a/packages/babel-generator/test/index.js b/packages/babel-generator/test/index.js index cd0151be5da2..b32847f2cdfe 100644 --- a/packages/babel-generator/test/index.js +++ b/packages/babel-generator/test/index.js @@ -6,23 +6,10 @@ import fixtures from "@babel/helper-fixtures"; import { TraceMap, originalPositionFor } from "@jridgewell/trace-mapping"; import { fileURLToPath } from "url"; -import _Printer from "../lib/printer.js"; import _generate, { CodeGenerator } from "../lib/index.js"; -const Printer = _Printer.default || _Printer; const generate = _generate.default || _generate; describe("generation", function () { - it("completeness", function () { - Object.keys(t.VISITOR_KEYS).forEach(function (type) { - expect(Printer.prototype[type]).toBeTruthy(); - }); - - Object.keys(Printer.prototype).forEach(function (type) { - if (!/[A-Z]/.test(type[0])) return; - expect(t.VISITOR_KEYS[type]).toBeTruthy(); - }); - }); - it("multiple sources", function () { const sources = { "a.js": "function hi (msg) { console.log(msg); }\n", diff --git a/packages/babel-generator/test/printer.skip-bundled.js b/packages/babel-generator/test/printer.skip-bundled.js new file mode 100644 index 000000000000..2b10618426e1 --- /dev/null +++ b/packages/babel-generator/test/printer.skip-bundled.js @@ -0,0 +1,16 @@ +import * as t from "@babel/types"; +import _Printer from "../lib/printer.js"; +const Printer = _Printer.default; + +describe("Printer", () => { + it("completeness", function () { + Object.keys(t.VISITOR_KEYS).forEach(function (type) { + expect(Printer.prototype[type]).toBeTruthy(); + }); + + Object.keys(Printer.prototype).forEach(function (type) { + if (!/[A-Z]/.test(type[0])) return; + expect(t.VISITOR_KEYS[type]).toBeTruthy(); + }); + }); +}); From ba6125fdc20dbcf3e268ba81ad9c1878a6f7abce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 18 Jan 2022 19:30:19 -0500 Subject: [PATCH 02/20] build most libraries --- Gulpfile.mjs | 60 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index b4b49425bc25..56ccb35ceb8d 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -495,22 +495,50 @@ function copyDts(packages) { .pipe(gulp.dest(monorepoRoot)); } -const libBundles = [ - "packages/babel-parser", - "packages/babel-plugin-proposal-destructuring-private", - "packages/babel-plugin-proposal-object-rest-spread", - "packages/babel-plugin-proposal-optional-chaining", - "packages/babel-preset-react", - "packages/babel-plugin-transform-destructuring", - "packages/babel-preset-typescript", - "packages/babel-helper-member-expression-to-functions", - "packages/babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining", - "packages/babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression", -].map(src => ({ - src, - format: USE_ESM ? "esm" : "cjs", - dest: "lib", -})); +let libBundles; +if (process.env.BABEL_8_BREAKING) { + libBundles = fs + .readdirSync(new URL("./packages", import.meta.url)) + .filter(dir => { + return ( + ![ + "babel-compat-data", + "babel-cli", + "babel-standalone", + "babel-node", + "babel-helper-fixtures", + "babel-runtime", + "babel-runtime-corejs2", + "babel-runtime-corejs3", + ].includes(dir) && + fs.existsSync( + new URL("./packages/" + dir + "/package.json", import.meta.url) + ) + ); + }) + .map(dir => ({ + src: "packages/" + dir, + format: "mjs", + dest: "lib", + })); +} else { + libBundles = [ + "packages/babel-parser", + "packages/babel-plugin-proposal-destructuring-private", + "packages/babel-plugin-proposal-object-rest-spread", + "packages/babel-plugin-proposal-optional-chaining", + "packages/babel-preset-react", + "packages/babel-plugin-transform-destructuring", + "packages/babel-preset-typescript", + "packages/babel-helper-member-expression-to-functions", + "packages/babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining", + "packages/babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression", + ].map(src => ({ + src, + format: USE_ESM ? "esm" : "cjs", + dest: "lib", + })); +} const cjsBundles = [ // This is used by @babel/register and @babel/eslint-parser From d9ac47e279eb0c17740718e44324e19c8e545142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 19 Jan 2022 11:25:50 -0500 Subject: [PATCH 03/20] fix: only minify @babel/standalone --- Gulpfile.mjs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index 56ccb35ceb8d..d9cd50afac77 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -430,6 +430,11 @@ function buildRollup(packages, targetBrowsers) { exports: "named", }); + // Only minify @babel/standalone + if (src !== "packages/babel-standalone") { + return; + } + if (!process.env.IS_PUBLISH) { log( chalk.yellow( From 906f313b2613d03ad093cfe4b0c6d15da47b4313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 19 Jan 2022 11:26:13 -0500 Subject: [PATCH 04/20] bundle more packages --- Gulpfile.mjs | 106 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 77 insertions(+), 29 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index d9cd50afac77..a4a1b3983d09 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -316,15 +316,23 @@ function buildRollup(packages, targetBrowsers) { const sourcemap = process.env.NODE_ENV === "production"; return Promise.all( packages.map( - async ({ src, format, dest, name, filename, envName = "rollup" }) => { + async ({ + src, + format, + input, + dest, + name, + filename, + envName = "rollup", + }) => { const pkgJSON = require("./" + src + "/package.json"); const version = pkgJSON.version + versionSuffix; const { dependencies = {}, peerDependencies = {} } = pkgJSON; - const external = Object.keys(dependencies).concat( - Object.keys(peerDependencies) - ); + const external = Object.keys(dependencies) + .concat(Object.keys(peerDependencies)) + // kexec is used by babel-node without declaring dependencies + .concat("kexec"); - const input = getIndexFromPackage(src); log(`Compiling '${chalk.cyan(input)}' with rollup ...`); const bundle = await rollup({ input, @@ -419,6 +427,10 @@ function buildRollup(packages, targetBrowsers) { include: "**/*.{js,cjs,ts}", }), ].filter(Boolean), + acorn: { + // babel-cli/src/babel/index.ts has shebang + allowHashBang: true, + }, }); const outputFile = path.join(src, dest, filename || "index.js"); @@ -500,32 +512,66 @@ function copyDts(packages) { .pipe(gulp.dest(monorepoRoot)); } +function* libBundlesIterator() { + for (const packageDir of ["packages", "codemods"]) { + for (const dir of fs.readdirSync(new URL(packageDir, import.meta.url))) { + if ( + // @rollup/plugin-commonjs will mess up with babel-helper-fixtures + dir === "babel-helper-fixtures" || + // babel-standalone is handled by rollup-babel-standalone task + dir === "babel-standalone" || + // todo: Rollup hangs on allowHashBang: true with babel-cli/src/babel/index.ts hashbang + dir === "babel-cli" || + // todo: Rollup bundles only the browser entry of babel-register + dir === "babel-register" + ) { + continue; + } + + let pkgJSON; + try { + pkgJSON = JSON.parse( + fs.readFileSync( + new URL(`${packageDir}/${dir}/package.json`, import.meta.url) + ) + ); + } catch (err) { + if (err.code !== "ENOENT" && err.code !== "ENOTDIR") throw err; + } + if (pkgJSON === undefined) continue; + const src = packageDir + "/" + dir; + if (pkgJSON.main) { + yield { + src, + // todo: output es format when we generate type: "module" on Babel 8 build + format: "cjs", + dest: "lib", + input: getIndexFromPackage(src), + }; + } else if (pkgJSON.bin) { + for (const binPath of Object.values(pkgJSON.bin)) { + const filename = binPath.slice(binPath.lastIndexOf("/") + 1); + const input = + dir === "babel-cli" && filename === "babel.js" + ? `${src}/src/babel/index.ts` + : `${src}/src/${filename.slice(0, -3) + ".ts"}`; + yield { + src, + // todo: output es format when we generate type: "module" on Babel 8 build + format: "cjs", + dest: "lib", + filename, + input, + }; + } + } + } + } +} + let libBundles; if (process.env.BABEL_8_BREAKING) { - libBundles = fs - .readdirSync(new URL("./packages", import.meta.url)) - .filter(dir => { - return ( - ![ - "babel-compat-data", - "babel-cli", - "babel-standalone", - "babel-node", - "babel-helper-fixtures", - "babel-runtime", - "babel-runtime-corejs2", - "babel-runtime-corejs3", - ].includes(dir) && - fs.existsSync( - new URL("./packages/" + dir + "/package.json", import.meta.url) - ) - ); - }) - .map(dir => ({ - src: "packages/" + dir, - format: "mjs", - dest: "lib", - })); + libBundles = [...libBundlesIterator()]; } else { libBundles = [ "packages/babel-parser", @@ -542,6 +588,7 @@ if (process.env.BABEL_8_BREAKING) { src, format: USE_ESM ? "esm" : "cjs", dest: "lib", + input: getIndexFromPackage(src), })); } @@ -561,6 +608,7 @@ const standaloneBundle = [ dest: "", version: babelVersion, envName: "standalone", + input: getIndexFromPackage("packages/babel-standalone"), }, ]; From b5a20eed75d7d09a2fb7af198a18234a1ba89054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 24 Jan 2022 15:27:24 -0500 Subject: [PATCH 05/20] rename preset-env tests requiring internals --- ...ludes.spec.js => get-option-specific-excludes.skip-bundled.js} | 0 .../test/{index.spec.js => index.skip-bundled.js} | 0 ...ormalize-options.spec.js => normalize-options.skip-bundled.js} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename packages/babel-preset-env/test/{get-option-specific-excludes.spec.js => get-option-specific-excludes.skip-bundled.js} (100%) rename packages/babel-preset-env/test/{index.spec.js => index.skip-bundled.js} (100%) rename packages/babel-preset-env/test/{normalize-options.spec.js => normalize-options.skip-bundled.js} (100%) diff --git a/packages/babel-preset-env/test/get-option-specific-excludes.spec.js b/packages/babel-preset-env/test/get-option-specific-excludes.skip-bundled.js similarity index 100% rename from packages/babel-preset-env/test/get-option-specific-excludes.spec.js rename to packages/babel-preset-env/test/get-option-specific-excludes.skip-bundled.js diff --git a/packages/babel-preset-env/test/index.spec.js b/packages/babel-preset-env/test/index.skip-bundled.js similarity index 100% rename from packages/babel-preset-env/test/index.spec.js rename to packages/babel-preset-env/test/index.skip-bundled.js diff --git a/packages/babel-preset-env/test/normalize-options.spec.js b/packages/babel-preset-env/test/normalize-options.skip-bundled.js similarity index 100% rename from packages/babel-preset-env/test/normalize-options.spec.js rename to packages/babel-preset-env/test/normalize-options.skip-bundled.js From 84d97a7a51fcdf142fdbe21b5d78e207198a7474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 24 Jan 2022 15:33:38 -0500 Subject: [PATCH 06/20] rename helper-compilation-targets test files --- .../test/{pretty.spec.js => pretty.skip-bundled.js} | 0 .../{targets-supported.js => targets-supported.skip-bundled.js} | 0 .../test/{utils.spec.js => utils.skip-bundled.js} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename packages/babel-helper-compilation-targets/test/{pretty.spec.js => pretty.skip-bundled.js} (100%) rename packages/babel-helper-compilation-targets/test/{targets-supported.js => targets-supported.skip-bundled.js} (100%) rename packages/babel-helper-compilation-targets/test/{utils.spec.js => utils.skip-bundled.js} (100%) diff --git a/packages/babel-helper-compilation-targets/test/pretty.spec.js b/packages/babel-helper-compilation-targets/test/pretty.skip-bundled.js similarity index 100% rename from packages/babel-helper-compilation-targets/test/pretty.spec.js rename to packages/babel-helper-compilation-targets/test/pretty.skip-bundled.js diff --git a/packages/babel-helper-compilation-targets/test/targets-supported.js b/packages/babel-helper-compilation-targets/test/targets-supported.skip-bundled.js similarity index 100% rename from packages/babel-helper-compilation-targets/test/targets-supported.js rename to packages/babel-helper-compilation-targets/test/targets-supported.skip-bundled.js diff --git a/packages/babel-helper-compilation-targets/test/utils.spec.js b/packages/babel-helper-compilation-targets/test/utils.skip-bundled.js similarity index 100% rename from packages/babel-helper-compilation-targets/test/utils.spec.js rename to packages/babel-helper-compilation-targets/test/utils.skip-bundled.js From ca41406e156c0546d6af321f7ba0b496c4f5a2ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 24 Jan 2022 15:36:22 -0500 Subject: [PATCH 07/20] rename preset-flow test files --- ...ormalize-options.spec.js => normalize-options.skip-bundled.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/babel-preset-flow/test/{normalize-options.spec.js => normalize-options.skip-bundled.js} (100%) diff --git a/packages/babel-preset-flow/test/normalize-options.spec.js b/packages/babel-preset-flow/test/normalize-options.skip-bundled.js similarity index 100% rename from packages/babel-preset-flow/test/normalize-options.spec.js rename to packages/babel-preset-flow/test/normalize-options.skip-bundled.js From 96ef63a69cecb9645056526fad1c0bf21d9bf98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 24 Jan 2022 15:36:52 -0500 Subject: [PATCH 08/20] disable output.interop for packages not in this repo --- Gulpfile.mjs | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index a4a1b3983d09..2f64c0a39a92 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -440,6 +440,26 @@ function buildRollup(packages, targetBrowsers) { name, sourcemap: sourcemap, exports: "named", + interop(id) { + // We have manually applied commonjs-esm interop to the source + // for library not in this monorepo + // https://github.com/babel/babel/pull/12795 + if (id.startsWith("@babel/")) { + // Some syntax plugins have been archived + if (id.includes("plugin-syntax")) { + const srcPath = id.replace("@babel/", "babel-"); + if ( + !fs.existsSync( + new URL("./packages/" + srcPath, import.meta.url) + ) + ) { + return false; + } + } + return true; + } + return false; + }, }); // Only minify @babel/standalone @@ -522,8 +542,15 @@ function* libBundlesIterator() { dir === "babel-standalone" || // todo: Rollup hangs on allowHashBang: true with babel-cli/src/babel/index.ts hashbang dir === "babel-cli" || - // todo: Rollup bundles only the browser entry of babel-register - dir === "babel-register" + // todo: @rollup/node-resolve 'browsers' option does not work when package.json contains `exports` + // https://github.com/rollup/plugins/tree/master/packages/node-resolve#browser + dir === "babel-register" || + dir === "babel-core" || + dir === "babel-plugin-transform-runtime" || + // @babel/node invokes internal lib/_babel-node.js + dir === "babel-node" || + // todo: test/helpers/define-helper requires internal lib/helpers access + dir === "babel-helpers" ) { continue; } From 30f88463d7adfc3ffe2427d828e726d0b4555e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 24 Jan 2022 16:58:39 -0500 Subject: [PATCH 09/20] expand external to cover subimports --- Gulpfile.mjs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index 2f64c0a39a92..fa17e26a6fe2 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -328,10 +328,20 @@ function buildRollup(packages, targetBrowsers) { const pkgJSON = require("./" + src + "/package.json"); const version = pkgJSON.version + versionSuffix; const { dependencies = {}, peerDependencies = {} } = pkgJSON; - const external = Object.keys(dependencies) - .concat(Object.keys(peerDependencies)) - // kexec is used by babel-node without declaring dependencies - .concat("kexec"); + const external = [ + ...Object.keys(dependencies), + ...Object.keys(peerDependencies), + // Ideally they should be constructed from package.json exports + // required by modules-commonjs + "babel-plugin-dynamic-import-node/utils", + // required by preset-env + "@babel/preset-modules/lib/plugins/transform-async-arrows-in-class", + "@babel/preset-modules/lib/plugins/transform-edge-default-parameters", + "@babel/preset-modules/lib/plugins/transform-edge-function-name", + "@babel/preset-modules/lib/plugins/transform-tagged-template-caching", + "@babel/preset-modules/lib/plugins/transform-safari-block-shadowing", + "@babel/preset-modules/lib/plugins/transform-safari-for-shadowing", + ]; log(`Compiling '${chalk.cyan(input)}' with rollup ...`); const bundle = await rollup({ From b4be207d81e10cd952bc00d75e02f0848f79ab70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 24 Jan 2022 17:14:56 -0500 Subject: [PATCH 10/20] add @babel/compat-data sub exports to external --- Gulpfile.mjs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index fa17e26a6fe2..8c7797504259 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -312,7 +312,7 @@ if (process.env.CIRCLE_PR_NUMBER) { const babelVersion = require("./packages/babel-core/package.json").version + versionSuffix; -function buildRollup(packages, targetBrowsers) { +function buildRollup(packages, buildStandalone) { const sourcemap = process.env.NODE_ENV === "production"; return Promise.all( packages.map( @@ -331,6 +331,12 @@ function buildRollup(packages, targetBrowsers) { const external = [ ...Object.keys(dependencies), ...Object.keys(peerDependencies), + // @babel/compat-data sub exports + "@babel/compat-data/overlapping-plugins", + "@babel/compat-data/plugins", + "@babel/compat-data/plugin-bugfixes", + "@babel/compat-data/native-modules", + "@babel/compat-data/corejs2-built-ins", // Ideally they should be constructed from package.json exports // required by modules-commonjs "babel-plugin-dynamic-import-node/utils", @@ -347,6 +353,8 @@ function buildRollup(packages, targetBrowsers) { const bundle = await rollup({ input, external, + // all node modules are resolved as if they were placed in the n_m folder of package root + preserveSymlinks: true, onwarn(warning, warn) { switch (warning.code) { case "CIRCULAR_DEPENDENCY": @@ -392,14 +400,15 @@ function buildRollup(packages, targetBrowsers) { }), rollupCommonJs({ include: [ - /node_modules/, + // Only bundle node modules when building standalone + buildStandalone ? /node_modules/ : "./node_modules/*/*.js", "packages/babel-runtime/regenerator/**", "packages/babel-runtime/helpers/*.js", "packages/babel-preset-env/data/*.js", // Rollup doesn't read export maps, so it loads the cjs fallback "packages/babel-compat-data/*.js", "packages/*/src/**/*.cjs", - ], + ].filter(Boolean), dynamicRequireTargets: [ // https://github.com/mathiasbynens/regexpu-core/blob/ffd8fff2e31f4597f6fdfee75d5ac1c5c8111ec3/rewrite-pattern.js#L48 resolveChain( @@ -424,14 +433,14 @@ function buildRollup(packages, targetBrowsers) { }), rollupNodeResolve({ extensions: [".ts", ".js", ".mjs", ".cjs", ".json"], - browser: targetBrowsers, - exportConditions: targetBrowsers ? ["browser"] : [], + browser: buildStandalone, + exportConditions: buildStandalone ? ["browser"] : [], // It needs to be set to 'false' when using rollupNodePolyfills // https://github.com/rollup/plugins/issues/772 - preferBuiltins: !targetBrowsers, + preferBuiltins: !buildStandalone, }), rollupJson(), - targetBrowsers && + buildStandalone && rollupPolyfillNode({ sourceMap: sourcemap, include: "**/*.{js,cjs,ts}", @@ -473,7 +482,7 @@ function buildRollup(packages, targetBrowsers) { }); // Only minify @babel/standalone - if (src !== "packages/babel-standalone") { + if (!buildStandalone) { return; } @@ -607,7 +616,7 @@ function* libBundlesIterator() { } let libBundles; -if (process.env.BABEL_8_BREAKING) { +if (process.env.B_ALL) { libBundles = [...libBundlesIterator()]; } else { libBundles = [ From 8d345df2c3e0f31763eaa420158d74d9e05ca1b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 24 Jan 2022 17:22:01 -0500 Subject: [PATCH 11/20] do not specify external when building standalone --- Gulpfile.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index 8c7797504259..ff1b8f11e52d 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -352,7 +352,7 @@ function buildRollup(packages, buildStandalone) { log(`Compiling '${chalk.cyan(input)}' with rollup ...`); const bundle = await rollup({ input, - external, + external: buildStandalone ? [] : external, // all node modules are resolved as if they were placed in the n_m folder of package root preserveSymlinks: true, onwarn(warning, warn) { @@ -616,7 +616,7 @@ function* libBundlesIterator() { } let libBundles; -if (process.env.B_ALL) { +if (process.env.BABEL_8_BREAKING) { libBundles = [...libBundlesIterator()]; } else { libBundles = [ From fb0c6ba913c878f0436f93344f9a96226461106c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Thu, 27 Jan 2022 15:59:02 -0500 Subject: [PATCH 12/20] cast BABEL_8_BREAKING to bool --- Gulpfile.mjs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index ff1b8f11e52d..fc9549dad94e 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -47,6 +47,11 @@ const buildTypingsWatchGlob = [ "./packages/babel-types/scripts/generators/*.js", ]; +// env vars from the cli are always strings, so !!ENV_VAR returns true for "false" +function bool(value) { + return value && value !== "false" && value !== "0"; +} + /** * map source code path to the generated artifacts path * @example @@ -616,7 +621,7 @@ function* libBundlesIterator() { } let libBundles; -if (process.env.BABEL_8_BREAKING) { +if (bool(process.env.BABEL_8_BREAKING)) { libBundles = [...libBundlesIterator()]; } else { libBundles = [ From 813405c5f4cbd70a85ef66880fb18a7320afa8e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Thu, 27 Jan 2022 16:33:02 -0500 Subject: [PATCH 13/20] do not bundle plugin-transform-react-jsx --- Gulpfile.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index fc9549dad94e..0aa2653cd226 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -574,7 +574,9 @@ function* libBundlesIterator() { // @babel/node invokes internal lib/_babel-node.js dir === "babel-node" || // todo: test/helpers/define-helper requires internal lib/helpers access - dir === "babel-helpers" + dir === "babel-helpers" || + // multiple exports + dir === "babel-plugin-transform-react-jsx" ) { continue; } From 3de1482213c77cc555c076223bb867180badd13b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 27 Jul 2022 13:27:52 -0400 Subject: [PATCH 14/20] fix linting errors --- packages/babel-generator/test/printer.skip-bundled.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-generator/test/printer.skip-bundled.js b/packages/babel-generator/test/printer.skip-bundled.js index 2b10618426e1..dbb594da2a1f 100644 --- a/packages/babel-generator/test/printer.skip-bundled.js +++ b/packages/babel-generator/test/printer.skip-bundled.js @@ -1,6 +1,6 @@ import * as t from "@babel/types"; import _Printer from "../lib/printer.js"; -const Printer = _Printer.default; +const Printer = _Printer.default || _Printer; describe("Printer", () => { it("completeness", function () { From 29fade19d6a3921b3932fd017e96e37389112b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 27 Jul 2022 13:30:10 -0400 Subject: [PATCH 15/20] output ESM module when USE_ESM is specified --- Gulpfile.mjs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index 0aa2653cd226..01912179784f 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -596,8 +596,7 @@ function* libBundlesIterator() { if (pkgJSON.main) { yield { src, - // todo: output es format when we generate type: "module" on Babel 8 build - format: "cjs", + format: USE_ESM ? "esm" : "cjs", dest: "lib", input: getIndexFromPackage(src), }; @@ -610,8 +609,7 @@ function* libBundlesIterator() { : `${src}/src/${filename.slice(0, -3) + ".ts"}`; yield { src, - // todo: output es format when we generate type: "module" on Babel 8 build - format: "cjs", + format: USE_ESM ? "esm" : "cjs", dest: "lib", filename, input, From d34a99da4b3f3d7b2561fb74c6731fd50f9c5068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 19 Jan 2022 11:53:05 -0500 Subject: [PATCH 16/20] chore: avoid reading @babel/types internals --- .../babel-types/scripts/generators/asserts.js | 17 ++++--- .../scripts/generators/builders.js | 45 ++++++++++--------- .../scripts/generators/constants.js | 4 +- .../scripts/generators/validators.js | 30 +++++++------ 4 files changed, 53 insertions(+), 43 deletions(-) diff --git a/packages/babel-types/scripts/generators/asserts.js b/packages/babel-types/scripts/generators/asserts.js index 1d862e417601..34e4e57e9543 100644 --- a/packages/babel-types/scripts/generators/asserts.js +++ b/packages/babel-types/scripts/generators/asserts.js @@ -1,8 +1,13 @@ -import * as definitions from "../../lib/definitions/index.js"; +import { + DEPRECATED_KEYS, + FLIPPED_ALIAS_KEYS, + NODE_FIELDS, + VISITOR_KEYS, +} from "../../lib/index.js"; function addAssertHelper(type) { const result = - definitions.NODE_FIELDS[type] || definitions.FLIPPED_ALIAS_KEYS[type] + NODE_FIELDS[type] || FLIPPED_ALIAS_KEYS[type] ? `node is t.${type}` : "boolean"; @@ -30,16 +35,16 @@ function assert(type: string, node: any, opts?: any): void { } }\n\n`; - Object.keys(definitions.VISITOR_KEYS).forEach(type => { + Object.keys(VISITOR_KEYS).forEach(type => { output += addAssertHelper(type); }); - Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => { + Object.keys(FLIPPED_ALIAS_KEYS).forEach(type => { output += addAssertHelper(type); }); - Object.keys(definitions.DEPRECATED_KEYS).forEach(type => { - const newType = definitions.DEPRECATED_KEYS[type]; + Object.keys(DEPRECATED_KEYS).forEach(type => { + const newType = DEPRECATED_KEYS[type]; output += `export function assert${type}(node: any, opts: any): void { console.trace("The node type ${type} has been renamed to ${newType}"); assert("${type}", node, opts); diff --git a/packages/babel-types/scripts/generators/builders.js b/packages/babel-types/scripts/generators/builders.js index 46566f58c4c6..9e2bc0e7aea6 100644 --- a/packages/babel-types/scripts/generators/builders.js +++ b/packages/babel-types/scripts/generators/builders.js @@ -1,5 +1,9 @@ -import * as t from "../../lib/index.js"; -import * as definitions from "../../lib/definitions/index.js"; +import { + BUILDER_KEYS, + DEPRECATED_KEYS, + NODE_FIELDS, + toBindingIdentifierName, +} from "../../lib/index.js"; import formatBuilderName from "../utils/formatBuilderName.js"; import lowerFirst from "../utils/lowerFirst.js"; import stringifyValidator from "../utils/stringifyValidator.js"; @@ -19,8 +23,8 @@ function isNullable(field) { function sortFieldNames(fields, type) { return fields.sort((fieldA, fieldB) => { - const indexA = t.BUILDER_KEYS[type].indexOf(fieldA); - const indexB = t.BUILDER_KEYS[type].indexOf(fieldB); + const indexA = BUILDER_KEYS[type].indexOf(fieldA); + const indexB = BUILDER_KEYS[type].indexOf(fieldB); if (indexA === indexB) return fieldA < fieldB ? -1 : 1; if (indexA === -1) return 1; if (indexB === -1) return -1; @@ -29,9 +33,9 @@ function sortFieldNames(fields, type) { } function generateBuilderArgs(type) { - const fields = t.NODE_FIELDS[type]; - const fieldNames = sortFieldNames(Object.keys(t.NODE_FIELDS[type]), type); - const builderNames = t.BUILDER_KEYS[type]; + const fields = NODE_FIELDS[type]; + const fieldNames = sortFieldNames(Object.keys(NODE_FIELDS[type]), type); + const builderNames = BUILDER_KEYS[type]; const args = []; @@ -51,9 +55,9 @@ function generateBuilderArgs(type) { } if (builderNames.includes(fieldName)) { - const field = definitions.NODE_FIELDS[type][fieldName]; + const field = NODE_FIELDS[type][fieldName]; const def = JSON.stringify(field.default); - const bindingIdentifierName = t.toBindingIdentifierName(fieldName); + const bindingIdentifierName = toBindingIdentifierName(fieldName); let arg; if (areAllRemainingFieldsNullable(fieldName, builderNames, fields)) { arg = `${bindingIdentifierName}${ @@ -90,23 +94,20 @@ import type * as t from "../.."; `; const reservedNames = new Set(["super", "import"]); - Object.keys(definitions.BUILDER_KEYS).forEach(type => { + Object.keys(BUILDER_KEYS).forEach(type => { const defArgs = generateBuilderArgs(type); const formatedBuilderName = formatBuilderName(type); const formatedBuilderNameLocal = reservedNames.has(formatedBuilderName) ? `_${formatedBuilderName}` : formatedBuilderName; - const fieldNames = sortFieldNames( - Object.keys(definitions.NODE_FIELDS[type]), - type - ); - const builderNames = definitions.BUILDER_KEYS[type]; + const fieldNames = sortFieldNames(Object.keys(NODE_FIELDS[type]), type); + const builderNames = BUILDER_KEYS[type]; const objectFields = [["type", JSON.stringify(type)]]; fieldNames.forEach(fieldName => { - const field = definitions.NODE_FIELDS[type][fieldName]; + const field = NODE_FIELDS[type][fieldName]; if (builderNames.includes(fieldName)) { - const bindingIdentifierName = t.toBindingIdentifierName(fieldName); + const bindingIdentifierName = toBindingIdentifierName(fieldName); objectFields.push([fieldName, bindingIdentifierName]); } else if (!field.optional) { const def = JSON.stringify(field.default); @@ -143,14 +144,14 @@ import type * as t from "../.."; } }); - Object.keys(definitions.DEPRECATED_KEYS).forEach(type => { - const newType = definitions.DEPRECATED_KEYS[type]; + Object.keys(DEPRECATED_KEYS).forEach(type => { + const newType = DEPRECATED_KEYS[type]; const formatedBuilderName = formatBuilderName(type); const formatedNewBuilderName = formatBuilderName(newType); output += `/** @deprecated */ function ${type}(${generateBuilderArgs(newType).join(", ")}) { console.trace("The node type ${type} has been renamed to ${newType}"); - return ${formatedNewBuilderName}(${t.BUILDER_KEYS[newType].join(", ")}); + return ${formatedNewBuilderName}(${BUILDER_KEYS[newType].join(", ")}); } export { ${type} as ${formatedBuilderName} };\n`; // This is needed for backwards compatibility. @@ -177,12 +178,12 @@ function generateUppercaseBuilders() { export {\n`; - Object.keys(definitions.BUILDER_KEYS).forEach(type => { + Object.keys(BUILDER_KEYS).forEach(type => { const formatedBuilderName = formatBuilderName(type); output += ` ${formatedBuilderName} as ${type},\n`; }); - Object.keys(definitions.DEPRECATED_KEYS).forEach(type => { + Object.keys(DEPRECATED_KEYS).forEach(type => { const formatedBuilderName = formatBuilderName(type); output += ` ${formatedBuilderName} as ${type},\n`; }); diff --git a/packages/babel-types/scripts/generators/constants.js b/packages/babel-types/scripts/generators/constants.js index 65b7a905d77e..afa9009d695f 100644 --- a/packages/babel-types/scripts/generators/constants.js +++ b/packages/babel-types/scripts/generators/constants.js @@ -1,4 +1,4 @@ -import * as definitions from "../../lib/definitions/index.js"; +import { FLIPPED_ALIAS_KEYS } from "../../lib/index.js"; export default function generateConstants() { let output = `/* @@ -7,7 +7,7 @@ export default function generateConstants() { */ import { FLIPPED_ALIAS_KEYS } from "../../definitions";\n\n`; - Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => { + Object.keys(FLIPPED_ALIAS_KEYS).forEach(type => { output += `export const ${type.toUpperCase()}_TYPES = FLIPPED_ALIAS_KEYS["${type}"];\n`; }); diff --git a/packages/babel-types/scripts/generators/validators.js b/packages/babel-types/scripts/generators/validators.js index 85c8b4906c8d..f7ac23a51830 100644 --- a/packages/babel-types/scripts/generators/validators.js +++ b/packages/babel-types/scripts/generators/validators.js @@ -1,4 +1,11 @@ -import * as definitions from "../../lib/definitions/index.js"; +import { + DEPRECATED_KEYS, + FLIPPED_ALIAS_KEYS, + NODE_FIELDS, + PLACEHOLDERS, + PLACEHOLDERS_FLIPPED_ALIAS, + VISITOR_KEYS, +} from "../../lib/index.js"; const has = Function.call.bind(Object.prototype.hasOwnProperty); @@ -17,14 +24,11 @@ function addIsHelper(type, aliasKeys, deprecated) { let placeholderSource = ""; const placeholderTypes = []; - if ( - definitions.PLACEHOLDERS.includes(type) && - has(definitions.FLIPPED_ALIAS_KEYS, type) - ) { + if (PLACEHOLDERS.includes(type) && has(FLIPPED_ALIAS_KEYS, type)) { placeholderTypes.push(type); } - if (has(definitions.PLACEHOLDERS_FLIPPED_ALIAS, type)) { - placeholderTypes.push(...definitions.PLACEHOLDERS_FLIPPED_ALIAS[type]); + if (has(PLACEHOLDERS_FLIPPED_ALIAS, type)) { + placeholderTypes.push(...PLACEHOLDERS_FLIPPED_ALIAS[type]); } if (placeholderTypes.length > 0) { placeholderSource = @@ -37,7 +41,7 @@ function addIsHelper(type, aliasKeys, deprecated) { } const result = - definitions.NODE_FIELDS[type] || definitions.FLIPPED_ALIAS_KEYS[type] + NODE_FIELDS[type] || FLIPPED_ALIAS_KEYS[type] ? `node is t.${type}` : "boolean"; @@ -69,16 +73,16 @@ export default function generateValidators() { import shallowEqual from "../../utils/shallowEqual"; import type * as t from "../..";\n\n`; - Object.keys(definitions.VISITOR_KEYS).forEach(type => { + Object.keys(VISITOR_KEYS).forEach(type => { output += addIsHelper(type); }); - Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => { - output += addIsHelper(type, definitions.FLIPPED_ALIAS_KEYS[type]); + Object.keys(FLIPPED_ALIAS_KEYS).forEach(type => { + output += addIsHelper(type, FLIPPED_ALIAS_KEYS[type]); }); - Object.keys(definitions.DEPRECATED_KEYS).forEach(type => { - const newType = definitions.DEPRECATED_KEYS[type]; + Object.keys(DEPRECATED_KEYS).forEach(type => { + const newType = DEPRECATED_KEYS[type]; const deprecated = `console.trace("The node type ${type} has been renamed to ${newType}");`; output += addIsHelper(type, null, deprecated); }); From c057d841319ac9363604473fd6bbfef64e1e62b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 27 Jul 2022 15:04:48 -0400 Subject: [PATCH 17/20] Update Gulpfile.mjs Co-authored-by: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> --- Gulpfile.mjs | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index 01912179784f..e30df6f2f601 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -468,21 +468,18 @@ function buildRollup(packages, buildStandalone) { // We have manually applied commonjs-esm interop to the source // for library not in this monorepo // https://github.com/babel/babel/pull/12795 - if (id.startsWith("@babel/")) { - // Some syntax plugins have been archived - if (id.includes("plugin-syntax")) { - const srcPath = id.replace("@babel/", "babel-"); - if ( - !fs.existsSync( - new URL("./packages/" + srcPath, import.meta.url) - ) - ) { - return false; - } - } - return true; + if (!id.startsWith("@babel/")) return false; + + // Some syntax plugins have been archived + if (id.includes("plugin-syntax")) { + const srcPath = new URL( + "./packages/" + id.replace("@babel/", "babel-"), + import.meta.url + ); + if (!fs.existsSync(srcPath)) return false; } - return false; + + return true; }, }); From fe14c1f206851b937251b90a53b85e3b2be69bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 27 Jul 2022 15:50:47 -0400 Subject: [PATCH 18/20] Apply suggestions from code review Co-authored-by: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> --- Gulpfile.mjs | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index e30df6f2f601..b8a706e6524b 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -413,7 +413,7 @@ function buildRollup(packages, buildStandalone) { // Rollup doesn't read export maps, so it loads the cjs fallback "packages/babel-compat-data/*.js", "packages/*/src/**/*.cjs", - ].filter(Boolean), + ], dynamicRequireTargets: [ // https://github.com/mathiasbynens/regexpu-core/blob/ffd8fff2e31f4597f6fdfee75d5ac1c5c8111ec3/rewrite-pattern.js#L48 resolveChain( @@ -557,23 +557,25 @@ function* libBundlesIterator() { for (const packageDir of ["packages", "codemods"]) { for (const dir of fs.readdirSync(new URL(packageDir, import.meta.url))) { if ( - // @rollup/plugin-commonjs will mess up with babel-helper-fixtures - dir === "babel-helper-fixtures" || - // babel-standalone is handled by rollup-babel-standalone task - dir === "babel-standalone" || - // todo: Rollup hangs on allowHashBang: true with babel-cli/src/babel/index.ts hashbang - dir === "babel-cli" || - // todo: @rollup/node-resolve 'browsers' option does not work when package.json contains `exports` - // https://github.com/rollup/plugins/tree/master/packages/node-resolve#browser - dir === "babel-register" || - dir === "babel-core" || - dir === "babel-plugin-transform-runtime" || - // @babel/node invokes internal lib/_babel-node.js - dir === "babel-node" || - // todo: test/helpers/define-helper requires internal lib/helpers access - dir === "babel-helpers" || - // multiple exports - dir === "babel-plugin-transform-react-jsx" + [ + // @rollup/plugin-commonjs will mess up with babel-helper-fixtures + "babel-helper-fixtures", + // babel-standalone is handled by rollup-babel-standalone task + "babel-standalone", + // todo: Rollup hangs on allowHashBang: true with babel-cli/src/babel/index.ts hashbang + "babel-cli", + // todo: @rollup/node-resolve 'browsers' option does not work when package.json contains `exports` + // https://github.com/rollup/plugins/tree/master/packages/node-resolve#browser + "babel-register", + "babel-core", + "babel-plugin-transform-runtime", + // @babel/node invokes internal lib/_babel-node.js + "babel-node", + // todo: test/helpers/define-helper requires internal lib/helpers access + "babel-helpers", + // multiple exports + "babel-plugin-transform-react-jsx", + ].includes(dir) ) { continue; } From a8e086ebad020c65114d28b34de0386fb24fa747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 27 Jul 2022 15:53:04 -0400 Subject: [PATCH 19/20] support mjs in rollup node polyfill --- Gulpfile.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index b8a706e6524b..b196115932b0 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -448,7 +448,7 @@ function buildRollup(packages, buildStandalone) { buildStandalone && rollupPolyfillNode({ sourceMap: sourcemap, - include: "**/*.{js,cjs,ts}", + include: "**/*.{js,mjs,cjs,ts}", }), ].filter(Boolean), acorn: { From 331d0be12b3636c8b8296de01a878b2d790899d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Fri, 16 Sep 2022 16:32:45 +0900 Subject: [PATCH 20/20] Minor style updates --- Gulpfile.mjs | 56 ++++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/Gulpfile.mjs b/Gulpfile.mjs index b196115932b0..7cc77ee2780e 100644 --- a/Gulpfile.mjs +++ b/Gulpfile.mjs @@ -405,7 +405,7 @@ function buildRollup(packages, buildStandalone) { }), rollupCommonJs({ include: [ - // Only bundle node modules when building standalone + // Bundle node_modules only when building standalone buildStandalone ? /node_modules/ : "./node_modules/*/*.js", "packages/babel-runtime/regenerator/**", "packages/babel-runtime/helpers/*.js", @@ -554,44 +554,40 @@ function copyDts(packages) { } function* libBundlesIterator() { + const noBundle = new Set([ + // @rollup/plugin-commonjs will mess up with babel-helper-fixtures + "babel-helper-fixtures", + // babel-standalone is handled by rollup-babel-standalone task + "babel-standalone", + // todo: Rollup hangs on allowHashBang: true with babel-cli/src/babel/index.ts hashbang + "babel-cli", + // todo: @rollup/node-resolve 'browsers' option does not work when package.json contains `exports` + // https://github.com/rollup/plugins/tree/master/packages/node-resolve#browser + "babel-register", + "babel-core", + "babel-plugin-transform-runtime", + // @babel/node invokes internal lib/_babel-node.js + "babel-node", + // todo: test/helpers/define-helper requires internal lib/helpers access + "babel-helpers", + // multiple exports + "babel-plugin-transform-react-jsx", + ]); for (const packageDir of ["packages", "codemods"]) { for (const dir of fs.readdirSync(new URL(packageDir, import.meta.url))) { - if ( - [ - // @rollup/plugin-commonjs will mess up with babel-helper-fixtures - "babel-helper-fixtures", - // babel-standalone is handled by rollup-babel-standalone task - "babel-standalone", - // todo: Rollup hangs on allowHashBang: true with babel-cli/src/babel/index.ts hashbang - "babel-cli", - // todo: @rollup/node-resolve 'browsers' option does not work when package.json contains `exports` - // https://github.com/rollup/plugins/tree/master/packages/node-resolve#browser - "babel-register", - "babel-core", - "babel-plugin-transform-runtime", - // @babel/node invokes internal lib/_babel-node.js - "babel-node", - // todo: test/helpers/define-helper requires internal lib/helpers access - "babel-helpers", - // multiple exports - "babel-plugin-transform-react-jsx", - ].includes(dir) - ) { - continue; - } + if (noBundle.has(dir)) continue; + + const src = `${packageDir}/${dir}`; let pkgJSON; try { pkgJSON = JSON.parse( - fs.readFileSync( - new URL(`${packageDir}/${dir}/package.json`, import.meta.url) - ) + fs.readFileSync(new URL(`${src}/package.json`, import.meta.url)) ); } catch (err) { if (err.code !== "ENOENT" && err.code !== "ENOTDIR") throw err; + continue; } - if (pkgJSON === undefined) continue; - const src = packageDir + "/" + dir; if (pkgJSON.main) { yield { src, @@ -621,7 +617,7 @@ function* libBundlesIterator() { let libBundles; if (bool(process.env.BABEL_8_BREAKING)) { - libBundles = [...libBundlesIterator()]; + libBundles = Array.from(libBundlesIterator()); } else { libBundles = [ "packages/babel-parser",