From cb1c5eaf97b5e868696f130e99a878db6b5473f5 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Thu, 6 Apr 2017 11:21:06 -0400 Subject: [PATCH] validate useBuiltIns against true,false,entry and test --- .../src/built-in-definitions.js | 1 + .../babel-preset-env/src/normalize-options.js | 14 +++++++++- .../builtins-false/actual.js | 24 +++++++++++++++++ .../builtins-false/expected.js | 27 +++++++++++++++++++ .../builtins-false/options.json | 8 ++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/options.json diff --git a/experimental/babel-preset-env/src/built-in-definitions.js b/experimental/babel-preset-env/src/built-in-definitions.js index 4c1ce04cf7..af2c3c1417 100644 --- a/experimental/babel-preset-env/src/built-in-definitions.js +++ b/experimental/babel-preset-env/src/built-in-definitions.js @@ -1,3 +1,4 @@ +// TODO: this is the opposite of built-in-features so maybe generate one from the other? export const definitions = { builtins: { DataView: "es6.typed.data-view", diff --git a/experimental/babel-preset-env/src/normalize-options.js b/experimental/babel-preset-env/src/normalize-options.js index 2b413936ca..59304cd312 100644 --- a/experimental/babel-preset-env/src/normalize-options.js +++ b/experimental/babel-preset-env/src/normalize-options.js @@ -66,6 +66,18 @@ export const validateModulesOption = (modulesOpt = "commonjs") => { return modulesOpt; }; +export const validateUseBuiltInsOption = (builtInsOpt = true) => { + invariant( + builtInsOpt === true || builtInsOpt === false || builtInsOpt === "entry", + `Invalid Option: The 'useBuiltIns' option must be either + 'false' to indicate no polyfill, + '"entry"' to indicate replacing the entry polyfill, or + 'true' (default) to import only used polyfills per file`, + ); + + return builtInsOpt; +}; + export default function normalizeOptions(opts) { checkDuplicateIncludeExcludes(opts.include, opts.exclude); @@ -76,6 +88,6 @@ export default function normalizeOptions(opts) { loose: validateLooseOption(opts.loose), moduleType: validateModulesOption(opts.modules), targets: opts.targets, - useBuiltIns: opts.useBuiltIns === undefined ? true : opts.useBuiltIns, + useBuiltIns: validateUseBuiltInsOption(opts.useBuiltIns), }; } diff --git a/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/actual.js new file mode 100644 index 0000000000..45366a4fcb --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/actual.js @@ -0,0 +1,24 @@ +Array.from; // static method +Map; // built-in +new Promise(); // new builtin +Symbol.match; // as member expression +_arr[Symbol.iterator](); // Symbol.iterator + +// no import +Array.asdf; +Array2.from; +Map2; +new Promise2(); +Symbol.asdf; +Symbol2.match; +_arr9[Symbol2.iterator](); +_arr9[Symbol.iterator2](); + +G.assign; // static method +function H(WeakMap) { var blah = new WeakMap(); } // shadowed + +// not covered by this plugin +var asdf = 'copyWithin'; +i[asdf] // computed with identifier +j[`copyWithin`] // computed with template +var { [asdf]: _a } = k; // computed diff --git a/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/expected.js new file mode 100644 index 0000000000..70092ed944 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/expected.js @@ -0,0 +1,27 @@ +Array.from; // static method +Map; // built-in +new Promise(); // new builtin +Symbol.match; // as member expression +_arr[Symbol.iterator](); // Symbol.iterator + +// no import +Array.asdf; +Array2.from; +Map2; +new Promise2(); +Symbol.asdf; +Symbol2.match; +_arr9[Symbol2.iterator](); +_arr9[Symbol.iterator2](); + +G.assign; // static method +function H(WeakMap) { + var blah = new WeakMap(); +} // shadowed + +// not covered by this plugin +var asdf = 'copyWithin'; +i[asdf]; // computed with identifier +j['copyWithin']; // computed with template +var _k = k, + _a = _k[asdf]; // computed diff --git a/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/options.json b/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/options.json new file mode 100644 index 0000000000..33eed36353 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options-add-used-built-ins/builtins-false/options.json @@ -0,0 +1,8 @@ +{ + "presets": [ + ["../../../../lib", { + "useBuiltIns": false, + "modules": false + }] + ] +}