UNPKG

fuse-box

Version:

Fuse-Box a bundler that does it right

49 lines (41 loc) 1.82 kB
import { Plugin, WorkFlowContext } from "../../core/WorkflowContext"; import { BundleProducer } from "../../core/BundleProducer"; import { WebIndexPluginClass } from "../../plugins/WebIndexPlugin"; import { IQuantumExtensionParams, QuantumOptions } from "./QuantumOptions"; import { QuantumCore } from "./QuantumCore"; export class QuantumPluginClass implements Plugin { public coreOpts: IQuantumExtensionParams; constructor(coreOpts?: IQuantumExtensionParams) { this.coreOpts = coreOpts || {}; } init(context: WorkFlowContext) { context.bundle.producer.writeBundles = false; context.bundle.producer.hmrAllowed = false; // filter out some plugins to apply the later context.bundle.producer.bundles.forEach(bundle => { const plugins = bundle.context.plugins; plugins.forEach((plugin, index) => { if (plugin.constructor.name === "UglifyJSPluginClass") { this.coreOpts.uglify = plugin.options || {}; // remove uglify js delete plugins[index]; } if (plugin.constructor.name === "WebIndexPluginClass") { this.coreOpts.webIndexPlugin = plugin as WebIndexPluginClass; // remove WebIndex delete plugins[index]; } if (plugin.constructor.name === "HotReloadPluginClass") { delete plugins[index]; } }) }); } producerEnd(producer: BundleProducer) { let core = new QuantumCore(producer, new QuantumOptions(this.coreOpts)); return core.consume(); } }; export const QuantumPlugin = (opts?: IQuantumExtensionParams) => { return new QuantumPluginClass(opts); };