diff --git a/packages/babel-core/src/config/files/plugins.js b/packages/babel-core/src/config/files/plugins.js index 75ed818cc0..6bef09039d 100644 --- a/packages/babel-core/src/config/files/plugins.js +++ b/packages/babel-core/src/config/files/plugins.js @@ -15,8 +15,8 @@ const BABEL_PLUGIN_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-plugin-)/; const BABEL_PRESET_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-preset-)/; const BABEL_PLUGIN_ORG_RE = /^(@babel\/)(?!plugin-|[^/]+\/)/; const BABEL_PRESET_ORG_RE = /^(@babel\/)(?!preset-|[^/]+\/)/; -const OTHER_PLUGIN_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?!babel-plugin(?:-|\/|$)|[^/]+\/)/; -const OTHER_PRESET_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?!babel-preset(?:-|\/|$)|[^/]+\/)/; +const OTHER_PLUGIN_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?![^/]*babel-plugin(?:-|\/|$)|[^/]+\/)/; +const OTHER_PRESET_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?![^/]*babel-preset(?:-|\/|$)|[^/]+\/)/; const OTHER_ORG_DEFAULT_RE = /^(@(?!babel$)[^/]+)$/; export function resolvePlugin(name: string, dirname: string): string | null { diff --git a/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-plugin/index.js b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-plugin/index.js new file mode 100644 index 0000000000..2987ecf017 --- /dev/null +++ b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-plugin/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/thing-babel-preset/index.js b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-preset/index.js new file mode 100644 index 0000000000..2987ecf017 --- /dev/null +++ b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-preset/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/thing.babel-plugin-convert/index.js b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing.babel-plugin-convert/index.js new file mode 100644 index 0000000000..2987ecf017 --- /dev/null +++ b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing.babel-plugin-convert/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/thing.babel-preset-convert/index.js b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing.babel-preset-convert/index.js new file mode 100644 index 0000000000..2987ecf017 --- /dev/null +++ b/packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing.babel-preset-convert/index.js @@ -0,0 +1,3 @@ +module.exports = function() { + return {}; +}; diff --git a/packages/babel-core/test/resolution.js b/packages/babel-core/test/resolution.js index 0535cc11a4..4280b27ddd 100644 --- a/packages/babel-core/test/resolution.js +++ b/packages/babel-core/test/resolution.js @@ -134,6 +134,46 @@ describe("addon resolution", function() { }); }); + it("should find @foo scoped presets with an inner babel-preset", function() { + process.chdir("foo-org-paths"); + + babel.transform("", { + filename: "filename.js", + babelrc: false, + presets: ["@foo/thing.babel-preset-convert"], + }); + }); + + it("should find @foo scoped plugins with an inner babel-plugin", function() { + process.chdir("foo-org-paths"); + + babel.transform("", { + filename: "filename.js", + babelrc: false, + plugins: ["@foo/thing.babel-plugin-convert"], + }); + }); + + it("should find @foo scoped presets with an babel-preset suffix", function() { + process.chdir("foo-org-paths"); + + babel.transform("", { + filename: "filename.js", + babelrc: false, + presets: ["@foo/thing-babel-preset"], + }); + }); + + it("should find @foo scoped plugins with an babel-plugin suffix", function() { + process.chdir("foo-org-paths"); + + babel.transform("", { + filename: "filename.js", + babelrc: false, + plugins: ["@foo/thing-babel-plugin"], + }); + }); + it("should find @foo scoped presets with an existing prefix", function() { process.chdir("foo-org-paths");