123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- /**
- * Based heavily on https://github.com/webpack/webpack/blob/
- * c0afdf9c6abc1dd70707c594e473802a566f7b6e/hot/only-dev-server.js
- * Original copyright Tobias Koppers @sokra (MIT license)
- */
- /* global window __webpack_hash__ */
- if (!module.hot) {
- throw new Error('[HMR] Hot Module Replacement is disabled.');
- }
- var hmrDocsUrl = 'https://webpack.js.org/concepts/hot-module-replacement/'; // eslint-disable-line max-len
- var lastHash;
- var failureStatuses = { abort: 1, fail: 1 };
- var applyOptions = {
- ignoreUnaccepted: true,
- ignoreDeclined: true,
- ignoreErrored: true,
- onUnaccepted: function (data) {
- console.warn(
- 'Ignored an update to unaccepted module ' + data.chain.join(' -> ')
- );
- },
- onDeclined: function (data) {
- console.warn(
- 'Ignored an update to declined module ' + data.chain.join(' -> ')
- );
- },
- onErrored: function (data) {
- console.error(data.error);
- console.warn(
- 'Ignored an error while updating module ' +
- data.moduleId +
- ' (' +
- data.type +
- ')'
- );
- },
- };
- function upToDate(hash) {
- if (hash) lastHash = hash;
- return lastHash == __webpack_hash__;
- }
- module.exports = function (hash, moduleMap, options) {
- var reload = options.reload;
- if (!upToDate(hash) && module.hot.status() == 'idle') {
- if (options.log) console.log('[HMR] Checking for updates on the server...');
- check();
- }
- function check() {
- var cb = function (err, updatedModules) {
- if (err) return handleError(err);
- if (!updatedModules) {
- if (options.warn) {
- console.warn('[HMR] Cannot find update (Full reload needed)');
- console.warn('[HMR] (Probably because of restarting the server)');
- }
- performReload();
- return null;
- }
- var applyCallback = function (applyErr, renewedModules) {
- if (applyErr) return handleError(applyErr);
- if (!upToDate()) check();
- logUpdates(updatedModules, renewedModules);
- };
- var applyResult = module.hot.apply(applyOptions, applyCallback);
- // webpack 2 promise
- if (applyResult && applyResult.then) {
- // HotModuleReplacement.runtime.js refers to the result as `outdatedModules`
- applyResult.then(function (outdatedModules) {
- applyCallback(null, outdatedModules);
- });
- applyResult.catch(applyCallback);
- }
- };
- var result = module.hot.check(false, cb);
- // webpack 2 promise
- if (result && result.then) {
- result.then(function (updatedModules) {
- cb(null, updatedModules);
- });
- result.catch(cb);
- }
- }
- function logUpdates(updatedModules, renewedModules) {
- var unacceptedModules = updatedModules.filter(function (moduleId) {
- return renewedModules && renewedModules.indexOf(moduleId) < 0;
- });
- if (unacceptedModules.length > 0) {
- if (options.warn) {
- console.warn(
- "[HMR] The following modules couldn't be hot updated: " +
- '(Full reload needed)\n' +
- 'This is usually because the modules which have changed ' +
- '(and their parents) do not know how to hot reload themselves. ' +
- 'See ' +
- hmrDocsUrl +
- ' for more details.'
- );
- unacceptedModules.forEach(function (moduleId) {
- console.warn('[HMR] - ' + (moduleMap[moduleId] || moduleId));
- });
- }
- performReload();
- return;
- }
- if (options.log) {
- if (!renewedModules || renewedModules.length === 0) {
- console.log('[HMR] Nothing hot updated.');
- } else {
- console.log('[HMR] Updated modules:');
- renewedModules.forEach(function (moduleId) {
- console.log('[HMR] - ' + (moduleMap[moduleId] || moduleId));
- });
- }
- if (upToDate()) {
- console.log('[HMR] App is up to date.');
- }
- }
- }
- function handleError(err) {
- if (module.hot.status() in failureStatuses) {
- if (options.warn) {
- console.warn('[HMR] Cannot check for update (Full reload needed)');
- console.warn('[HMR] ' + (err.stack || err.message));
- }
- performReload();
- return;
- }
- if (options.warn) {
- console.warn('[HMR] Update check failed: ' + (err.stack || err.message));
- }
- }
- function performReload() {
- if (reload) {
- if (options.warn) console.warn('[HMR] Reloading page');
- window.location.reload();
- }
- }
- };
|