@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAc,MAAM,iBAAiB,CAAC;AAEhE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAEnC,MAAM,OAAO,WAAW;IACL,UAAU,GAAiB,EAAE,CAAC;IACvC,mBAAmB,CAAyB;IAEpD,IAAY,kBAAkB;QAC5B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,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,OAAO,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,SAAS,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,QAAQ,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"]}
|
package/dist/esm/context.d.ts
CHANGED
|
@@ -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/esm/context.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","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,MAAM,OAAO,OAAO;IAQA,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,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,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"]}
|
package/dist/esm/cookies.d.ts
CHANGED
|
@@ -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/esm/cookies.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { parseCookie, stringifySetCookie } from 'cookie';
|
|
2
2
|
const noCookies = Object.create(null);
|
|
3
3
|
export class Cookies {
|
|
4
4
|
responseHeaders;
|
|
@@ -12,6 +12,8 @@ export class Cookies {
|
|
|
12
12
|
return this.requestCookies[name] || null;
|
|
13
13
|
}
|
|
14
14
|
set(name, val, options) {
|
|
15
|
-
|
|
15
|
+
const { encode, ...cookieOptions } = options ?? {};
|
|
16
|
+
this.responseHeaders.append('Set-Cookie', stringifySetCookie({ name, value: val, ...cookieOptions }, encode ? { encode } : undefined));
|
|
16
17
|
}
|
|
17
18
|
}
|
|
19
|
+
//# sourceMappingURL=cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/cookies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAoB,MAAM,QAAQ,CAAC;AAE3E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAEtC,MAAM,OAAO,OAAO;IAKC,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,WAAW,CAAC,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,kBAAkB,CAChB,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"]}
|
package/dist/esm/http-error.d.ts
CHANGED
|
@@ -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"}
|
package/dist/esm/http-error.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-error.js","sourceRoot":"","sources":["../../src/http-error.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,OAAO,SAAU,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,QAAQ,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,QAAQ,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/esm/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/esm/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","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","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"]}
|
package/dist/esm/middleware.d.ts
CHANGED
|
@@ -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"}
|
package/dist/esm/middleware.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,iBAAiB,CAAC,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,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,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,SAAS,CAAC,GAAG,EAAE,8BAA8B,QAAQ,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,EAAE,CAAC;AACf,CAAC,CAAC","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"]}
|
package/dist/esm/package.json
CHANGED
|
@@ -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,17 @@
|
|
|
1
|
+
export function parseEntries(input) {
|
|
2
|
+
const entries = new Map();
|
|
3
|
+
for (const [name, value] of input) {
|
|
4
|
+
const values = entries.get(name);
|
|
5
|
+
if (values === undefined) {
|
|
6
|
+
entries.set(name, [value]);
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
values.push(value);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return Object.fromEntries(Array.from(entries, ([name, values]) => [
|
|
13
|
+
name,
|
|
14
|
+
values.length === 1 ? values[0] : values
|
|
15
|
+
]));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=parse-entries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-entries.js","sourceRoot":"","sources":["../../src/parse-entries.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAC1B,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/esm/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/esm/req.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { safeParse } from '
|
|
1
|
+
import { safeParse } from '@hapi/bourne';
|
|
2
2
|
import { Accepts } from './accepts.js';
|
|
3
3
|
export class Req {
|
|
4
4
|
raw;
|
|
@@ -52,3 +52,4 @@ export class ReqBody {
|
|
|
52
52
|
return this._text;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
//# sourceMappingURL=req.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"req.js","sourceRoot":"","sources":["../../src/req.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,OAAO,GAAG;IACE,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,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,OAAO;IAMW,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,SAAS,CAAC,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"}
|
|
@@ -82,7 +82,7 @@ export class ResponseBuilder {
|
|
|
82
82
|
if (!type) {
|
|
83
83
|
return '';
|
|
84
84
|
}
|
|
85
|
-
return type.split(';', 1)[0];
|
|
85
|
+
return type.split(';', 1)[0] ?? '';
|
|
86
86
|
}
|
|
87
87
|
set type(value) {
|
|
88
88
|
this._implicitType = false;
|
|
@@ -129,3 +129,4 @@ export class ResponseBuilder {
|
|
|
129
129
|
return new Response(body, { status, statusText, headers });
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
+
//# 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"]}
|
package/dist/esm/router.d.ts
CHANGED
|
@@ -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/esm/router.js
CHANGED
|
@@ -89,11 +89,12 @@ export class Router {
|
|
|
89
89
|
}
|
|
90
90
|
function collectParameters(keys, match, params) {
|
|
91
91
|
for (let i = 1; i < match.length; i++) {
|
|
92
|
-
const
|
|
92
|
+
const key = keys[i - 1];
|
|
93
93
|
const value = match[i];
|
|
94
|
-
if (!value) {
|
|
94
|
+
if (!key || !value) {
|
|
95
95
|
continue;
|
|
96
96
|
}
|
|
97
|
-
params[name] = decodeURIComponent(value);
|
|
97
|
+
params[key.name] = decodeURIComponent(value);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
+
//# 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"]}
|
package/dist/esm/validate.d.ts
CHANGED
|
@@ -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"}
|
package/dist/esm/validate.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { dereference, validate as schemaValidate } from '@cfworker/json-schema';
|
|
2
2
|
import { HttpError } from './http-error.js';
|
|
3
|
+
import { parseEntries } from './parse-entries.js';
|
|
3
4
|
const draft = '2019-09';
|
|
4
5
|
const hasBody = {
|
|
5
6
|
POST: true,
|
|
@@ -7,7 +8,7 @@ const hasBody = {
|
|
|
7
8
|
DELETE: true,
|
|
8
9
|
PATCH: true
|
|
9
10
|
};
|
|
10
|
-
function middlewareFactory(schemas, parser =
|
|
11
|
+
function middlewareFactory(schemas, parser = parseEntries, lookup = Object.create(null)) {
|
|
11
12
|
const { headers: $headers, search: $search, params: $params, body: $body } = schemas;
|
|
12
13
|
if ($headers) {
|
|
13
14
|
dereference($headers, { ...lookup });
|
|
@@ -26,7 +27,7 @@ function middlewareFactory(schemas, parser = Object.fromEntries, lookup = Object
|
|
|
26
27
|
validateRequestPart('params', req.params, $params, lookup);
|
|
27
28
|
}
|
|
28
29
|
if ($headers) {
|
|
29
|
-
const headers =
|
|
30
|
+
const headers = parseEntries(req.headers);
|
|
30
31
|
validateRequestPart('headers', headers, $headers, lookup);
|
|
31
32
|
}
|
|
32
33
|
if ($search) {
|
|
@@ -71,3 +72,4 @@ function validateRequestPart(part, instance, schema, lookup) {
|
|
|
71
72
|
throw new HttpError(400, errorBody);
|
|
72
73
|
}
|
|
73
74
|
export const validate = middlewareFactory;
|
|
75
|
+
//# 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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cfworker/web",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "Web framework for Cloudflare Workers and service workers, inspired by Koa and fastify",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"middleware",
|
|
@@ -39,32 +39,34 @@
|
|
|
39
39
|
],
|
|
40
40
|
"scripts": {
|
|
41
41
|
"prepare": "npm run prepare --workspace @cfworker/json-schema && tshy",
|
|
42
|
-
"build": "
|
|
43
|
-
"
|
|
42
|
+
"build": "npm run build --workspace @cfworker/json-schema && tshy",
|
|
43
|
+
"typecheck": "tsc --project tsconfig.json",
|
|
44
|
+
"clean": "tsc --build tsconfig.build.json --clean",
|
|
44
45
|
"pretest": "esbuild test/test.ts --target=esnext --bundle --format=esm --conditions=worker,browser --outdir=dist-test --ignore-annotations",
|
|
45
46
|
"test": "node ../../test.mjs"
|
|
46
47
|
},
|
|
47
48
|
"dependencies": {
|
|
48
|
-
"@cfworker/json-schema": "^4.1.
|
|
49
|
-
"@
|
|
50
|
-
"
|
|
49
|
+
"@cfworker/json-schema": "^4.1.4",
|
|
50
|
+
"@hapi/bourne": "^4.0.1",
|
|
51
|
+
"@types/statuses": "^2.0.6",
|
|
52
|
+
"cookie": "^2.0.1",
|
|
51
53
|
"html-escaper": "^3.0.3",
|
|
52
|
-
"negotiator": "^1.
|
|
54
|
+
"negotiator": "^1.1.0",
|
|
53
55
|
"path-to-regexp": "7.1.0",
|
|
54
|
-
"
|
|
55
|
-
"statuses": "^2.0.1"
|
|
56
|
+
"statuses": "^2.0.2"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
|
-
"@types/chai": "^5.
|
|
59
|
+
"@types/chai": "^5.2.3",
|
|
59
60
|
"@types/mocha": "^10.0.10",
|
|
60
|
-
"chai": "^
|
|
61
|
-
"esbuild": "^0.
|
|
61
|
+
"chai": "^6.3.0",
|
|
62
|
+
"esbuild": "^0.28.2",
|
|
62
63
|
"jsonpointer": "^5.0.1",
|
|
63
|
-
"mocha": "^
|
|
64
|
-
"typescript": "^
|
|
65
|
-
"wrangler": "^
|
|
64
|
+
"mocha": "^12.0.3",
|
|
65
|
+
"typescript": "^7.0.2",
|
|
66
|
+
"wrangler": "^4.156.0"
|
|
66
67
|
},
|
|
67
68
|
"tshy": {
|
|
69
|
+
"project": "./tsconfig.build.json",
|
|
68
70
|
"exports": {
|
|
69
71
|
"./package.json": "./package.json",
|
|
70
72
|
".": "./src/index.ts"
|