parent
cbbc1c7333
commit
e64d86c1eb
@ -258,34 +258,41 @@ export default class OptionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let presetLoc;
|
let presetLoc;
|
||||||
if (typeof val === "string") {
|
try {
|
||||||
presetLoc = resolve(`babel-preset-${val}`, dirname) || resolve(val, dirname);
|
if (typeof val === "string") {
|
||||||
if (!presetLoc) {
|
presetLoc = resolve(`babel-preset-${val}`, dirname) || resolve(val, dirname);
|
||||||
throw new Error(`Couldn't find preset ${JSON.stringify(val)} relative to directory ` +
|
if (!presetLoc) {
|
||||||
JSON.stringify(dirname));
|
throw new Error(`Couldn't find preset ${JSON.stringify(val)} relative to directory ` +
|
||||||
|
JSON.stringify(dirname));
|
||||||
|
}
|
||||||
|
|
||||||
|
val = require(presetLoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
val = require(presetLoc);
|
// For compatibility with babel-core < 6.13.x, allow presets to export an object with a
|
||||||
|
// a 'buildPreset' function that will return the preset itself, while still exporting a
|
||||||
|
// simple object (rather than a function), for supporting old Babel versions.
|
||||||
|
if (typeof val === "object" && val.buildPreset) val = val.buildPreset;
|
||||||
|
|
||||||
|
|
||||||
|
if (typeof val !== "function" && options !== undefined) {
|
||||||
|
throw new Error(`Options ${JSON.stringify(options)} passed to ` +
|
||||||
|
(presetLoc || "a preset") + " which does not accept options.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof val === "function") val = val(context, options);
|
||||||
|
|
||||||
|
if (typeof val !== "object") {
|
||||||
|
throw new Error(`Unsupported preset format: ${val}.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
onResolve && onResolve(val, presetLoc);
|
||||||
|
} catch (e) {
|
||||||
|
if (presetLoc) {
|
||||||
|
e.message += ` (While processing preset: ${JSON.stringify(presetLoc)})`;
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For compatibility with babel-core < 6.13.x, allow presets to export an object with a
|
|
||||||
// a 'buildPreset' function that will return the preset itself, while still exporting a
|
|
||||||
// simple object (rather than a function), for supporting old Babel versions.
|
|
||||||
if (typeof val === "object" && val.buildPreset) val = val.buildPreset;
|
|
||||||
|
|
||||||
|
|
||||||
if (typeof val !== "function" && options !== undefined) {
|
|
||||||
throw new Error(`Options ${JSON.stringify(options)} passed to ` +
|
|
||||||
(presetLoc || "a preset") + " which does not accept options.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof val === "function") val = val(context, options);
|
|
||||||
|
|
||||||
if (typeof val !== "object") {
|
|
||||||
throw new Error(`Unsupported preset format: ${val}.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
onResolve && onResolve(val);
|
|
||||||
return val;
|
return val;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
3
packages/babel-core/test/fixtures/option-manager/not-a-preset.js
vendored
Normal file
3
packages/babel-core/test/fixtures/option-manager/not-a-preset.js
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module.exports = function () {
|
||||||
|
throw new Error('Not a real preset');
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
var assert = require("assert");
|
var assert = require("assert");
|
||||||
var OptionManager = require("../lib/transformation/file/options/option-manager");
|
var OptionManager = require("../lib/transformation/file/options/option-manager");
|
||||||
var Logger = require("../lib/transformation/file/logger");
|
var Logger = require("../lib/transformation/file/logger");
|
||||||
|
var path = require("path");
|
||||||
|
|
||||||
suite("option-manager", function () {
|
suite("option-manager", function () {
|
||||||
suite("memoisePluginContainer", function () {
|
suite("memoisePluginContainer", function () {
|
||||||
@ -43,5 +44,16 @@ suite("option-manager", function () {
|
|||||||
/Using removed Babel 5 option: base.auxiliaryComment - Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`/
|
/Using removed Babel 5 option: base.auxiliaryComment - Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`/
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
test("throws for resolved but erroring preset", function() {
|
||||||
|
return assert.throws(
|
||||||
|
function () {
|
||||||
|
var opt = new OptionManager(new Logger(null, "unknown"));
|
||||||
|
opt.init({
|
||||||
|
'presets': [path.resolve(__dirname, "fixtures", "option-manager", "not-a-preset")]
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/While processing preset: .*option-manager(?:\/|\\\\)not-a-preset\.js/
|
||||||
|
);
|
||||||
|
})
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user