// @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: ?{}; }