UNPKG

webpack

Version:

Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.

395 lines (356 loc) 10 kB
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; var $interceptModuleExecution$ = undefined; var $moduleCache$ = undefined; // eslint-disable-next-line no-unused-vars var $hmrModuleData$ = undefined; /** @type {() => Promise} */ var $hmrDownloadManifest$ = undefined; var $hmrDownloadUpdateHandlers$ = undefined; var $hmrInvalidateModuleHandlers$ = undefined; var __webpack_require__ = undefined; module.exports = function () { var currentModuleData = {}; var installedModules = $moduleCache$; // module and require creation var currentChildModule; var currentParents = []; // status var registeredStatusHandlers = []; var currentStatus = "idle"; // while downloading var blockingPromises; // The update info var currentUpdateApplyHandlers; var queuedInvalidatedModules; // eslint-disable-next-line no-unused-vars $hmrModuleData$ = currentModuleData; $interceptModuleExecution$.push(function (options) { var module = options.module; var require = createRequire(options.require, options.id); module.hot = createModuleHotObject(options.id, module); module.parents = currentParents; module.children = []; currentParents = []; options.require = require; }); $hmrDownloadUpdateHandlers$ = {}; $hmrInvalidateModuleHandlers$ = {}; function createRequire(require, moduleId) { var me = installedModules[moduleId]; if (!me) return require; var fn = function (request) { if (me.hot.active) { if (installedModules[request]) { var parents = installedModules[request].parents; if (parents.indexOf(moduleId) === -1) { parents.push(moduleId); } } else { currentParents = [moduleId]; currentChildModule = request; } if (me.children.indexOf(request) === -1) { me.children.push(request); } } else { console.warn( "[HMR] unexpected require(" + request + ") from disposed module " + moduleId ); currentParents = []; } return require(request); }; var createPropertyDescriptor = function (name) { return { configurable: true, enumerable: true, get: function () { return require[name]; }, set: function (value) { require[name] = value; } }; }; for (var name in require) { if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") { Object.defineProperty(fn, name, createPropertyDescriptor(name)); } } fn.e = function (chunkId) { return trackBlockingPromise(require.e(chunkId)); }; return fn; } function createModuleHotObject(moduleId, me) { var _main = currentChildModule !== moduleId; var hot = { // private stuff _acceptedDependencies: {}, _acceptedErrorHandlers: {}, _declinedDependencies: {}, _selfAccepted: false, _selfDeclined: false, _selfInvalidated: false, _disposeHandlers: [], _main: _main, _requireSelf: function () { currentParents = me.parents.slice(); currentChildModule = _main ? undefined : moduleId; __webpack_require__(moduleId); }, // Module API active: true, accept: function (dep, callback, errorHandler) { if (dep === undefined) hot._selfAccepted = true; else if (typeof dep === "function") hot._selfAccepted = dep; else if (typeof dep === "object" && dep !== null) { for (var i = 0; i < dep.length; i++) { hot._acceptedDependencies[dep[i]] = callback || function () {}; hot._acceptedErrorHandlers[dep[i]] = errorHandler; } } else { hot._acceptedDependencies[dep] = callback || function () {}; hot._acceptedErrorHandlers[dep] = errorHandler; } }, decline: function (dep) { if (dep === undefined) hot._selfDeclined = true; else if (typeof dep === "object" && dep !== null) for (var i = 0; i < dep.length; i++) hot._declinedDependencies[dep[i]] = true; else hot._declinedDependencies[dep] = true; }, dispose: function (callback) { hot._disposeHandlers.push(callback); }, addDisposeHandler: function (callback) { hot._disposeHandlers.push(callback); }, removeDisposeHandler: function (callback) { var idx = hot._disposeHandlers.indexOf(callback); if (idx >= 0) hot._disposeHandlers.splice(idx, 1); }, invalidate: function () { this._selfInvalidated = true; switch (currentStatus) { case "idle": currentUpdateApplyHandlers = []; Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { $hmrInvalidateModuleHandlers$[key]( moduleId, currentUpdateApplyHandlers ); }); setStatus("ready"); break; case "ready": Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { $hmrInvalidateModuleHandlers$[key]( moduleId, currentUpdateApplyHandlers ); }); break; case "prepare": case "check": case "dispose": case "apply": (queuedInvalidatedModules = queuedInvalidatedModules || []).push( moduleId ); break; default: // ignore requests in error states break; } }, // Management API check: hotCheck, apply: hotApply, status: function (l) { if (!l) return currentStatus; registeredStatusHandlers.push(l); }, addStatusHandler: function (l) { registeredStatusHandlers.push(l); }, removeStatusHandler: function (l) { var idx = registeredStatusHandlers.indexOf(l); if (idx >= 0) registeredStatusHandlers.splice(idx, 1); }, //inherit from previous dispose call data: currentModuleData[moduleId] }; currentChildModule = undefined; return hot; } function setStatus(newStatus) { currentStatus = newStatus; var results = []; for (var i = 0; i < registeredStatusHandlers.length; i++) results[i] = registeredStatusHandlers[i].call(null, newStatus); return Promise.all(results); } function trackBlockingPromise(promise) { switch (currentStatus) { case "ready": setStatus("prepare"); blockingPromises.push(promise); waitForBlockingPromises(function () { return setStatus("ready"); }); return promise; case "prepare": blockingPromises.push(promise); return promise; default: return promise; } } function waitForBlockingPromises(fn) { if (blockingPromises.length === 0) return fn(); var blocker = blockingPromises; blockingPromises = []; return Promise.all(blocker).then(function () { return waitForBlockingPromises(fn); }); } function hotCheck(applyOnUpdate) { if (currentStatus !== "idle") { throw new Error("check() is only allowed in idle status"); } return setStatus("check") .then($hmrDownloadManifest$) .then(function (update) { if (!update) { return setStatus(applyInvalidatedModules() ? "ready" : "idle").then( function () { return null; } ); } return setStatus("prepare").then(function () { var updatedModules = []; blockingPromises = []; currentUpdateApplyHandlers = []; return Promise.all( Object.keys($hmrDownloadUpdateHandlers$).reduce(function ( promises, key ) { $hmrDownloadUpdateHandlers$[key]( update.c, update.r, update.m, promises, currentUpdateApplyHandlers, updatedModules ); return promises; }, []) ).then(function () { return waitForBlockingPromises(function () { if (applyOnUpdate) { return internalApply(applyOnUpdate); } else { return setStatus("ready").then(function () { return updatedModules; }); } }); }); }); }); } function hotApply(options) { if (currentStatus !== "ready") { return Promise.resolve().then(function () { throw new Error("apply() is only allowed in ready status"); }); } return internalApply(options); } function internalApply(options) { options = options || {}; applyInvalidatedModules(); var results = currentUpdateApplyHandlers.map(function (handler) { return handler(options); }); currentUpdateApplyHandlers = undefined; var errors = results .map(function (r) { return r.error; }) .filter(Boolean); if (errors.length > 0) { return setStatus("abort").then(function () { throw errors[0]; }); } // Now in "dispose" phase var disposePromise = setStatus("dispose"); results.forEach(function (result) { if (result.dispose) result.dispose(); }); // Now in "apply" phase var applyPromise = setStatus("apply"); var error; var reportError = function (err) { if (!error) error = err; }; var outdatedModules = []; results.forEach(function (result) { if (result.apply) { var modules = result.apply(reportError); if (modules) { for (var i = 0; i < modules.length; i++) { outdatedModules.push(modules[i]); } } } }); return Promise.all([disposePromise, applyPromise]).then(function () { // handle errors in accept handlers and self accepted module load if (error) { return setStatus("fail").then(function () { throw error; }); } if (queuedInvalidatedModules) { return internalApply(options).then(function (list) { outdatedModules.forEach(function (moduleId) { if (list.indexOf(moduleId) < 0) list.push(moduleId); }); return list; }); } return setStatus("idle").then(function () { return outdatedModules; }); }); } function applyInvalidatedModules() { if (queuedInvalidatedModules) { if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = []; Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { queuedInvalidatedModules.forEach(function (moduleId) { $hmrInvalidateModuleHandlers$[key]( moduleId, currentUpdateApplyHandlers ); }); }); queuedInvalidatedModules = undefined; return true; } } };