123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- "use strict";
- const {
- validate
- } = require("schema-utils");
- const mime = require("mime-types");
- const middleware = require("./middleware");
- const getFilenameFromUrl = require("./utils/getFilenameFromUrl");
- const setupHooks = require("./utils/setupHooks");
- const setupWriteToDisk = require("./utils/setupWriteToDisk");
- const setupOutputFileSystem = require("./utils/setupOutputFileSystem");
- const ready = require("./utils/ready");
- const schema = require("./options.json");
- const noop = () => {};
- function wdm(compiler, options = {}) {
- validate(
-
- schema, options, {
- name: "Dev Middleware",
- baseDataPath: "options"
- });
- const {
- mimeTypes
- } = options;
- if (mimeTypes) {
- const {
- types
- } = mime;
-
-
- mime.types = { ...types,
- ...mimeTypes
- };
- }
-
- const context = {
- state: false,
-
- stats: undefined,
- callbacks: [],
- options,
- compiler,
-
-
- watching: undefined,
- logger: compiler.getInfrastructureLogger("webpack-dev-middleware"),
-
-
- outputFileSystem: undefined
- };
- setupHooks(context);
- if (options.writeToDisk) {
- setupWriteToDisk(context);
- }
- setupOutputFileSystem(context);
- if (
-
- context.compiler.watching) {
- context.watching =
-
- context.compiler.watching;
- } else {
-
- let watchOptions;
-
- const errorHandler = error => {
- if (error) {
-
-
-
-
- context.logger.error(error);
- }
- };
- if (Array.isArray(
-
- context.compiler.compilers)) {
- watchOptions =
-
- context.compiler.compilers.map(
-
- childCompiler => childCompiler.options.watchOptions || {});
- context.watching =
-
- context.compiler.watch(
-
- watchOptions, errorHandler);
- } else {
- watchOptions =
-
- context.compiler.options.watchOptions || {};
- context.watching =
-
- context.compiler.watch(watchOptions, errorHandler);
- }
- }
- const instance =
-
- middleware(context);
-
- instance.getFilenameFromUrl =
-
- url => getFilenameFromUrl(context, url);
-
- instance.waitUntilValid = (callback = noop) => {
- ready(context, callback);
- };
-
- instance.invalidate = (callback = noop) => {
- ready(context, callback);
- context.watching.invalidate();
- };
-
- instance.close = (callback = noop) => {
- context.watching.close(callback);
- };
-
- instance.context = context;
- return instance;
- }
- module.exports = wdm;
|