first
This commit is contained in:
172
node_modules/webpack-dev-middleware/dist/utils/compatibleAPI.js
generated
vendored
Normal file
172
node_modules/webpack-dev-middleware/dist/utils/compatibleAPI.js
generated
vendored
Normal file
@ -0,0 +1,172 @@
|
||||
"use strict";
|
||||
|
||||
/** @typedef {import("../index.js").IncomingMessage} IncomingMessage */
|
||||
|
||||
/** @typedef {import("../index.js").ServerResponse} ServerResponse */
|
||||
|
||||
/**
|
||||
* @typedef {Object} ExpectedRequest
|
||||
* @property {(name: string) => string | undefined} get
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} ExpectedResponse
|
||||
* @property {(name: string) => string | string[] | undefined} get
|
||||
* @property {(name: string, value: number | string | string[]) => void} set
|
||||
* @property {(status: number) => void} status
|
||||
* @property {(data: any) => void} send
|
||||
*/
|
||||
|
||||
/**
|
||||
* @template {ServerResponse} Response
|
||||
* @param {Response} res
|
||||
* @returns {string[]}
|
||||
*/
|
||||
function getHeaderNames(res) {
|
||||
if (typeof res.getHeaderNames !== "function") {
|
||||
// @ts-ignore
|
||||
// eslint-disable-next-line no-underscore-dangle
|
||||
return Object.keys(res._headers || {});
|
||||
}
|
||||
|
||||
return res.getHeaderNames();
|
||||
}
|
||||
/**
|
||||
* @template {IncomingMessage} Request
|
||||
* @param {Request} req
|
||||
* @param {string} name
|
||||
* @returns {string | undefined}
|
||||
*/
|
||||
|
||||
|
||||
function getHeaderFromRequest(req, name) {
|
||||
// Express API
|
||||
if (typeof
|
||||
/** @type {Request & ExpectedRequest} */
|
||||
req.get === "function") {
|
||||
return (
|
||||
/** @type {Request & ExpectedRequest} */
|
||||
req.get(name)
|
||||
);
|
||||
} // Node.js API
|
||||
// @ts-ignore
|
||||
|
||||
|
||||
return req.headers[name];
|
||||
}
|
||||
/**
|
||||
* @template {ServerResponse} Response
|
||||
* @param {Response} res
|
||||
* @param {string} name
|
||||
* @returns {number | string | string[] | undefined}
|
||||
*/
|
||||
|
||||
|
||||
function getHeaderFromResponse(res, name) {
|
||||
// Express API
|
||||
if (typeof
|
||||
/** @type {Response & ExpectedResponse} */
|
||||
res.get === "function") {
|
||||
return (
|
||||
/** @type {Response & ExpectedResponse} */
|
||||
res.get(name)
|
||||
);
|
||||
} // Node.js API
|
||||
|
||||
|
||||
return res.getHeader(name);
|
||||
}
|
||||
/**
|
||||
* @template {ServerResponse} Response
|
||||
* @param {Response} res
|
||||
* @param {string} name
|
||||
* @param {number | string | string[]} value
|
||||
* @returns {void}
|
||||
*/
|
||||
|
||||
|
||||
function setHeaderForResponse(res, name, value) {
|
||||
// Express API
|
||||
if (typeof
|
||||
/** @type {Response & ExpectedResponse} */
|
||||
res.set === "function") {
|
||||
/** @type {Response & ExpectedResponse} */
|
||||
res.set(name, typeof value === "number" ? String(value) : value);
|
||||
return;
|
||||
} // Node.js API
|
||||
|
||||
|
||||
res.setHeader(name, value);
|
||||
}
|
||||
/**
|
||||
* @template {ServerResponse} Response
|
||||
* @param {Response} res
|
||||
* @param {number} code
|
||||
*/
|
||||
|
||||
|
||||
function setStatusCode(res, code) {
|
||||
if (typeof
|
||||
/** @type {Response & ExpectedResponse} */
|
||||
res.status === "function") {
|
||||
/** @type {Response & ExpectedResponse} */
|
||||
res.status(code);
|
||||
return;
|
||||
} // eslint-disable-next-line no-param-reassign
|
||||
|
||||
|
||||
res.statusCode = code;
|
||||
}
|
||||
/**
|
||||
* @template {IncomingMessage} Request
|
||||
* @template {ServerResponse} Response
|
||||
* @param {Request} req
|
||||
* @param {Response} res
|
||||
* @param {string | Buffer | import("fs").ReadStream} bufferOtStream
|
||||
* @param {number} byteLength
|
||||
*/
|
||||
|
||||
|
||||
function send(req, res, bufferOtStream, byteLength) {
|
||||
if (typeof
|
||||
/** @type {import("fs").ReadStream} */
|
||||
bufferOtStream.pipe === "function") {
|
||||
setHeaderForResponse(res, "Content-Length", byteLength);
|
||||
|
||||
if (req.method === "HEAD") {
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
/** @type {import("fs").ReadStream} */
|
||||
|
||||
|
||||
bufferOtStream.pipe(res);
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof
|
||||
/** @type {Response & ExpectedResponse} */
|
||||
res.send === "function") {
|
||||
/** @type {Response & ExpectedResponse} */
|
||||
res.send(bufferOtStream);
|
||||
return;
|
||||
} // Only Node.js API used
|
||||
|
||||
|
||||
res.setHeader("Content-Length", byteLength);
|
||||
|
||||
if (req.method === "HEAD") {
|
||||
res.end();
|
||||
} else {
|
||||
res.end(bufferOtStream);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getHeaderNames,
|
||||
getHeaderFromRequest,
|
||||
getHeaderFromResponse,
|
||||
setHeaderForResponse,
|
||||
setStatusCode,
|
||||
send
|
||||
};
|
Reference in New Issue
Block a user