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 options } from "../transformation/file/options/config";
|
||||||
export { default as buildExternalHelpers } from "../tools/build-external-helpers";
|
export { default as buildExternalHelpers } from "../tools/build-external-helpers";
|
||||||
export { default as template } from "babel-template";
|
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";
|
export { version } from "../../package";
|
||||||
|
|
||||||
import * as util from "../util";
|
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 Plugin from "../../plugin";
|
||||||
import * as messages from "babel-messages";
|
import * as messages from "babel-messages";
|
||||||
import { normaliseOptions } from "./index";
|
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 cloneDeepWith from "lodash/cloneDeepWith";
|
||||||
import clone from "lodash/clone";
|
import clone from "lodash/clone";
|
||||||
import merge from "../../../helpers/merge";
|
import merge from "../../../helpers/merge";
|
||||||
@ -123,7 +124,7 @@ export default class OptionManager {
|
|||||||
|
|
||||||
// allow plugins to be specified as strings
|
// allow plugins to be specified as strings
|
||||||
if (typeof plugin === "string") {
|
if (typeof plugin === "string") {
|
||||||
let pluginLoc = resolve(`babel-plugin-${plugin}`, dirname) || resolve(plugin, dirname);
|
let pluginLoc = resolvePlugin(plugin, dirname);
|
||||||
if (pluginLoc) {
|
if (pluginLoc) {
|
||||||
plugin = require(pluginLoc);
|
plugin = require(pluginLoc);
|
||||||
} else {
|
} else {
|
||||||
@ -261,18 +262,7 @@ export default class OptionManager {
|
|||||||
let presetLoc;
|
let presetLoc;
|
||||||
try {
|
try {
|
||||||
if (typeof val === "string") {
|
if (typeof val === "string") {
|
||||||
presetLoc = resolve(`babel-preset-${val}`, dirname) || resolve(val, dirname);
|
presetLoc = resolvePreset(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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!presetLoc) {
|
if (!presetLoc) {
|
||||||
throw new Error(`Couldn't find preset ${JSON.stringify(val)} relative to directory ` +
|
throw new Error(`Couldn't find preset ${JSON.stringify(val)} relative to directory ` +
|
||||||
|
|||||||
@ -114,6 +114,14 @@ describe("api", function () {
|
|||||||
}).marked[0].message, "foobar");
|
}).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) {
|
it("transformFile", function (done) {
|
||||||
babel.transformFile(__dirname + "/fixtures/api/file.js", {}, function (err, res) {
|
babel.transformFile(__dirname + "/fixtures/api/file.js", {}, function (err, res) {
|
||||||
if (err) return done(err);
|
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 () {
|
it("source map merging", function () {
|
||||||
let result = babel.transform([
|
let result = babel.transform([
|
||||||
"function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }",
|
"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