Merge pull request #4729 from rmacklin/add-resolvePlugin-and-resolvePreset
Add resolvePlugin and resolvePreset methods to babel-core API
This commit is contained in:
commit
ce0c620a9f
@ -5,6 +5,8 @@ export { default as File } from "../transformation/file";
|
||||
export { default as options } from "../transformation/file/options/config";
|
||||
export { default as buildExternalHelpers } from "../tools/build-external-helpers";
|
||||
export { default as template } from "babel-template";
|
||||
export { default as resolvePlugin } from "../helpers/resolve-plugin";
|
||||
export { default as resolvePreset } from "../helpers/resolve-preset";
|
||||
export { version } from "../../package";
|
||||
|
||||
import * as util from "../util";
|
||||
|
||||
@ -0,0 +1,3 @@
|
||||
export default function getPossiblePluginNames(pluginName: string): Array<string> {
|
||||
return [`babel-plugin-${pluginName}`, pluginName];
|
||||
}
|
||||
13
packages/babel-core/src/helpers/get-possible-preset-names.js
Normal file
13
packages/babel-core/src/helpers/get-possible-preset-names.js
Normal file
@ -0,0 +1,13 @@
|
||||
export default function getPossiblePresetNames(presetName: string): Array<string> {
|
||||
let possibleNames = [`babel-preset-${presetName}`, presetName];
|
||||
|
||||
// trying to resolve @organization shortcat
|
||||
// @foo/es2015 -> @foo/babel-preset-es2015
|
||||
let matches = presetName.match(/^(@[^/]+)\/(.+)$/);
|
||||
if (matches) {
|
||||
let [, orgName, presetPath] = matches;
|
||||
possibleNames.push(`${orgName}/babel-preset-${presetPath}`);
|
||||
}
|
||||
|
||||
return possibleNames;
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
import resolve from "./resolve";
|
||||
|
||||
export default function resolveFromPossibleNames(possibleNames: Array<string>, dirname: string): ?string {
|
||||
return possibleNames.reduce((accum, curr) => accum || resolve(curr, dirname), null);
|
||||
}
|
||||
6
packages/babel-core/src/helpers/resolve-plugin.js
Normal file
6
packages/babel-core/src/helpers/resolve-plugin.js
Normal file
@ -0,0 +1,6 @@
|
||||
import resolveFromPossibleNames from "./resolve-from-possible-names";
|
||||
import getPossiblePluginNames from "./get-possible-plugin-names";
|
||||
|
||||
export default function resolvePlugin(pluginName: string, dirname: string = process.cwd()): ?string {
|
||||
return resolveFromPossibleNames(getPossiblePluginNames(pluginName), dirname);
|
||||
}
|
||||
6
packages/babel-core/src/helpers/resolve-preset.js
Normal file
6
packages/babel-core/src/helpers/resolve-preset.js
Normal file
@ -0,0 +1,6 @@
|
||||
import resolveFromPossibleNames from "./resolve-from-possible-names";
|
||||
import getPossiblePresetNames from "./get-possible-preset-names";
|
||||
|
||||
export default function resolvePreset(presetName: string, dirname: string = process.cwd()): ?string {
|
||||
return resolveFromPossibleNames(getPossiblePresetNames(presetName), dirname);
|
||||
}
|
||||
@ -5,7 +5,8 @@ import type Logger from "../logger";
|
||||
import Plugin from "../../plugin";
|
||||
import * as messages from "babel-messages";
|
||||
import { normaliseOptions } from "./index";
|
||||
import resolve from "../../../helpers/resolve";
|
||||
import resolvePlugin from "../../../helpers/resolve-plugin";
|
||||
import resolvePreset from "../../../helpers/resolve-preset";
|
||||
import cloneDeepWith from "lodash/cloneDeepWith";
|
||||
import clone from "lodash/clone";
|
||||
import merge from "../../../helpers/merge";
|
||||
@ -123,7 +124,7 @@ export default class OptionManager {
|
||||
|
||||
// allow plugins to be specified as strings
|
||||
if (typeof plugin === "string") {
|
||||
let pluginLoc = resolve(`babel-plugin-${plugin}`, dirname) || resolve(plugin, dirname);
|
||||
let pluginLoc = resolvePlugin(plugin, dirname);
|
||||
if (pluginLoc) {
|
||||
plugin = require(pluginLoc);
|
||||
} else {
|
||||
@ -261,18 +262,7 @@ export default class OptionManager {
|
||||
let presetLoc;
|
||||
try {
|
||||
if (typeof val === "string") {
|
||||
presetLoc = resolve(`babel-preset-${val}`, dirname) || resolve(val, dirname);
|
||||
|
||||
// trying to resolve @organization shortcat
|
||||
// @foo/es2015 -> @foo/babel-preset-es2015
|
||||
if (!presetLoc) {
|
||||
let matches = val.match(/^(@[^/]+)\/(.+)$/);
|
||||
if (matches) {
|
||||
let [, orgName, presetPath] = matches;
|
||||
val = `${orgName}/babel-preset-${presetPath}`;
|
||||
presetLoc = resolve(val, dirname);
|
||||
}
|
||||
}
|
||||
presetLoc = resolvePreset(val, dirname);
|
||||
|
||||
if (!presetLoc) {
|
||||
throw new Error(`Couldn't find preset ${JSON.stringify(val)} relative to directory ` +
|
||||
|
||||
@ -114,6 +114,14 @@ describe("api", function () {
|
||||
}).marked[0].message, "foobar");
|
||||
});
|
||||
|
||||
it("exposes the resolvePlugin method", function() {
|
||||
assert.equal(babel.resolvePlugin("nonexistent-plugin"), null);
|
||||
});
|
||||
|
||||
it("exposes the resolvePreset method", function() {
|
||||
assert.equal(babel.resolvePreset("nonexistent-preset"), null);
|
||||
});
|
||||
|
||||
it("transformFile", function (done) {
|
||||
babel.transformFile(__dirname + "/fixtures/api/file.js", {}, function (err, res) {
|
||||
if (err) return done(err);
|
||||
@ -255,28 +263,6 @@ describe("api", function () {
|
||||
|
||||
});
|
||||
|
||||
it("handles preset shortcuts (adds babel-preset-)", function () {
|
||||
return assert.throws(
|
||||
function () {
|
||||
babel.transform("", {
|
||||
presets: ["@babel/es2015"]
|
||||
});
|
||||
},
|
||||
/Couldn\'t find preset \"\@babel\/babel\-preset\-es2015\" relative to directory/
|
||||
);
|
||||
});
|
||||
|
||||
it("handles preset shortcuts 2 (adds babel-preset-)", function () {
|
||||
return assert.throws(
|
||||
function () {
|
||||
babel.transform("", {
|
||||
presets: ["@babel/react/optimizations"]
|
||||
});
|
||||
},
|
||||
/Couldn\'t find preset \"\@babel\/babel\-preset\-react\/optimizations\" relative to directory/
|
||||
);
|
||||
});
|
||||
|
||||
it("source map merging", function () {
|
||||
let result = babel.transform([
|
||||
"function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }",
|
||||
|
||||
8
packages/babel-core/test/get-possible-plugin-names.js
Normal file
8
packages/babel-core/test/get-possible-plugin-names.js
Normal file
@ -0,0 +1,8 @@
|
||||
let assert = require("assert");
|
||||
let getPossiblePluginNames = require("../lib/helpers/get-possible-plugin-names");
|
||||
|
||||
describe("getPossiblePluginNames", function () {
|
||||
it("adds the babel-plugin prefix", function() {
|
||||
assert.deepEqual(getPossiblePluginNames("foobar"), ["babel-plugin-foobar", "foobar"]);
|
||||
});
|
||||
});
|
||||
22
packages/babel-core/test/get-possible-preset-names.js
Normal file
22
packages/babel-core/test/get-possible-preset-names.js
Normal file
@ -0,0 +1,22 @@
|
||||
let assert = require("assert");
|
||||
let getPossiblePresetNames = require("../lib/helpers/get-possible-preset-names");
|
||||
|
||||
describe("getPossiblePresetNames", function () {
|
||||
it("adds the babel-preset prefix", function() {
|
||||
assert.deepEqual(getPossiblePresetNames("foobar"), ["babel-preset-foobar", "foobar"]);
|
||||
});
|
||||
|
||||
it("inserts babel-preset after @org/", function() {
|
||||
assert.deepEqual(getPossiblePresetNames("@babel/es2015"), [
|
||||
"babel-preset-@babel/es2015",
|
||||
"@babel/es2015",
|
||||
"@babel/babel-preset-es2015"
|
||||
]);
|
||||
|
||||
assert.deepEqual(getPossiblePresetNames("@babel/react/optimizations"), [
|
||||
"babel-preset-@babel/react/optimizations",
|
||||
"@babel/react/optimizations",
|
||||
"@babel/babel-preset-react/optimizations"
|
||||
]);
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user