101 lines
No EOL
2.6 KiB
TypeScript
101 lines
No EOL
2.6 KiB
TypeScript
/// <reference path='../typings/index.d.ts' />
|
|
const chalk = require('chalk');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const config = require('./config');
|
|
const Promise = require('bluebird');
|
|
const u = require('./core/utils');
|
|
const log = require('./core/log');
|
|
|
|
'use strict';
|
|
|
|
class WebpackAutoInject{
|
|
|
|
private options;
|
|
private compiler;
|
|
private version;
|
|
|
|
/**
|
|
* Default options
|
|
*/
|
|
static options = {
|
|
autoIncrease : true,
|
|
injectAsComment : true,
|
|
injectByTag : true,
|
|
injectByTagFileRegex : /^index\.html$/
|
|
}
|
|
|
|
/**
|
|
* Constructor,
|
|
* called on webpack config load
|
|
* @param options
|
|
*/
|
|
constructor(options) {
|
|
this.options = u.merge(WebpackAutoInject.options, options);
|
|
var packageFile = JSON.parse(fs.readFileSync(path.normalize(config.PATH_PACKAGE), 'utf8'));
|
|
this.version = packageFile.version;
|
|
log.call('info', 'AIS_START');
|
|
this.executeNoneWebpackComponents();
|
|
}
|
|
|
|
/**
|
|
* Webpack apply call,
|
|
* when webpack is initialized and
|
|
* plugin has been called by webpack
|
|
* @param compiler
|
|
*/
|
|
protected apply(compiler) {
|
|
this.compiler = compiler;
|
|
this.executeWebpackComponents();
|
|
}
|
|
|
|
/**
|
|
* Execute none webpack components
|
|
* - runs as soon as possible,
|
|
* > without waiting for webpack init
|
|
*/
|
|
private executeNoneWebpackComponents() {
|
|
this.executeComponents(config.NON_WEBPACK_COMPONENTS, () => {
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Execute webpack components
|
|
* - runs when webpack is initialized
|
|
* and plugins is called by webpack
|
|
*/
|
|
private executeWebpackComponents() {
|
|
this.executeComponents(config.WEBPACK_COMPONENTS, () => {
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Execute components,
|
|
* - general layer for comp execution
|
|
* - used for both, webpack and non webpack comp
|
|
*/
|
|
private executeComponents(components, done) {
|
|
|
|
// no more components,
|
|
// finish
|
|
if(!components.length) { done(); return;}
|
|
|
|
// take first component
|
|
let comp = components.shift();
|
|
|
|
// if component is disabled, call next component
|
|
if(!this.options[comp.option]) {
|
|
this.executeComponents(components, done);
|
|
return;
|
|
}
|
|
|
|
// execute component
|
|
let inst = new (require(comp.path))(this);
|
|
inst.apply().then(() => {
|
|
this.executeComponents(components, done);
|
|
}, (err) => {this.executeComponents(components, done);})
|
|
}
|
|
}
|
|
|
|
|
|
module.exports = WebpackAutoInject; |