Skip to content

Commit

Permalink
Don't bundle unnecessary plugins in @babel/standalone
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Oct 6, 2022
1 parent 4fb29a3 commit ee6cded
Show file tree
Hide file tree
Showing 9 changed files with 297 additions and 235 deletions.
26 changes: 18 additions & 8 deletions Gulpfile.mjs
Expand Up @@ -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";

Expand Down Expand Up @@ -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
Expand All @@ -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},`;
}

Expand All @@ -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));
Expand Down Expand Up @@ -385,6 +394,7 @@ function buildRollup(packages, buildStandalone) {
throw new Error("Rollup aborted due to warnings above");
},
plugins: [
buildStandalone && rollupStandaloneInternals(),
rollupBabelSource(),
rollupReplace({
preventAssignment: true,
Expand Down
196 changes: 98 additions & 98 deletions packages/babel-core/src/parser/util/missing-plugin-helper.ts
Expand Up @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand Down Expand Up @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand Down Expand Up @@ -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",
Expand All @@ -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",
Expand Down Expand Up @@ -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
Expand Down
7 changes: 0 additions & 7 deletions packages/babel-standalone/package.json
Expand Up @@ -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:^",
Expand All @@ -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:^",
Expand Down

0 comments on commit ee6cded

Please sign in to comment.