40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
// @flow
|
|
|
|
export default class Plugin {
|
|
constructor(plugin: {}, key?: string) {
|
|
if (plugin.name != null && typeof plugin.name !== "string") {
|
|
throw new Error("Plugin .name must be a string, null, or undefined");
|
|
}
|
|
if (
|
|
plugin.manipulateOptions != null &&
|
|
typeof plugin.manipulateOptions !== "function"
|
|
) {
|
|
throw new Error(
|
|
"Plugin .manipulateOptions must be a function, null, or undefined",
|
|
);
|
|
}
|
|
if (plugin.post != null && typeof plugin.post !== "function") {
|
|
throw new Error("Plugin .post must be a function, null, or undefined");
|
|
}
|
|
if (plugin.pre != null && typeof plugin.pre !== "function") {
|
|
throw new Error("Plugin .pre must be a function, null, or undefined");
|
|
}
|
|
if (plugin.visitor != null && typeof plugin.visitor !== "object") {
|
|
throw new Error("Plugin .visitor must be an object, null, or undefined");
|
|
}
|
|
|
|
this.key = plugin.name || key;
|
|
|
|
this.manipulateOptions = plugin.manipulateOptions;
|
|
this.post = plugin.post;
|
|
this.pre = plugin.pre;
|
|
this.visitor = plugin.visitor;
|
|
}
|
|
|
|
key: ?string;
|
|
manipulateOptions: ?Function;
|
|
post: ?Function;
|
|
pre: ?Function;
|
|
visitor: ?{};
|
|
}
|