diff options
Diffstat (limited to 'node_modules/webpack-dev-middleware/lib/context.js')
| -rw-r--r-- | node_modules/webpack-dev-middleware/lib/context.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/node_modules/webpack-dev-middleware/lib/context.js b/node_modules/webpack-dev-middleware/lib/context.js new file mode 100644 index 00000000..5e9abba7 --- /dev/null +++ b/node_modules/webpack-dev-middleware/lib/context.js @@ -0,0 +1,103 @@ +'use strict'; + +const weblog = require('webpack-log'); + +module.exports = function ctx(compiler, options) { + const context = { + state: false, + webpackStats: null, + callbacks: [], + options, + compiler, + watching: null, + forceRebuild: false + }; + + if (options.logger) { + context.log = options.logger; + } else { + context.log = weblog({ + level: options.logLevel || 'info', + name: 'wdm', + timestamp: options.logTime + }); + } + + const { log } = context; + + function done(stats) { + // We are now on valid state + context.state = true; + context.webpackStats = stats; + + // Do the stuff in nextTick, because bundle may be invalidated + // if a change happened while compiling + process.nextTick(() => { + // check if still in valid state + if (!context.state) { + return; + } + + // print webpack output + context.options.reporter(context.options, { + log, + state: true, + stats + }); + + // execute callback that are delayed + const cbs = context.callbacks; + context.callbacks = []; + cbs.forEach((cb) => { + cb(stats); + }); + }); + + // In lazy mode, we may issue another rebuild + if (context.forceRebuild) { + context.forceRebuild = false; + rebuild(); + } + } + + function invalid(callback) { + if (context.state) { + context.options.reporter(context.options, { + log, + state: false + }); + } + + // We are now in invalid state + context.state = false; + if (typeof callback === 'function') { + callback(); + } + } + + function rebuild() { + if (context.state) { + context.state = false; + context.compiler.run((err) => { + if (err) { + log.error(err.stack || err); + if (err.details) { + log.error(err.details); + } + } + }); + } else { + context.forceRebuild = true; + } + } + + context.rebuild = rebuild; + context.compiler.hooks.invalid.tap('WebpackDevMiddleware', invalid); + context.compiler.hooks.run.tap('WebpackDevMiddleware', invalid); + context.compiler.hooks.done.tap('WebpackDevMiddleware', done); + context.compiler.hooks.watchRun.tap('WebpackDevMiddleware', (comp, callback) => { + invalid(callback); + }); + + return context; +}; |
