[6a3a178] | 1 | /*
|
---|
| 2 | MIT License http://www.opensource.org/licenses/mit-license.php
|
---|
| 3 | Author Tobias Koppers @sokra
|
---|
| 4 | */
|
---|
| 5 |
|
---|
| 6 | "use strict";
|
---|
| 7 |
|
---|
| 8 | var $installedChunks$ = undefined;
|
---|
| 9 | var $loadUpdateChunk$ = undefined;
|
---|
| 10 | var $moduleCache$ = undefined;
|
---|
| 11 | var $moduleFactories$ = undefined;
|
---|
| 12 | var $ensureChunkHandlers$ = undefined;
|
---|
| 13 | var $hasOwnProperty$ = undefined;
|
---|
| 14 | var $hmrModuleData$ = undefined;
|
---|
| 15 | var $hmrDownloadUpdateHandlers$ = undefined;
|
---|
| 16 | var $hmrInvalidateModuleHandlers$ = undefined;
|
---|
| 17 | var __webpack_require__ = undefined;
|
---|
| 18 |
|
---|
| 19 | module.exports = function () {
|
---|
| 20 | var currentUpdateChunks;
|
---|
| 21 | var currentUpdate;
|
---|
| 22 | var currentUpdateRemovedChunks;
|
---|
| 23 | var currentUpdateRuntime;
|
---|
| 24 | function applyHandler(options) {
|
---|
| 25 | if ($ensureChunkHandlers$) delete $ensureChunkHandlers$.$key$Hmr;
|
---|
| 26 | currentUpdateChunks = undefined;
|
---|
| 27 | function getAffectedModuleEffects(updateModuleId) {
|
---|
| 28 | var outdatedModules = [updateModuleId];
|
---|
| 29 | var outdatedDependencies = {};
|
---|
| 30 |
|
---|
| 31 | var queue = outdatedModules.map(function (id) {
|
---|
| 32 | return {
|
---|
| 33 | chain: [id],
|
---|
| 34 | id: id
|
---|
| 35 | };
|
---|
| 36 | });
|
---|
| 37 | while (queue.length > 0) {
|
---|
| 38 | var queueItem = queue.pop();
|
---|
| 39 | var moduleId = queueItem.id;
|
---|
| 40 | var chain = queueItem.chain;
|
---|
| 41 | var module = $moduleCache$[moduleId];
|
---|
| 42 | if (
|
---|
| 43 | !module ||
|
---|
| 44 | (module.hot._selfAccepted && !module.hot._selfInvalidated)
|
---|
| 45 | )
|
---|
| 46 | continue;
|
---|
| 47 | if (module.hot._selfDeclined) {
|
---|
| 48 | return {
|
---|
| 49 | type: "self-declined",
|
---|
| 50 | chain: chain,
|
---|
| 51 | moduleId: moduleId
|
---|
| 52 | };
|
---|
| 53 | }
|
---|
| 54 | if (module.hot._main) {
|
---|
| 55 | return {
|
---|
| 56 | type: "unaccepted",
|
---|
| 57 | chain: chain,
|
---|
| 58 | moduleId: moduleId
|
---|
| 59 | };
|
---|
| 60 | }
|
---|
| 61 | for (var i = 0; i < module.parents.length; i++) {
|
---|
| 62 | var parentId = module.parents[i];
|
---|
| 63 | var parent = $moduleCache$[parentId];
|
---|
| 64 | if (!parent) continue;
|
---|
| 65 | if (parent.hot._declinedDependencies[moduleId]) {
|
---|
| 66 | return {
|
---|
| 67 | type: "declined",
|
---|
| 68 | chain: chain.concat([parentId]),
|
---|
| 69 | moduleId: moduleId,
|
---|
| 70 | parentId: parentId
|
---|
| 71 | };
|
---|
| 72 | }
|
---|
| 73 | if (outdatedModules.indexOf(parentId) !== -1) continue;
|
---|
| 74 | if (parent.hot._acceptedDependencies[moduleId]) {
|
---|
| 75 | if (!outdatedDependencies[parentId])
|
---|
| 76 | outdatedDependencies[parentId] = [];
|
---|
| 77 | addAllToSet(outdatedDependencies[parentId], [moduleId]);
|
---|
| 78 | continue;
|
---|
| 79 | }
|
---|
| 80 | delete outdatedDependencies[parentId];
|
---|
| 81 | outdatedModules.push(parentId);
|
---|
| 82 | queue.push({
|
---|
| 83 | chain: chain.concat([parentId]),
|
---|
| 84 | id: parentId
|
---|
| 85 | });
|
---|
| 86 | }
|
---|
| 87 | }
|
---|
| 88 |
|
---|
| 89 | return {
|
---|
| 90 | type: "accepted",
|
---|
| 91 | moduleId: updateModuleId,
|
---|
| 92 | outdatedModules: outdatedModules,
|
---|
| 93 | outdatedDependencies: outdatedDependencies
|
---|
| 94 | };
|
---|
| 95 | }
|
---|
| 96 |
|
---|
| 97 | function addAllToSet(a, b) {
|
---|
| 98 | for (var i = 0; i < b.length; i++) {
|
---|
| 99 | var item = b[i];
|
---|
| 100 | if (a.indexOf(item) === -1) a.push(item);
|
---|
| 101 | }
|
---|
| 102 | }
|
---|
| 103 |
|
---|
| 104 | // at begin all updates modules are outdated
|
---|
| 105 | // the "outdated" status can propagate to parents if they don't accept the children
|
---|
| 106 | var outdatedDependencies = {};
|
---|
| 107 | var outdatedModules = [];
|
---|
| 108 | var appliedUpdate = {};
|
---|
| 109 |
|
---|
| 110 | var warnUnexpectedRequire = function warnUnexpectedRequire(module) {
|
---|
| 111 | console.warn(
|
---|
| 112 | "[HMR] unexpected require(" + module.id + ") to disposed module"
|
---|
| 113 | );
|
---|
| 114 | };
|
---|
| 115 |
|
---|
| 116 | for (var moduleId in currentUpdate) {
|
---|
| 117 | if ($hasOwnProperty$(currentUpdate, moduleId)) {
|
---|
| 118 | var newModuleFactory = currentUpdate[moduleId];
|
---|
| 119 | /** @type {TODO} */
|
---|
| 120 | var result;
|
---|
| 121 | if (newModuleFactory) {
|
---|
| 122 | result = getAffectedModuleEffects(moduleId);
|
---|
| 123 | } else {
|
---|
| 124 | result = {
|
---|
| 125 | type: "disposed",
|
---|
| 126 | moduleId: moduleId
|
---|
| 127 | };
|
---|
| 128 | }
|
---|
| 129 | /** @type {Error|false} */
|
---|
| 130 | var abortError = false;
|
---|
| 131 | var doApply = false;
|
---|
| 132 | var doDispose = false;
|
---|
| 133 | var chainInfo = "";
|
---|
| 134 | if (result.chain) {
|
---|
| 135 | chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
|
---|
| 136 | }
|
---|
| 137 | switch (result.type) {
|
---|
| 138 | case "self-declined":
|
---|
| 139 | if (options.onDeclined) options.onDeclined(result);
|
---|
| 140 | if (!options.ignoreDeclined)
|
---|
| 141 | abortError = new Error(
|
---|
| 142 | "Aborted because of self decline: " +
|
---|
| 143 | result.moduleId +
|
---|
| 144 | chainInfo
|
---|
| 145 | );
|
---|
| 146 | break;
|
---|
| 147 | case "declined":
|
---|
| 148 | if (options.onDeclined) options.onDeclined(result);
|
---|
| 149 | if (!options.ignoreDeclined)
|
---|
| 150 | abortError = new Error(
|
---|
| 151 | "Aborted because of declined dependency: " +
|
---|
| 152 | result.moduleId +
|
---|
| 153 | " in " +
|
---|
| 154 | result.parentId +
|
---|
| 155 | chainInfo
|
---|
| 156 | );
|
---|
| 157 | break;
|
---|
| 158 | case "unaccepted":
|
---|
| 159 | if (options.onUnaccepted) options.onUnaccepted(result);
|
---|
| 160 | if (!options.ignoreUnaccepted)
|
---|
| 161 | abortError = new Error(
|
---|
| 162 | "Aborted because " + moduleId + " is not accepted" + chainInfo
|
---|
| 163 | );
|
---|
| 164 | break;
|
---|
| 165 | case "accepted":
|
---|
| 166 | if (options.onAccepted) options.onAccepted(result);
|
---|
| 167 | doApply = true;
|
---|
| 168 | break;
|
---|
| 169 | case "disposed":
|
---|
| 170 | if (options.onDisposed) options.onDisposed(result);
|
---|
| 171 | doDispose = true;
|
---|
| 172 | break;
|
---|
| 173 | default:
|
---|
| 174 | throw new Error("Unexception type " + result.type);
|
---|
| 175 | }
|
---|
| 176 | if (abortError) {
|
---|
| 177 | return {
|
---|
| 178 | error: abortError
|
---|
| 179 | };
|
---|
| 180 | }
|
---|
| 181 | if (doApply) {
|
---|
| 182 | appliedUpdate[moduleId] = newModuleFactory;
|
---|
| 183 | addAllToSet(outdatedModules, result.outdatedModules);
|
---|
| 184 | for (moduleId in result.outdatedDependencies) {
|
---|
| 185 | if ($hasOwnProperty$(result.outdatedDependencies, moduleId)) {
|
---|
| 186 | if (!outdatedDependencies[moduleId])
|
---|
| 187 | outdatedDependencies[moduleId] = [];
|
---|
| 188 | addAllToSet(
|
---|
| 189 | outdatedDependencies[moduleId],
|
---|
| 190 | result.outdatedDependencies[moduleId]
|
---|
| 191 | );
|
---|
| 192 | }
|
---|
| 193 | }
|
---|
| 194 | }
|
---|
| 195 | if (doDispose) {
|
---|
| 196 | addAllToSet(outdatedModules, [result.moduleId]);
|
---|
| 197 | appliedUpdate[moduleId] = warnUnexpectedRequire;
|
---|
| 198 | }
|
---|
| 199 | }
|
---|
| 200 | }
|
---|
| 201 | currentUpdate = undefined;
|
---|
| 202 |
|
---|
| 203 | // Store self accepted outdated modules to require them later by the module system
|
---|
| 204 | var outdatedSelfAcceptedModules = [];
|
---|
| 205 | for (var j = 0; j < outdatedModules.length; j++) {
|
---|
| 206 | var outdatedModuleId = outdatedModules[j];
|
---|
| 207 | var module = $moduleCache$[outdatedModuleId];
|
---|
| 208 | if (
|
---|
| 209 | module &&
|
---|
| 210 | (module.hot._selfAccepted || module.hot._main) &&
|
---|
| 211 | // removed self-accepted modules should not be required
|
---|
| 212 | appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire &&
|
---|
| 213 | // when called invalidate self-accepting is not possible
|
---|
| 214 | !module.hot._selfInvalidated
|
---|
| 215 | ) {
|
---|
| 216 | outdatedSelfAcceptedModules.push({
|
---|
| 217 | module: outdatedModuleId,
|
---|
| 218 | require: module.hot._requireSelf,
|
---|
| 219 | errorHandler: module.hot._selfAccepted
|
---|
| 220 | });
|
---|
| 221 | }
|
---|
| 222 | }
|
---|
| 223 |
|
---|
| 224 | var moduleOutdatedDependencies;
|
---|
| 225 |
|
---|
| 226 | return {
|
---|
| 227 | dispose: function () {
|
---|
| 228 | currentUpdateRemovedChunks.forEach(function (chunkId) {
|
---|
| 229 | delete $installedChunks$[chunkId];
|
---|
| 230 | });
|
---|
| 231 | currentUpdateRemovedChunks = undefined;
|
---|
| 232 |
|
---|
| 233 | var idx;
|
---|
| 234 | var queue = outdatedModules.slice();
|
---|
| 235 | while (queue.length > 0) {
|
---|
| 236 | var moduleId = queue.pop();
|
---|
| 237 | var module = $moduleCache$[moduleId];
|
---|
| 238 | if (!module) continue;
|
---|
| 239 |
|
---|
| 240 | var data = {};
|
---|
| 241 |
|
---|
| 242 | // Call dispose handlers
|
---|
| 243 | var disposeHandlers = module.hot._disposeHandlers;
|
---|
| 244 | for (j = 0; j < disposeHandlers.length; j++) {
|
---|
| 245 | disposeHandlers[j].call(null, data);
|
---|
| 246 | }
|
---|
| 247 | $hmrModuleData$[moduleId] = data;
|
---|
| 248 |
|
---|
| 249 | // disable module (this disables requires from this module)
|
---|
| 250 | module.hot.active = false;
|
---|
| 251 |
|
---|
| 252 | // remove module from cache
|
---|
| 253 | delete $moduleCache$[moduleId];
|
---|
| 254 |
|
---|
| 255 | // when disposing there is no need to call dispose handler
|
---|
| 256 | delete outdatedDependencies[moduleId];
|
---|
| 257 |
|
---|
| 258 | // remove "parents" references from all children
|
---|
| 259 | for (j = 0; j < module.children.length; j++) {
|
---|
| 260 | var child = $moduleCache$[module.children[j]];
|
---|
| 261 | if (!child) continue;
|
---|
| 262 | idx = child.parents.indexOf(moduleId);
|
---|
| 263 | if (idx >= 0) {
|
---|
| 264 | child.parents.splice(idx, 1);
|
---|
| 265 | }
|
---|
| 266 | }
|
---|
| 267 | }
|
---|
| 268 |
|
---|
| 269 | // remove outdated dependency from module children
|
---|
| 270 | var dependency;
|
---|
| 271 | for (var outdatedModuleId in outdatedDependencies) {
|
---|
| 272 | if ($hasOwnProperty$(outdatedDependencies, outdatedModuleId)) {
|
---|
| 273 | module = $moduleCache$[outdatedModuleId];
|
---|
| 274 | if (module) {
|
---|
| 275 | moduleOutdatedDependencies =
|
---|
| 276 | outdatedDependencies[outdatedModuleId];
|
---|
| 277 | for (j = 0; j < moduleOutdatedDependencies.length; j++) {
|
---|
| 278 | dependency = moduleOutdatedDependencies[j];
|
---|
| 279 | idx = module.children.indexOf(dependency);
|
---|
| 280 | if (idx >= 0) module.children.splice(idx, 1);
|
---|
| 281 | }
|
---|
| 282 | }
|
---|
| 283 | }
|
---|
| 284 | }
|
---|
| 285 | },
|
---|
| 286 | apply: function (reportError) {
|
---|
| 287 | // insert new code
|
---|
| 288 | for (var updateModuleId in appliedUpdate) {
|
---|
| 289 | if ($hasOwnProperty$(appliedUpdate, updateModuleId)) {
|
---|
| 290 | $moduleFactories$[updateModuleId] = appliedUpdate[updateModuleId];
|
---|
| 291 | }
|
---|
| 292 | }
|
---|
| 293 |
|
---|
| 294 | // run new runtime modules
|
---|
| 295 | for (var i = 0; i < currentUpdateRuntime.length; i++) {
|
---|
| 296 | currentUpdateRuntime[i](__webpack_require__);
|
---|
| 297 | }
|
---|
| 298 |
|
---|
| 299 | // call accept handlers
|
---|
| 300 | for (var outdatedModuleId in outdatedDependencies) {
|
---|
| 301 | if ($hasOwnProperty$(outdatedDependencies, outdatedModuleId)) {
|
---|
| 302 | var module = $moduleCache$[outdatedModuleId];
|
---|
| 303 | if (module) {
|
---|
| 304 | moduleOutdatedDependencies =
|
---|
| 305 | outdatedDependencies[outdatedModuleId];
|
---|
| 306 | var callbacks = [];
|
---|
| 307 | var errorHandlers = [];
|
---|
| 308 | var dependenciesForCallbacks = [];
|
---|
| 309 | for (var j = 0; j < moduleOutdatedDependencies.length; j++) {
|
---|
| 310 | var dependency = moduleOutdatedDependencies[j];
|
---|
| 311 | var acceptCallback =
|
---|
| 312 | module.hot._acceptedDependencies[dependency];
|
---|
| 313 | var errorHandler =
|
---|
| 314 | module.hot._acceptedErrorHandlers[dependency];
|
---|
| 315 | if (acceptCallback) {
|
---|
| 316 | if (callbacks.indexOf(acceptCallback) !== -1) continue;
|
---|
| 317 | callbacks.push(acceptCallback);
|
---|
| 318 | errorHandlers.push(errorHandler);
|
---|
| 319 | dependenciesForCallbacks.push(dependency);
|
---|
| 320 | }
|
---|
| 321 | }
|
---|
| 322 | for (var k = 0; k < callbacks.length; k++) {
|
---|
| 323 | try {
|
---|
| 324 | callbacks[k].call(null, moduleOutdatedDependencies);
|
---|
| 325 | } catch (err) {
|
---|
| 326 | if (typeof errorHandlers[k] === "function") {
|
---|
| 327 | try {
|
---|
| 328 | errorHandlers[k](err, {
|
---|
| 329 | moduleId: outdatedModuleId,
|
---|
| 330 | dependencyId: dependenciesForCallbacks[k]
|
---|
| 331 | });
|
---|
| 332 | } catch (err2) {
|
---|
| 333 | if (options.onErrored) {
|
---|
| 334 | options.onErrored({
|
---|
| 335 | type: "accept-error-handler-errored",
|
---|
| 336 | moduleId: outdatedModuleId,
|
---|
| 337 | dependencyId: dependenciesForCallbacks[k],
|
---|
| 338 | error: err2,
|
---|
| 339 | originalError: err
|
---|
| 340 | });
|
---|
| 341 | }
|
---|
| 342 | if (!options.ignoreErrored) {
|
---|
| 343 | reportError(err2);
|
---|
| 344 | reportError(err);
|
---|
| 345 | }
|
---|
| 346 | }
|
---|
| 347 | } else {
|
---|
| 348 | if (options.onErrored) {
|
---|
| 349 | options.onErrored({
|
---|
| 350 | type: "accept-errored",
|
---|
| 351 | moduleId: outdatedModuleId,
|
---|
| 352 | dependencyId: dependenciesForCallbacks[k],
|
---|
| 353 | error: err
|
---|
| 354 | });
|
---|
| 355 | }
|
---|
| 356 | if (!options.ignoreErrored) {
|
---|
| 357 | reportError(err);
|
---|
| 358 | }
|
---|
| 359 | }
|
---|
| 360 | }
|
---|
| 361 | }
|
---|
| 362 | }
|
---|
| 363 | }
|
---|
| 364 | }
|
---|
| 365 |
|
---|
| 366 | // Load self accepted modules
|
---|
| 367 | for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) {
|
---|
| 368 | var item = outdatedSelfAcceptedModules[o];
|
---|
| 369 | var moduleId = item.module;
|
---|
| 370 | try {
|
---|
| 371 | item.require(moduleId);
|
---|
| 372 | } catch (err) {
|
---|
| 373 | if (typeof item.errorHandler === "function") {
|
---|
| 374 | try {
|
---|
| 375 | item.errorHandler(err, {
|
---|
| 376 | moduleId: moduleId,
|
---|
| 377 | module: $moduleCache$[moduleId]
|
---|
| 378 | });
|
---|
| 379 | } catch (err2) {
|
---|
| 380 | if (options.onErrored) {
|
---|
| 381 | options.onErrored({
|
---|
| 382 | type: "self-accept-error-handler-errored",
|
---|
| 383 | moduleId: moduleId,
|
---|
| 384 | error: err2,
|
---|
| 385 | originalError: err
|
---|
| 386 | });
|
---|
| 387 | }
|
---|
| 388 | if (!options.ignoreErrored) {
|
---|
| 389 | reportError(err2);
|
---|
| 390 | reportError(err);
|
---|
| 391 | }
|
---|
| 392 | }
|
---|
| 393 | } else {
|
---|
| 394 | if (options.onErrored) {
|
---|
| 395 | options.onErrored({
|
---|
| 396 | type: "self-accept-errored",
|
---|
| 397 | moduleId: moduleId,
|
---|
| 398 | error: err
|
---|
| 399 | });
|
---|
| 400 | }
|
---|
| 401 | if (!options.ignoreErrored) {
|
---|
| 402 | reportError(err);
|
---|
| 403 | }
|
---|
| 404 | }
|
---|
| 405 | }
|
---|
| 406 | }
|
---|
| 407 |
|
---|
| 408 | return outdatedModules;
|
---|
| 409 | }
|
---|
| 410 | };
|
---|
| 411 | }
|
---|
| 412 | $hmrInvalidateModuleHandlers$.$key$ = function (moduleId, applyHandlers) {
|
---|
| 413 | if (!currentUpdate) {
|
---|
| 414 | currentUpdate = {};
|
---|
| 415 | currentUpdateRuntime = [];
|
---|
| 416 | currentUpdateRemovedChunks = [];
|
---|
| 417 | applyHandlers.push(applyHandler);
|
---|
| 418 | }
|
---|
| 419 | if (!$hasOwnProperty$(currentUpdate, moduleId)) {
|
---|
| 420 | currentUpdate[moduleId] = $moduleFactories$[moduleId];
|
---|
| 421 | }
|
---|
| 422 | };
|
---|
| 423 | $hmrDownloadUpdateHandlers$.$key$ = function (
|
---|
| 424 | chunkIds,
|
---|
| 425 | removedChunks,
|
---|
| 426 | removedModules,
|
---|
| 427 | promises,
|
---|
| 428 | applyHandlers,
|
---|
| 429 | updatedModulesList
|
---|
| 430 | ) {
|
---|
| 431 | applyHandlers.push(applyHandler);
|
---|
| 432 | currentUpdateChunks = {};
|
---|
| 433 | currentUpdateRemovedChunks = removedChunks;
|
---|
| 434 | currentUpdate = removedModules.reduce(function (obj, key) {
|
---|
| 435 | obj[key] = false;
|
---|
| 436 | return obj;
|
---|
| 437 | }, {});
|
---|
| 438 | currentUpdateRuntime = [];
|
---|
| 439 | chunkIds.forEach(function (chunkId) {
|
---|
| 440 | if (
|
---|
| 441 | $hasOwnProperty$($installedChunks$, chunkId) &&
|
---|
| 442 | $installedChunks$[chunkId] !== undefined
|
---|
| 443 | ) {
|
---|
| 444 | promises.push($loadUpdateChunk$(chunkId, updatedModulesList));
|
---|
| 445 | currentUpdateChunks[chunkId] = true;
|
---|
| 446 | }
|
---|
| 447 | });
|
---|
| 448 | if ($ensureChunkHandlers$) {
|
---|
| 449 | $ensureChunkHandlers$.$key$Hmr = function (chunkId, promises) {
|
---|
| 450 | if (
|
---|
| 451 | currentUpdateChunks &&
|
---|
| 452 | !$hasOwnProperty$(currentUpdateChunks, chunkId) &&
|
---|
| 453 | $hasOwnProperty$($installedChunks$, chunkId) &&
|
---|
| 454 | $installedChunks$[chunkId] !== undefined
|
---|
| 455 | ) {
|
---|
| 456 | promises.push($loadUpdateChunk$(chunkId));
|
---|
| 457 | currentUpdateChunks[chunkId] = true;
|
---|
| 458 | }
|
---|
| 459 | };
|
---|
| 460 | }
|
---|
| 461 | };
|
---|
| 462 | };
|
---|