diff --git a/src/index.js b/src/index.js index de2419f10..1fc9ccdff 100644 --- a/src/index.js +++ b/src/index.js @@ -64,8 +64,8 @@ const noop = () => {}; */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @callback ModifyResponseData * @param {RequestInternal} req * @param {ResponseInternal} res @@ -75,8 +75,8 @@ const noop = () => {}; */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @typedef {Object} Context * @property {boolean} state * @property {Stats | MultiStats | undefined} stats @@ -89,16 +89,16 @@ const noop = () => {}; */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @typedef {WithoutUndefined, "watching">} FilledContext */ /** @typedef {Record | Array<{ key: string, value: number | string }>} NormalizedHeaders */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @typedef {NormalizedHeaders | ((req: RequestInternal, res: ResponseInternal, context: Context) => void | undefined | NormalizedHeaders) | undefined} Headers */ @@ -122,8 +122,8 @@ const noop = () => {}; */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @callback Middleware * @param {RequestInternal} req * @param {ResponseInternal} res @@ -167,8 +167,8 @@ const noop = () => {}; */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @typedef {Middleware & AdditionalMethods} API */ @@ -366,7 +366,7 @@ function koaWrapper(compiler, options) { const devMiddleware = wdm(compiler, options); /** - * @param {any} ctx + * @param {{ req: RequestInternal, res: ResponseInternal & import("./utils/compatibleAPI").ExpectedResponse, status: number, body: Buffer | import("fs").ReadStream | { message: string }, state: Object }} ctx * @param {Function} next * @returns {Promise} */ @@ -392,7 +392,7 @@ function koaWrapper(compiler, options) { resolve(); }; /** - * @param {string | Buffer} content content + * @param {Buffer} content content */ res.send = (content) => { // eslint-disable-next-line no-param-reassign diff --git a/src/middleware.js b/src/middleware.js index dcf1217ef..a8bbe50ed 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -524,6 +524,7 @@ function wrapper(context) { /** @type {import("fs").Stats | Buffer | ReadStream | undefined} */ let value; + // TODO cache etag generation? if (context.options.etag === "weak") { value = /** @type {import("fs").Stats} */ (extra.stats); } else { diff --git a/src/utils/getFilenameFromUrl.js b/src/utils/getFilenameFromUrl.js index 319b149db..67852ee8b 100644 --- a/src/utils/getFilenameFromUrl.js +++ b/src/utils/getFilenameFromUrl.js @@ -40,6 +40,7 @@ function decode(input) { } // TODO refactor me in the next major release, this function should return `{ filename, stats, error }` +// TODO fix redirect logic when `/` at the end, like https://github.com/pillarjs/send/blob/master/index.js#L586 /** * @template {IncomingMessage} Request * @template {ServerResponse} Response diff --git a/types/index.d.ts b/types/index.d.ts index ac7d038ca..54f15e97b 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -42,8 +42,8 @@ export = wdm; * @property {number} byteLength */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @callback ModifyResponseData * @param {RequestInternal} req * @param {ResponseInternal} res @@ -52,8 +52,8 @@ export = wdm; * @return {ResponseData} */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @typedef {Object} Context * @property {boolean} state * @property {Stats | MultiStats | undefined} stats @@ -65,14 +65,14 @@ export = wdm; * @property {OutputFileSystem} outputFileSystem */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @typedef {WithoutUndefined, "watching">} FilledContext */ /** @typedef {Record | Array<{ key: string, value: number | string }>} NormalizedHeaders */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @typedef {NormalizedHeaders | ((req: RequestInternal, res: ResponseInternal, context: Context) => void | undefined | NormalizedHeaders) | undefined} Headers */ /** @@ -94,8 +94,8 @@ export = wdm; * @property {boolean} [lastModified] */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @callback Middleware * @param {RequestInternal} req * @param {ResponseInternal} res @@ -132,8 +132,8 @@ export = wdm; * @property {Context} context */ /** - * @template {IncomingMessage} RequestInternal - * @template {ServerResponse} ResponseInternal + * @template {IncomingMessage} [RequestInternal=IncomingMessage] + * @template {ServerResponse} [ResponseInternal=ServerResponse] * @typedef {Middleware & AdditionalMethods} API */ /** @@ -207,8 +207,9 @@ declare namespace wdm { type Compiler = import("webpack").Compiler; type MultiCompiler = import("webpack").MultiCompiler; type API< - RequestInternal extends import("http").IncomingMessage, - ResponseInternal extends ServerResponse, + RequestInternal extends + import("http").IncomingMessage = import("http").IncomingMessage, + ResponseInternal extends ServerResponse = ServerResponse, > = Middleware & AdditionalMethods; /** @@ -288,8 +289,9 @@ type ResponseData = { byteLength: number; }; type ModifyResponseData< - RequestInternal extends import("http").IncomingMessage, - ResponseInternal extends ServerResponse, + RequestInternal extends + import("http").IncomingMessage = import("http").IncomingMessage, + ResponseInternal extends ServerResponse = ServerResponse, > = ( req: RequestInternal, res: ResponseInternal, @@ -297,8 +299,9 @@ type ModifyResponseData< byteLength: number, ) => ResponseData; type Context< - RequestInternal extends import("http").IncomingMessage, - ResponseInternal extends ServerResponse, + RequestInternal extends + import("http").IncomingMessage = import("http").IncomingMessage, + ResponseInternal extends ServerResponse = ServerResponse, > = { state: boolean; stats: Stats | MultiStats | undefined; @@ -310,8 +313,9 @@ type Context< outputFileSystem: OutputFileSystem; }; type FilledContext< - RequestInternal extends import("http").IncomingMessage, - ResponseInternal extends ServerResponse, + RequestInternal extends + import("http").IncomingMessage = import("http").IncomingMessage, + ResponseInternal extends ServerResponse = ServerResponse, > = WithoutUndefined, "watching">; type NormalizedHeaders = | Record @@ -320,8 +324,9 @@ type NormalizedHeaders = value: number | string; }>; type Headers< - RequestInternal extends import("http").IncomingMessage, - ResponseInternal extends ServerResponse, + RequestInternal extends + import("http").IncomingMessage = import("http").IncomingMessage, + ResponseInternal extends ServerResponse = ServerResponse, > = | NormalizedHeaders | (( @@ -356,8 +361,9 @@ type Options< lastModified?: boolean | undefined; }; type Middleware< - RequestInternal extends import("http").IncomingMessage, - ResponseInternal extends ServerResponse, + RequestInternal extends + import("http").IncomingMessage = import("http").IncomingMessage, + ResponseInternal extends ServerResponse = ServerResponse, > = ( req: RequestInternal, res: ResponseInternal,