diff --git a/packages/babel-core/src/config/option-manager.js b/packages/babel-core/src/config/option-manager.js index dc82a7161cb6..f5cfc8ea567d 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 47cfcd223d0a..052829fe5b27 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 95cde4c4bf27..c3689a0c8484 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 e69de29bb2d1..2987ecf017a2 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 b978d1370e14..bdb49749ceb5 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 c36d0077754d..d377b1e47d2e 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 6e25ef949341..e0bec01b2d85 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 7ccf2c557f0c..b74542b4f553 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 2e2ad554079b..0a48f0532a15 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 c31fca116138..adfe64c39571 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 cd75b3ec2272..c8a843c57afd 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 41694cd879e9..ec87ede48eae 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); + }, }, - }, + }; };