clean up plugin manager constructor and add some basic plugin manager tests
This commit is contained in:
parent
98206df864
commit
ee0c88a070
@ -219,7 +219,12 @@ export default class File {
|
|||||||
// init plugins!
|
// init plugins!
|
||||||
var beforePlugins = [];
|
var beforePlugins = [];
|
||||||
var afterPlugins = [];
|
var afterPlugins = [];
|
||||||
var pluginManager = new PluginManager(this, this.transformers, beforePlugins, afterPlugins);
|
var pluginManager = new PluginManager({
|
||||||
|
file: this,
|
||||||
|
transformers: this.transformers,
|
||||||
|
before: beforePlugins,
|
||||||
|
after: afterPlugins
|
||||||
|
});
|
||||||
for (var i = 0; i < file.opts.plugins.length; i++) {
|
for (var i = 0; i < file.opts.plugins.length; i++) {
|
||||||
pluginManager.add(file.opts.plugins[i]);
|
pluginManager.add(file.opts.plugins[i]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,18 +18,18 @@ export default class PluginManager {
|
|||||||
return transformer;
|
return transformer;
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(file, transformers, before, after) {
|
constructor({ file, transformers, before, after } = { transformers: {}, before: [], after: [] }) {
|
||||||
this.transformers = transformers;
|
this.transformers = transformers;
|
||||||
this.file = file;
|
this.file = file;
|
||||||
this.before = before;
|
this.before = before;
|
||||||
this.after = after;
|
this.after = after;
|
||||||
}
|
}
|
||||||
|
|
||||||
subnormaliseString(name) {
|
subnormaliseString(key, _position) {
|
||||||
// this is a plugin in the form of "foobar" or "foobar:after"
|
// this is a plugin in the form of "foobar" or "foobar:after"
|
||||||
// where the optional colon is the delimiter for plugin position in the transformer stack
|
// where the optional colon is the delimiter for plugin position in the transformer stack
|
||||||
|
|
||||||
var [name, position] = name.split(":");
|
var [name, position = _position] = key.split(":");
|
||||||
|
|
||||||
var loc = util.resolveRelative(name) || util.resolveRelative(`babel-plugin-${name}`);
|
var loc = util.resolveRelative(name) || util.resolveRelative(`babel-plugin-${name}`);
|
||||||
if (loc) {
|
if (loc) {
|
||||||
@ -42,7 +42,7 @@ export default class PluginManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
validate(plugin) {
|
validate(name, plugin) {
|
||||||
// validate transformer key
|
// validate transformer key
|
||||||
var key = plugin.key;
|
var key = plugin.key;
|
||||||
if (this.transformers[key]) {
|
if (this.transformers[key]) {
|
||||||
@ -69,7 +69,7 @@ export default class PluginManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (typeof name === "string") {
|
if (typeof name === "string") {
|
||||||
({ plugin, position } = this.subnormaliseString(name));
|
({ plugin, position } = this.subnormaliseString(name, position));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new TypeError(messages.get("pluginIllegalKind", typeof name, name));
|
throw new TypeError(messages.get("pluginIllegalKind", typeof name, name));
|
||||||
@ -89,7 +89,7 @@ export default class PluginManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
this.validate(plugin);
|
this.validate(name, plugin);
|
||||||
|
|
||||||
// build!
|
// build!
|
||||||
var pass = this.transformers[plugin.key] = plugin.buildPass(this.file);
|
var pass = this.transformers[plugin.key] = plugin.buildPass(this.file);
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
require("../../lib/babel/api/node");
|
require("../../lib/babel/api/node");
|
||||||
|
|
||||||
var buildExternalHelpers = require("../../lib/babel/tools/build-external-helpers");
|
var buildExternalHelpers = require("../../lib/babel/tools/build-external-helpers");
|
||||||
|
var PluginManager = require("../../lib/babel/transformation/file/plugin-manager");
|
||||||
|
var Transformer = require("../../lib/babel/transformation/transformer");
|
||||||
var transform = require("../../lib/babel/transformation");
|
var transform = require("../../lib/babel/transformation");
|
||||||
var assert = require("assert");
|
var assert = require("assert");
|
||||||
var File = require("../../lib/babel/transformation/file");
|
var File = require("../../lib/babel/transformation/file");
|
||||||
@ -51,4 +53,40 @@ suite("api", function () {
|
|||||||
assert.ok(script.indexOf("inherits") === -1);
|
assert.ok(script.indexOf("inherits") === -1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
suite("plugins", function () {
|
||||||
|
test("unknown plugin", function () {
|
||||||
|
assert.throws(function () {
|
||||||
|
new PluginManager().subnormaliseString("foo bar");
|
||||||
|
}, /Unknown plugin/);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("key collision", function () {
|
||||||
|
assert.throws(function () {
|
||||||
|
new PluginManager({
|
||||||
|
transformers: { "es6.arrowFunctions": true }
|
||||||
|
}).validate("foobar", { key: "es6.arrowFunctions" });
|
||||||
|
}, /collides with another/);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("not transformer", function () {
|
||||||
|
assert.throws(function () {
|
||||||
|
new PluginManager().validate("foobar", {});
|
||||||
|
}, /didn't export a Transformer instance/);
|
||||||
|
|
||||||
|
assert.throws(function () {
|
||||||
|
new PluginManager().validate("foobar", "");
|
||||||
|
}, /didn't export a Transformer instance/);
|
||||||
|
|
||||||
|
assert.throws(function () {
|
||||||
|
new PluginManager().validate("foobar", []);
|
||||||
|
}, /didn't export a Transformer instance/);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("object request");
|
||||||
|
|
||||||
|
test("string request");
|
||||||
|
|
||||||
|
test("transformer request");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user