diff --git a/packages/babel-core/src/config/option-manager.js b/packages/babel-core/src/config/option-manager.js index 8ffae2020b..787fd28ed1 100644 --- a/packages/babel-core/src/config/option-manager.js +++ b/packages/babel-core/src/config/option-manager.js @@ -556,6 +556,15 @@ function normalizePair( ); } + if (filepath !== null && typeof value === "object" && value) { + // We allow object values for plugins/presets nested directly within a + // config object, because it can be useful to define them in nested + // configuration contexts. + throw new Error( + "Plugin/Preset files are not allowed to export objects, only functions.", + ); + } + if (options != null && typeof options !== "object") { throw new Error( "Plugin/Preset options must be an object, null, or undefined", diff --git a/packages/babel-core/test/fixtures/option-manager/presets/es2015_default_object.js b/packages/babel-core/test/fixtures/option-manager/presets/es2015_default_object.js index 47cfcd223d..052829fe5b 100644 --- a/packages/babel-core/test/fixtures/option-manager/presets/es2015_default_object.js +++ b/packages/babel-core/test/fixtures/option-manager/presets/es2015_default_object.js @@ -7,6 +7,8 @@ 'use strict'; exports.__esModule = true; -exports.default = { - plugins: [require('../../../../../babel-plugin-syntax-decorators')] +module.exports = function() { + return { + plugins: [require('../../../../../babel-plugin-syntax-decorators')] + }; }; diff --git a/packages/babel-core/test/fixtures/option-manager/presets/es5_object.js b/packages/babel-core/test/fixtures/option-manager/presets/es5_object.js index 95cde4c4bf..c3689a0c84 100644 --- a/packages/babel-core/test/fixtures/option-manager/presets/es5_object.js +++ b/packages/babel-core/test/fixtures/option-manager/presets/es5_object.js @@ -1,5 +1,7 @@ -module.exports = { - plugins: [ - require('../../../../../babel-plugin-syntax-decorators'), - ] +module.exports = function() { + return { + plugins: [ + require('../../../../../babel-plugin-syntax-decorators'), + ] + }; }; diff --git a/packages/babel-core/test/fixtures/resolution/babel-org-paths/node_modules/@babel/plugin-foo/index.js b/packages/babel-core/test/fixtures/resolution/babel-org-paths/node_modules/@babel/plugin-foo/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/babel-org-paths/node_modules/@babel/plugin-foo/index.js +++ b/packages/babel-core/test/fixtures/resolution/babel-org-paths/node_modules/@babel/plugin-foo/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/babel-org-paths/node_modules/@babel/preset-foo/index.js b/packages/babel-core/test/fixtures/resolution/babel-org-paths/node_modules/@babel/preset-foo/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/babel-org-paths/node_modules/@babel/preset-foo/index.js +++ b/packages/babel-core/test/fixtures/resolution/babel-org-paths/node_modules/@babel/preset-foo/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/babel-scoped-nested-module-paths/node_modules/@babel/mod/plugin.js b/packages/babel-core/test/fixtures/resolution/babel-scoped-nested-module-paths/node_modules/@babel/mod/plugin.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/babel-scoped-nested-module-paths/node_modules/@babel/mod/plugin.js +++ b/packages/babel-core/test/fixtures/resolution/babel-scoped-nested-module-paths/node_modules/@babel/mod/plugin.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/babel-scoped-nested-module-paths/node_modules/@babel/mod/preset.js b/packages/babel-core/test/fixtures/resolution/babel-scoped-nested-module-paths/node_modules/@babel/mod/preset.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/babel-scoped-nested-module-paths/node_modules/@babel/mod/preset.js +++ b/packages/babel-core/test/fixtures/resolution/babel-scoped-nested-module-paths/node_modules/@babel/mod/preset.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/babel-plugin-mod/index.js b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/babel-plugin-mod/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/babel-plugin-mod/index.js +++ b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/babel-plugin-mod/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/babel-preset-mod/index.js b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/babel-preset-mod/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/babel-preset-mod/index.js +++ b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/babel-preset-mod/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/module-paths/node_modules/plugin/index.js b/packages/babel-core/test/fixtures/resolution/module-paths/node_modules/plugin/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/module-paths/node_modules/plugin/index.js +++ b/packages/babel-core/test/fixtures/resolution/module-paths/node_modules/plugin/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/module-paths/node_modules/preset/index.js b/packages/babel-core/test/fixtures/resolution/module-paths/node_modules/preset/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/module-paths/node_modules/preset/index.js +++ b/packages/babel-core/test/fixtures/resolution/module-paths/node_modules/preset/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/nested-module-paths/node_modules/mod/plugin.js b/packages/babel-core/test/fixtures/resolution/nested-module-paths/node_modules/mod/plugin.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/nested-module-paths/node_modules/mod/plugin.js +++ b/packages/babel-core/test/fixtures/resolution/nested-module-paths/node_modules/mod/plugin.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/nested-module-paths/node_modules/mod/preset.js b/packages/babel-core/test/fixtures/resolution/nested-module-paths/node_modules/mod/preset.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/nested-module-paths/node_modules/mod/preset.js +++ b/packages/babel-core/test/fixtures/resolution/nested-module-paths/node_modules/mod/preset.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/relative-paths/dir/plugin.js b/packages/babel-core/test/fixtures/resolution/relative-paths/dir/plugin.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/relative-paths/dir/plugin.js +++ b/packages/babel-core/test/fixtures/resolution/relative-paths/dir/plugin.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/relative-paths/dir/preset.js b/packages/babel-core/test/fixtures/resolution/relative-paths/dir/preset.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/relative-paths/dir/preset.js +++ b/packages/babel-core/test/fixtures/resolution/relative-paths/dir/preset.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/scoped-nested-module-paths/node_modules/@foo/mod/plugin.js b/packages/babel-core/test/fixtures/resolution/scoped-nested-module-paths/node_modules/@foo/mod/plugin.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/scoped-nested-module-paths/node_modules/@foo/mod/plugin.js +++ b/packages/babel-core/test/fixtures/resolution/scoped-nested-module-paths/node_modules/@foo/mod/plugin.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/scoped-nested-module-paths/node_modules/@foo/mod/preset.js b/packages/babel-core/test/fixtures/resolution/scoped-nested-module-paths/node_modules/@foo/mod/preset.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/scoped-nested-module-paths/node_modules/@foo/mod/preset.js +++ b/packages/babel-core/test/fixtures/resolution/scoped-nested-module-paths/node_modules/@foo/mod/preset.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/standard-paths/node_modules/babel-plugin-mod/index.js b/packages/babel-core/test/fixtures/resolution/standard-paths/node_modules/babel-plugin-mod/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/standard-paths/node_modules/babel-plugin-mod/index.js +++ b/packages/babel-core/test/fixtures/resolution/standard-paths/node_modules/babel-plugin-mod/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/standard-paths/node_modules/babel-preset-mod/index.js b/packages/babel-core/test/fixtures/resolution/standard-paths/node_modules/babel-preset-mod/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/standard-paths/node_modules/babel-preset-mod/index.js +++ b/packages/babel-core/test/fixtures/resolution/standard-paths/node_modules/babel-preset-mod/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/throw-babel-paths/node_modules/@babel/plugin-foo/index.js b/packages/babel-core/test/fixtures/resolution/throw-babel-paths/node_modules/@babel/plugin-foo/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/throw-babel-paths/node_modules/@babel/plugin-foo/index.js +++ b/packages/babel-core/test/fixtures/resolution/throw-babel-paths/node_modules/@babel/plugin-foo/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/throw-babel-paths/node_modules/@babel/preset-foo/index.js b/packages/babel-core/test/fixtures/resolution/throw-babel-paths/node_modules/@babel/preset-foo/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/throw-babel-paths/node_modules/@babel/preset-foo/index.js +++ b/packages/babel-core/test/fixtures/resolution/throw-babel-paths/node_modules/@babel/preset-foo/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/throw-module-paths/node_modules/foo/index.js b/packages/babel-core/test/fixtures/resolution/throw-module-paths/node_modules/foo/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/throw-module-paths/node_modules/foo/index.js +++ b/packages/babel-core/test/fixtures/resolution/throw-module-paths/node_modules/foo/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/throw-opposite-paths/node_modules/babel-plugin-testplugin/index.js b/packages/babel-core/test/fixtures/resolution/throw-opposite-paths/node_modules/babel-plugin-testplugin/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/throw-opposite-paths/node_modules/babel-plugin-testplugin/index.js +++ b/packages/babel-core/test/fixtures/resolution/throw-opposite-paths/node_modules/babel-plugin-testplugin/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/fixtures/resolution/throw-opposite-paths/node_modules/babel-preset-testpreset/index.js b/packages/babel-core/test/fixtures/resolution/throw-opposite-paths/node_modules/babel-preset-testpreset/index.js index e69de29bb2..2987ecf017 100644 --- a/packages/babel-core/test/fixtures/resolution/throw-opposite-paths/node_modules/babel-preset-testpreset/index.js +++ b/packages/babel-core/test/fixtures/resolution/throw-opposite-paths/node_modules/babel-preset-testpreset/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-helpers/test/fixtures/dependencies/basic/plugin.js b/packages/babel-helpers/test/fixtures/dependencies/basic/plugin.js index b978d1370e..bdb49749ce 100644 --- a/packages/babel-helpers/test/fixtures/dependencies/basic/plugin.js +++ b/packages/babel-helpers/test/fixtures/dependencies/basic/plugin.js @@ -12,12 +12,14 @@ const main = defineHelper(__dirname, "main", ` } `); -module.exports = { - visitor: { - Identifier(path) { - if (path.node.name !== "REPLACE_ME") return; - const helper = this.addHelper(main); - path.replaceWith(helper); +module.exports = function() { + return { + visitor: { + Identifier(path) { + if (path.node.name !== "REPLACE_ME") return; + const helper = this.addHelper(main); + path.replaceWith(helper); + }, }, - }, + }; }; diff --git a/packages/babel-helpers/test/fixtures/dependencies/deep/plugin.js b/packages/babel-helpers/test/fixtures/dependencies/deep/plugin.js index c36d007775..d377b1e47d 100644 --- a/packages/babel-helpers/test/fixtures/dependencies/deep/plugin.js +++ b/packages/babel-helpers/test/fixtures/dependencies/deep/plugin.js @@ -17,12 +17,14 @@ const main = defineHelper(__dirname, "main", ` } `); -module.exports = { - visitor: { - Identifier(path) { - if (path.node.name !== "REPLACE_ME") return; - const helper = this.addHelper(main); - path.replaceWith(helper); +module.exports = function() { + return { + visitor: { + Identifier(path) { + if (path.node.name !== "REPLACE_ME") return; + const helper = this.addHelper(main); + path.replaceWith(helper); + }, }, - }, + }; }; diff --git a/packages/babel-helpers/test/fixtures/dependencies/missing/plugin.js b/packages/babel-helpers/test/fixtures/dependencies/missing/plugin.js index 6e25ef9493..e0bec01b2d 100644 --- a/packages/babel-helpers/test/fixtures/dependencies/missing/plugin.js +++ b/packages/babel-helpers/test/fixtures/dependencies/missing/plugin.js @@ -8,12 +8,14 @@ const main = defineHelper(__dirname, "main", ` } `); -module.exports = { - visitor: { - Identifier(path) { - if (path.node.name !== "REPLACE_ME") return; - const helper = this.addHelper(main); - path.replaceWith(helper); +module.exports = function() { + return { + visitor: { + Identifier(path) { + if (path.node.name !== "REPLACE_ME") return; + const helper = this.addHelper(main); + path.replaceWith(helper); + }, }, - }, + }; }; diff --git a/packages/babel-helpers/test/fixtures/dependencies/multiple/plugin.js b/packages/babel-helpers/test/fixtures/dependencies/multiple/plugin.js index 7ccf2c557f..b74542b4f5 100644 --- a/packages/babel-helpers/test/fixtures/dependencies/multiple/plugin.js +++ b/packages/babel-helpers/test/fixtures/dependencies/multiple/plugin.js @@ -17,12 +17,14 @@ const main = defineHelper(__dirname, "main", ` } `); -module.exports = { - visitor: { - Identifier(path) { - if (path.node.name !== "REPLACE_ME") return; - const helper = this.addHelper(main); - path.replaceWith(helper); +module.exports = function() { + return { + visitor: { + Identifier(path) { + if (path.node.name !== "REPLACE_ME") return; + const helper = this.addHelper(main); + path.replaceWith(helper); + }, }, - }, + }; }; diff --git a/packages/babel-helpers/test/fixtures/dependencies/rename-binding-equal/plugin.js b/packages/babel-helpers/test/fixtures/dependencies/rename-binding-equal/plugin.js index 2e2ad55407..0a48f0532a 100644 --- a/packages/babel-helpers/test/fixtures/dependencies/rename-binding-equal/plugin.js +++ b/packages/babel-helpers/test/fixtures/dependencies/rename-binding-equal/plugin.js @@ -15,12 +15,14 @@ const main = defineHelper(__dirname, "main", ` } `); -module.exports = { - visitor: { - Identifier(path) { - if (path.node.name !== "REPLACE_ME") return; - const helper = this.addHelper(main); - path.replaceWith(helper); +module.exports = function() { + return { + visitor: { + Identifier(path) { + if (path.node.name !== "REPLACE_ME") return; + const helper = this.addHelper(main); + path.replaceWith(helper); + }, }, - }, + }; }; diff --git a/packages/babel-helpers/test/fixtures/dependencies/rename-deep-global/plugin.js b/packages/babel-helpers/test/fixtures/dependencies/rename-deep-global/plugin.js index c31fca1161..adfe64c395 100644 --- a/packages/babel-helpers/test/fixtures/dependencies/rename-deep-global/plugin.js +++ b/packages/babel-helpers/test/fixtures/dependencies/rename-deep-global/plugin.js @@ -14,12 +14,14 @@ const main = defineHelper(__dirname, "main", ` } `); -module.exports = { - visitor: { - Identifier(path) { - if (path.node.name !== "REPLACE_ME") return; - const helper = this.addHelper(main); - path.replaceWith(helper); +module.exports = function() { + return { + visitor: { + Identifier(path) { + if (path.node.name !== "REPLACE_ME") return; + const helper = this.addHelper(main); + path.replaceWith(helper); + }, }, - }, + }; }; diff --git a/packages/babel-helpers/test/fixtures/dependencies/reuse-dependency/plugin.js b/packages/babel-helpers/test/fixtures/dependencies/reuse-dependency/plugin.js index cd75b3ec22..c8a843c57a 100644 --- a/packages/babel-helpers/test/fixtures/dependencies/reuse-dependency/plugin.js +++ b/packages/babel-helpers/test/fixtures/dependencies/reuse-dependency/plugin.js @@ -12,16 +12,18 @@ const main = defineHelper(__dirname, "main", ` } `); -module.exports = { - visitor: { - Identifier(path) { - if (path.node.name === "REPLACE_ME_1") { - const mainHelper = this.addHelper(main); - path.replaceWith(mainHelper); - } else if (path.node.name === "REPLACE_ME_2") { - const dependencyHelper = this.addHelper(dependency); - path.replaceWith(dependencyHelper); - } +module.exports = function() { + return { + visitor: { + Identifier(path) { + if (path.node.name === "REPLACE_ME_1") { + const mainHelper = this.addHelper(main); + path.replaceWith(mainHelper); + } else if (path.node.name === "REPLACE_ME_2") { + const dependencyHelper = this.addHelper(dependency); + path.replaceWith(dependencyHelper); + } + }, }, - }, + }; }; diff --git a/packages/babel-helpers/test/fixtures/dependencies/variable-same-name-dependency/plugin.js b/packages/babel-helpers/test/fixtures/dependencies/variable-same-name-dependency/plugin.js index 41694cd879..ec87ede48e 100644 --- a/packages/babel-helpers/test/fixtures/dependencies/variable-same-name-dependency/plugin.js +++ b/packages/babel-helpers/test/fixtures/dependencies/variable-same-name-dependency/plugin.js @@ -15,12 +15,14 @@ const main = defineHelper(__dirname, "main", ` } `); -module.exports = { - visitor: { - Identifier(path) { - if (path.node.name !== "REPLACE_ME") return; - const helper = this.addHelper(main); - path.replaceWith(helper); +module.exports = function() { + return { + visitor: { + Identifier(path) { + if (path.node.name !== "REPLACE_ME") return; + const helper = this.addHelper(main); + path.replaceWith(helper); + }, }, - }, + }; };