@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.
Files changed (108) hide show
  1. package/README.md +39 -0
  2. package/dist/commonjs/accepts.d.ts +1 -0
  3. package/dist/commonjs/accepts.d.ts.map +1 -0
  4. package/dist/commonjs/accepts.js +1 -0
  5. package/dist/commonjs/accepts.js.map +1 -0
  6. package/dist/commonjs/application.d.ts +2 -1
  7. package/dist/commonjs/application.d.ts.map +1 -0
  8. package/dist/commonjs/application.js +2 -1
  9. package/dist/commonjs/application.js.map +1 -0
  10. package/dist/commonjs/context.d.ts +1 -0
  11. package/dist/commonjs/context.d.ts.map +1 -0
  12. package/dist/commonjs/context.js +1 -0
  13. package/dist/commonjs/context.js.map +1 -0
  14. package/dist/commonjs/cookies.d.ts +1 -0
  15. package/dist/commonjs/cookies.d.ts.map +1 -0
  16. package/dist/commonjs/cookies.js +4 -2
  17. package/dist/commonjs/cookies.js.map +1 -0
  18. package/dist/commonjs/http-error.d.ts +1 -0
  19. package/dist/commonjs/http-error.d.ts.map +1 -0
  20. package/dist/commonjs/http-error.js +1 -0
  21. package/dist/commonjs/http-error.js.map +1 -0
  22. package/dist/commonjs/index.d.ts +1 -0
  23. package/dist/commonjs/index.d.ts.map +1 -0
  24. package/dist/commonjs/index.js +1 -0
  25. package/dist/commonjs/index.js.map +1 -0
  26. package/dist/commonjs/middleware.d.ts +1 -0
  27. package/dist/commonjs/middleware.d.ts.map +1 -0
  28. package/dist/commonjs/middleware.js +1 -0
  29. package/dist/commonjs/middleware.js.map +1 -0
  30. package/dist/commonjs/normalize-pathname.d.ts +1 -0
  31. package/dist/commonjs/normalize-pathname.d.ts.map +1 -0
  32. package/dist/commonjs/normalize-pathname.js +1 -0
  33. package/dist/commonjs/normalize-pathname.js.map +1 -0
  34. package/dist/commonjs/package.json +2 -1
  35. package/dist/commonjs/parse-entries.d.ts +4 -0
  36. package/dist/commonjs/parse-entries.d.ts.map +1 -0
  37. package/dist/commonjs/parse-entries.js +20 -0
  38. package/dist/commonjs/parse-entries.js.map +1 -0
  39. package/dist/commonjs/req.d.ts +3 -1
  40. package/dist/commonjs/req.d.ts.map +1 -0
  41. package/dist/commonjs/req.js +3 -2
  42. package/dist/commonjs/req.js.map +1 -0
  43. package/dist/commonjs/response-builder.d.ts +1 -0
  44. package/dist/commonjs/response-builder.d.ts.map +1 -0
  45. package/dist/commonjs/response-builder.js +2 -1
  46. package/dist/commonjs/response-builder.js.map +1 -0
  47. package/dist/commonjs/router.d.ts +1 -0
  48. package/dist/commonjs/router.d.ts.map +1 -0
  49. package/dist/commonjs/router.js +4 -3
  50. package/dist/commonjs/router.js.map +1 -0
  51. package/dist/commonjs/validate.d.ts +1 -0
  52. package/dist/commonjs/validate.d.ts.map +1 -0
  53. package/dist/commonjs/validate.js +4 -2
  54. package/dist/commonjs/validate.js.map +1 -0
  55. package/dist/esm/accepts.d.ts +1 -0
  56. package/dist/esm/accepts.d.ts.map +1 -0
  57. package/dist/esm/accepts.js +1 -0
  58. package/dist/esm/accepts.js.map +1 -0
  59. package/dist/esm/application.d.ts +2 -1
  60. package/dist/esm/application.d.ts.map +1 -0
  61. package/dist/esm/application.js +2 -1
  62. package/dist/esm/application.js.map +1 -0
  63. package/dist/esm/context.d.ts +1 -0
  64. package/dist/esm/context.d.ts.map +1 -0
  65. package/dist/esm/context.js +1 -0
  66. package/dist/esm/context.js.map +1 -0
  67. package/dist/esm/cookies.d.ts +1 -0
  68. package/dist/esm/cookies.d.ts.map +1 -0
  69. package/dist/esm/cookies.js +4 -2
  70. package/dist/esm/cookies.js.map +1 -0
  71. package/dist/esm/http-error.d.ts +1 -0
  72. package/dist/esm/http-error.d.ts.map +1 -0
  73. package/dist/esm/http-error.js +1 -0
  74. package/dist/esm/http-error.js.map +1 -0
  75. package/dist/esm/index.d.ts +1 -0
  76. package/dist/esm/index.d.ts.map +1 -0
  77. package/dist/esm/index.js +1 -0
  78. package/dist/esm/index.js.map +1 -0
  79. package/dist/esm/middleware.d.ts +1 -0
  80. package/dist/esm/middleware.d.ts.map +1 -0
  81. package/dist/esm/middleware.js +1 -0
  82. package/dist/esm/middleware.js.map +1 -0
  83. package/dist/esm/normalize-pathname.d.ts +1 -0
  84. package/dist/esm/normalize-pathname.d.ts.map +1 -0
  85. package/dist/esm/normalize-pathname.js +1 -0
  86. package/dist/esm/normalize-pathname.js.map +1 -0
  87. package/dist/esm/package.json +2 -1
  88. package/dist/esm/parse-entries.d.ts +4 -0
  89. package/dist/esm/parse-entries.d.ts.map +1 -0
  90. package/dist/esm/parse-entries.js +17 -0
  91. package/dist/esm/parse-entries.js.map +1 -0
  92. package/dist/esm/req.d.ts +3 -1
  93. package/dist/esm/req.d.ts.map +1 -0
  94. package/dist/esm/req.js +2 -1
  95. package/dist/esm/req.js.map +1 -0
  96. package/dist/esm/response-builder.d.ts +1 -0
  97. package/dist/esm/response-builder.d.ts.map +1 -0
  98. package/dist/esm/response-builder.js +2 -1
  99. package/dist/esm/response-builder.js.map +1 -0
  100. package/dist/esm/router.d.ts +1 -0
  101. package/dist/esm/router.d.ts.map +1 -0
  102. package/dist/esm/router.js +4 -3
  103. package/dist/esm/router.js.map +1 -0
  104. package/dist/esm/validate.d.ts +1 -0
  105. package/dist/esm/validate.d.ts.map +1 -0
  106. package/dist/esm/validate.js +4 -2
  107. package/dist/esm/validate.js.map +1 -0
  108. 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"]}
@@ -13,3 +13,4 @@ export declare class Context {
13
13
  });
14
14
  waitUntil(promise: Promise<any>): void;
15
15
  }
16
+ //# sourceMappingURL=context.d.ts.map
@@ -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"}
@@ -20,3 +20,4 @@ export class Context {
20
20
  this._context.waitUntil(promise);
21
21
  }
22
22
  }
23
+ //# sourceMappingURL=context.js.map
@@ -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"]}
@@ -6,3 +6,4 @@ export declare class Cookies {
6
6
  get(name: string): string | null;
7
7
  set(name: string, val: string, options?: SerializeOptions): void;
8
8
  }
9
+ //# sourceMappingURL=cookies.d.ts.map
@@ -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"}
@@ -1,4 +1,4 @@
1
- import { parse as parseCookie, serialize as serializeCookie } from 'cookie';
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
- this.responseHeaders.append('Set-Cookie', serializeCookie(name, val, options));
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"]}
@@ -6,3 +6,4 @@ export declare class HttpError extends Error {
6
6
  constructor(status: number, body?: string | object | null, headers?: HeadersInit);
7
7
  toResponse(): Response;
8
8
  }
9
+ //# sourceMappingURL=http-error.d.ts.map
@@ -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"}
@@ -36,3 +36,4 @@ export class HttpError extends Error {
36
36
  return new Response(body, { status, statusText, headers });
37
37
  }
38
38
  }
39
+ //# sourceMappingURL=http-error.js.map
@@ -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"]}
@@ -9,3 +9,4 @@ export * from './req.js';
9
9
  export * from './response-builder.js';
10
10
  export * from './router.js';
11
11
  export * from './validate.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -9,3 +9,4 @@ export * from './req.js';
9
9
  export * from './response-builder.js';
10
10
  export * from './router.js';
11
11
  export * from './validate.js';
12
+ //# sourceMappingURL=index.js.map
@@ -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"]}
@@ -1,3 +1,4 @@
1
1
  import { Context } from './context.js';
2
2
  export type Middleware = (context: Context, next: () => Promise<void>) => Promise<void> | void;
3
3
  export declare function composeMiddleware(middleware: Middleware[]): Middleware;
4
+ //# sourceMappingURL=middleware.d.ts.map
@@ -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"}
@@ -26,3 +26,4 @@ export function composeMiddleware(middleware) {
26
26
  }
27
27
  };
28
28
  }
29
+ //# sourceMappingURL=middleware.js.map
@@ -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"]}
@@ -1,3 +1,4 @@
1
1
  import { Middleware } from './middleware.js';
2
2
  export declare function normalizePathname(pathname: string): string;
3
3
  export declare const normalizePathnameMiddleware: Middleware;
4
+ //# sourceMappingURL=normalize-pathname.d.ts.map
@@ -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"}
@@ -15,3 +15,4 @@ export const normalizePathnameMiddleware = async ({ req }, next) => {
15
15
  }
16
16
  await next();
17
17
  };
18
+ //# sourceMappingURL=normalize-pathname.js.map
@@ -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"]}
@@ -1,3 +1,4 @@
1
1
  {
2
- "type": "module"
2
+ "type": "module",
3
+ "sideEffects": false
3
4
  }
@@ -0,0 +1,4 @@
1
+ type ParsedEntries<T> = Record<string, T | T[]>;
2
+ export declare function parseEntries<T>(input: Iterable<readonly [string, T]>): ParsedEntries<T>;
3
+ export {};
4
+ //# sourceMappingURL=parse-entries.d.ts.map
@@ -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 'secure-json-parse';
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"]}
@@ -20,3 +20,4 @@ export declare class ResponseBuilder {
20
20
  set etag(value: string | null);
21
21
  create(): Response;
22
22
  }
23
+ //# sourceMappingURL=response-builder.d.ts.map
@@ -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"]}
@@ -37,3 +37,4 @@ export declare class Router {
37
37
  compose(conditions: RouteCondition[], ...middleware: Middleware[]): Router;
38
38
  resolve(ctx: Context): Route | undefined;
39
39
  }
40
+ //# sourceMappingURL=router.d.ts.map
@@ -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"}
@@ -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 name = keys[i - 1].name;
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"]}
@@ -19,3 +19,4 @@ export interface RequestValidationErrorBody {
19
19
  }
20
20
  export declare const validate: typeof middlewareFactory;
21
21
  export {};
22
+ //# sourceMappingURL=validate.d.ts.map
@@ -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"}
@@ -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 = Object.fromEntries, lookup = Object.create(null)) {
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 = Object.fromEntries(req.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": "5.1.0",
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": "tsc --build",
43
- "clean": "tsc --build --clean",
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.1",
49
- "@types/statuses": "^2.0.5",
50
- "cookie": "^1.0.2",
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.0.0",
54
+ "negotiator": "^1.1.0",
53
55
  "path-to-regexp": "7.1.0",
54
- "secure-json-parse": "^3.0.2",
55
- "statuses": "^2.0.1"
56
+ "statuses": "^2.0.2"
56
57
  },
57
58
  "devDependencies": {
58
- "@types/chai": "^5.0.1",
59
+ "@types/chai": "^5.2.3",
59
60
  "@types/mocha": "^10.0.10",
60
- "chai": "^5.1.2",
61
- "esbuild": "^0.24.2",
61
+ "chai": "^6.3.0",
62
+ "esbuild": "^0.28.2",
62
63
  "jsonpointer": "^5.0.1",
63
- "mocha": "^11.1.0",
64
- "typescript": "^5.7.3",
65
- "wrangler": "^3.107.2"
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"