Skip to content

Commit 9ca1f40

Browse files
authored
Merge pull request #13 from vansergen/fix/error
Fix ESLint errors
2 parents a854ce0 + 5008503 commit 9ca1f40

11 files changed

+874
-837
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: CI
22

3-
on: push
3+
on: [push, pull_request]
44

55
jobs:
66
test:

package-lock.json

+488-359
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/binden.ts

+12-34
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,15 @@
11
import http, { STATUS_CODES } from "node:http";
22
import https from "node:https";
33
import { isDeepStrictEqual } from "node:util";
4-
import { Context, IBindenResponse } from "./context.js";
4+
import { Context } from "./context.js";
55
import { BindenError } from "./error.js";
66
import { Middleware } from "./middleware.js";
77
import { BindenRequest } from "./request.js";
88
import { BindenResponse, ct_text, ct_json } from "./response.js";
99
import { Router } from "./router.js";
1010

11-
type BindenRequestListener = (
12-
request: BindenRequest,
13-
response: IBindenResponse
14-
) => void;
15-
1611
type IUseOptions = IStackItem | RegExp | string | null | undefined;
1712

18-
interface IBindenServerOptions extends http.ServerOptions {
19-
IncomingMessage: typeof BindenRequest;
20-
ServerResponse: typeof BindenResponse;
21-
}
22-
23-
interface IBindenSecureServerOptions extends https.ServerOptions {
24-
IncomingMessage: typeof BindenRequest;
25-
ServerResponse: typeof BindenResponse;
26-
}
27-
28-
declare module "http" {
29-
export function createServer(
30-
options: IBindenServerOptions,
31-
requestListener?: BindenRequestListener
32-
): Server;
33-
}
34-
35-
declare module "https" {
36-
function createServer(
37-
options: IBindenSecureServerOptions,
38-
requestListener?: BindenRequestListener
39-
): Server;
40-
}
41-
4213
export type IStackItem = Middleware | Router;
4314
export type IStack = [IStackItem[], RegExp | string | null];
4415

@@ -67,20 +38,24 @@ export class Binden {
6738
]);
6839
}
6940

70-
public createServer(options: http.ServerOptions = {}): http.Server {
41+
public createServer(
42+
options: http.ServerOptions = {}
43+
): http.Server<typeof BindenRequest, typeof BindenResponse> {
7144
return http.createServer(
7245
{
7346
...options,
7447
IncomingMessage: BindenRequest,
7548
ServerResponse: BindenResponse,
7649
},
77-
(request: BindenRequest, response: IBindenResponse) => {
50+
(request, response) => {
7851
this.#requestListener(request, response);
7952
}
8053
);
8154
}
8255

83-
public createSecureServer(options: https.ServerOptions = {}): https.Server {
56+
public createSecureServer(
57+
options: https.ServerOptions = {}
58+
): https.Server<typeof BindenRequest, typeof BindenResponse> {
8459
return https.createServer(
8560
{
8661
...options,
@@ -184,7 +159,10 @@ export class Binden {
184159
return removed;
185160
}
186161

187-
#requestListener(request: BindenRequest, response: IBindenResponse): void {
162+
#requestListener(
163+
request: BindenRequest,
164+
response: BindenResponse<BindenRequest>
165+
): void {
188166
const context = new Context({ request, response });
189167
this.#handle(context).catch((error: unknown) => {
190168
this.#errorHandler(context, error);

src/context.ts

+3-7
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,14 @@ import type { Readable } from "node:stream";
66
import type { BindenRequest } from "./request.js";
77
import type { IHeadersValue, BindenResponse } from "./response.js";
88

9-
export interface IBindenResponse extends BindenResponse {
10-
req: BindenRequest;
11-
}
12-
139
export interface IBaseContext {
1410
readonly request: BindenRequest;
15-
readonly response: IBindenResponse;
11+
readonly response: BindenResponse<BindenRequest>;
1612
}
1713

1814
export class Context implements IBaseContext {
1915
readonly #request: BindenRequest;
20-
readonly #response: IBindenResponse;
16+
readonly #response: BindenResponse<BindenRequest>;
2117
readonly #logger: Logger;
2218
#done: boolean;
2319

@@ -47,7 +43,7 @@ export class Context implements IBaseContext {
4743
return this.#request;
4844
}
4945

50-
public get response(): IBindenResponse {
46+
public get response(): BindenResponse<BindenRequest> {
5147
return this.#response;
5248
}
5349

src/error.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ export class BindenError extends Error {
2828
throw new RangeError("Status code is less than 400");
2929
}
3030

31-
super(message, cause ? { cause } : {});
31+
if (typeof cause === "undefined") {
32+
super(message);
33+
} else {
34+
super(message, { cause });
35+
}
3236

3337
this.name = "BindenError";
3438
this.#expose = Boolean(expose);

src/response.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createReadStream } from "node:fs";
22
import { stat } from "node:fs/promises";
3-
import { ServerResponse, STATUS_CODES } from "node:http";
3+
import { IncomingMessage, ServerResponse, STATUS_CODES } from "node:http";
44
import { Readable } from "node:stream";
55
import { pathToFileURL } from "node:url";
66
import ContentRange from "./headers/content-range.js";
@@ -18,7 +18,9 @@ export type IHeadersValue = number | string | readonly string[];
1818

1919
export type IHeaders = Record<string, IHeadersValue>;
2020

21-
export class BindenResponse extends ServerResponse {
21+
export class BindenResponse<
22+
Request extends IncomingMessage = IncomingMessage
23+
> extends ServerResponse<Request> {
2224
#cookies?: Set<Cookie>;
2325

2426
public get cookies(): Set<Cookie> {

test/binden.test.ts

+15-23
Original file line numberDiff line numberDiff line change
@@ -69,25 +69,17 @@ suite("Binden", () => {
6969
test(".createSecureServer()", async () => {
7070
const newApp = new Binden();
7171
const path = new URL(url);
72-
const agent = new Agent({
73-
rejectUnauthorized: false,
74-
});
72+
const agent = new Agent({ rejectUnauthorized: false });
7573
path.port = `${Number(path.port) + 1}`;
7674
path.protocol = "https:";
7775

78-
const key = await readFile("./test/cert/key.pem", {
79-
encoding: "utf-8",
80-
});
81-
const cert = await readFile("./test/cert/cert.pem", {
82-
encoding: "utf-8",
83-
});
76+
const key = await readFile("./test/cert/key.pem", { encoding: "utf-8" });
77+
const cert = await readFile("./test/cert/cert.pem", { encoding: "utf-8" });
78+
79+
const newServer = newApp.createSecureServer({ key, cert });
8480

85-
const newServer = await new Promise<Server>((resolve) => {
86-
const s = newApp
87-
.createSecureServer({ key, cert })
88-
.listen(port + 1, () => {
89-
resolve(s);
90-
});
81+
await new Promise<void>((resolve) => {
82+
newServer.listen(port + 1, resolve);
9183
});
9284

9385
const m = new SendMiddleware();
@@ -267,10 +259,10 @@ suite("Binden", () => {
267259
const path = new URL(url);
268260
path.port = `${Number(path.port) + 1}`;
269261

270-
const newServer = await new Promise<Server>((resolve) => {
271-
const s = newApp.createServer().listen(port + 1, () => {
272-
resolve(s);
273-
});
262+
const newServer = newApp.createServer();
263+
264+
await new Promise<void>((resolve) => {
265+
newServer.listen(port + 1, resolve);
274266
});
275267

276268
const m = new CustomMiddleware();
@@ -297,10 +289,10 @@ suite("Binden", () => {
297289
const path = new URL(url);
298290
path.port = `${Number(path.port) + 1}`;
299291

300-
const newServer = await new Promise<Server>((resolve) => {
301-
const s = newApp.createServer().listen(port + 1, () => {
302-
resolve(s);
303-
});
292+
const newServer = newApp.createServer();
293+
294+
await new Promise<void>((resolve) => {
295+
newServer.listen(port + 1, resolve);
304296
});
305297

306298
const status = 405;

0 commit comments

Comments
 (0)