From b26c4c0f0b90524a3a6a90ef3097e91b7d5f3cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Sun, 25 Nov 2018 20:41:00 +0100 Subject: [PATCH 1/5] Make @babel/plugin-class-features a normal helper package This effectively disallows using it directly. --- .../.npmignore | 0 .../README.md | 0 .../package.json | 2 +- .../src/decorators.js | 0 .../src/features.js | 0 .../src/fields.js | 0 .../src/index.js | 63 ++++--------------- .../src/misc.js | 0 .../loose-not-overwritten/input.js | 0 .../loose-not-overwritten/options.json | 0 .../loose-not-overwritten/output.js | 0 .../test/index.js | 0 .../package.json | 2 +- .../src/index.js | 21 +++---- 14 files changed, 23 insertions(+), 65 deletions(-) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/.npmignore (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/README.md (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/package.json (94%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/src/decorators.js (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/src/features.js (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/src/fields.js (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/src/index.js (73%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/src/misc.js (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js (100%) rename packages/{babel-plugin-class-features => babel-helper-class-features-plugin}/test/index.js (100%) diff --git a/packages/babel-plugin-class-features/.npmignore b/packages/babel-helper-class-features-plugin/.npmignore similarity index 100% rename from packages/babel-plugin-class-features/.npmignore rename to packages/babel-helper-class-features-plugin/.npmignore diff --git a/packages/babel-plugin-class-features/README.md b/packages/babel-helper-class-features-plugin/README.md similarity index 100% rename from packages/babel-plugin-class-features/README.md rename to packages/babel-helper-class-features-plugin/README.md diff --git a/packages/babel-plugin-class-features/package.json b/packages/babel-helper-class-features-plugin/package.json similarity index 94% rename from packages/babel-plugin-class-features/package.json rename to packages/babel-helper-class-features-plugin/package.json index 1d55b96bd6fc..8e82bcb06a56 100644 --- a/packages/babel-plugin-class-features/package.json +++ b/packages/babel-helper-class-features-plugin/package.json @@ -1,5 +1,5 @@ { - "name": "@babel/plugin-class-features", + "name": "@babel/helper-class-features-plugin", "version": "7.1.4", "author": "The Babel Team (https://babeljs.io/team)", "license": "MIT", diff --git a/packages/babel-plugin-class-features/src/decorators.js b/packages/babel-helper-class-features-plugin/src/decorators.js similarity index 100% rename from packages/babel-plugin-class-features/src/decorators.js rename to packages/babel-helper-class-features-plugin/src/decorators.js diff --git a/packages/babel-plugin-class-features/src/features.js b/packages/babel-helper-class-features-plugin/src/features.js similarity index 100% rename from packages/babel-plugin-class-features/src/features.js rename to packages/babel-helper-class-features-plugin/src/features.js diff --git a/packages/babel-plugin-class-features/src/fields.js b/packages/babel-helper-class-features-plugin/src/fields.js similarity index 100% rename from packages/babel-plugin-class-features/src/fields.js rename to packages/babel-helper-class-features-plugin/src/fields.js diff --git a/packages/babel-plugin-class-features/src/index.js b/packages/babel-helper-class-features-plugin/src/index.js similarity index 73% rename from packages/babel-plugin-class-features/src/index.js rename to packages/babel-helper-class-features-plugin/src/index.js index 1109c7792fb4..3fb6f38054f5 100644 --- a/packages/babel-plugin-class-features/src/index.js +++ b/packages/babel-helper-class-features-plugin/src/index.js @@ -1,4 +1,3 @@ -import { declare } from "@babel/helper-plugin-utils"; import nameFunction from "@babel/helper-function-name"; import { types as t } from "@babel/core"; import { @@ -12,13 +11,12 @@ import { enableFeature, verifyUsedFeatures, FEATURES, - setLoose, isLoose, } from "./features"; import pkg from "../package.json"; -export { enableFeature, FEATURES, setLoose }; +export { FEATURES }; // Note: Versions are represented as an integer. e.g. 7.1.5 is represented // as 70000100005. This method is easier than using a semver-parsing @@ -27,60 +25,23 @@ export { enableFeature, FEATURES, setLoose }; const version = pkg.version.split(".").reduce((v, x) => v * 1e5 + +x, 0); const versionKey = "@babel/plugin-class-features/version"; -const getFeatureOptions = (options, name) => { - const value = options[name]; - - if (value === undefined || value === false) return { enabled: false }; - if (value === true) return { enabled: true, loose: false }; - - if (typeof value === "object") { - if ( - typeof value.loose !== "undefined" && - typeof value.loose !== "boolean" - ) { - throw new Error(`.${name}.loose must be a boolean or undefined.`); - } - - return { enabled: true, loose: !!value.loose }; - } - - throw new Error( - `.${name} must be a boolean, an object with a 'loose'` + - ` property or undefined.`, - ); -}; - -export default declare((api, options) => { - api.assertVersion(7); - - const fields = getFeatureOptions(options, "fields"); - const privateMethods = getFeatureOptions(options, "privateMethods"); - const decorators = getFeatureOptions(options, "decorators"); - +export function createClassFeaturePlugin({ + name, + feature, + loose, + manipulateOptions, +}) { return { - name: "class-features", + name: "class-features/" + name, - manipulateOptions(opts, parserOpts) { - if (fields) { - parserOpts.plugins.push("classProperties", "classPrivateProperties"); - } - }, + manipulateOptions: manipulateOptions, pre() { + enableFeature(this.file, feature, loose); + if (!this.file.get(versionKey) || this.file.get(versionKey) < version) { this.file.set(versionKey, version); } - - if (fields.enabled) { - enableFeature(this.file, FEATURES.fields, fields.loose); - } - if (privateMethods.enabled) { - enableFeature(this.file, FEATURES.privateMethods); - } - if (decorators.enabled) { - throw new Error("Decorators are not supported yet"); - enableFeature(this.file, FEATURES.decorators); - } }, visitor: { @@ -203,4 +164,4 @@ export default declare((api, options) => { }, }, }; -}); +} diff --git a/packages/babel-plugin-class-features/src/misc.js b/packages/babel-helper-class-features-plugin/src/misc.js similarity index 100% rename from packages/babel-plugin-class-features/src/misc.js rename to packages/babel-helper-class-features-plugin/src/misc.js diff --git a/packages/babel-plugin-class-features/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js b/packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js similarity index 100% rename from packages/babel-plugin-class-features/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js rename to packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js diff --git a/packages/babel-plugin-class-features/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json b/packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json similarity index 100% rename from packages/babel-plugin-class-features/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json rename to packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json diff --git a/packages/babel-plugin-class-features/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js b/packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js similarity index 100% rename from packages/babel-plugin-class-features/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js rename to packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js diff --git a/packages/babel-plugin-class-features/test/index.js b/packages/babel-helper-class-features-plugin/test/index.js similarity index 100% rename from packages/babel-plugin-class-features/test/index.js rename to packages/babel-helper-class-features-plugin/test/index.js diff --git a/packages/babel-plugin-proposal-class-properties/package.json b/packages/babel-plugin-proposal-class-properties/package.json index 876711b7c0e0..e92ef25d19dd 100644 --- a/packages/babel-plugin-proposal-class-properties/package.json +++ b/packages/babel-plugin-proposal-class-properties/package.json @@ -13,7 +13,7 @@ ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-class-features": "^7.1.4" + "@babel/helper-class-features-plugin": "^7.1.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" diff --git a/packages/babel-plugin-proposal-class-properties/src/index.js b/packages/babel-plugin-proposal-class-properties/src/index.js index 96b66020a1ef..b6ed4d4b2f11 100644 --- a/packages/babel-plugin-proposal-class-properties/src/index.js +++ b/packages/babel-plugin-proposal-class-properties/src/index.js @@ -1,25 +1,22 @@ +/* eslint-disable local-rules/plugin-name */ + import { declare } from "@babel/helper-plugin-utils"; -import pluginClassFeatures, { - enableFeature, +import { + createClassFeaturePlugin, FEATURES, -} from "@babel/plugin-class-features"; +} from "@babel/helper-class-features-plugin"; export default declare((api, options) => { api.assertVersion(7); - const { loose } = options; - - return { + return createClassFeaturePlugin({ name: "proposal-class-properties", - inherits: pluginClassFeatures, + feature: FEATURES.fields, + loose: options.loose, manipulateOptions(opts, parserOpts) { parserOpts.plugins.push("classProperties", "classPrivateProperties"); }, - - pre() { - enableFeature(this.file, FEATURES.fields, loose); - }, - }; + }); }); From c693102896607853b71cc1dd1ea8e629bf2f434e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 26 Nov 2018 21:22:30 +0100 Subject: [PATCH 2/5] Rename helper --- .../.npmignore | 0 .../README.md | 0 .../package.json | 2 +- .../src/decorators.js | 0 .../src/features.js | 0 .../src/fields.js | 0 .../src/index.js | 0 .../src/misc.js | 0 .../loose-not-overwritten/input.js | 0 .../loose-not-overwritten/options.json | 0 .../loose-not-overwritten/output.js | 0 .../test/index.js | 0 packages/babel-plugin-proposal-class-properties/package.json | 2 +- packages/babel-plugin-proposal-class-properties/src/index.js | 2 +- 14 files changed, 3 insertions(+), 3 deletions(-) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/.npmignore (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/README.md (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/package.json (93%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/src/decorators.js (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/src/features.js (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/src/fields.js (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/src/index.js (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/src/misc.js (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js (100%) rename packages/{babel-helper-class-features-plugin => babel-helper-create-class-features-plugin}/test/index.js (100%) diff --git a/packages/babel-helper-class-features-plugin/.npmignore b/packages/babel-helper-create-class-features-plugin/.npmignore similarity index 100% rename from packages/babel-helper-class-features-plugin/.npmignore rename to packages/babel-helper-create-class-features-plugin/.npmignore diff --git a/packages/babel-helper-class-features-plugin/README.md b/packages/babel-helper-create-class-features-plugin/README.md similarity index 100% rename from packages/babel-helper-class-features-plugin/README.md rename to packages/babel-helper-create-class-features-plugin/README.md diff --git a/packages/babel-helper-class-features-plugin/package.json b/packages/babel-helper-create-class-features-plugin/package.json similarity index 93% rename from packages/babel-helper-class-features-plugin/package.json rename to packages/babel-helper-create-class-features-plugin/package.json index 8e82bcb06a56..90a8bf49d742 100644 --- a/packages/babel-helper-class-features-plugin/package.json +++ b/packages/babel-helper-create-class-features-plugin/package.json @@ -1,5 +1,5 @@ { - "name": "@babel/helper-class-features-plugin", + "name": "@babel/helper-create-class-features-plugin", "version": "7.1.4", "author": "The Babel Team (https://babeljs.io/team)", "license": "MIT", diff --git a/packages/babel-helper-class-features-plugin/src/decorators.js b/packages/babel-helper-create-class-features-plugin/src/decorators.js similarity index 100% rename from packages/babel-helper-class-features-plugin/src/decorators.js rename to packages/babel-helper-create-class-features-plugin/src/decorators.js diff --git a/packages/babel-helper-class-features-plugin/src/features.js b/packages/babel-helper-create-class-features-plugin/src/features.js similarity index 100% rename from packages/babel-helper-class-features-plugin/src/features.js rename to packages/babel-helper-create-class-features-plugin/src/features.js diff --git a/packages/babel-helper-class-features-plugin/src/fields.js b/packages/babel-helper-create-class-features-plugin/src/fields.js similarity index 100% rename from packages/babel-helper-class-features-plugin/src/fields.js rename to packages/babel-helper-create-class-features-plugin/src/fields.js diff --git a/packages/babel-helper-class-features-plugin/src/index.js b/packages/babel-helper-create-class-features-plugin/src/index.js similarity index 100% rename from packages/babel-helper-class-features-plugin/src/index.js rename to packages/babel-helper-create-class-features-plugin/src/index.js diff --git a/packages/babel-helper-class-features-plugin/src/misc.js b/packages/babel-helper-create-class-features-plugin/src/misc.js similarity index 100% rename from packages/babel-helper-class-features-plugin/src/misc.js rename to packages/babel-helper-create-class-features-plugin/src/misc.js diff --git a/packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js b/packages/babel-helper-create-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js similarity index 100% rename from packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js rename to packages/babel-helper-create-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/input.js diff --git a/packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json b/packages/babel-helper-create-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json similarity index 100% rename from packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json rename to packages/babel-helper-create-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/options.json diff --git a/packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js b/packages/babel-helper-create-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js similarity index 100% rename from packages/babel-helper-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js rename to packages/babel-helper-create-class-features-plugin/test/fixtures/plugin-proposal-class-properties/loose-not-overwritten/output.js diff --git a/packages/babel-helper-class-features-plugin/test/index.js b/packages/babel-helper-create-class-features-plugin/test/index.js similarity index 100% rename from packages/babel-helper-class-features-plugin/test/index.js rename to packages/babel-helper-create-class-features-plugin/test/index.js diff --git a/packages/babel-plugin-proposal-class-properties/package.json b/packages/babel-plugin-proposal-class-properties/package.json index e92ef25d19dd..2a644c0e830d 100644 --- a/packages/babel-plugin-proposal-class-properties/package.json +++ b/packages/babel-plugin-proposal-class-properties/package.json @@ -13,7 +13,7 @@ ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-class-features-plugin": "^7.1.4" + "@babel/helper-create-class-features-plugin": "^7.1.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" diff --git a/packages/babel-plugin-proposal-class-properties/src/index.js b/packages/babel-plugin-proposal-class-properties/src/index.js index b6ed4d4b2f11..8f749fc32764 100644 --- a/packages/babel-plugin-proposal-class-properties/src/index.js +++ b/packages/babel-plugin-proposal-class-properties/src/index.js @@ -4,7 +4,7 @@ import { declare } from "@babel/helper-plugin-utils"; import { createClassFeaturePlugin, FEATURES, -} from "@babel/helper-class-features-plugin"; +} from "@babel/helper-create-class-features-plugin"; export default declare((api, options) => { api.assertVersion(7); From 80040d72cae95168739f57afac96474af096341b Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Wed, 28 Nov 2018 23:49:18 +0100 Subject: [PATCH 3/5] Style Co-Authored-By: nicolo-ribaudo --- packages/babel-helper-create-class-features-plugin/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-helper-create-class-features-plugin/src/index.js b/packages/babel-helper-create-class-features-plugin/src/index.js index 3fb6f38054f5..718899e2775e 100644 --- a/packages/babel-helper-create-class-features-plugin/src/index.js +++ b/packages/babel-helper-create-class-features-plugin/src/index.js @@ -34,7 +34,7 @@ export function createClassFeaturePlugin({ return { name: "class-features/" + name, - manipulateOptions: manipulateOptions, + manipulateOptions, pre() { enableFeature(this.file, feature, loose); From cb1bb7ff3127740cf58924c95590da9527ec22ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 29 Nov 2018 15:28:42 +0100 Subject: [PATCH 4/5] Don't add prefix to plugin name --- .../babel-helper-create-class-features-plugin/src/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/babel-helper-create-class-features-plugin/src/index.js b/packages/babel-helper-create-class-features-plugin/src/index.js index 718899e2775e..87bce511b41d 100644 --- a/packages/babel-helper-create-class-features-plugin/src/index.js +++ b/packages/babel-helper-create-class-features-plugin/src/index.js @@ -32,8 +32,7 @@ export function createClassFeaturePlugin({ manipulateOptions, }) { return { - name: "class-features/" + name, - + name, manipulateOptions, pre() { From 1f538080415c2c9b69449832e59c14e19ba70384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 29 Nov 2018 15:36:45 +0100 Subject: [PATCH 5/5] Move private methods plugin --- .../package.json | 2 +- .../src/index.js | 21 ++++++++----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/babel-plugin-proposal-private-methods/package.json b/packages/babel-plugin-proposal-private-methods/package.json index 989b8015f46a..5239715d1fd9 100644 --- a/packages/babel-plugin-proposal-private-methods/package.json +++ b/packages/babel-plugin-proposal-private-methods/package.json @@ -13,7 +13,7 @@ ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-class-features": "^7.1.4" + "@babel/helper-create-class-features-plugin": "^7.1.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" diff --git a/packages/babel-plugin-proposal-private-methods/src/index.js b/packages/babel-plugin-proposal-private-methods/src/index.js index 94b19e4e75c6..89357c0692fa 100644 --- a/packages/babel-plugin-proposal-private-methods/src/index.js +++ b/packages/babel-plugin-proposal-private-methods/src/index.js @@ -1,25 +1,22 @@ +/* eslint-disable local-rules/plugin-name */ + import { declare } from "@babel/helper-plugin-utils"; -import pluginClassFeatures, { - enableFeature, +import { + createClassFeaturePlugin, FEATURES, -} from "@babel/plugin-class-features"; +} from "@babel/helper-create-class-features-plugin"; export default declare((api, options) => { api.assertVersion(7); - const { loose } = options; - - return { + return createClassFeaturePlugin({ name: "proposal-private-methods", - inherits: pluginClassFeatures, + feature: FEATURES.privateMethods, + loose: options.loose, manipulateOptions(opts, parserOpts) { parserOpts.plugins.push("classPrivateMethods"); }, - - pre() { - enableFeature(this.file, FEATURES.privateMethods, loose); - }, - }; + }); });