From 425d460ebf5695329fb226506e329c12b5f558ca Mon Sep 17 00:00:00 2001 From: Christophe Hurpeau Date: Fri, 5 Aug 2016 12:06:07 +0200 Subject: [PATCH 1/2] [Bug Fix] option manager: val = val.buildPreset should be before the check if the preset supports options --- .../src/transformation/file/options/option-manager.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/babel-core/src/transformation/file/options/option-manager.js b/packages/babel-core/src/transformation/file/options/option-manager.js index 5fe39e27a3..75d55d1a16 100644 --- a/packages/babel-core/src/transformation/file/options/option-manager.js +++ b/packages/babel-core/src/transformation/file/options/option-manager.js @@ -268,16 +268,15 @@ export default class OptionManager { val = require(presetLoc); } - if (typeof val !== "function" && options !== undefined) { - throw new Error(`Options ${JSON.stringify(options)} passed to ` + - (presetLoc || "a preset") + " which does not accept options."); - } - // For compatibility with babel-core < 6.13.x, allow presets to export an object with a // a 'buildPreset' function that will return the preset itself, while still exporting a // simple object (rather than a function), for supporting old Babel versions. if (typeof val === "object" && val.buildPreset) val = val.buildPreset; + if (typeof val !== "function" && options !== undefined) { + throw new Error(`Options ${JSON.stringify(options)} passed to ` + + (presetLoc || "a preset") + " which does not accept options."); + } if (typeof val === "function") val = val(context, options); if (typeof val !== "object") { From 7213e57ee25831b763906f5d24e22a94419a5bc7 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Fri, 5 Aug 2016 09:36:52 -0400 Subject: [PATCH 2/2] add tests, be able to pass preset options to test helper --- .../file/options/option-manager.js | 2 ++ .../src/index.js | 6 +++++- packages/babel-preset-es2015/package.json | 3 ++- .../preset-options/empty-options/actual.js | 1 + .../preset-options/empty-options/expected.js | 7 +++++++ .../preset-options/empty-options/options.json | 5 +++++ .../preset-options/loose-false/actual.js | 1 + .../preset-options/loose-false/expected.js | 7 +++++++ .../preset-options/loose-false/options.json | 5 +++++ .../fixtures/preset-options/loose/actual.js | 1 + .../fixtures/preset-options/loose/expected.js | 5 +++++ .../preset-options/loose/options.json | 5 +++++ .../modules-amd-loose/actual.js | 1 + .../modules-amd-loose/expected.js | 7 +++++++ .../modules-amd-loose/options.json | 5 +++++ .../preset-options/modules-commonjs/actual.js | 1 + .../modules-commonjs/expected.js | 7 +++++++ .../modules-commonjs/options.json | 5 +++++ .../preset-options/modules-false/actual.js | 1 + .../preset-options/modules-false/expected.js | 1 + .../preset-options/modules-false/options.json | 5 +++++ .../preset-options/modules-systemjs/actual.js | 1 + .../modules-systemjs/expected.js | 12 +++++++++++ .../modules-systemjs/options.json | 5 +++++ .../preset-options/modules-umd/actual.js | 1 + .../preset-options/modules-umd/expected.js | 21 +++++++++++++++++++ .../preset-options/modules-umd/options.json | 5 +++++ .../preset-options/no-options/actual.js | 1 + .../preset-options/no-options/expected.js | 7 +++++++ .../preset-options/no-options/options.json | 5 +++++ .../preset-options/string-preset/actual.js | 1 + .../preset-options/string-preset/expected.js | 7 +++++++ .../preset-options/string-preset/options.json | 3 +++ .../test/preset-options.js | 1 + 34 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/loose/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/loose/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/loose/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/no-options/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/no-options/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/no-options/options.json create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/actual.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/expected.js create mode 100644 packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/options.json create mode 100644 packages/babel-preset-es2015/test/preset-options.js diff --git a/packages/babel-core/src/transformation/file/options/option-manager.js b/packages/babel-core/src/transformation/file/options/option-manager.js index 75d55d1a16..55fdfc20d6 100644 --- a/packages/babel-core/src/transformation/file/options/option-manager.js +++ b/packages/babel-core/src/transformation/file/options/option-manager.js @@ -273,10 +273,12 @@ export default class OptionManager { // simple object (rather than a function), for supporting old Babel versions. if (typeof val === "object" && val.buildPreset) val = val.buildPreset; + if (typeof val !== "function" && options !== undefined) { throw new Error(`Options ${JSON.stringify(options)} passed to ` + (presetLoc || "a preset") + " which does not accept options."); } + if (typeof val === "function") val = val(context, options); if (typeof val !== "object") { diff --git a/packages/babel-helper-transform-fixture-test-runner/src/index.js b/packages/babel-helper-transform-fixture-test-runner/src/index.js index 1c016287ac..e61d4fd323 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -44,7 +44,11 @@ function run(task) { newOpts.plugins = wrapPackagesArray("plugin", newOpts.plugins); newOpts.presets = wrapPackagesArray("preset", newOpts.presets).map(function (val) { - return val[0]; + if (val.length > 2) { + throw new Error(`Unexpected extra options ${JSON.stringify(val.slice(2))} passed to preset.`); + } + + return val; }); return newOpts; diff --git a/packages/babel-preset-es2015/package.json b/packages/babel-preset-es2015/package.json index a64d7e108b..e1eae90d3f 100644 --- a/packages/babel-preset-es2015/package.json +++ b/packages/babel-preset-es2015/package.json @@ -34,6 +34,7 @@ "babel-plugin-transform-regenerator": "^6.9.0" }, "devDependencies": { - "babel-helper-transform-fixture-test-runner": "^6.9.0" + "babel-helper-transform-fixture-test-runner": "^6.9.0", + "babel-helper-plugin-test-runner": "^6.8.0" } } diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/expected.js new file mode 100644 index 0000000000..a76e121728 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.a = a; +function a() {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/options.json new file mode 100644 index 0000000000..b88e6d76f6 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/empty-options/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015", {}] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/expected.js new file mode 100644 index 0000000000..a76e121728 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.a = a; +function a() {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/options.json new file mode 100644 index 0000000000..c39890256a --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/loose-false/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015", { "loose": false }] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/loose/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/loose/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/loose/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/loose/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/loose/expected.js new file mode 100644 index 0000000000..89b8d92078 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/loose/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +exports.__esModule = true; +exports.a = a; +function a() {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/loose/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/loose/options.json new file mode 100644 index 0000000000..45001da4a8 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/loose/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015", { "loose": true }] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/expected.js new file mode 100644 index 0000000000..fdccafc761 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/expected.js @@ -0,0 +1,7 @@ +define(["exports"], function (exports) { + "use strict"; + + exports.__esModule = true; + exports.a = a; + function a() {} +}); diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/options.json new file mode 100644 index 0000000000..6229ace567 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-amd-loose/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015", { "modules": "amd", "loose": true }] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/expected.js new file mode 100644 index 0000000000..a76e121728 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.a = a; +function a() {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/options.json new file mode 100644 index 0000000000..ea5e91e18f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-commonjs/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015", { "modules": "commonjs" }] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/expected.js new file mode 100644 index 0000000000..fa1736f9fe --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/expected.js @@ -0,0 +1 @@ +export function a() {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/options.json new file mode 100644 index 0000000000..9897749da4 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-false/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015", { "modules": false }] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/expected.js new file mode 100644 index 0000000000..2b1a3ef91c --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/expected.js @@ -0,0 +1,12 @@ +System.register([], function (_export, _context) { + "use strict"; + + function a() {} + + _export("a", a); + + return { + setters: [], + execute: function () {} + }; +}); diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/options.json new file mode 100644 index 0000000000..5af2af1058 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-systemjs/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015", { "modules": "systemjs" }] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/expected.js new file mode 100644 index 0000000000..ea79ac70ff --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/expected.js @@ -0,0 +1,21 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports"], factory); + } else if (typeof exports !== "undefined") { + factory(exports); + } else { + var mod = { + exports: {} + }; + factory(mod.exports); + global.actual = mod.exports; + } +})(this, function (exports) { + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.a = a; + function a() {} +}); diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/options.json new file mode 100644 index 0000000000..1c33e5fb74 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/modules-umd/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015", { "modules": "umd" }] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/expected.js new file mode 100644 index 0000000000..a76e121728 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.a = a; +function a() {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/options.json new file mode 100644 index 0000000000..e027e954b6 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/no-options/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["es2015"] + ] +} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/actual.js b/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/actual.js new file mode 100644 index 0000000000..103a9f0d5f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/actual.js @@ -0,0 +1 @@ +export function a () {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/expected.js new file mode 100644 index 0000000000..a76e121728 --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.a = a; +function a() {} diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/options.json b/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/options.json new file mode 100644 index 0000000000..c13c5f627f --- /dev/null +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/string-preset/options.json @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} diff --git a/packages/babel-preset-es2015/test/preset-options.js b/packages/babel-preset-es2015/test/preset-options.js new file mode 100644 index 0000000000..1f6634aabd --- /dev/null +++ b/packages/babel-preset-es2015/test/preset-options.js @@ -0,0 +1 @@ +require("babel-helper-plugin-test-runner")(__dirname);