|
|
'use strict';
const mime = require('mime');
const createContext = require('./lib/context'); const middleware = require('./lib/middleware'); const reporter = require('./lib/reporter'); const { setFs, toDisk } = require('./lib/fs'); const { getFilenameFromUrl, noop, ready } = require('./lib/util');
const defaults = { logLevel: 'info', logTime: false, logger: null, mimeTypes: null, reporter, stats: { colors: true, context: process.cwd(), }, watchOptions: { aggregateTimeout: 200, }, writeToDisk: false, };
module.exports = function wdm(compiler, opts) { const options = Object.assign({}, defaults, opts);
// defining custom MIME type
if (options.mimeTypes) { const typeMap = options.mimeTypes.typeMap || options.mimeTypes; const force = !!options.mimeTypes.force; mime.define(typeMap, force); }
const context = createContext(compiler, options);
// start watching
if (!options.lazy) { context.watching = compiler.watch(options.watchOptions, (err) => { if (err) { context.log.error(err.stack || err); if (err.details) { context.log.error(err.details); } } }); } else { if (typeof options.filename === 'string') { const filename = options.filename .replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&') // eslint-disable-line no-useless-escape
.replace(/\\\[[a-z]+\\\]/gi, '.+');
options.filename = new RegExp(`^[/]{0,1}${filename}$`); }
context.state = true; }
if (options.writeToDisk) { toDisk(context); }
setFs(context, compiler);
return Object.assign(middleware(context), { close(callback) { // eslint-disable-next-line no-param-reassign
callback = callback || noop;
if (context.watching) { context.watching.close(callback); } else { callback(); } },
context,
fileSystem: context.fs,
getFilenameFromUrl: getFilenameFromUrl.bind( this, context.options.publicPath, context.compiler ),
invalidate(callback) { // eslint-disable-next-line no-param-reassign
callback = callback || noop;
if (context.watching) { ready(context, callback, {}); context.watching.invalidate(); } else { callback(); } },
waitUntilValid(callback) { // eslint-disable-next-line no-param-reassign
callback = callback || noop;
ready(context, callback, {}); }, }); };
|