@cfworker/web 5.1.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/commonjs/accepts.d.ts +1 -0
- package/dist/commonjs/accepts.d.ts.map +1 -0
- package/dist/commonjs/accepts.js +1 -0
- package/dist/commonjs/accepts.js.map +1 -0
- package/dist/commonjs/application.d.ts +2 -1
- package/dist/commonjs/application.d.ts.map +1 -0
- package/dist/commonjs/application.js +2 -1
- package/dist/commonjs/application.js.map +1 -0
- package/dist/commonjs/context.d.ts +1 -0
- package/dist/commonjs/context.d.ts.map +1 -0
- package/dist/commonjs/context.js +1 -0
- package/dist/commonjs/context.js.map +1 -0
- package/dist/commonjs/cookies.d.ts +1 -0
- package/dist/commonjs/cookies.d.ts.map +1 -0
- package/dist/commonjs/cookies.js +4 -2
- package/dist/commonjs/cookies.js.map +1 -0
- package/dist/commonjs/http-error.d.ts +1 -0
- package/dist/commonjs/http-error.d.ts.map +1 -0
- package/dist/commonjs/http-error.js +1 -0
- package/dist/commonjs/http-error.js.map +1 -0
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +1 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/middleware.d.ts +1 -0
- package/dist/commonjs/middleware.d.ts.map +1 -0
- package/dist/commonjs/middleware.js +1 -0
- package/dist/commonjs/middleware.js.map +1 -0
- package/dist/commonjs/normalize-pathname.d.ts +1 -0
- package/dist/commonjs/normalize-pathname.d.ts.map +1 -0
- package/dist/commonjs/normalize-pathname.js +1 -0
- package/dist/commonjs/normalize-pathname.js.map +1 -0
- package/dist/commonjs/package.json +2 -1
- package/dist/commonjs/parse-entries.d.ts +4 -0
- package/dist/commonjs/parse-entries.d.ts.map +1 -0
- package/dist/commonjs/parse-entries.js +20 -0
- package/dist/commonjs/parse-entries.js.map +1 -0
- package/dist/commonjs/req.d.ts +3 -1
- package/dist/commonjs/req.d.ts.map +1 -0
- package/dist/commonjs/req.js +3 -2
- package/dist/commonjs/req.js.map +1 -0
- package/dist/commonjs/response-builder.d.ts +1 -0
- package/dist/commonjs/response-builder.d.ts.map +1 -0
- package/dist/commonjs/response-builder.js +2 -1
- package/dist/commonjs/response-builder.js.map +1 -0
- package/dist/commonjs/router.d.ts +1 -0
- package/dist/commonjs/router.d.ts.map +1 -0
- package/dist/commonjs/router.js +4 -3
- package/dist/commonjs/router.js.map +1 -0
- package/dist/commonjs/validate.d.ts +1 -0
- package/dist/commonjs/validate.d.ts.map +1 -0
- package/dist/commonjs/validate.js +4 -2
- package/dist/commonjs/validate.js.map +1 -0
- package/dist/esm/accepts.d.ts +1 -0
- package/dist/esm/accepts.d.ts.map +1 -0
- package/dist/esm/accepts.js +1 -0
- package/dist/esm/accepts.js.map +1 -0
- package/dist/esm/application.d.ts +2 -1
- package/dist/esm/application.d.ts.map +1 -0
- package/dist/esm/application.js +2 -1
- package/dist/esm/application.js.map +1 -0
- package/dist/esm/context.d.ts +1 -0
- package/dist/esm/context.d.ts.map +1 -0
- package/dist/esm/context.js +1 -0
- package/dist/esm/context.js.map +1 -0
- package/dist/esm/cookies.d.ts +1 -0
- package/dist/esm/cookies.d.ts.map +1 -0
- package/dist/esm/cookies.js +4 -2
- package/dist/esm/cookies.js.map +1 -0
- package/dist/esm/http-error.d.ts +1 -0
- package/dist/esm/http-error.d.ts.map +1 -0
- package/dist/esm/http-error.js +1 -0
- package/dist/esm/http-error.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/middleware.d.ts +1 -0
- package/dist/esm/middleware.d.ts.map +1 -0
- package/dist/esm/middleware.js +1 -0
- package/dist/esm/middleware.js.map +1 -0
- package/dist/esm/normalize-pathname.d.ts +1 -0
- package/dist/esm/normalize-pathname.d.ts.map +1 -0
- package/dist/esm/normalize-pathname.js +1 -0
- package/dist/esm/normalize-pathname.js.map +1 -0
- package/dist/esm/package.json +2 -1
- package/dist/esm/parse-entries.d.ts +4 -0
- package/dist/esm/parse-entries.d.ts.map +1 -0
- package/dist/esm/parse-entries.js +17 -0
- package/dist/esm/parse-entries.js.map +1 -0
- package/dist/esm/req.d.ts +3 -1
- package/dist/esm/req.d.ts.map +1 -0
- package/dist/esm/req.js +2 -1
- package/dist/esm/req.js.map +1 -0
- package/dist/esm/response-builder.d.ts +1 -0
- package/dist/esm/response-builder.d.ts.map +1 -0
- package/dist/esm/response-builder.js +2 -1
- package/dist/esm/response-builder.js.map +1 -0
- package/dist/esm/router.d.ts +1 -0
- package/dist/esm/router.d.ts.map +1 -0
- package/dist/esm/router.js +4 -3
- package/dist/esm/router.js.map +1 -0
- package/dist/esm/validate.d.ts +1 -0
- package/dist/esm/validate.d.ts.map +1 -0
- package/dist/esm/validate.js +4 -2
- package/dist/esm/validate.js.map +1 -0
- package/package.json +17 -15
package/README.md
CHANGED
|
@@ -81,6 +81,45 @@ new Application()
|
|
|
81
81
|
.listen();
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
+
## Repeated validation values
|
|
85
|
+
|
|
86
|
+
By default, `validate` converts headers, query parameters, and form fields into
|
|
87
|
+
objects before applying their schemas. A value that occurs once is stored
|
|
88
|
+
directly. Repeated values are stored as an array in encounter order, including
|
|
89
|
+
empty values:
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
// ?tag=a&tag=&tag=b
|
|
93
|
+
const query = { tag: ['a', '', 'b'] };
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
For query parameters and URL-encoded forms, values are strings. Multipart form
|
|
97
|
+
values can also be `File` objects. `Headers` supplies normalized values and
|
|
98
|
+
usually combines repeated header lines into one string before validation.
|
|
99
|
+
|
|
100
|
+
The array shape makes a scalar schema reject duplicate query parameters or form
|
|
101
|
+
fields rather than validating a different value from the one application code
|
|
102
|
+
might read. To accept both single and repeated values, declare both shapes
|
|
103
|
+
explicitly:
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
validate({
|
|
107
|
+
search: {
|
|
108
|
+
properties: {
|
|
109
|
+
tag: {
|
|
110
|
+
oneOf: [
|
|
111
|
+
{ type: 'string' },
|
|
112
|
+
{ type: 'array', items: { type: 'string' } }
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
A custom `RequestParser` continues to receive the original `URLSearchParams` or
|
|
121
|
+
`FormData` input and controls its resulting shape.
|
|
122
|
+
|
|
84
123
|
[To run this example](/packages/examples/web/index.ts):
|
|
85
124
|
|
|
86
125
|
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accepts.d.ts","sourceRoot":"","sources":["../../src/accepts.ts"],"names":[],"mappings":"AAcA,qBAAa,OAAO;IAMN,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,QAAQ,CAAmC;IAEnD,YAA6B,OAAO,EAAE,OAAO,EAAI;IAE1C,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAkBvD;IAEM,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAa3D;IAEM,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAa3D;IAEM,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAa1D;CACF"}
|
package/dist/commonjs/accepts.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accepts.js","sourceRoot":"","sources":["../../src/accepts.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { preferredCharsets } from 'negotiator/lib/charset.js';\n// @ts-ignore\nimport { preferredEncodings } from 'negotiator/lib/encoding.js';\n// @ts-ignore\nimport { preferredLanguages } from 'negotiator/lib/language.js';\n// @ts-ignore\nimport { preferredMediaTypes } from 'negotiator/lib/mediaType.js';\n\nconst parseAccept = preferredMediaTypes as (header: string) => string[];\nconst parseAcceptLanguage = preferredLanguages as (header: string) => string[];\nconst parseAcceptEncoding = preferredEncodings as (header: string) => string[];\nconst parseAcceptCharset = preferredCharsets as (header: string) => string[];\n\nexport class Accepts {\n private _type: string[] | undefined = undefined;\n private _language: string[] | undefined = undefined;\n private _encoding: string[] | undefined = undefined;\n private _charset: string[] | undefined = undefined;\n\n constructor(private readonly headers: Headers) {}\n\n public type<T extends string>(...values: T[]): T | false {\n if (!this._type) {\n const header = this.headers.get('accept');\n this._type = header ? parseAccept(header.toLowerCase()) : [];\n }\n for (const accepted of this._type) {\n for (const value of values) {\n if (\n value === accepted ||\n (accepted.startsWith('*') && value.endsWith(accepted.substr(1))) ||\n (accepted.endsWith('*') &&\n value.startsWith(accepted.substr(0, accepted.length - 2)))\n ) {\n return value;\n }\n }\n }\n return false;\n }\n\n public language<T extends string>(...values: T[]): T | false {\n if (!this._language) {\n const header = this.headers.get('accept-language');\n this._language = header ? parseAcceptLanguage(header.toLowerCase()) : [];\n }\n for (const accepted of this._language) {\n for (const value of values) {\n if (value === accepted || value.startsWith(accepted)) {\n return value;\n }\n }\n }\n return false;\n }\n\n public encoding<T extends string>(...values: T[]): T | false {\n if (!this._encoding) {\n const header = this.headers.get('accept-encoding');\n this._encoding = header ? parseAcceptEncoding(header.toLowerCase()) : [];\n }\n for (const accepted of this._encoding) {\n for (const value of values) {\n if (value === accepted) {\n return value;\n }\n }\n }\n return false;\n }\n\n public charset<T extends string>(...values: T[]): T | false {\n if (!this._charset) {\n const header = this.headers.get('accept-charset');\n this._charset = header ? parseAcceptCharset(header.toLowerCase()) : [];\n }\n for (const accepted of this._charset) {\n for (const value of values) {\n if (value === accepted) {\n return value;\n }\n }\n }\n return false;\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Middleware } from './middleware.js';
|
|
2
2
|
export declare class Application {
|
|
3
3
|
private readonly middleware;
|
|
4
|
-
private _composedMiddleware
|
|
4
|
+
private _composedMiddleware;
|
|
5
5
|
private get composedMiddleware();
|
|
6
6
|
use(middleware: Middleware): Application;
|
|
7
7
|
handleRequest(request: Request, env: any, context: {
|
|
@@ -9,3 +9,4 @@ export declare class Application {
|
|
|
9
9
|
}): Promise<Response>;
|
|
10
10
|
private invokeMiddleware;
|
|
11
11
|
}
|
|
12
|
+
//# sourceMappingURL=application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/application.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIhE,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,mBAAmB,CAAyB;IAEpD,OAAO,KAAK,kBAAkB,GAK7B;IAEM,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,WAAW,CAI9C;IAEY,aAAa,CACxB,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE;QACP,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KACxC,GACA,OAAO,CAAC,QAAQ,CAAC,CAKnB;YAEa,gBAAgB;CAiB/B"}
|
|
@@ -37,10 +37,11 @@ class Application {
|
|
|
37
37
|
}
|
|
38
38
|
console.error(err?.stack ?? err);
|
|
39
39
|
const status = 500;
|
|
40
|
-
const statusText = statuses_1.default.message[500];
|
|
40
|
+
const statusText = statuses_1.default.message[500] ?? 'Internal Server Error';
|
|
41
41
|
const headers = { 'content-type': 'text/plain' };
|
|
42
42
|
return new Response(statusText, { status, statusText, headers });
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
exports.Application = Application;
|
|
47
|
+
//# sourceMappingURL=application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/application.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,6CAAuC;AACvC,mDAA4C;AAC5C,mDAAgE;AAEhE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAEnC;IACmB,UAAU,GAAiB,EAAE,CAAC;IACvC,mBAAmB,CAAyB;IAEpD,IAAY,kBAAkB;QAC5B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAA,iCAAiB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAEM,GAAG,CAAC,UAAsB;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,OAAgB,EAChB,GAAQ,EACR,OAEC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAC1B,IAAI,oBAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAClC,IAAI,CAAC,kBAAkB,CACxB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,OAAgB,EAAE,UAAsB;QACrE,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,yBAAS,EAAE,CAAC;gBAC7B,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC;YAC1B,CAAC;YAED,OAAO,CAAC,KAAK,CAAE,GAAW,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,GAAG,CAAC;YACnB,MAAM,UAAU,GAAG,kBAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,uBAAuB,CAAC;YACpE,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;YACjD,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;CACF","sourcesContent":["import statuses from 'statuses';\nimport { Context } from './context.js';\nimport { HttpError } from './http-error.js';\nimport { composeMiddleware, Middleware } from './middleware.js';\n\nconst resolved = Promise.resolve();\n\nexport class Application {\n private readonly middleware: Middleware[] = [];\n private _composedMiddleware: Middleware | undefined;\n\n private get composedMiddleware() {\n if (!this._composedMiddleware) {\n this._composedMiddleware = composeMiddleware(this.middleware);\n }\n return this._composedMiddleware;\n }\n\n public use(middleware: Middleware): Application {\n this.middleware.push(middleware);\n this._composedMiddleware = undefined;\n return this;\n }\n\n public async handleRequest(\n request: Request,\n env: any,\n context: {\n waitUntil(promise: Promise<any>): void;\n }\n ): Promise<Response> {\n return this.invokeMiddleware(\n new Context(request, env, context),\n this.composedMiddleware\n );\n }\n\n private async invokeMiddleware(context: Context, middleware: Middleware) {\n try {\n await middleware(context, () => resolved);\n return context.res.create();\n } catch (err) {\n if (err instanceof HttpError) {\n return err.toResponse();\n }\n\n console.error((err as any)?.stack ?? err);\n\n const status = 500;\n const statusText = statuses.message[500] ?? 'Internal Server Error';\n const headers = { 'content-type': 'text/plain' };\n return new Response(statusText, { status, statusText, headers });\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,qBAAa,OAAO;aAQA,mBAAmB,EAAE,GAAG;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAR3B,SAAgB,GAAG,EAAE,GAAG,CAAC;IACzB,SAAgB,GAAG,EAAE,eAAe,CAAC;IACrC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,KAAK,EAAE,GAAG,CAAC;IAE3B,YACE,OAAO,EAAE,OAAO,EACA,mBAAmB,EAAE,GAAG,EACvB,QAAQ,EAAE;QACzB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KACxC,EAMF;IAEM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAE5C;CACF"}
|
package/dist/commonjs/context.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AACvC,qCAA+B;AAC/B,+DAAwD;AAExD;IAQoB,mBAAmB;IAClB,QAAQ;IARX,GAAG,CAAM;IACT,GAAG,CAAkB;IACrB,OAAO,CAAU;IACjB,KAAK,CAAM;IAE3B,YACE,OAAgB,EACA,mBAAwB,EACvB,QAEhB;mCAHe,mBAAmB;wBAClB,QAAQ;QAIzB,IAAI,CAAC,GAAG,GAAG,IAAI,YAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,qCAAe,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAEM,SAAS,CAAC,OAAqB;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF","sourcesContent":["import { Cookies } from './cookies.js';\nimport { Req } from './req.js';\nimport { ResponseBuilder } from './response-builder.js';\n\nexport class Context {\n public readonly req: Req;\n public readonly res: ResponseBuilder;\n public readonly cookies: Cookies;\n public readonly state: any;\n\n constructor(\n request: Request,\n public readonly environmentBindings: any,\n private readonly _context: {\n waitUntil(promise: Promise<any>): void;\n }\n ) {\n this.req = new Req(request);\n this.res = new ResponseBuilder();\n this.cookies = new Cookies(request.headers, this.res.headers);\n this.state = {};\n }\n\n public waitUntil(promise: Promise<any>): void {\n this._context.waitUntil(promise);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/cookies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAI3E,qBAAa,OAAO;IAKhB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAJlC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqC;IAEpE,YACE,cAAc,EAAE,OAAO,EACN,eAAe,EAAE,OAAO,EAI1C;IAEM,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEtC;IAEM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAStE;CACF"}
|
package/dist/commonjs/cookies.js
CHANGED
|
@@ -9,13 +9,15 @@ class Cookies {
|
|
|
9
9
|
constructor(requestHeaders, responseHeaders) {
|
|
10
10
|
this.responseHeaders = responseHeaders;
|
|
11
11
|
const cookie = requestHeaders.get('cookie');
|
|
12
|
-
this.requestCookies = cookie ? (0, cookie_1.
|
|
12
|
+
this.requestCookies = cookie ? (0, cookie_1.parseCookie)(cookie) : noCookies;
|
|
13
13
|
}
|
|
14
14
|
get(name) {
|
|
15
15
|
return this.requestCookies[name] || null;
|
|
16
16
|
}
|
|
17
17
|
set(name, val, options) {
|
|
18
|
-
|
|
18
|
+
const { encode, ...cookieOptions } = options ?? {};
|
|
19
|
+
this.responseHeaders.append('Set-Cookie', (0, cookie_1.stringifySetCookie)({ name, value: val, ...cookieOptions }, encode ? { encode } : undefined));
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
exports.Cookies = Cookies;
|
|
23
|
+
//# sourceMappingURL=cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/cookies.ts"],"names":[],"mappings":";;;AAAA,mCAA2E;AAE3E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAEtC;IAKqB,eAAe;IAJjB,cAAc,CAAqC;IAEpE,YACE,cAAuB,EACN,eAAwB;+BAAxB,eAAe;QAEhC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAEM,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC3C,CAAC;IAEM,GAAG,CAAC,IAAY,EAAE,GAAW,EAAE,OAA0B;QAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,eAAe,CAAC,MAAM,CACzB,YAAY,EACZ,IAAA,2BAAkB,EAChB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,EACtC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAChC,CACF,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { parseCookie, stringifySetCookie, SerializeOptions } from 'cookie';\n\nconst noCookies = Object.create(null);\n\nexport class Cookies {\n private readonly requestCookies: Record<string, string | undefined>;\n\n constructor(\n requestHeaders: Headers,\n private readonly responseHeaders: Headers\n ) {\n const cookie = requestHeaders.get('cookie');\n this.requestCookies = cookie ? parseCookie(cookie) : noCookies;\n }\n\n public get(name: string): string | null {\n return this.requestCookies[name] || null;\n }\n\n public set(name: string, val: string, options?: SerializeOptions): void {\n const { encode, ...cookieOptions } = options ?? {};\n this.responseHeaders.append(\n 'Set-Cookie',\n stringifySetCookie(\n { name, value: val, ...cookieOptions },\n encode ? { encode } : undefined\n )\n );\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-error.d.ts","sourceRoot":"","sources":["../../src/http-error.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,KAAK;IAClC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7C,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC,YACE,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,MAAM,GAAG,MAAM,GAAG,IAAW,EACnC,OAAO,GAAE,WAAgB,EAe1B;IAEM,UAAU,IAAI,QAAQ,CAgB5B;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-error.js","sourceRoot":"","sources":["../../src/http-error.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAEhC,eAAuB,SAAQ,KAAK;IAClB,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,IAAI,CAAyB;IAC7B,OAAO,CAAU;IAEjC,YACE,MAAc,EACd,IAAI,GAA2B,IAAI,EACnC,OAAO,GAAgB,EAAE;QAEzB,MAAM,UAAU,GAAG,kBAAQ,CAAC,OAAO,CAAC,MAAM,CAAE,CAAC;QAE7C,KAAK,CAAC,UAAU,CAAC,CAAC;QAElB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;YAClD,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,kBAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;IAEM,UAAU;QACf,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACpC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF","sourcesContent":["import statuses from 'statuses';\n\nexport class HttpError extends Error {\n public readonly status: number;\n public readonly statusText: string;\n public readonly body: string | object | null;\n public readonly headers: Headers;\n\n constructor(\n status: number,\n body: string | object | null = null,\n headers: HeadersInit = {}\n ) {\n const statusText = statuses.message[status]!;\n\n super(statusText);\n\n this.name = this.constructor.name;\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.status = status;\n this.statusText = statusText;\n this.body = statuses.empty[this.status] ? null : (body ?? statusText);\n this.headers = headers instanceof Headers ? headers : new Headers(headers);\n }\n\n public toResponse(): Response {\n let body = this.body;\n const headers = this.headers;\n if (body === null) {\n } else if (typeof body === 'string') {\n if (!headers.has('content-type')) {\n headers.set('content-type', 'text/plain');\n }\n } else {\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/json');\n }\n body = JSON.stringify(body);\n }\n const { status, statusText } = this;\n return new Response(body, { status, statusText, headers });\n }\n}\n"]}
|
package/dist/commonjs/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
package/dist/commonjs/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAiC;AACjC,+CAA6B;AAC7B,+CAA6B;AAC7B,kDAAgC;AAChC,kDAAgC;AAChC,0DAAwC;AACxC,2CAAyB;AACzB,wDAAsC;AACtC,8CAA4B;AAC5B,gDAA8B","sourcesContent":["export * from './accepts.js';\nexport * from './application.js';\nexport * from './context.js';\nexport * from './cookies.js';\nexport * from './http-error.js';\nexport * from './middleware.js';\nexport * from './normalize-pathname.js';\nexport * from './req.js';\nexport * from './response-builder.js';\nexport * from './router.js';\nexport * from './validate.js';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,MAAM,UAAU,GAAG,CACvB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KACtB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,UAAU,CA0BtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":";;;AAOA,2BAAkC,UAAwB;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,OAAO,EAAE,KAAK,UAAU;YAC1B,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,UAAU,OAAO,EAAE,IAAI;QAE5B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnB,SAAS,QAAQ,CAAC,CAAS;YACzB,IAAI,CAAC,IAAI,KAAK;gBACZ,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACnE,KAAK,GAAG,CAAC,CAAC;YACV,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,UAAU,CAAC,MAAM;gBAAE,EAAE,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC,EAAE;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { Context } from './context.js';\n\nexport type Middleware = (\n context: Context,\n next: () => Promise<void>\n) => Promise<void> | void;\n\nexport function composeMiddleware(middleware: Middleware[]): Middleware {\n if (!Array.isArray(middleware))\n throw new TypeError('Middleware stack must be an array!');\n for (const fn of middleware) {\n if (typeof fn !== 'function')\n throw new TypeError('Middleware must be composed of functions!');\n }\n\n return function (context, next) {\n // last called middleware #\n let index = -1;\n return dispatch(0);\n function dispatch(i: number): Promise<void> {\n if (i <= index)\n return Promise.reject(new Error('next() called multiple times'));\n index = i;\n let fn = middleware[i];\n if (i === middleware.length) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));\n } catch (err) {\n return Promise.reject(err);\n }\n }\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-pathname.d.ts","sourceRoot":"","sources":["../../src/normalize-pathname.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,eAAO,MAAM,2BAA2B,EAAE,UAczC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-pathname.js","sourceRoot":"","sources":["../../src/normalize-pathname.ts"],"names":[],"mappings":";;;;AACA,mDAA4C;AAG5C,2BAAkC,QAAgB;IAChD,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;AACzE,CAAC;AAEM,MAAM,2BAA2B,GAAe,KAAK,EAC1D,EAAE,GAAG,EAAW,EAChB,IAAyB,EACzB,EAAE;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,IAAI,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,yBAAS,CAAC,GAAG,EAAE,8BAA8B,QAAQ,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,EAAE,CAAC;AACf,CAAC,CAAC;AAdW,QAAA,2BAA2B,GAA3B,2BAA2B,CActC","sourcesContent":["import { Context } from './context.js';\nimport { HttpError } from './http-error.js';\nimport { Middleware } from './middleware.js';\n\nexport function normalizePathname(pathname: string): string {\n return decodeURIComponent(pathname).replace(/\\/\\/+/g, '/').normalize();\n}\n\nexport const normalizePathnameMiddleware: Middleware = async (\n { req }: Context,\n next: () => Promise<void>\n) => {\n const pathname = req.url.pathname;\n try {\n req.url.pathname = normalizePathname(pathname);\n } catch (err) {\n if (err instanceof URIError) {\n throw new HttpError(400, `Unable to decode pathname \"${pathname}\".`);\n }\n throw err;\n }\n await next();\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-entries.d.ts","sourceRoot":"","sources":["../../src/parse-entries.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEhD,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GACpC,aAAa,CAAC,CAAC,CAAC,CAkBlB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseEntries = parseEntries;
|
|
4
|
+
function parseEntries(input) {
|
|
5
|
+
const entries = new Map();
|
|
6
|
+
for (const [name, value] of input) {
|
|
7
|
+
const values = entries.get(name);
|
|
8
|
+
if (values === undefined) {
|
|
9
|
+
entries.set(name, [value]);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
values.push(value);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return Object.fromEntries(Array.from(entries, ([name, values]) => [
|
|
16
|
+
name,
|
|
17
|
+
values.length === 1 ? values[0] : values
|
|
18
|
+
]));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=parse-entries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-entries.js","sourceRoot":"","sources":["../../src/parse-entries.ts"],"names":[],"mappings":";;;AAEA,sBACE,KAAqC;IAErC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI;QACJ,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,MAAM;KAC1C,CAAC,CACH,CAAC;AACJ,CAAC","sourcesContent":["type ParsedEntries<T> = Record<string, T | T[]>;\n\nexport function parseEntries<T>(\n input: Iterable<readonly [string, T]>\n): ParsedEntries<T> {\n const entries = new Map<string, T[]>();\n\n for (const [name, value] of input) {\n const values = entries.get(name);\n if (values === undefined) {\n entries.set(name, [value]);\n } else {\n values.push(value);\n }\n }\n\n return Object.fromEntries(\n Array.from(entries, ([name, values]) => [\n name,\n values.length === 1 ? values[0]! : values\n ])\n );\n}\n"]}
|
package/dist/commonjs/req.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Reviver } from 'secure-json-parse';
|
|
2
1
|
import { Accepts } from './accepts.js';
|
|
2
|
+
type Reviver = (this: any, key: string, value: any) => any;
|
|
3
3
|
export declare class Req {
|
|
4
4
|
readonly raw: Request;
|
|
5
5
|
readonly method: string;
|
|
@@ -22,3 +22,5 @@ export declare class ReqBody {
|
|
|
22
22
|
json(reviver?: Reviver): Promise<any>;
|
|
23
23
|
text(): Promise<string>;
|
|
24
24
|
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=req.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"req.d.ts","sourceRoot":"","sources":["../../src/req.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,KAAK,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;AAE3D,qBAAa,GAAG;IACd,SAAgB,GAAG,EAAE,OAAO,CAAC;IAC7B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,GAAG,EAAE,GAAG,CAAC;IACzB,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAE9B,YAAY,OAAO,EAAE,OAAO,EAQ3B;CACF;AAED,qBAAa,OAAO;IAMN,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,KAAK,CAA8B;IAE3C,YAA6B,OAAO,EAAE,OAAO,EAAI;IAE1C,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAKzC;IAEM,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAKnC;IAEM,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAK3C;IAEM,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAK7B;CACF"}
|
package/dist/commonjs/req.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ReqBody = exports.Req = void 0;
|
|
4
|
-
const
|
|
4
|
+
const bourne_1 = require("@hapi/bourne");
|
|
5
5
|
const accepts_js_1 = require("./accepts.js");
|
|
6
6
|
class Req {
|
|
7
7
|
raw;
|
|
@@ -45,7 +45,7 @@ class ReqBody {
|
|
|
45
45
|
}
|
|
46
46
|
json(reviver) {
|
|
47
47
|
if (!this._json) {
|
|
48
|
-
this._json = this.text().then(text => (0,
|
|
48
|
+
this._json = this.text().then(text => (0, bourne_1.safeParse)(text, reviver));
|
|
49
49
|
}
|
|
50
50
|
return this._json;
|
|
51
51
|
}
|
|
@@ -57,3 +57,4 @@ class ReqBody {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
exports.ReqBody = ReqBody;
|
|
60
|
+
//# sourceMappingURL=req.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"req.js","sourceRoot":"","sources":["../../src/req.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AACzC,6CAAuC;AAIvC;IACkB,GAAG,CAAU;IACb,MAAM,CAAS;IACf,GAAG,CAAM;IACT,OAAO,CAAU;IACjB,MAAM,CAAyB;IAC/B,OAAO,CAAU;IACjB,IAAI,CAAU;IAE9B,YAAY,OAAgB;QAC1B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF;;AAED;IAM+B,OAAO;IAL5B,YAAY,CAAmC;IAC/C,SAAS,CAAgC;IACzC,KAAK,CAA2B;IAChC,KAAK,CAA8B;IAE3C,YAA6B,OAAgB;uBAAhB,OAAO;IAAY,CAAC;IAE1C,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,IAAI,CAAC,OAAiB;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,kBAAS,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF","sourcesContent":["import { safeParse } from '@hapi/bourne';\nimport { Accepts } from './accepts.js';\n\ntype Reviver = (this: any, key: string, value: any) => any;\n\nexport class Req {\n public readonly raw: Request;\n public readonly method: string;\n public readonly url: URL;\n public readonly headers: Headers;\n public readonly params: Record<string, string>;\n public readonly accepts: Accepts;\n public readonly body: ReqBody;\n\n constructor(request: Request) {\n this.raw = request;\n this.method = request.method;\n this.url = new URL(request.url);\n this.headers = request.headers;\n this.params = Object.create(null);\n this.accepts = new Accepts(request.headers);\n this.body = new ReqBody(request);\n }\n}\n\nexport class ReqBody {\n private _arrayBuffer: Promise<ArrayBuffer> | undefined;\n private _formData: Promise<FormData> | undefined;\n private _json: Promise<any> | undefined;\n private _text: Promise<string> | undefined;\n\n constructor(private readonly request: Request) {}\n\n public arrayBuffer(): Promise<ArrayBuffer> {\n if (!this._arrayBuffer) {\n this._arrayBuffer = this.request.arrayBuffer();\n }\n return this._arrayBuffer;\n }\n\n public formData(): Promise<FormData> {\n if (!this._formData) {\n this._formData = this.request.formData();\n }\n return this._formData;\n }\n\n public json(reviver?: Reviver): Promise<any> {\n if (!this._json) {\n this._json = this.text().then(text => safeParse(text, reviver));\n }\n return this._json;\n }\n\n public text(): Promise<string> {\n if (!this._text) {\n this._text = this.request.text();\n }\n return this._text;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-builder.d.ts","sourceRoot":"","sources":["../../src/response-builder.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAC1B,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAErD,qBAAa,eAAe;IAC1B,SAAgB,OAAO,EAAE,OAAO,CAAiB;IACjD,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,cAAc,CAAS;IAE/B,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,MAAM,CAAC,KAAK,EAHF,MAGE,EAMf;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,IAAI,IAGQ,gBAAgB,GAAG,IAAI,CADtC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAoDtC;IAED,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAahC;IAED,IAAI,IAAI,IAAI,MAAM,CAMjB;IACD,IAAI,IAAI,CAAC,KAAK,EAPF,MAOE,EAOb;IAED,IAAI,YAAY,IAIQ,MAAM,GAAG,IAAI,GAAG,IAAI,CAD3C;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAS3C;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IACD,IAAI,IAAI,CAAC,KAAK,EAHF,MAAM,GAAG,IAGP,EASb;IAED,MAAM,IAAI,QAAQ,CAMjB;CACF"}
|
|
@@ -88,7 +88,7 @@ class ResponseBuilder {
|
|
|
88
88
|
if (!type) {
|
|
89
89
|
return '';
|
|
90
90
|
}
|
|
91
|
-
return type.split(';', 1)[0];
|
|
91
|
+
return type.split(';', 1)[0] ?? '';
|
|
92
92
|
}
|
|
93
93
|
set type(value) {
|
|
94
94
|
this._implicitType = false;
|
|
@@ -136,3 +136,4 @@ class ResponseBuilder {
|
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
exports.ResponseBuilder = ResponseBuilder;
|
|
139
|
+
//# sourceMappingURL=response-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-builder.js","sourceRoot":"","sources":["../../src/response-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import statuses from 'statuses';\n\nexport type ExtendedBodyInit =\n BodyInit | boolean | Date | number | object | null;\n\nexport class ResponseBuilder {\n public readonly headers: Headers = new Headers();\n private _status = 404;\n private _explicitStatus = false;\n private _implicitType = false;\n private _body: ExtendedBodyInit = null;\n private _stringifyBody = false;\n\n get status(): number {\n return this._status;\n }\n set status(value) {\n this._explicitStatus = true;\n this._status = value;\n if (this.body && statuses.empty[value]) {\n this.body = null;\n }\n }\n\n get statusText(): string {\n return statuses.message[this._status]!;\n }\n\n get body() {\n return this._body;\n }\n set body(value: ExtendedBodyInit | null) {\n this._body = value;\n\n // no content\n if (value === null) {\n if (!statuses.empty[this.status]) {\n this._status = 204;\n }\n this.headers.delete('content-type');\n this.headers.delete('content-length');\n this.headers.delete('transfer-encoding');\n return;\n }\n\n // set the status\n if (!this._explicitStatus) {\n this._status = 200;\n }\n\n // set Content-Type\n if (\n // Response will automatically use Blob's type.\n value instanceof Blob ||\n // Response will automatically use multipart/form-data.\n value instanceof FormData ||\n // Response will automatically use application/x-www-form-urlencoded.\n value instanceof URLSearchParams ||\n // Cannot determine Content-Type.\n ArrayBuffer.isView(value) ||\n value instanceof ArrayBuffer ||\n value instanceof ReadableStream\n ) {\n this._stringifyBody = false;\n if (this._implicitType) {\n this._implicitType = false;\n this.headers.delete('content-type');\n }\n } else if (typeof value === 'string') {\n this._stringifyBody = false;\n if (!this.headers.has('content-type') || this._implicitType) {\n this._implicitType = true;\n if (/^\\s*</.test(value)) {\n this.headers.set('content-type', 'text/html;charset=UTF-8');\n } else {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n }\n }\n } else {\n this._stringifyBody = true;\n this._implicitType = true;\n this.headers.set('content-type', 'application/json;charset=UTF-8');\n }\n }\n\n redirect(url: string | URL): void {\n if (url instanceof URL) {\n url = url.href;\n }\n\n this.headers.set('location', url);\n\n if (!statuses.redirect[this.status]) {\n this.status = 302;\n }\n\n this.type = 'text/plain;charset=UTF-8';\n this.body = `Redirecting to ${url}.`;\n }\n\n get type(): string {\n const type = this.headers.get('content-type');\n if (!type) {\n return '';\n }\n return type.split(';', 1)[0] ?? '';\n }\n set type(value) {\n this._implicitType = false;\n if (value) {\n this.headers.set('content-type', value);\n } else {\n this.headers.delete('content-type');\n }\n }\n\n get lastModified() {\n const date = this.headers.get('last-modified');\n return date ? new Date(date) : null;\n }\n set lastModified(value: string | Date | null) {\n if (value === null) {\n this.headers.delete('last-modified');\n return;\n }\n if (typeof value === 'string') {\n value = new Date(value);\n }\n this.headers.set('last-modified', value.toUTCString());\n }\n\n get etag(): string | null {\n return this.headers.get('etag');\n }\n set etag(value) {\n if (value) {\n if (!/^(W\\/)?\"/.test(value)) {\n value = `\"${value}\"`;\n }\n this.headers.set('etag', value);\n } else {\n this.headers.delete('etag');\n }\n }\n\n create(): Response {\n const { body: rawBody, status, statusText, headers } = this;\n const body = this._stringifyBody\n ? JSON.stringify(rawBody)\n : (rawBody as BodyInit);\n return new Response(body, { status, statusText, headers });\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAqB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAEtD,eAAO,MAAM,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAGxC,CAAC;AACF,eAAO,MAAM,GAAG,EAAE,SAAyB,CAAC;AAC5C,eAAO,MAAM,IAAI,EAAE,SAA0B,CAAC;AAC9C,eAAO,MAAM,GAAG,EAAE,SAAyB,CAAC;AAC5C,eAAO,MAAM,KAAK,EAAE,SAA2B,CAAC;AAChD,eAAO,MAAM,MAAM,EAAE,SAA4B,CAAC;AAClD,eAAO,MAAM,IAAI,EAAE,SAA0B,CAAC;AAC9C,eAAO,MAAM,OAAO,EAAE,SAA6B,CAAC;AAEpD,eAAO,MAAM,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,SAMvD,CAAC;AACF,eAAO,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SACf,CAAC;AAEvB,eAAO,MAAM,IAAI,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,mBAAmB,KAC1B,SAWJ,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAE3D,MAAM,WAAW,KAAK;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,eAAO,MAAM,oBAAoB,EAAE,aAIlC,CAAC;AAEF,qBAAa,MAAM;IAGL,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC,YAA6B,OAAO,GAAE,aAAoC,EAEzE;IAEM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAGhE;IAEM,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAGjE;IAEM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAGhE;IAEM,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAGlE;IAEM,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAGnE;IAEM,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAGjE;IAEM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAGhE;IAEM,UAAU,EAAE,UAAU,CAQ3B;IAEK,OAAO,CACZ,UAAU,EAAE,cAAc,EAAE,EAC5B,GAAG,UAAU,EAAE,UAAU,EAAE,GAC1B,MAAM,CAMR;IAEM,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAK9C;CACF"}
|
package/dist/commonjs/router.js
CHANGED
|
@@ -97,11 +97,12 @@ class Router {
|
|
|
97
97
|
exports.Router = Router;
|
|
98
98
|
function collectParameters(keys, match, params) {
|
|
99
99
|
for (let i = 1; i < match.length; i++) {
|
|
100
|
-
const
|
|
100
|
+
const key = keys[i - 1];
|
|
101
101
|
const value = match[i];
|
|
102
|
-
if (!value) {
|
|
102
|
+
if (!key || !value) {
|
|
103
103
|
continue;
|
|
104
104
|
}
|
|
105
|
-
params[name] = decodeURIComponent(value);
|
|
105
|
+
params[key.name] = decodeURIComponent(value);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Key, pathToRegexp, PathToRegexpOptions } from 'path-to-regexp';\nimport { Context } from './context.js';\nimport { composeMiddleware, Middleware } from './middleware.js';\n\nexport type Predicate = (context: Context) => boolean;\n\nexport const Method: (method: string) => Predicate = (method: string) => {\n method = method.toUpperCase();\n return ({ req }: Context) => req.method === method;\n};\nexport const Get: Predicate = Method('get');\nexport const Post: Predicate = Method('post');\nexport const Put: Predicate = Method('put');\nexport const Patch: Predicate = Method('patch');\nexport const Delete: Predicate = Method('delete');\nexport const Head: Predicate = Method('head');\nexport const Options: Predicate = Method('options');\n\nexport const Header: (header: string, value: string) => Predicate = (\n header: string,\n value: string\n) => {\n value = value.toLowerCase();\n return ({ req }: Context) => req.headers.get(header) === value;\n};\nexport const Host: (host: string) => Predicate = (host: string) =>\n Header('host', host);\n\nexport const Path: (\n pattern: string,\n options?: PathToRegexpOptions\n) => Predicate = (pattern: string, options?: PathToRegexpOptions) => {\n const regexp = pathToRegexp(pattern, options);\n\n return ({ req: { url, params } }: Context) => {\n const match = url.pathname.match(regexp);\n if (!match) {\n return false;\n }\n collectParameters(regexp.keys, match, params);\n return true;\n };\n};\n\nexport type RouteCondition = (context: Context) => boolean;\n\nexport interface Route {\n conditions: RouteCondition[];\n middleware: Middleware;\n}\n\nexport interface RouterOptions {\n pathToRegExpOptions?: PathToRegexpOptions;\n}\n\nexport const defaultRouterOptions: RouterOptions = {\n pathToRegExpOptions: {\n strict: true\n }\n};\n\nexport class Router {\n private readonly routes: Route[];\n\n constructor(private readonly options: RouterOptions = defaultRouterOptions) {\n this.routes = [];\n }\n\n public get(pathname: string, ...middleware: Middleware[]): Router {\n const opts = this.options.pathToRegExpOptions;\n return this.compose([Get, Path(pathname, opts)], ...middleware);\n }\n\n public post(pathname: string, ...middleware: Middleware[]): Router {\n const opts = this.options.pathToRegExpOptions;\n return this.compose([Post, Path(pathname, opts)], ...middleware);\n }\n\n public put(pathname: string, ...middleware: Middleware[]): Router {\n const opts = this.options.pathToRegExpOptions;\n return this.compose([Put, Path(pathname, opts)], ...middleware);\n }\n\n public patch(pathname: string, ...middleware: Middleware[]): Router {\n const opts = this.options.pathToRegExpOptions;\n return this.compose([Patch, Path(pathname, opts)], ...middleware);\n }\n\n public delete(pathname: string, ...middleware: Middleware[]): Router {\n const opts = this.options.pathToRegExpOptions;\n return this.compose([Delete, Path(pathname, opts)], ...middleware);\n }\n\n public head(pathname: string, ...middleware: Middleware[]): Router {\n const opts = this.options.pathToRegExpOptions;\n return this.compose([Head, Path(pathname, opts)], ...middleware);\n }\n\n public all(pathname: string, ...middleware: Middleware[]): Router {\n const opts = this.options.pathToRegExpOptions;\n return this.compose([Path(pathname, opts)], ...middleware);\n }\n\n public middleware: Middleware = async (ctx, next) => {\n const resolved = this.resolve(ctx);\n\n if (resolved) {\n await resolved.middleware(ctx, next);\n } else {\n await next();\n }\n };\n\n public compose(\n conditions: RouteCondition[],\n ...middleware: Middleware[]\n ): Router {\n this.routes.push({\n conditions,\n middleware: composeMiddleware(middleware)\n });\n return this;\n }\n\n public resolve(ctx: Context): Route | undefined {\n return this.routes.find(\n ({ conditions }) =>\n conditions.length === 0 || conditions.every(c => c(ctx))\n );\n }\n}\n\nfunction collectParameters(\n keys: Key[],\n match: RegExpMatchArray,\n params: Record<string, string>\n) {\n for (let i = 1; i < match.length; i++) {\n const key = keys[i - 1];\n const value = match[i];\n if (!key || !value) {\n continue;\n }\n params[key.name] = decodeURIComponent(value);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,MAAM,EAEP,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,KAAK,GAAG,CAAC;AAWtE,iBAAS,iBAAiB,CACxB,OAAO,EAAE,cAAc,EACvB,MAAM,GAAE,aAA4B,EACpC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAuB,GAC7D,UAAU,CAkDZ;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAKhD,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAsBD,eAAO,MAAM,QAAQ,EAAE,OAAO,iBAAqC,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.validate = exports.messages = void 0;
|
|
4
4
|
const json_schema_1 = require("@cfworker/json-schema");
|
|
5
5
|
const http_error_js_1 = require("./http-error.js");
|
|
6
|
+
const parse_entries_js_1 = require("./parse-entries.js");
|
|
6
7
|
const draft = '2019-09';
|
|
7
8
|
const hasBody = {
|
|
8
9
|
POST: true,
|
|
@@ -10,7 +11,7 @@ const hasBody = {
|
|
|
10
11
|
DELETE: true,
|
|
11
12
|
PATCH: true
|
|
12
13
|
};
|
|
13
|
-
function middlewareFactory(schemas, parser =
|
|
14
|
+
function middlewareFactory(schemas, parser = parse_entries_js_1.parseEntries, lookup = Object.create(null)) {
|
|
14
15
|
const { headers: $headers, search: $search, params: $params, body: $body } = schemas;
|
|
15
16
|
if ($headers) {
|
|
16
17
|
(0, json_schema_1.dereference)($headers, { ...lookup });
|
|
@@ -29,7 +30,7 @@ function middlewareFactory(schemas, parser = Object.fromEntries, lookup = Object
|
|
|
29
30
|
validateRequestPart('params', req.params, $params, lookup);
|
|
30
31
|
}
|
|
31
32
|
if ($headers) {
|
|
32
|
-
const headers =
|
|
33
|
+
const headers = (0, parse_entries_js_1.parseEntries)(req.headers);
|
|
33
34
|
validateRequestPart('headers', headers, $headers, lookup);
|
|
34
35
|
}
|
|
35
36
|
if ($search) {
|
|
@@ -74,3 +75,4 @@ function validateRequestPart(part, instance, schema, lookup) {
|
|
|
74
75
|
throw new http_error_js_1.HttpError(400, errorBody);
|
|
75
76
|
}
|
|
76
77
|
exports.validate = middlewareFactory;
|
|
78
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n dereference,\n OutputUnit,\n Schema,\n validate as schemaValidate\n} from '@cfworker/json-schema';\nimport { HttpError } from './http-error.js';\nimport { Middleware } from './middleware.js';\nimport { parseEntries } from './parse-entries.js';\n\nexport interface RequestSchemas {\n body?: Schema;\n headers?: Schema;\n params?: Schema;\n search?: Schema;\n}\n\nexport type RequestPart = keyof RequestSchemas;\n\nexport type RequestParser = (data: URLSearchParams | FormData) => any;\n\nconst draft = '2019-09';\n\nconst hasBody: Record<string, true> = {\n POST: true,\n PUT: true,\n DELETE: true,\n PATCH: true\n};\n\nfunction middlewareFactory(\n schemas: RequestSchemas,\n parser: RequestParser = parseEntries,\n lookup: Record<string, Schema | boolean> = Object.create(null)\n): Middleware {\n const {\n headers: $headers,\n search: $search,\n params: $params,\n body: $body\n } = schemas;\n\n if ($headers) {\n dereference($headers, { ...lookup });\n }\n if ($search) {\n dereference($search, { ...lookup });\n }\n if ($params) {\n dereference($params, { ...lookup });\n }\n if ($body) {\n dereference($body, { ...lookup });\n }\n\n return async ({ req }, next) => {\n if ($params) {\n validateRequestPart('params', req.params, $params, lookup);\n }\n if ($headers) {\n const headers = parseEntries(req.headers);\n validateRequestPart('headers', headers, $headers, lookup);\n }\n if ($search) {\n const search = parser(req.url.searchParams);\n validateRequestPart('search', search, $search, lookup);\n }\n if ($body && hasBody[req.method]) {\n let body: any;\n const contentType = req.headers.get('content-type') || '';\n if (\n contentType === 'application/x-www-form-urlencoded' ||\n contentType.startsWith('application/x-www-form-urlencoded;') ||\n contentType.startsWith('multipart/form-data;')\n ) {\n const form = await req.body.formData();\n body = parser(form);\n } else {\n body = await req.body.json();\n }\n validateRequestPart('body', body, $body, lookup);\n }\n await next();\n };\n}\n\nexport const messages: Record<RequestPart, string> = {\n params: 'Parameters in request path are invalid.',\n headers: 'Headers are invalid.',\n search: 'Query string parameters are invalid.',\n body: 'Body is invalid.'\n};\n\nexport interface RequestValidationErrorBody {\n status: 400;\n part: RequestPart;\n message: string;\n errors: OutputUnit[];\n schema: Schema;\n}\n\nfunction validateRequestPart(\n part: RequestPart,\n instance: any,\n schema: Schema,\n lookup: Record<string, boolean | Schema>\n) {\n const result = schemaValidate(instance, schema, draft, lookup);\n if (result.valid) {\n return;\n }\n const errorBody: RequestValidationErrorBody = {\n status: 400,\n part,\n message: messages[part],\n errors: result.errors,\n schema\n };\n throw new HttpError(400, errorBody);\n}\n\nexport const validate: typeof middlewareFactory = middlewareFactory;\n"]}
|
package/dist/esm/accepts.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accepts.d.ts","sourceRoot":"","sources":["../../src/accepts.ts"],"names":[],"mappings":"AAcA,qBAAa,OAAO;IAMN,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,QAAQ,CAAmC;IAEnD,YAA6B,OAAO,EAAE,OAAO,EAAI;IAE1C,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAkBvD;IAEM,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAa3D;IAEM,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAa3D;IAEM,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAa1D;CACF"}
|
package/dist/esm/accepts.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accepts.js","sourceRoot":"","sources":["../../src/accepts.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { preferredCharsets } from 'negotiator/lib/charset.js';\n// @ts-ignore\nimport { preferredEncodings } from 'negotiator/lib/encoding.js';\n// @ts-ignore\nimport { preferredLanguages } from 'negotiator/lib/language.js';\n// @ts-ignore\nimport { preferredMediaTypes } from 'negotiator/lib/mediaType.js';\n\nconst parseAccept = preferredMediaTypes as (header: string) => string[];\nconst parseAcceptLanguage = preferredLanguages as (header: string) => string[];\nconst parseAcceptEncoding = preferredEncodings as (header: string) => string[];\nconst parseAcceptCharset = preferredCharsets as (header: string) => string[];\n\nexport class Accepts {\n private _type: string[] | undefined = undefined;\n private _language: string[] | undefined = undefined;\n private _encoding: string[] | undefined = undefined;\n private _charset: string[] | undefined = undefined;\n\n constructor(private readonly headers: Headers) {}\n\n public type<T extends string>(...values: T[]): T | false {\n if (!this._type) {\n const header = this.headers.get('accept');\n this._type = header ? parseAccept(header.toLowerCase()) : [];\n }\n for (const accepted of this._type) {\n for (const value of values) {\n if (\n value === accepted ||\n (accepted.startsWith('*') && value.endsWith(accepted.substr(1))) ||\n (accepted.endsWith('*') &&\n value.startsWith(accepted.substr(0, accepted.length - 2)))\n ) {\n return value;\n }\n }\n }\n return false;\n }\n\n public language<T extends string>(...values: T[]): T | false {\n if (!this._language) {\n const header = this.headers.get('accept-language');\n this._language = header ? parseAcceptLanguage(header.toLowerCase()) : [];\n }\n for (const accepted of this._language) {\n for (const value of values) {\n if (value === accepted || value.startsWith(accepted)) {\n return value;\n }\n }\n }\n return false;\n }\n\n public encoding<T extends string>(...values: T[]): T | false {\n if (!this._encoding) {\n const header = this.headers.get('accept-encoding');\n this._encoding = header ? parseAcceptEncoding(header.toLowerCase()) : [];\n }\n for (const accepted of this._encoding) {\n for (const value of values) {\n if (value === accepted) {\n return value;\n }\n }\n }\n return false;\n }\n\n public charset<T extends string>(...values: T[]): T | false {\n if (!this._charset) {\n const header = this.headers.get('accept-charset');\n this._charset = header ? parseAcceptCharset(header.toLowerCase()) : [];\n }\n for (const accepted of this._charset) {\n for (const value of values) {\n if (value === accepted) {\n return value;\n }\n }\n }\n return false;\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Middleware } from './middleware.js';
|
|
2
2
|
export declare class Application {
|
|
3
3
|
private readonly middleware;
|
|
4
|
-
private _composedMiddleware
|
|
4
|
+
private _composedMiddleware;
|
|
5
5
|
private get composedMiddleware();
|
|
6
6
|
use(middleware: Middleware): Application;
|
|
7
7
|
handleRequest(request: Request, env: any, context: {
|
|
@@ -9,3 +9,4 @@ export declare class Application {
|
|
|
9
9
|
}): Promise<Response>;
|
|
10
10
|
private invokeMiddleware;
|
|
11
11
|
}
|
|
12
|
+
//# sourceMappingURL=application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/application.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIhE,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,mBAAmB,CAAyB;IAEpD,OAAO,KAAK,kBAAkB,GAK7B;IAEM,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,WAAW,CAI9C;IAEY,aAAa,CACxB,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE;QACP,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KACxC,GACA,OAAO,CAAC,QAAQ,CAAC,CAKnB;YAEa,gBAAgB;CAiB/B"}
|
package/dist/esm/application.js
CHANGED
|
@@ -31,9 +31,10 @@ export class Application {
|
|
|
31
31
|
}
|
|
32
32
|
console.error(err?.stack ?? err);
|
|
33
33
|
const status = 500;
|
|
34
|
-
const statusText = statuses.message[500];
|
|
34
|
+
const statusText = statuses.message[500] ?? 'Internal Server Error';
|
|
35
35
|
const headers = { 'content-type': 'text/plain' };
|
|
36
36
|
return new Response(statusText, { status, statusText, headers });
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
//# sourceMappingURL=application.js.map
|