fuse-box
Version:
Fuse-Box a bundler that does it right
49 lines (41 loc) • 1.82 kB
text/typescript
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);
};