|
|
"use strict";
|
|
|
|
|
|
function _react() {
|
|
|
const data = _interopRequireDefault(require("react"));
|
|
|
|
|
|
_react = function _react() {
|
|
|
return data;
|
|
|
};
|
|
|
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
function _sockjsClient() {
|
|
|
const data = _interopRequireDefault(require("sockjs-client"));
|
|
|
|
|
|
_sockjsClient = function _sockjsClient() {
|
|
|
return data;
|
|
|
};
|
|
|
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
function _url() {
|
|
|
const data = _interopRequireDefault(require("url"));
|
|
|
|
|
|
_url = function _url() {
|
|
|
return data;
|
|
|
};
|
|
|
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
function ErrorOverlay() {
|
|
|
const data = _interopRequireWildcard(require("react-error-overlay"));
|
|
|
|
|
|
ErrorOverlay = function ErrorOverlay() {
|
|
|
return data;
|
|
|
};
|
|
|
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
function _stripAnsi() {
|
|
|
const data = _interopRequireDefault(require("strip-ansi"));
|
|
|
|
|
|
_stripAnsi = function _stripAnsi() {
|
|
|
return data;
|
|
|
};
|
|
|
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
var _formatWebpackMessages = _interopRequireDefault(require("./formatWebpackMessages"));
|
|
|
|
|
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
|
|
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
// @ts-ignore
|
|
|
let hadRuntimeError = false;
|
|
|
ErrorOverlay().startReportingRuntimeErrors({
|
|
|
onError: function onError() {
|
|
|
hadRuntimeError = true;
|
|
|
}
|
|
|
});
|
|
|
let isFirstCompilation = true;
|
|
|
let mostRecentCompilationHash = null;
|
|
|
let hasCompileErrors = false;
|
|
|
|
|
|
function handleHashChange(hash) {
|
|
|
mostRecentCompilationHash = hash;
|
|
|
}
|
|
|
|
|
|
function handleSuccess(data) {
|
|
|
if (data && data.reload) {
|
|
|
window.location.reload();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
const isHotUpdate = !isFirstCompilation;
|
|
|
isFirstCompilation = false;
|
|
|
hasCompileErrors = false;
|
|
|
|
|
|
if (isHotUpdate) {
|
|
|
tryApplyUpdates(() => {
|
|
|
ErrorOverlay().dismissBuildError();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function handleWarnings(warnings) {
|
|
|
var isHotUpdate = !isFirstCompilation;
|
|
|
isFirstCompilation = false;
|
|
|
hasCompileErrors = false;
|
|
|
|
|
|
function printWarnings() {
|
|
|
const formatted = (0, _formatWebpackMessages.default)({
|
|
|
warnings,
|
|
|
errors: []
|
|
|
});
|
|
|
formatted.warnings.forEach(warning => {
|
|
|
console.warn((0, _stripAnsi().default)(warning));
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (isHotUpdate) {
|
|
|
tryApplyUpdates(() => {
|
|
|
printWarnings();
|
|
|
ErrorOverlay().dismissBuildError();
|
|
|
});
|
|
|
} else {
|
|
|
printWarnings();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function handleErrors(errors) {
|
|
|
isFirstCompilation = false;
|
|
|
hasCompileErrors = true;
|
|
|
const formatted = (0, _formatWebpackMessages.default)({
|
|
|
errors,
|
|
|
warnings: []
|
|
|
});
|
|
|
ErrorOverlay().reportBuildError(formatted.errors[0]);
|
|
|
formatted.errors.forEach(error => {
|
|
|
console.error((0, _stripAnsi().default)(error));
|
|
|
});
|
|
|
}
|
|
|
|
|
|
let tryApplyUpdates = null; // function tryApplyUpdates(onHotUpdateSuccess?: Function) {
|
|
|
// // @ts-ignore
|
|
|
// if (!module.hot) {
|
|
|
// window.location.reload();
|
|
|
// return;
|
|
|
// }
|
|
|
//
|
|
|
// function isUpdateAvailable() {
|
|
|
// // @ts-ignore
|
|
|
// return mostRecentCompilationHash !== __webpack_hash__;
|
|
|
// }
|
|
|
//
|
|
|
// // TODO: is update available?
|
|
|
// // @ts-ignore
|
|
|
// if (!isUpdateAvailable() || module.hot.status() !== 'idle') {
|
|
|
// return;
|
|
|
// }
|
|
|
//
|
|
|
// function handleApplyUpdates(err: Error | null, updatedModules: any) {
|
|
|
// if (err || !updatedModules || hadRuntimeError) {
|
|
|
// window.location.reload();
|
|
|
// return;
|
|
|
// }
|
|
|
//
|
|
|
// onHotUpdateSuccess?.();
|
|
|
//
|
|
|
// if (isUpdateAvailable()) {
|
|
|
// // While we were updating, there was a new update! Do it again.
|
|
|
// tryApplyUpdates();
|
|
|
// }
|
|
|
// }
|
|
|
//
|
|
|
// // @ts-ignore
|
|
|
// module.hot.check(true).then(
|
|
|
// function (updatedModules: any) {
|
|
|
// handleApplyUpdates(null, updatedModules);
|
|
|
// },
|
|
|
// function (err: Error) {
|
|
|
// handleApplyUpdates(err, null);
|
|
|
// },
|
|
|
// );
|
|
|
// }
|
|
|
|
|
|
const showPending = () => {
|
|
|
const el = document.createElement('div');
|
|
|
el.style.position = 'absolute';
|
|
|
el.style.left = '0px';
|
|
|
el.style.top = '0px';
|
|
|
el.style.width = '100%';
|
|
|
el.style.background = '#fff1b8';
|
|
|
el.style.zIndex = '2147483647000000';
|
|
|
el.style.color = '#613400';
|
|
|
el.style.textAlign = 'center';
|
|
|
el.style.fontSize = '18px';
|
|
|
el.style.fontFamily = 'Consolas, Menlo, Courier, monospace';
|
|
|
el.style.padding = '8px 0';
|
|
|
el.style.boxShadow = '0px 4px 8px rgba(0, 0, 0, 0.1)';
|
|
|
el.innerHTML = 'Disconnected from the devServer, trying to reconnect...';
|
|
|
document.body.appendChild(el);
|
|
|
return el;
|
|
|
};
|
|
|
|
|
|
let sock;
|
|
|
let retries = 0;
|
|
|
let pending;
|
|
|
|
|
|
function stripLastSlash(url) {
|
|
|
if (url.slice(-1) === '/') {
|
|
|
return url.slice(0, -1);
|
|
|
} else {
|
|
|
return url;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getSocketHost() {
|
|
|
var _document$body, _document$body$queryS;
|
|
|
|
|
|
if (process.env.SOCKET_SERVER) {
|
|
|
return stripLastSlash(process.env.SOCKET_SERVER);
|
|
|
}
|
|
|
|
|
|
let host, protocol;
|
|
|
const scripts = ((_document$body = document.body) === null || _document$body === void 0 ? void 0 : (_document$body$queryS = _document$body.querySelectorAll) === null || _document$body$queryS === void 0 ? void 0 : _document$body$queryS.call(_document$body, 'script')) || [];
|
|
|
const dataFromSrc = scripts[scripts.length - 1] ? scripts[scripts.length - 1].getAttribute('src') : '';
|
|
|
|
|
|
if (dataFromSrc && dataFromSrc.includes('umi.js')) {
|
|
|
const urlParsed = _url().default.parse(dataFromSrc);
|
|
|
|
|
|
host = urlParsed.host;
|
|
|
protocol = urlParsed.protocol;
|
|
|
} else {
|
|
|
// 某些场景可能没有 umi.js,比如微前端的场景
|
|
|
host = location.host;
|
|
|
protocol = location.protocol;
|
|
|
}
|
|
|
|
|
|
return host && protocol ? _url().default.format({
|
|
|
host,
|
|
|
protocol
|
|
|
}) : '';
|
|
|
}
|
|
|
|
|
|
function initSocket() {
|
|
|
const host = getSocketHost();
|
|
|
sock = new (_sockjsClient().default)(`${host}/dev-server`);
|
|
|
|
|
|
sock.onopen = () => {
|
|
|
var _pending, _pending$parentElemen;
|
|
|
|
|
|
retries = 0;
|
|
|
(_pending = pending) === null || _pending === void 0 ? void 0 : (_pending$parentElemen = _pending.parentElement) === null || _pending$parentElemen === void 0 ? void 0 : _pending$parentElemen.removeChild(pending);
|
|
|
};
|
|
|
|
|
|
sock.onmessage = e => {
|
|
|
const message = JSON.parse(e.data);
|
|
|
|
|
|
switch (message.type) {
|
|
|
case 'hash':
|
|
|
handleHashChange(message.data);
|
|
|
break;
|
|
|
|
|
|
case 'still-ok':
|
|
|
case 'ok':
|
|
|
handleSuccess(message.data);
|
|
|
break;
|
|
|
|
|
|
case 'warnings':
|
|
|
handleWarnings(message.data);
|
|
|
break;
|
|
|
|
|
|
case 'errors':
|
|
|
handleErrors(message.data);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
sock.onclose = e => {
|
|
|
if (retries === 0) {
|
|
|
var _console;
|
|
|
|
|
|
if (typeof ((_console = console) === null || _console === void 0 ? void 0 : _console.info) === 'function') {
|
|
|
console.info('The development server has disconnected.\nRefresh the page if necessary.');
|
|
|
}
|
|
|
} // @ts-ignore
|
|
|
|
|
|
|
|
|
sock = null;
|
|
|
|
|
|
if (!pending) {
|
|
|
pending = showPending();
|
|
|
}
|
|
|
|
|
|
if (retries <= 10) {
|
|
|
const retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;
|
|
|
retries += 1;
|
|
|
setTimeout(() => {
|
|
|
initSocket();
|
|
|
}, retryInMs);
|
|
|
}
|
|
|
};
|
|
|
} // TODO: improve this
|
|
|
// @ts-ignore
|
|
|
|
|
|
|
|
|
window.g_initWebpackHotDevClient = function (opts) {
|
|
|
tryApplyUpdates = opts.tryApplyUpdates;
|
|
|
initSocket();
|
|
|
}; // @ts-ignore
|
|
|
|
|
|
|
|
|
window.g_getMostRecentCompilationHash = () => {
|
|
|
return mostRecentCompilationHash;
|
|
|
}; // @ts-ignore
|
|
|
|
|
|
|
|
|
window.g_getHadRuntimeError = () => {
|
|
|
return hadRuntimeError;
|
|
|
}; |