feat: refactoring project
This commit is contained in:
110
node_modules/webpack/lib/hmr/lazyCompilationBackend.js
generated
vendored
110
node_modules/webpack/lib/hmr/lazyCompilationBackend.js
generated
vendored
@@ -5,17 +5,18 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
/** @typedef {import("http").IncomingMessage} IncomingMessage */
|
||||
/** @typedef {import("http").RequestListener} RequestListener */
|
||||
/** @typedef {import("http").ServerOptions} HttpServerOptions */
|
||||
/** @typedef {import("http").ServerResponse} ServerResponse */
|
||||
/** @typedef {import("https").ServerOptions} HttpsServerOptions */
|
||||
/** @typedef {import("net").AddressInfo} AddressInfo */
|
||||
/** @typedef {import("net").Server} Server */
|
||||
/** @typedef {import("../../declarations/WebpackOptions").LazyCompilationDefaultBackendOptions} LazyCompilationDefaultBackendOptions */
|
||||
/** @typedef {import("../Compiler")} Compiler */
|
||||
|
||||
/**
|
||||
* @callback BackendHandler
|
||||
* @param {Compiler} compiler compiler
|
||||
* @param {function((Error | null)=, any=): void} callback callback
|
||||
* @returns {void}
|
||||
*/
|
||||
/** @typedef {import("../Module")} Module */
|
||||
/** @typedef {import("./LazyCompilationPlugin").BackendApi} BackendApi */
|
||||
/** @typedef {import("./LazyCompilationPlugin").BackendHandler} BackendHandler */
|
||||
|
||||
/**
|
||||
* @param {Omit<LazyCompilationDefaultBackendOptions, "client"> & { client: NonNullable<LazyCompilationDefaultBackendOptions["client"]>}} options additional options for the backend
|
||||
@@ -36,8 +37,13 @@ module.exports = options => (compiler, callback) => {
|
||||
? options.server
|
||||
: (() => {
|
||||
const http = isHttps ? require("https") : require("http");
|
||||
return http.createServer.bind(http, options.server);
|
||||
return http.createServer.bind(
|
||||
http,
|
||||
/** @type {HttpServerOptions | HttpsServerOptions} */
|
||||
(options.server)
|
||||
);
|
||||
})();
|
||||
/** @type {function(Server): void} */
|
||||
const listen =
|
||||
typeof options.listen === "function"
|
||||
? options.listen
|
||||
@@ -50,7 +56,9 @@ module.exports = options => (compiler, callback) => {
|
||||
|
||||
const protocol = options.protocol || (isHttps ? "https" : "http");
|
||||
|
||||
/** @type {RequestListener} */
|
||||
const requestListener = (req, res) => {
|
||||
if (req.url === undefined) return;
|
||||
const keys = req.url.slice(prefix.length).split("@");
|
||||
req.socket.on("close", () => {
|
||||
setTimeout(() => {
|
||||
@@ -85,7 +93,7 @@ module.exports = options => (compiler, callback) => {
|
||||
if (moduleActivated && compiler.watching) compiler.watching.invalidate();
|
||||
};
|
||||
|
||||
const server = /** @type {import("net").Server} */ (createServer());
|
||||
const server = /** @type {Server} */ (createServer());
|
||||
server.on("request", requestListener);
|
||||
|
||||
let isClosing = false;
|
||||
@@ -101,43 +109,53 @@ module.exports = options => (compiler, callback) => {
|
||||
server.on("clientError", e => {
|
||||
if (e.message !== "Server is disposing") logger.warn(e);
|
||||
});
|
||||
server.on("listening", err => {
|
||||
if (err) return callback(err);
|
||||
const addr = server.address();
|
||||
if (typeof addr === "string") throw new Error("addr must not be a string");
|
||||
const urlBase =
|
||||
addr.address === "::" || addr.address === "0.0.0.0"
|
||||
? `${protocol}://localhost:${addr.port}`
|
||||
: addr.family === "IPv6"
|
||||
? `${protocol}://[${addr.address}]:${addr.port}`
|
||||
: `${protocol}://${addr.address}:${addr.port}`;
|
||||
logger.log(
|
||||
`Server-Sent-Events server for lazy compilation open at ${urlBase}.`
|
||||
);
|
||||
callback(null, {
|
||||
dispose(callback) {
|
||||
isClosing = true;
|
||||
// Removing the listener is a workaround for a memory leak in node.js
|
||||
server.off("request", requestListener);
|
||||
server.close(err => {
|
||||
callback(err);
|
||||
});
|
||||
for (const socket of sockets) {
|
||||
socket.destroy(new Error("Server is disposing"));
|
||||
|
||||
server.on(
|
||||
"listening",
|
||||
/**
|
||||
* @param {Error} err error
|
||||
* @returns {void}
|
||||
*/
|
||||
err => {
|
||||
if (err) return callback(err);
|
||||
const _addr = server.address();
|
||||
if (typeof _addr === "string")
|
||||
throw new Error("addr must not be a string");
|
||||
const addr = /** @type {AddressInfo} */ (_addr);
|
||||
const urlBase =
|
||||
addr.address === "::" || addr.address === "0.0.0.0"
|
||||
? `${protocol}://localhost:${addr.port}`
|
||||
: addr.family === "IPv6"
|
||||
? `${protocol}://[${addr.address}]:${addr.port}`
|
||||
: `${protocol}://${addr.address}:${addr.port}`;
|
||||
logger.log(
|
||||
`Server-Sent-Events server for lazy compilation open at ${urlBase}.`
|
||||
);
|
||||
callback(null, {
|
||||
dispose(callback) {
|
||||
isClosing = true;
|
||||
// Removing the listener is a workaround for a memory leak in node.js
|
||||
server.off("request", requestListener);
|
||||
server.close(err => {
|
||||
callback(err);
|
||||
});
|
||||
for (const socket of sockets) {
|
||||
socket.destroy(new Error("Server is disposing"));
|
||||
}
|
||||
},
|
||||
module(originalModule) {
|
||||
const key = `${encodeURIComponent(
|
||||
originalModule.identifier().replace(/\\/g, "/").replace(/@/g, "_")
|
||||
).replace(/%(2F|3A|24|26|2B|2C|3B|3D)/g, decodeURIComponent)}`;
|
||||
const active = activeModules.get(key) > 0;
|
||||
return {
|
||||
client: `${options.client}?${encodeURIComponent(urlBase + prefix)}`,
|
||||
data: key,
|
||||
active
|
||||
};
|
||||
}
|
||||
},
|
||||
module(originalModule) {
|
||||
const key = `${encodeURIComponent(
|
||||
originalModule.identifier().replace(/\\/g, "/").replace(/@/g, "_")
|
||||
).replace(/%(2F|3A|24|26|2B|2C|3B|3D|3A)/g, decodeURIComponent)}`;
|
||||
const active = activeModules.get(key) > 0;
|
||||
return {
|
||||
client: `${options.client}?${encodeURIComponent(urlBase + prefix)}`,
|
||||
data: key,
|
||||
active
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
listen(server);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user