routup 4.1.0 → 5.0.0-beta.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 (169) hide show
  1. package/README.md +87 -134
  2. package/dist/bun.cjs +66 -0
  3. package/dist/bun.cjs.map +1 -0
  4. package/dist/bun.d.cts +8 -0
  5. package/dist/bun.d.mts +8 -0
  6. package/dist/bun.mjs +13 -0
  7. package/dist/bun.mjs.map +1 -0
  8. package/dist/cloudflare.cjs +66 -0
  9. package/dist/cloudflare.cjs.map +1 -0
  10. package/dist/cloudflare.d.cts +8 -0
  11. package/dist/cloudflare.d.mts +8 -0
  12. package/dist/cloudflare.mjs +13 -0
  13. package/dist/cloudflare.mjs.map +1 -0
  14. package/dist/deno.cjs +66 -0
  15. package/dist/deno.cjs.map +1 -0
  16. package/dist/deno.d.cts +8 -0
  17. package/dist/deno.d.mts +8 -0
  18. package/dist/deno.mjs +13 -0
  19. package/dist/deno.mjs.map +1 -0
  20. package/dist/generic.cjs +66 -0
  21. package/dist/generic.cjs.map +1 -0
  22. package/dist/generic.d.cts +8 -0
  23. package/dist/generic.d.mts +8 -0
  24. package/dist/generic.mjs +13 -0
  25. package/dist/generic.mjs.map +1 -0
  26. package/dist/index-9K5FcIb3.d.cts +786 -0
  27. package/dist/index-B6F5CzQy.d.mts +786 -0
  28. package/dist/node.cjs +70 -0
  29. package/dist/node.cjs.map +1 -0
  30. package/dist/node.d.cts +11 -0
  31. package/dist/node.d.mts +11 -0
  32. package/dist/node.mjs +16 -0
  33. package/dist/node.mjs.map +1 -0
  34. package/dist/service-worker.cjs +66 -0
  35. package/dist/service-worker.cjs.map +1 -0
  36. package/dist/service-worker.d.cts +10 -0
  37. package/dist/service-worker.d.mts +10 -0
  38. package/dist/service-worker.mjs +13 -0
  39. package/dist/service-worker.mjs.map +1 -0
  40. package/dist/src-C789deGE.mjs +1599 -0
  41. package/dist/src-C789deGE.mjs.map +1 -0
  42. package/dist/src-Ca2_b8P0.cjs +1939 -0
  43. package/dist/src-Ca2_b8P0.cjs.map +1 -0
  44. package/package.json +75 -34
  45. package/dist/adapters/index.d.ts +0 -3
  46. package/dist/adapters/node/index.d.ts +0 -1
  47. package/dist/adapters/node/module.d.ts +0 -6
  48. package/dist/adapters/raw/header.d.ts +0 -3
  49. package/dist/adapters/raw/index.d.ts +0 -3
  50. package/dist/adapters/raw/module.d.ts +0 -4
  51. package/dist/adapters/raw/type.d.ts +0 -18
  52. package/dist/adapters/web/index.d.ts +0 -2
  53. package/dist/adapters/web/module.d.ts +0 -4
  54. package/dist/adapters/web/type.d.ts +0 -3
  55. package/dist/constants.d.ts +0 -42
  56. package/dist/dispatcher/event/dispatch.d.ts +0 -4
  57. package/dist/dispatcher/event/error.d.ts +0 -5
  58. package/dist/dispatcher/event/index.d.ts +0 -5
  59. package/dist/dispatcher/event/is.d.ts +0 -3
  60. package/dist/dispatcher/event/module.d.ts +0 -56
  61. package/dist/dispatcher/event/types.d.ts +0 -9
  62. package/dist/dispatcher/index.d.ts +0 -2
  63. package/dist/dispatcher/type.d.ts +0 -4
  64. package/dist/error/create.d.ts +0 -11
  65. package/dist/error/index.d.ts +0 -3
  66. package/dist/error/is.d.ts +0 -2
  67. package/dist/error/module.d.ts +0 -3
  68. package/dist/handler/constants.d.ts +0 -5
  69. package/dist/handler/core/define.d.ts +0 -4
  70. package/dist/handler/core/index.d.ts +0 -2
  71. package/dist/handler/core/types.d.ts +0 -10
  72. package/dist/handler/error/define.d.ts +0 -4
  73. package/dist/handler/error/index.d.ts +0 -2
  74. package/dist/handler/error/types.d.ts +0 -11
  75. package/dist/handler/index.d.ts +0 -7
  76. package/dist/handler/is.d.ts +0 -4
  77. package/dist/handler/module.d.ts +0 -23
  78. package/dist/handler/types-base.d.ts +0 -10
  79. package/dist/handler/types.d.ts +0 -4
  80. package/dist/hook/constants.d.ts +0 -8
  81. package/dist/hook/index.d.ts +0 -3
  82. package/dist/hook/module.d.ts +0 -19
  83. package/dist/hook/types.d.ts +0 -5
  84. package/dist/index.cjs +0 -2314
  85. package/dist/index.cjs.map +0 -1
  86. package/dist/index.d.ts +0 -11
  87. package/dist/index.mjs +0 -2235
  88. package/dist/index.mjs.map +0 -1
  89. package/dist/path/index.d.ts +0 -3
  90. package/dist/path/matcher.d.ts +0 -11
  91. package/dist/path/type.d.ts +0 -7
  92. package/dist/path/utils.d.ts +0 -2
  93. package/dist/plugin/index.d.ts +0 -2
  94. package/dist/plugin/is.d.ts +0 -2
  95. package/dist/plugin/types.d.ts +0 -23
  96. package/dist/request/helpers/cache.d.ts +0 -2
  97. package/dist/request/helpers/env.d.ts +0 -6
  98. package/dist/request/helpers/header-accept-charset.d.ts +0 -3
  99. package/dist/request/helpers/header-accept-encoding.d.ts +0 -3
  100. package/dist/request/helpers/header-accept-language.d.ts +0 -3
  101. package/dist/request/helpers/header-accept.d.ts +0 -3
  102. package/dist/request/helpers/header-content-type.d.ts +0 -2
  103. package/dist/request/helpers/header.d.ts +0 -4
  104. package/dist/request/helpers/hostname.d.ts +0 -7
  105. package/dist/request/helpers/http2.d.ts +0 -2
  106. package/dist/request/helpers/index.d.ts +0 -17
  107. package/dist/request/helpers/ip.d.ts +0 -7
  108. package/dist/request/helpers/mount-path.d.ts +0 -3
  109. package/dist/request/helpers/negotiator.d.ts +0 -3
  110. package/dist/request/helpers/params.d.ts +0 -5
  111. package/dist/request/helpers/path.d.ts +0 -2
  112. package/dist/request/helpers/protocol.d.ts +0 -8
  113. package/dist/request/helpers/router.d.ts +0 -3
  114. package/dist/request/index.d.ts +0 -3
  115. package/dist/request/module.d.ts +0 -3
  116. package/dist/request/types.d.ts +0 -12
  117. package/dist/response/helpers/cache.d.ts +0 -7
  118. package/dist/response/helpers/event-stream/factory.d.ts +0 -3
  119. package/dist/response/helpers/event-stream/index.d.ts +0 -2
  120. package/dist/response/helpers/event-stream/module.d.ts +0 -17
  121. package/dist/response/helpers/event-stream/types.d.ts +0 -24
  122. package/dist/response/helpers/event-stream/utils.d.ts +0 -2
  123. package/dist/response/helpers/gone.d.ts +0 -3
  124. package/dist/response/helpers/header-attachment.d.ts +0 -2
  125. package/dist/response/helpers/header-content-type.d.ts +0 -2
  126. package/dist/response/helpers/header.d.ts +0 -4
  127. package/dist/response/helpers/index.d.ts +0 -16
  128. package/dist/response/helpers/send-accepted.d.ts +0 -2
  129. package/dist/response/helpers/send-created.d.ts +0 -2
  130. package/dist/response/helpers/send-file.d.ts +0 -17
  131. package/dist/response/helpers/send-format.d.ts +0 -7
  132. package/dist/response/helpers/send-redirect.d.ts +0 -2
  133. package/dist/response/helpers/send-stream.d.ts +0 -3
  134. package/dist/response/helpers/send-web-blob.d.ts +0 -3
  135. package/dist/response/helpers/send-web-response.d.ts +0 -3
  136. package/dist/response/helpers/send.d.ts +0 -2
  137. package/dist/response/helpers/utils.d.ts +0 -2
  138. package/dist/response/index.d.ts +0 -3
  139. package/dist/response/module.d.ts +0 -3
  140. package/dist/response/types.d.ts +0 -3
  141. package/dist/router/constants.d.ts +0 -9
  142. package/dist/router/index.d.ts +0 -1
  143. package/dist/router/module.d.ts +0 -89
  144. package/dist/router/types.d.ts +0 -7
  145. package/dist/router/utils.d.ts +0 -3
  146. package/dist/router-options/index.d.ts +0 -2
  147. package/dist/router-options/module.d.ts +0 -4
  148. package/dist/router-options/transform.d.ts +0 -2
  149. package/dist/router-options/type.d.ts +0 -41
  150. package/dist/types.d.ts +0 -9
  151. package/dist/utils/cookie.d.ts +0 -1
  152. package/dist/utils/etag/index.d.ts +0 -3
  153. package/dist/utils/etag/module.d.ts +0 -11
  154. package/dist/utils/etag/type.d.ts +0 -15
  155. package/dist/utils/etag/utils.d.ts +0 -2
  156. package/dist/utils/index.d.ts +0 -13
  157. package/dist/utils/is-instance.d.ts +0 -1
  158. package/dist/utils/method.d.ts +0 -3
  159. package/dist/utils/mime.d.ts +0 -2
  160. package/dist/utils/next.d.ts +0 -2
  161. package/dist/utils/object.d.ts +0 -3
  162. package/dist/utils/path.d.ts +0 -5
  163. package/dist/utils/promise.d.ts +0 -1
  164. package/dist/utils/stream.d.ts +0 -6
  165. package/dist/utils/trust-proxy/index.d.ts +0 -2
  166. package/dist/utils/trust-proxy/module.d.ts +0 -2
  167. package/dist/utils/trust-proxy/type.d.ts +0 -2
  168. package/dist/utils/url.d.ts +0 -7
  169. package/dist/utils/web.d.ts +0 -3
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/request/helpers/cache.ts","../src/utils/cookie.ts","../src/utils/object.ts","../src/utils/etag/module.ts","../src/utils/etag/utils.ts","../src/utils/trust-proxy/module.ts","../src/utils/is-instance.ts","../src/utils/mime.ts","../src/utils/method.ts","../src/utils/next.ts","../src/utils/path.ts","../src/utils/promise.ts","../src/utils/stream.ts","../src/utils/url.ts","../src/utils/web.ts","../src/request/helpers/env.ts","../src/request/helpers/header.ts","../src/request/helpers/negotiator.ts","../src/request/helpers/header-accept.ts","../src/request/helpers/header-accept-charset.ts","../src/request/helpers/header-accept-encoding.ts","../src/request/helpers/header-accept-language.ts","../src/request/helpers/header-content-type.ts","../src/router-options/module.ts","../src/request/helpers/router.ts","../src/request/helpers/hostname.ts","../src/request/helpers/http2.ts","../src/request/helpers/ip.ts","../src/request/helpers/mount-path.ts","../src/request/helpers/params.ts","../src/request/helpers/path.ts","../src/request/helpers/protocol.ts","../src/request/module.ts","../src/error/module.ts","../src/error/is.ts","../src/error/create.ts","../src/response/helpers/cache.ts","../src/response/helpers/gone.ts","../src/response/helpers/event-stream/utils.ts","../src/response/helpers/event-stream/module.ts","../src/response/helpers/event-stream/factory.ts","../src/response/helpers/header.ts","../src/response/helpers/utils.ts","../src/response/helpers/header-attachment.ts","../src/response/helpers/header-content-type.ts","../src/response/helpers/send-stream.ts","../src/response/helpers/send-web-blob.ts","../src/response/helpers/send-web-response.ts","../src/response/helpers/send.ts","../src/response/helpers/send-accepted.ts","../src/response/helpers/send-created.ts","../src/response/helpers/send-file.ts","../src/response/helpers/send-format.ts","../src/response/helpers/send-redirect.ts","../src/response/module.ts","../src/dispatcher/event/dispatch.ts","../src/dispatcher/event/is.ts","../src/dispatcher/event/module.ts","../src/dispatcher/event/error.ts","../src/adapters/node/module.ts","../src/adapters/raw/header.ts","../src/adapters/raw/module.ts","../src/adapters/web/module.ts","../src/handler/constants.ts","../src/hook/constants.ts","../src/hook/module.ts","../src/path/matcher.ts","../src/path/utils.ts","../src/handler/module.ts","../src/handler/core/define.ts","../src/handler/error/define.ts","../src/handler/is.ts","../src/plugin/is.ts","../src/router-options/transform.ts","../src/router/constants.ts","../src/router/utils.ts","../src/router/module.ts"],"sourcesContent":["export enum MethodName {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n HEAD = 'HEAD',\n}\n\nexport enum HeaderName {\n ACCEPT = 'accept',\n ACCEPT_CHARSET = 'accept-charset',\n ACCEPT_ENCODING = 'accept-encoding',\n ACCEPT_LANGUAGE = 'accept-language',\n ACCEPT_RANGES = 'accept-ranges',\n ALLOW = 'allow',\n CACHE_CONTROL = 'cache-control',\n CONTENT_DISPOSITION = 'content-disposition',\n CONTENT_ENCODING = 'content-encoding',\n CONTENT_LENGTH = 'content-length',\n CONTENT_RANGE = 'content-range',\n CONTENT_TYPE = 'content-type',\n CONNECTION = 'connection',\n COOKIE = 'cookie',\n ETag = 'etag',\n HOST = 'host',\n IF_MODIFIED_SINCE = 'if-modified-since',\n IF_NONE_MATCH = 'if-none-match',\n LAST_MODIFIED = 'last-modified',\n LOCATION = 'location',\n RANGE = 'range',\n RATE_LIMIT_LIMIT = 'ratelimit-limit',\n RATE_LIMIT_REMAINING = 'ratelimit-remaining',\n RATE_LIMIT_RESET = 'ratelimit-reset',\n RETRY_AFTER = 'retry-after',\n SET_COOKIE = 'set-cookie',\n TRANSFER_ENCODING = 'transfer-encoding',\n X_ACCEL_BUFFERING = 'x-accel-buffering',\n X_FORWARDED_HOST = 'x-forwarded-host',\n X_FORWARDED_FOR = 'x-forwarded-for',\n X_FORWARDED_PROTO = 'x-forwarded-proto',\n}\n","import { HeaderName } from '../../constants';\n\nimport type { Request } from '../types';\n\nexport function isRequestCacheable(req: Request, modifiedTime: string | Date) : boolean {\n const modifiedSince = req.headers[HeaderName.IF_MODIFIED_SINCE];\n if (!modifiedSince) {\n return false;\n }\n\n modifiedTime = typeof modifiedTime === 'string' ?\n new Date(modifiedTime) :\n modifiedTime;\n\n return new Date(modifiedSince) >= modifiedTime;\n}\n","/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n\n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(input?: string | string[]) : string[] {\n if (Array.isArray(input)) {\n return input.flatMap((el) => splitCookiesString(el));\n }\n\n if (typeof input !== 'string') {\n return [];\n }\n\n const cookiesStrings = [];\n let pos = 0;\n let start;\n let ch;\n let lastComma;\n let nextStart;\n let cookiesSeparatorFound;\n\n const skipWhitespace = () => {\n while (pos < input.length && /\\s/.test(input.charAt(pos))) {\n pos += 1;\n }\n return pos < input.length;\n };\n\n const notSpecialChar = () => {\n ch = input.charAt(pos);\n\n return ch !== '=' && ch !== ';' && ch !== ',';\n };\n\n while (pos < input.length) {\n start = pos;\n cookiesSeparatorFound = false;\n\n while (skipWhitespace()) {\n ch = input.charAt(pos);\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos;\n pos += 1;\n\n skipWhitespace();\n nextStart = pos;\n\n while (pos < input.length && notSpecialChar()) {\n pos += 1;\n }\n\n // currently special character\n if (pos < input.length && input.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true;\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart;\n cookiesStrings.push(input.substring(start, lastComma));\n start = pos;\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n\n if (!cookiesSeparatorFound || pos >= input.length) {\n cookiesStrings.push(input.substring(start, input.length));\n }\n }\n\n return cookiesStrings;\n}\n","export function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function setProperty(\n record: Record<PropertyKey, any>,\n property: PropertyKey,\n value: any,\n): void {\n (record as any)[property] = value;\n}\n\nexport function getProperty<T = any>(\n req: Record<PropertyKey, any>,\n property: PropertyKey,\n): T {\n return (req as any)[property];\n}\n","import { Buffer } from 'buffer';\nimport { subtle } from 'uncrypto';\nimport { type Stats } from 'node:fs';\nimport { isObject } from '../object';\nimport type { EtagOptions } from './type';\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\nfunction isStatsObject(obj: unknown) : obj is Stats {\n // quack quack\n return isObject(obj) &&\n 'ctime' in obj && Object.prototype.toString.call(obj.ctime) === '[object Date]' &&\n 'mtime' in obj && Object.prototype.toString.call(obj.mtime) === '[object Date]' &&\n 'ino' in obj && typeof obj.ino === 'number' &&\n 'size' in obj && typeof obj.size === 'number';\n}\n\nasync function sha1(str: string) : Promise<string> {\n const enc = new TextEncoder();\n const hash = await subtle.digest('SHA-1', enc.encode(str));\n\n return btoa(String.fromCharCode(...new Uint8Array(hash)));\n}\n\n/**\n * Generate an ETag.\n */\nexport async function generateETag(input: string | Buffer | Stats) : Promise<string> {\n if (isStatsObject(input)) {\n const mtime = input.mtime.getTime().toString(16);\n const size = input.size.toString(16);\n\n return `\"${size}-${mtime}\"`;\n }\n\n if (input.length === 0) {\n // fast-path empty\n return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"';\n }\n\n const entity = Buffer.isBuffer(input) ?\n input.toString('utf-8') :\n input;\n\n // compute hash of entity\n const hash = await sha1(entity);\n\n return `\"${entity.length.toString(16)}-${hash.substring(0, 27)}\"`;\n}\n\n/**\n * Create a simple ETag.\n */\nexport async function createEtag(\n input: string | Buffer | Stats,\n options?: EtagOptions,\n) : Promise<string> {\n options = options || {};\n\n const weak = typeof options.weak === 'boolean' ?\n options.weak :\n isStatsObject(input);\n\n // generate entity tag\n const tag = await generateETag(input);\n\n return weak ?\n `W/${tag}` :\n tag;\n}\n","import { Buffer } from 'buffer';\nimport { merge } from 'smob';\nimport { isObject } from '../object';\nimport { createEtag } from './module';\nimport type { EtagFn, EtagOptions } from './type';\n\nexport function buildEtagFn(input?: boolean | EtagOptions | EtagFn) : EtagFn {\n if (typeof input === 'function') {\n return input;\n }\n\n input = input ?? true;\n\n if (input === false) {\n return () => Promise.resolve(undefined);\n }\n\n let options : EtagOptions = {\n weak: true,\n };\n\n if (isObject(input)) {\n options = merge(input, options);\n }\n\n return async (body: any, encoding?: BufferEncoding, size?: number) => {\n const buff = Buffer.isBuffer(body) ?\n body :\n Buffer.from(body, encoding);\n\n if (typeof options.threshold !== 'undefined') {\n size = size ?? Buffer.byteLength(buff);\n\n if (size <= options.threshold) {\n return undefined;\n }\n }\n\n return createEtag(buff, options);\n };\n}\n","import { compile } from 'proxy-addr';\nimport type { TrustProxyFn } from './type';\n\nexport function buildTrustProxyFn(\n input?: boolean | number | string | string[] | TrustProxyFn,\n) : TrustProxyFn {\n if (typeof input === 'function') {\n return input;\n }\n\n if (input === true) {\n return () => true;\n }\n\n if (typeof input === 'number') {\n return (_address, hop) => hop < (input as number);\n }\n\n if (typeof input === 'string') {\n input = input.split(',')\n .map((value) => value.trim());\n }\n\n return compile(input || []);\n}\n","import { isObject } from './object';\n\nexport function isInstance(\n input: unknown,\n sym: symbol,\n) {\n if (!isObject(input)) {\n return false;\n }\n\n return (input as { '@instanceof': symbol })['@instanceof'] === sym;\n}\n","import { get, getType } from 'mime-explorer';\n\nexport function getMimeType(type: string) : string | undefined {\n if (type.indexOf('/') !== -1) {\n return type;\n }\n\n return getType(type);\n}\n\nexport function getCharsetForMimeType(type: string) : string | undefined {\n if ((/^text\\/|^application\\/(javascript|json)/).test(type)) {\n return 'utf-8';\n }\n\n const meta = get(type);\n if (\n meta &&\n meta.charset\n ) {\n return meta.charset.toLowerCase();\n }\n\n return undefined;\n}\n","import type { MethodName } from '../constants';\n\nexport function toMethodName(input: string | undefined) : MethodName | undefined;\nexport function toMethodName(input: string | undefined, alt: MethodName) : MethodName;\nexport function toMethodName(\n input?: string,\n alt?: MethodName,\n) : MethodName | undefined {\n if (input) {\n return input.toUpperCase() as MethodName;\n }\n\n return alt;\n}\n","import type { Next } from '../types';\n\nexport const nextPlaceholder: Next = (_err?: Error) => {};\n","/**\n * Based on https://github.com/unjs/pathe v1.1.1 (055f50a6f1131f4e5c56cf259dd8816168fba329)\n */\n\nfunction normalizeWindowsPath(input = '') {\n if (!input || !input.includes('\\\\')) {\n return input;\n }\n\n return input.replace(/\\\\/g, '/');\n}\n\nconst EXTNAME_RE = /.(\\.[^./]+)$/;\nexport function extname(input: string) {\n const match = EXTNAME_RE.exec(normalizeWindowsPath(input));\n return (match && match[1]) || '';\n}\n\nexport function basename(input: string, extension? :string) {\n const lastSegment = normalizeWindowsPath(input)\n .split('/')\n .pop();\n\n if (!lastSegment) {\n return input;\n }\n\n return extension && lastSegment.endsWith(extension) ?\n lastSegment.slice(0, -extension.length) :\n lastSegment;\n}\n","import { isObject } from './object';\n\nexport function isPromise(p: unknown) : p is Promise<unknown> {\n return isObject(p) &&\n (\n p instanceof Promise ||\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof p.then === 'function'\n );\n}\n","import type { ReadableStream as WebReadableStream } from 'stream/web';\nimport type { Readable as NodeReadable } from 'node:stream';\nimport type { Readable } from 'readable-stream';\nimport { isObject } from './object';\n\nexport function isNodeStream(input: unknown): input is NodeReadable | Readable {\n return isObject(input) &&\n typeof input.pipe === 'function' &&\n typeof input.read === 'function';\n}\n\nexport function isWebStream(input: unknown): input is ReadableStream | WebReadableStream {\n return isObject(input) && typeof input.pipeTo === 'function';\n}\n\nexport function isStream(data: any): data is NodeReadable | Readable | ReadableStream | WebReadableStream {\n return isNodeStream(data) || isWebStream(data);\n}\n","const TRAILING_SLASH_RE = /\\/$|\\/\\?/;\n\nexport function hasTrailingSlash(input = '', queryParams = false): boolean {\n if (!queryParams) {\n return input.endsWith('/');\n }\n\n return TRAILING_SLASH_RE.test(input);\n}\n\nexport function withoutTrailingSlash(input = '', queryParams = false): string {\n if (!queryParams) {\n return (hasTrailingSlash(input) ? input.slice(0, -1) : input) || '/';\n }\n\n if (!hasTrailingSlash(input, true)) {\n return input || '/';\n }\n\n const [s0, ...s] = input.split('?');\n\n return (s0.slice(0, -1) || '/') + (s.length ? `?${s.join('?')}` : '');\n}\n\nexport function withTrailingSlash(input = '', queryParams = false): string {\n if (!queryParams) {\n return input.endsWith('/') ? input : (`${input}/`);\n }\n\n if (hasTrailingSlash(input, true)) {\n return input || '/';\n }\n\n const [s0, ...s] = input.split('?');\n return `${s0}/${s.length ? `?${s.join('?')}` : ''}`;\n}\n\nexport function hasLeadingSlash(input = ''): boolean {\n return input.startsWith('/');\n}\n\nexport function withoutLeadingSlash(input = ''): string {\n return (hasLeadingSlash(input) ? input.substring(1) : input) || '/';\n}\n\nexport function withLeadingSlash(input = ''): string {\n return hasLeadingSlash(input) ? input : `/${input}`;\n}\n\nexport function cleanDoubleSlashes(input = ''): string {\n if (input.indexOf('://') !== -1) {\n return input.split('://')\n .map((str) => cleanDoubleSlashes(str))\n .join('://');\n }\n\n return input.replace(/\\/+/g, '/');\n}\n","import type { WebBlob, WebResponse } from '../types';\n\nexport function isWebBlob(input: unknown) : input is WebBlob {\n return typeof Blob !== 'undefined' && input instanceof Blob;\n}\n\nexport function isWebResponse(input: unknown): input is WebResponse {\n return typeof Response !== 'undefined' && input instanceof Response;\n}\n","import { hasOwnProperty, merge } from 'smob';\nimport { getProperty, setProperty } from '../../utils';\n\nimport type { Request } from '../types';\n\nconst symbol = Symbol.for('ReqEnv');\n\nexport function setRequestEnv(req: Request, key: string | symbol, value: unknown) : void;\nexport function setRequestEnv(req: Request, record: Record<string | symbol, any>, append?: boolean) : void;\nexport function setRequestEnv(req: Request, key: Record<string | symbol, any> | string | symbol, value?: boolean | unknown) : void {\n const propertyValue = getProperty(req, symbol);\n\n if (propertyValue) {\n if (typeof key === 'object') {\n if (value) {\n setProperty(req, symbol, merge(propertyValue, key));\n } else {\n setProperty(req, symbol, key);\n }\n } else {\n propertyValue[key] = value;\n setProperty(req, symbol, propertyValue);\n }\n\n return;\n }\n\n if (typeof key === 'object') {\n setProperty(req, symbol, key);\n return;\n }\n\n setProperty(req, symbol, {\n [key]: value,\n });\n}\n\nexport function useRequestEnv(req: Request) : Record<string, any>;\nexport function useRequestEnv(req: Request, key: PropertyKey) : unknown | undefined;\nexport function useRequestEnv(req: Request, key?: PropertyKey) {\n const propertyValue = getProperty(req, symbol);\n if (propertyValue) {\n if (typeof key !== 'undefined') {\n return propertyValue[key];\n }\n\n return propertyValue;\n }\n\n if (typeof key !== 'undefined') {\n return undefined;\n }\n\n return {};\n}\n\nexport function unsetRequestEnv(req: Request, key: PropertyKey) {\n const propertyValue = getProperty(req, symbol);\n if (hasOwnProperty(propertyValue, key)) {\n delete propertyValue[key];\n }\n}\n","import type { IncomingHttpHeaders } from 'node:http';\n\nimport type { Request } from '../types';\n\nexport function getRequestHeader<K extends keyof IncomingHttpHeaders>(\n req: Request,\n name: K,\n) : IncomingHttpHeaders[K] {\n return req.headers[name];\n}\n\nexport function setRequestHeader<K extends keyof IncomingHttpHeaders>(\n req: Request,\n name: K,\n value: IncomingHttpHeaders[K],\n) {\n req.headers[name] = value;\n}\n","import Negotiator from 'negotiator';\nimport { getProperty, setProperty } from '../../utils';\n\nimport type { Request } from '../types';\n\nconst symbol = Symbol.for('ReqNegotiator');\n\nexport function useRequestNegotiator(req: Request) : Negotiator {\n let value = getProperty(req, symbol);\n if (value) {\n return value;\n }\n\n value = new Negotiator(req);\n setProperty(req, symbol, value);\n return value;\n}\n","import { HeaderName } from '../../constants';\nimport { getMimeType } from '../../utils';\nimport type { Request } from '../types';\nimport { getRequestHeader } from './header';\nimport { useRequestNegotiator } from './negotiator';\n\nexport function getRequestAcceptableContentTypes(req: Request) : string[] {\n const negotiator = useRequestNegotiator(req);\n\n return negotiator.mediaTypes();\n}\n\nexport function getRequestAcceptableContentType(req: Request, input?: string | string[]) : string | undefined {\n input = input || [];\n\n const items = Array.isArray(input) ? input : [input];\n\n if (items.length === 0) {\n return getRequestAcceptableContentTypes(req).shift();\n }\n\n const header = getRequestHeader(req, HeaderName.ACCEPT);\n if (!header) {\n return items[0];\n }\n\n let polluted = false;\n const mimeTypes : string[] = [];\n for (let i = 0; i < items.length; i++) {\n const mimeType = getMimeType(items[i]);\n if (mimeType) {\n mimeTypes.push(mimeType);\n } else {\n polluted = true;\n }\n }\n\n const negotiator = useRequestNegotiator(req);\n const matches = negotiator.mediaTypes(mimeTypes);\n if (matches.length > 0) {\n if (polluted) {\n return items[0];\n }\n\n return items[mimeTypes.indexOf(matches[0])];\n }\n\n return undefined;\n}\n","import type { Request } from '../types';\nimport { useRequestNegotiator } from './negotiator';\n\nexport function getRequestAcceptableCharsets(req: Request) : string[] {\n const negotiator = useRequestNegotiator(req);\n\n return negotiator.charsets();\n}\n\nexport function getRequestAcceptableCharset(req: Request, input: string | string[]) : string | undefined {\n input = input || [];\n\n const items = Array.isArray(input) ? input : [input];\n\n if (items.length === 0) {\n return getRequestAcceptableCharsets(req).shift();\n }\n\n const negotiator = useRequestNegotiator(req);\n return negotiator.charsets(items).shift() || undefined;\n}\n","import type { IncomingMessage } from 'node:http';\nimport { useRequestNegotiator } from './negotiator';\n\nexport function getRequestAcceptableEncodings(req: IncomingMessage) : string[] {\n const negotiator = useRequestNegotiator(req);\n return negotiator.encodings();\n}\n\nexport function getRequestAcceptableEncoding(req: IncomingMessage, input: string | string[]) : string | undefined {\n input = input || [];\n\n const items = Array.isArray(input) ? input : [input];\n\n if (items.length === 0) {\n return getRequestAcceptableEncodings(req).shift();\n }\n\n const negotiator = useRequestNegotiator(req);\n return negotiator.encodings(items).shift() || undefined;\n}\n","import type { Request } from '../types';\nimport { useRequestNegotiator } from './negotiator';\n\nexport function getRequestAcceptableLanguages(req: Request) : string[] {\n const negotiator = useRequestNegotiator(req);\n return negotiator.languages();\n}\n\nexport function getRequestAcceptableLanguage(req: Request, input?: string | string[]) : string | undefined {\n input = input || [];\n\n const items = Array.isArray(input) ? input : [input];\n\n if (items.length === 0) {\n return getRequestAcceptableLanguages(req).shift();\n }\n\n const negotiator = useRequestNegotiator(req);\n return negotiator.languages(items).shift() || undefined;\n}\n","import { HeaderName } from '../../constants';\nimport { getMimeType } from '../../utils';\nimport type { Request } from '../types';\nimport { getRequestHeader } from './header';\n\nexport function matchRequestContentType(req: Request, contentType: string) : boolean {\n const header = getRequestHeader(req, HeaderName.CONTENT_TYPE);\n if (!header) {\n return true;\n }\n\n /* istanbul ignore next */\n if (Array.isArray(header)) {\n if (header.length === 0) {\n return true;\n }\n\n return header[0] === getMimeType(contentType);\n }\n\n return header.split('; ').shift() === getMimeType(contentType);\n}\n","import { hasOwnProperty } from 'smob';\nimport { buildEtagFn } from '../utils';\nimport type { RouterOptions } from './type';\n\nconst defaults : RouterOptions = {\n trustProxy: () => false,\n subdomainOffset: 2,\n etag: buildEtagFn(),\n proxyIpMax: 0,\n};\n\nconst instances : Record<number, Partial<RouterOptions>> = {};\n\nexport function setRouterOptions(id: number, input: Partial<RouterOptions>) {\n instances[id] = input;\n}\n\nexport function unsetRouterOptions(id: number) {\n delete instances[id];\n}\n\nexport function findRouterOption<\nK extends keyof RouterOptions,\n>(key: K, path?: number[]) : RouterOptions[K] {\n if (!path || path.length === 0) {\n return defaults[key];\n }\n\n if (path.length > 0) {\n for (let i = path.length; i >= 0; i--) {\n if (\n hasOwnProperty(instances, path[i]) &&\n typeof instances[path[i]][key] !== 'undefined'\n ) {\n return instances[path[i]][key] as RouterOptions[K];\n }\n }\n }\n\n return defaults[key];\n}\n","import { getProperty, setProperty } from '../../utils';\nimport type { Request } from '../types';\n\nconst routerSymbol = Symbol.for('ReqRouterID');\nexport function setRequestRouterPath(req: Request, path: number[]) {\n setProperty(req, routerSymbol, path);\n}\n\nexport function useRequestRouterPath(req: Request) : number[] | undefined {\n return getProperty(req, routerSymbol);\n}\n","import { HeaderName } from '../../constants';\nimport { findRouterOption } from '../../router-options';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\nimport type { Request } from '../types';\nimport { useRequestRouterPath } from './router';\n\ntype RequestHostNameOptions = {\n trustProxy?: TrustProxyInput\n};\n\nexport function getRequestHostName(req: Request, options?: RequestHostNameOptions) : string | undefined {\n options = options || {};\n\n let trustProxy : TrustProxyFn;\n if (typeof options.trustProxy !== 'undefined') {\n trustProxy = buildTrustProxyFn(options.trustProxy);\n } else {\n trustProxy = findRouterOption(\n 'trustProxy',\n useRequestRouterPath(req),\n );\n }\n\n let hostname = req.headers[HeaderName.X_FORWARDED_HOST];\n if (!hostname || !req.socket.remoteAddress || !trustProxy(req.socket.remoteAddress, 0)) {\n hostname = req.headers[HeaderName.HOST];\n } else {\n hostname = Array.isArray(hostname) ? hostname.pop() : hostname;\n if (hostname && hostname.indexOf(',') !== -1) {\n hostname = hostname.substring(0, hostname.indexOf(',')).trimEnd();\n }\n }\n\n if (!hostname) {\n return undefined;\n }\n\n // IPv6 literal support\n const offset = hostname[0] === '[' ?\n hostname.indexOf(']') + 1 :\n 0;\n const index = hostname.indexOf(':', offset);\n\n return index !== -1 ?\n hostname.substring(0, index) :\n hostname;\n}\n","import type { Request } from '../types';\nimport { getRequestHeader } from './header';\n\nexport function isRequestHTTP2(req: Request) {\n return (\n typeof getRequestHeader(req, ':path') !== 'undefined' &&\n typeof getRequestHeader(req, ':method') !== 'undefined'\n );\n}\n","import { all } from 'proxy-addr';\nimport { findRouterOption } from '../../router-options';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\nimport type { Request } from '../types';\nimport { useRequestRouterPath } from './router';\n\ntype RequestIpOptions = {\n trustProxy?: TrustProxyInput\n};\n\nexport function getRequestIP(req: Request, options?: RequestIpOptions) : string {\n options = options || {};\n\n let trustProxy : TrustProxyFn;\n if (typeof options.trustProxy !== 'undefined') {\n trustProxy = buildTrustProxyFn(options.trustProxy);\n } else {\n trustProxy = findRouterOption(\n 'trustProxy',\n useRequestRouterPath(req),\n );\n }\n\n const addrs = all(req, trustProxy);\n return addrs[addrs.length - 1];\n}\n","import { getProperty, setProperty } from '../../utils';\nimport type { Request } from '../types';\n\nconst symbol = Symbol.for('ReqMountPath');\n\nexport function useRequestMountPath(req: Request) : string {\n return getProperty<string>(req, symbol) || '/';\n}\n\nexport function setRequestMountPath(req: Request, basePath: string) {\n setProperty(req, symbol, basePath);\n}\n","import { getProperty, setProperty } from '../../utils';\nimport type { Request } from '../types';\n\nconst symbol = Symbol.for('ReqParams');\n\nexport function useRequestParams(req: Request) : Record<string, any> {\n return getProperty(req, symbol) ||\n getProperty(req, 'params') ||\n {};\n}\n\nexport function useRequestParam(req: Request, key: string) : any {\n return useRequestParams(req)[key];\n}\n\nexport function setRequestParams(\n req: Request,\n data: Record<string, any>,\n) {\n setProperty(req, symbol, data);\n}\n\nexport function setRequestParam(\n req: Request,\n key: string,\n value: any,\n) {\n const params = useRequestParams(req);\n params[key] = value;\n\n setRequestParams(req, params);\n}\n","import { getProperty, setProperty } from '../../utils';\nimport type { Request } from '../types';\n\nconst PathSymbol = Symbol.for('ReqPath');\n\nexport function useRequestPath(req: Request) : string {\n const path = getProperty(req, 'path') ||\n getProperty(req, PathSymbol);\n\n if (path) {\n return path;\n }\n\n if (typeof req.url === 'undefined') {\n return '/';\n }\n\n const parsed = new URL(req.url, 'http://localhost/');\n setProperty(req, PathSymbol, parsed.pathname);\n\n return parsed.pathname;\n}\n","import { hasOwnProperty } from 'smob';\nimport { HeaderName } from '../../constants';\nimport { findRouterOption } from '../../router-options';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\nimport type { Request } from '../types';\nimport { useRequestRouterPath } from './router';\n\ntype RequestProtocolOptions = {\n trustProxy?: TrustProxyInput,\n default?: string\n};\n\nexport function getRequestProtocol(\n req: Request,\n options?: RequestProtocolOptions,\n) : string {\n options = options || {};\n\n let trustProxy : TrustProxyFn;\n if (typeof options.trustProxy !== 'undefined') {\n trustProxy = buildTrustProxyFn(options.trustProxy);\n } else {\n trustProxy = findRouterOption(\n 'trustProxy',\n useRequestRouterPath(req),\n );\n }\n\n let protocol : string | undefined = options.default;\n /* istanbul ignore next */\n if (\n hasOwnProperty(req.socket, 'encrypted') &&\n !!req.socket.encrypted\n ) {\n protocol = 'https';\n } else if (!protocol) {\n protocol = 'http';\n }\n\n if (!req.socket.remoteAddress || !trustProxy(req.socket.remoteAddress, 0)) {\n return protocol;\n }\n\n let header = req.headers[HeaderName.X_FORWARDED_PROTO];\n /* istanbul ignore next */\n if (Array.isArray(header)) {\n header = header.pop();\n }\n\n if (!header) {\n return protocol;\n }\n\n const index = header.indexOf(',');\n\n return index !== -1 ?\n header.substring(0, index).trim() :\n header.trim();\n}\n","import type { IncomingMessage } from 'node:http';\nimport type { Readable as NodeReadable } from 'node:stream';\nimport { Readable } from 'readable-stream';\nimport type { ReadableStream as NodeWebReadableStream } from 'stream/web';\nimport { isWebStream } from '../utils';\nimport type { RequestCreateContext } from './types';\n\nexport function createRequest(context: RequestCreateContext) : IncomingMessage {\n let readable: NodeReadable;\n if (context.body) {\n if (isWebStream(context.body)) {\n readable = (Readable as unknown as typeof NodeReadable).fromWeb(context.body as NodeWebReadableStream);\n } else {\n readable = (Readable as unknown as typeof NodeReadable).from(context.body);\n }\n } else {\n readable = new Readable();\n }\n\n const headers : Record<string, string | string[] | undefined> = context.headers || {};\n\n const rawHeaders : string[] = [];\n let keys = Object.keys(headers);\n for (let i = 0; i < keys.length; i++) {\n const header = headers[keys[i]];\n if (Array.isArray(header)) {\n for (let j = 0; j < header.length; j++) {\n rawHeaders.push(keys[i], header[j]);\n }\n } else if (typeof header === 'string') {\n rawHeaders.push(keys[i], header);\n }\n }\n\n const headersDistinct : Record<string, string[]> = {};\n keys = Object.keys(headers);\n for (let i = 0; i < keys.length; i++) {\n const header = headers[keys[i]];\n if (Array.isArray(header)) {\n headersDistinct[keys[i]] = header;\n }\n\n if (typeof header === 'string') {\n headersDistinct[keys[i]] = [header];\n }\n }\n\n Object.defineProperty(readable, 'connection', {\n get() {\n return {\n remoteAddress: '127.0.0.1',\n };\n },\n });\n\n Object.defineProperty(readable, 'socket', {\n get() {\n return {\n remoteAddress: '127.0.0.1',\n };\n },\n });\n\n Object.assign(readable, {\n aborted: false,\n complete: true,\n headers,\n headersDistinct,\n httpVersion: '1.1',\n httpVersionMajor: 1,\n httpVersionMinor: 1,\n method: context.method || 'GET',\n rawHeaders,\n rawTrailers: [],\n trailers: {},\n trailersDistinct: {},\n url: context.url || '/',\n setTimeout(_msecs: number, _callback?: () => void) {\n return this as IncomingMessage;\n },\n } satisfies Omit<IncomingMessage, keyof Readable | 'socket' | 'connection'>);\n\n return readable as IncomingMessage;\n}\n","import { HTTPError } from '@ebec/http';\n\nexport class RoutupError extends HTTPError {\n\n}\n","import { RoutupError } from './module';\n\nexport function isError(input: unknown) : input is RoutupError {\n return input instanceof RoutupError;\n}\n","import type { Input } from '@ebec/http';\nimport { isObject } from '../utils';\nimport { isError } from './is';\nimport { RoutupError } from './module';\n\n/**\n * Create an internal error object by\n * - an existing error (accessible via cause property)\n * - options\n * - message\n *\n * @param input\n */\nexport function createError(input: Input | unknown) : RoutupError {\n if (isError(input)) {\n return input;\n }\n\n if (typeof input === 'string') {\n return new RoutupError(input);\n }\n\n if (!isObject(input)) {\n return new RoutupError();\n }\n\n return new RoutupError({ cause: input }, input);\n}\n","import type { Response } from '../types';\n\nexport type ResponseCacheHeadersOptions = {\n maxAge?: number,\n modifiedTime?: string | Date,\n cacheControls?: string[]\n};\n\nexport function setResponseCacheHeaders(res: Response, options?: ResponseCacheHeadersOptions) {\n options = options || {};\n\n const cacheControls = ['public'].concat(options.cacheControls || []);\n\n if (options.maxAge !== undefined) {\n cacheControls.push(`max-age=${+options.maxAge}`, `s-maxage=${+options.maxAge}`);\n }\n\n if (options.modifiedTime) {\n const modifiedTime = typeof options.modifiedTime === 'string' ?\n new Date(options.modifiedTime) :\n options.modifiedTime;\n\n res.setHeader('last-modified', modifiedTime.toUTCString());\n }\n\n res.setHeader('cache-control', cacheControls.join(', '));\n}\n","import { getProperty, setProperty } from '../../utils';\nimport type { Response } from '../types';\n\nconst symbol = Symbol.for('ResGone');\nexport function isResponseGone(res: Response) {\n if (res.headersSent || res.writableEnded) {\n return true;\n }\n\n return getProperty(res, symbol) ?? false;\n}\n\nexport function setResponseGone(res: Response, value: boolean) {\n setProperty(res, symbol, value);\n}\n","import type { EventStreamMessage } from './types';\n\nexport function serializeEventStreamMessage(message: EventStreamMessage): string {\n let result = '';\n\n if (message.id) {\n result += `id: ${message.id}\\n`;\n }\n\n if (message.event) {\n result += `event: ${message.event}\\n`;\n }\n\n if (\n typeof message.retry === 'number' &&\n Number.isInteger(message.retry)\n ) {\n result += `retry: ${message.retry}\\n`;\n }\n\n result += `data: ${message.data}\\n\\n`;\n\n return result;\n}\n","import { PassThrough } from 'readable-stream';\nimport { HeaderName } from '../../../constants';\nimport { isRequestHTTP2 } from '../../../request';\nimport type { Response } from '../../types';\nimport { setResponseGone } from '../gone';\nimport type { EventStreamListener, EventStreamMessage } from './types';\nimport { serializeEventStreamMessage } from './utils';\n\nexport class EventStream {\n protected response: Response;\n\n protected passThrough : PassThrough;\n\n protected flushed : boolean;\n\n protected eventHandlers : Record<string, EventStreamListener[]>;\n\n constructor(response: Response) {\n this.response = response;\n\n this.passThrough = new PassThrough({\n encoding: 'utf-8',\n });\n\n this.flushed = false;\n\n this.eventHandlers = {};\n\n this.open();\n }\n\n protected open() {\n this.response.req.on('close', () => this.end());\n this.response.req.on('error', (err) => {\n this.emit('error', err);\n this.end();\n });\n\n this.passThrough.on('data', (chunk) => this.response.write(chunk));\n this.passThrough.on('error', (err) => {\n this.emit('error', err);\n this.end();\n });\n this.passThrough.on('close', () => this.end());\n\n this.response.setHeader(\n HeaderName.CONTENT_TYPE,\n 'text/event-stream',\n );\n this.response.setHeader(\n HeaderName.CACHE_CONTROL,\n 'private, no-cache, no-store, no-transform, must-revalidate, max-age=0',\n );\n this.response.setHeader(\n HeaderName.X_ACCEL_BUFFERING,\n 'no',\n );\n\n if (!isRequestHTTP2(this.response.req)) {\n this.response.setHeader(\n HeaderName.CONNECTION,\n 'keep-alive',\n );\n }\n\n this.response.statusCode = 200;\n }\n\n write(message: EventStreamMessage) : void;\n\n write(message: string) : void;\n\n write(message: string | EventStreamMessage) : void {\n if (typeof message === 'string') {\n this.write({ data: message });\n return;\n }\n\n if (\n !this.passThrough.closed &&\n this.passThrough.writable\n ) {\n this.passThrough.write(serializeEventStreamMessage(message));\n }\n }\n\n end() {\n if (this.flushed) return;\n\n this.flushed = true;\n\n if (!this.passThrough.closed) {\n this.passThrough.end();\n }\n\n this.emit('close');\n\n setResponseGone(this.response, true);\n\n this.response.end();\n }\n\n on(event: 'close', listener: EventStreamListener) : void;\n\n on(event: 'error', listener: EventStreamListener) : void;\n\n on(event: string, listener: EventStreamListener) : void {\n if (typeof this.eventHandlers[event] === 'undefined') {\n this.eventHandlers[event] = [];\n }\n\n this.eventHandlers[event].push(listener);\n }\n\n protected emit(event: string, ...args: any[]) : void {\n if (typeof this.eventHandlers[event] === 'undefined') {\n return;\n }\n\n const listeners = this.eventHandlers[event].slice();\n for (let i = 0; i < listeners.length; i++) {\n listeners[i].apply(this, args as any);\n }\n }\n}\n","import type { Response } from '../../types';\nimport { EventStream } from './module';\n\nexport function createEventStream(response: Response) {\n return new EventStream(response);\n}\n","import type { OutgoingHttpHeader } from 'node:http';\n\nimport type { Response } from '../types';\n\nexport function appendResponseHeader(\n res: Response,\n name: string,\n value: OutgoingHttpHeader,\n) {\n let header = res.getHeader(name);\n if (!header) {\n res.setHeader(name, value);\n\n return;\n }\n\n if (!Array.isArray(header)) {\n header = [header.toString()];\n }\n\n res.setHeader(name, [...header, value] as readonly string[]);\n}\n\nexport function appendResponseHeaderDirective(\n res: Response,\n name: string,\n value: OutgoingHttpHeader,\n) {\n let header = res.getHeader(name);\n if (!header) {\n if (Array.isArray(value)) {\n res.setHeader(name, value.join('; '));\n return;\n }\n\n res.setHeader(name, value);\n return;\n }\n\n if (!Array.isArray(header)) {\n if (typeof header === 'string') {\n // split header by directive(s)\n header = header.split('; ');\n }\n\n if (typeof header === 'number') {\n header = [header.toString()];\n }\n }\n\n if (Array.isArray(value)) {\n header.push(...value);\n } else {\n header.push(`${value}`);\n }\n\n header = [...new Set(header)];\n\n res.setHeader(name, header.join('; '));\n}\n","import { HeaderName } from '../../constants';\nimport { extname, getCharsetForMimeType, getMimeType } from '../../utils';\nimport type { Response } from '../types';\n\nexport function setResponseContentTypeByFileName(res: Response, fileName: string) {\n const ext = extname(fileName);\n if (ext) {\n let type = getMimeType(ext.substring(1));\n if (type) {\n const charset = getCharsetForMimeType(type);\n if (charset) {\n type += `; charset=${charset}`;\n }\n res.setHeader(HeaderName.CONTENT_TYPE, type);\n }\n }\n}\n","import { HeaderName } from '../../constants';\n\nimport type { Response } from '../types';\nimport { setResponseContentTypeByFileName } from './utils';\n\nexport function setResponseHeaderAttachment(res: Response, filename?: string) {\n if (typeof filename === 'string') {\n setResponseContentTypeByFileName(res, filename);\n }\n\n res.setHeader(\n HeaderName.CONTENT_DISPOSITION,\n `attachment${filename ? `; filename=\"${filename}\"` : ''}`,\n );\n}\n","import { HeaderName } from '../../constants';\nimport { getMimeType } from '../../utils';\nimport type { Response } from '../types';\n\nexport function setResponseHeaderContentType(res: Response, input: string, ifNotExists?: boolean) {\n if (ifNotExists) {\n const header = res.getHeader(HeaderName.CONTENT_TYPE);\n if (header) {\n return;\n }\n }\n\n const contentType = getMimeType(input);\n if (contentType) {\n res.setHeader(HeaderName.CONTENT_TYPE, contentType);\n }\n}\n","import type { Readable as NodeReadable } from 'stream';\nimport type { NodeReadableStream, WebReadableStream } from '../../types';\nimport { isWebStream } from '../../utils';\nimport type { Response } from '../types';\n\nexport async function sendStream(\n res: Response,\n stream: NodeReadableStream | WebReadableStream,\n next?: (err?: Error) => Promise<unknown> | unknown,\n) : Promise<unknown> {\n if (isWebStream(stream)) {\n return stream\n .pipeTo(\n new WritableStream({\n write(chunk) {\n res.write(chunk);\n },\n }),\n )\n .then(() => {\n if (next) {\n return next();\n }\n\n res.end();\n return Promise.resolve();\n })\n .catch((err) => {\n if (next) {\n return next(err);\n }\n\n return Promise.reject(err);\n });\n }\n\n return new Promise<void>((resolve, reject) => {\n stream.on('open', () => {\n (stream as NodeReadable).pipe(res);\n });\n\n /* istanbul ignore next */\n stream.on('error', (err) => {\n if (next) {\n Promise.resolve()\n .then(() => next(err))\n .then(() => resolve())\n .catch((e) => reject(e));\n\n return;\n }\n\n res.end();\n\n reject(err);\n });\n\n stream.on('close', () => {\n if (next) {\n Promise.resolve()\n .then(() => next())\n .then(() => resolve())\n .catch((e) => reject(e));\n\n return;\n }\n\n res.end();\n\n resolve();\n });\n });\n}\n","import type { WebBlob } from '../../types';\nimport type { Response } from '../types';\nimport { setResponseHeaderContentType } from './header-content-type';\nimport { sendStream } from './send-stream';\n\nexport async function sendWebBlob(res: Response, blob: WebBlob) : Promise<void> {\n setResponseHeaderContentType(res, blob.type);\n\n await sendStream(res, blob.stream());\n}\n","import { HeaderName } from '../../constants';\nimport type { WebResponse } from '../../types';\nimport { splitCookiesString } from '../../utils';\nimport type { Response } from '../types';\nimport { sendStream } from './send-stream';\n\nexport async function sendWebResponse(res: Response, webResponse: WebResponse) : Promise<void> {\n if (webResponse.redirected) {\n res.setHeader(HeaderName.LOCATION, webResponse.url);\n }\n\n if (webResponse.status) {\n res.statusCode = webResponse.status;\n }\n\n if (webResponse.statusText) {\n res.statusMessage = webResponse.statusText;\n }\n\n webResponse.headers.forEach((value, key) => {\n if (key === HeaderName.SET_COOKIE) {\n res.appendHeader(key, splitCookiesString(value));\n } else {\n res.setHeader(key, value);\n }\n });\n\n if (webResponse.body) {\n await sendStream(res, webResponse.body);\n return Promise.resolve();\n }\n\n res.end();\n\n return Promise.resolve();\n}\n","import { Buffer } from 'buffer';\nimport { HeaderName } from '../../constants';\nimport { findRouterOption } from '../../router-options';\nimport { useRequestRouterPath } from '../../request';\nimport { isStream, isWebBlob, isWebResponse } from '../../utils';\nimport type { Response } from '../types';\nimport { isResponseGone } from './gone';\nimport { appendResponseHeaderDirective } from './header';\nimport { setResponseHeaderContentType } from './header-content-type';\nimport { sendStream } from './send-stream';\nimport { sendWebBlob } from './send-web-blob';\nimport { sendWebResponse } from './send-web-response';\n\nexport async function send(res: Response, chunk?: any) : Promise<void> {\n switch (typeof chunk) {\n case 'string': {\n setResponseHeaderContentType(res, 'html', true);\n break;\n }\n case 'boolean':\n case 'number':\n case 'object': {\n if (chunk !== null) {\n if (chunk instanceof Error) {\n throw chunk;\n }\n\n if (isStream(chunk)) {\n await sendStream(res, chunk);\n return;\n }\n\n if (isWebBlob(chunk)) {\n await sendWebBlob(res, chunk);\n return;\n }\n\n if (isWebResponse(chunk)) {\n await sendWebResponse(res, chunk);\n return;\n }\n\n if (Buffer.isBuffer(chunk)) {\n setResponseHeaderContentType(res, 'bin', true);\n } else {\n chunk = JSON.stringify(chunk);\n\n setResponseHeaderContentType(res, 'application/json', true);\n }\n }\n break;\n }\n }\n\n let encoding : BufferEncoding | undefined;\n\n if (typeof chunk === 'string') {\n res.setHeader(HeaderName.CONTENT_ENCODING, 'utf-8');\n\n appendResponseHeaderDirective(res, HeaderName.CONTENT_TYPE, 'charset=utf-8');\n\n encoding = 'utf-8';\n }\n\n // populate Content-Length\n let len : number | undefined;\n if (\n chunk !== undefined &&\n chunk !== null\n ) {\n if (Buffer.isBuffer(chunk)) {\n // get length of Buffer\n len = chunk.length;\n } else if (chunk.length < 1000) {\n // just calculate length when no ETag + small chunk\n len = Buffer.byteLength(chunk, encoding);\n } else {\n // convert chunk to Buffer and calculate\n chunk = Buffer.from(chunk, encoding);\n encoding = undefined;\n len = chunk.length;\n }\n\n res.setHeader(HeaderName.CONTENT_LENGTH, `${len}`);\n }\n\n if (typeof len !== 'undefined') {\n const etagFn = findRouterOption(\n 'etag',\n useRequestRouterPath(res.req),\n );\n\n const chunkHash = await etagFn(chunk, encoding, len);\n if (isResponseGone(res)) {\n return;\n }\n\n if (typeof chunkHash === 'string') {\n res.setHeader(HeaderName.ETag, chunkHash);\n\n if (res.req.headers[HeaderName.IF_NONE_MATCH] === chunkHash) {\n res.statusCode = 304;\n }\n }\n }\n\n // strip irrelevant headers\n if (res.statusCode === 204 || res.statusCode === 304) {\n res.removeHeader(HeaderName.CONTENT_TYPE);\n res.removeHeader(HeaderName.CONTENT_LENGTH);\n res.removeHeader(HeaderName.TRANSFER_ENCODING);\n }\n\n // alter headers for 205\n if (res.statusCode === 205) {\n res.setHeader(HeaderName.CONTENT_LENGTH, 0);\n res.removeHeader(HeaderName.TRANSFER_ENCODING);\n }\n\n if (isResponseGone(res)) {\n return;\n }\n\n if (\n res.req.method === 'HEAD' ||\n res.req.method === 'head'\n ) {\n // skip body for HEAD\n res.end();\n\n return;\n }\n\n if (typeof chunk === 'undefined' || chunk === null) {\n res.end();\n return;\n }\n\n if (typeof encoding !== 'undefined') {\n res.end(chunk, encoding);\n return;\n }\n\n res.end(chunk);\n}\n","import type { Response } from '../types';\nimport { send } from './send';\n\nexport function sendAccepted(res: Response, chunk?: any) : Promise<void> {\n res.statusCode = 202;\n res.statusMessage = 'Accepted';\n\n return send(res, chunk);\n}\n","import type { Response } from '../types';\nimport { send } from './send';\n\nexport function sendCreated(res: Response, chunk?: any) : Promise<void> {\n res.statusCode = 201;\n res.statusMessage = 'Created';\n\n return send(res, chunk);\n}\n","import { HeaderName } from '../../constants';\nimport { basename, isStream } from '../../utils';\nimport type { Response } from '../types';\nimport { isResponseGone } from './gone';\nimport { setResponseHeaderAttachment } from './header-attachment';\nimport { send } from './send';\nimport { sendStream } from './send-stream';\nimport { setResponseContentTypeByFileName } from './utils';\n\nexport type SendFileContentOptions = {\n end?: number,\n start?: number;\n};\n\nexport type SendFileStats = {\n size?: number,\n mtime?: Date | number | string,\n name?: string\n};\n\nexport type SendFileOptions = {\n stats: () => Promise<SendFileStats> | SendFileStats,\n content: (\n options: SendFileContentOptions\n ) => Promise<unknown> | unknown\n attachment?: boolean,\n name?: string\n};\n\nexport async function sendFile(\n res: Response,\n options: SendFileOptions,\n next?: (err?: Error) => Promise<unknown> | unknown,\n) : Promise<unknown> {\n let stats: SendFileStats;\n try {\n stats = await options.stats();\n } catch (e) {\n if (next) {\n return next(e as Error);\n }\n\n if (isResponseGone(res)) {\n return Promise.resolve();\n }\n\n return Promise.reject(e);\n }\n\n const name = options.name || stats.name;\n\n if (name) {\n const fileName = basename(name);\n\n if (options.attachment) {\n const dispositionHeader = res.getHeader(HeaderName.CONTENT_DISPOSITION);\n if (!dispositionHeader) {\n setResponseHeaderAttachment(res, fileName);\n }\n } else {\n setResponseContentTypeByFileName(res, fileName);\n }\n }\n\n const contentOptions : SendFileContentOptions = {};\n\n if (stats.size) {\n const rangeHeader = res.req.headers[HeaderName.RANGE];\n if (rangeHeader) {\n const [x, y] = rangeHeader.replace('bytes=', '')\n .split('-');\n\n contentOptions.end = Math.min(\n parseInt(y, 10) || stats.size - 1,\n stats.size - 1,\n );\n\n contentOptions.start = parseInt(x, 10) || 0;\n\n if (contentOptions.end >= stats.size) {\n contentOptions.end = stats.size - 1;\n }\n\n if (contentOptions.start >= stats.size) {\n res.setHeader(HeaderName.CONTENT_RANGE, `bytes */${stats.size}`);\n res.statusCode = 416;\n res.end();\n return Promise.resolve();\n }\n\n res.setHeader(HeaderName.CONTENT_RANGE, `bytes ${contentOptions.start}-${contentOptions.end}/${stats.size}`);\n res.setHeader(HeaderName.CONTENT_LENGTH, (contentOptions.end - contentOptions.start + 1));\n } else {\n res.setHeader(HeaderName.CONTENT_LENGTH, stats.size);\n }\n\n res.setHeader(HeaderName.ACCEPT_RANGES, 'bytes');\n\n if (stats.mtime) {\n const mtime = new Date(stats.mtime);\n res.setHeader(HeaderName.LAST_MODIFIED, mtime.toUTCString());\n res.setHeader(HeaderName.ETag, `W/\"${stats.size}-${mtime.getTime()}\"`);\n }\n }\n\n try {\n const content = await options.content(contentOptions);\n if (isStream(content)) {\n return await sendStream(res, content, next);\n }\n\n return await send(res, content);\n } catch (e) {\n if (next) {\n return next(e as Error);\n }\n\n if (isResponseGone(res)) {\n return Promise.resolve();\n }\n\n return Promise.reject(e);\n }\n}\n","import { getRequestAcceptableContentType } from '../../request/helpers';\nimport type { Response } from '../types';\n\ntype ResponseFormats = {\n default: () => void,\n [key: string]: () => void\n};\n\nexport function sendFormat(res: Response, input: ResponseFormats) {\n const { default: formatDefault, ...formats } = input;\n\n const contentTypes = Object.keys(formats);\n\n const contentType = getRequestAcceptableContentType(res.req, contentTypes);\n if (contentType) {\n formats[contentType]();\n\n return;\n }\n\n formatDefault();\n}\n","import type { Response } from '../types';\nimport { send } from './send';\n\nexport function sendRedirect(res: Response, location: string, statusCode = 302): Promise<void> {\n res.statusCode = statusCode;\n res.setHeader('location', location);\n\n const encodedLoc = location.replace(/\"/g, '%22');\n const html = `<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"0; url=${encodedLoc}\"></head></html>`;\n\n return send(res, html);\n}\n","import type { OutgoingHttpHeader, OutgoingHttpHeaders } from 'node:http';\nimport type { Socket } from 'node:net';\nimport type { Writable as NodeWritable } from 'node:stream';\nimport { Buffer } from 'buffer';\nimport { Writable } from 'readable-stream';\nimport { hasOwnProperty } from 'smob';\nimport { HeaderName } from '../constants';\nimport type { Request } from '../request';\nimport { splitCookiesString } from '../utils';\nimport type { Response } from './types';\n\ntype BufferEncoding =\n | 'ascii'\n | 'utf8'\n | 'utf-8'\n | 'utf16le'\n | 'ucs2'\n | 'ucs-2'\n | 'base64'\n | 'base64url'\n | 'latin1'\n | 'binary'\n | 'hex';\n\ntype Callback = (error?: (Error | null)) => void;\n\nexport function createResponse(request: Request) : Response {\n let output : Buffer | undefined;\n let encoding : BufferEncoding;\n\n const write = (chunk: any, chunkEncoding: BufferEncoding, callback?: Callback) => {\n if (typeof chunk !== 'undefined') {\n const chunkEncoded = typeof chunk === 'string' ?\n Buffer.from(chunk, chunkEncoding || encoding || 'utf8') :\n chunk;\n\n if (typeof output !== 'undefined') {\n output = Buffer.concat([output, chunkEncoded]);\n } else {\n output = chunkEncoded;\n }\n }\n\n encoding = chunkEncoding;\n\n if (callback) {\n callback();\n }\n };\n\n const writable = new Writable({\n decodeStrings: false,\n write(\n chunk: any,\n arg2?: string | Callback,\n arg3?: Callback,\n ) {\n const chunkEncoding = typeof arg2 === 'string' ? encoding : 'utf-8';\n let cb : Callback | undefined;\n if (typeof arg2 === 'function') {\n cb = arg2;\n } else if (typeof arg3 === 'function') {\n cb = arg3;\n }\n\n write(chunk, chunkEncoding, cb);\n\n return true;\n },\n }) as NodeWritable;\n\n Object.defineProperty(writable, 'body', {\n get(): any {\n if (output) {\n const arrayBuffer = new ArrayBuffer(output.length);\n const view = new Uint8Array(arrayBuffer);\n for (let i = 0; i < output.length; ++i) {\n view[i] = output[i];\n }\n return arrayBuffer;\n }\n\n return new ArrayBuffer(0);\n },\n });\n\n const headers : OutgoingHttpHeaders = {};\n\n Object.assign(writable, {\n req: request,\n chunkedEncoding: false,\n connection: null,\n headersSent: false,\n sendDate: false,\n shouldKeepAlive: false,\n socket: null,\n statusCode: 200,\n statusMessage: '',\n strictContentLength: false,\n useChunkedEncodingByDefault: false,\n finished: false,\n\n addTrailers(_headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void {\n },\n appendHeader(name: string, value: string | ReadonlyArray<string>): Response {\n if (name === HeaderName.SET_COOKIE) {\n value = splitCookiesString(value as string | string[]);\n }\n\n name = name.toLowerCase();\n const current = headers[name];\n const all = [\n ...(Array.isArray(current) ? current : [current]),\n ...(Array.isArray(value) ? value : [value]),\n ].filter(Boolean) as string[];\n headers[name] = all.length > 1 ? all : all[0];\n\n return this as Response;\n },\n assignSocket(_socket: Socket): void {\n },\n detachSocket(_socket: Socket): void {\n },\n\n flushHeaders(): void {\n },\n getHeader(name: string): number | string | string[] | undefined {\n return headers[name.toLowerCase()];\n },\n getHeaderNames(): string[] {\n return Object.keys(headers);\n },\n getHeaders(): OutgoingHttpHeaders {\n return headers;\n },\n hasHeader(name: string): boolean {\n return hasOwnProperty(headers, name.toLowerCase());\n },\n removeHeader(name: string): void {\n delete headers[name.toLowerCase()];\n },\n setHeader(name: string, value: number | string | string[]): Response {\n if (\n name === HeaderName.SET_COOKIE &&\n typeof value !== 'number'\n ) {\n value = splitCookiesString(value);\n }\n\n headers[name.toLowerCase()] = value;\n return this as Response;\n },\n setHeaders(headers: Headers | Map<string, number | string | readonly string[]>): Response {\n if (headers instanceof Map) {\n headers.entries().forEach(([key, value]) => {\n this.setHeader(key, value);\n });\n\n return this as Response;\n }\n\n headers.forEach((value, key) => {\n this.setHeader(key, value);\n });\n\n return this as Response;\n },\n setTimeout(_msecs: number, _callback: (() => void) | undefined): Response {\n return this as Response;\n },\n writeContinue(_callback: (() => void) | undefined): void {\n },\n writeEarlyHints(_hints: Record<string, string | string[]>, callback: (() => void) | undefined): void {\n if (typeof callback !== 'undefined') {\n callback();\n }\n },\n writeProcessing(): void {\n },\n writeHead(\n statusCode: number,\n arg1?: OutgoingHttpHeaders | OutgoingHttpHeader[] | string,\n arg2?: OutgoingHttpHeaders | OutgoingHttpHeader[],\n ): Response {\n this.statusCode = statusCode;\n\n if (typeof arg1 === 'string') {\n this.statusMessage = arg1;\n arg1 = undefined;\n }\n const headers = (arg2 || arg1) as OutgoingHttpHeaders[] | OutgoingHttpHeaders;\n if (headers) {\n if (Array.isArray(headers)) {\n for (let i = 0; i < headers.length; i++) {\n const keys = Object.keys(headers[i]);\n for (let j = 0; j < keys.length; j++) {\n this.setHeader(keys[i], headers[i][keys[j]] as OutgoingHttpHeader);\n }\n }\n } else {\n const keys = Object.keys(headers);\n for (let i = 0; i < keys.length; i++) {\n this.setHeader(keys[i], headers[keys[i]] as OutgoingHttpHeader);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.headersSent = true;\n\n return this as Response;\n },\n } satisfies Omit<Response, keyof NodeWritable>);\n\n return writable as Response;\n}\n","import { createError } from '../../error';\nimport { setRequestMountPath, setRequestParams, setRequestRouterPath } from '../../request';\nimport {\n send,\n} from '../../response';\nimport {\n isPromise,\n} from '../../utils';\nimport type { DispatchEvent } from './module';\n\ntype DispatchTargetFn = (next: (err?: Error) => any) => unknown;\nexport function dispatch(\n event: DispatchEvent,\n target: DispatchTargetFn,\n): Promise<boolean> {\n setRequestParams(event.request, event.params);\n setRequestMountPath(event.request, event.mountPath);\n setRequestRouterPath(event.request, event.routerPath);\n\n return new Promise<boolean>((resolve, reject) => {\n let handled = false;\n\n const unsubscribe = () => {\n event.response.off('close', done);\n event.response.off('error', done);\n };\n\n const shutdown = (dispatched: boolean, err?: Error) => {\n if (handled) {\n return;\n }\n\n handled = true;\n unsubscribe();\n\n if (err) {\n reject(createError(err));\n } else {\n resolve(dispatched);\n }\n };\n\n const done = (err?: Error) => shutdown(true, err);\n const next = (err?: Error) => shutdown(false, err);\n\n event.response.once('close', done);\n event.response.once('error', done);\n\n const handle = async (data: unknown): Promise<boolean> => {\n if (typeof data === 'undefined' || handled) {\n return false;\n }\n\n handled = true;\n unsubscribe();\n\n if (!event.dispatched) {\n await send(event.response, data);\n }\n\n return true;\n };\n\n try {\n const output = target(next);\n\n if (isPromise(output)) {\n output\n .then((r) => handle(r))\n .then((resolved) => {\n if (resolved) {\n resolve(true);\n }\n })\n .catch((e) => reject(createError(e)));\n\n return;\n }\n\n Promise.resolve()\n .then(() => handle(output))\n .then((resolved) => {\n if (resolved) {\n resolve(true);\n }\n })\n .catch((e) => reject(createError(e)));\n } catch (error) {\n next(error as Error);\n }\n });\n}\n","import type { DispatchErrorEvent } from './error';\nimport type { DispatchEvent } from './module';\n\nexport function isDispatcherErrorEvent(\n event: DispatchEvent | DispatchErrorEvent,\n) : event is DispatchErrorEvent {\n return typeof event.error !== 'undefined';\n}\n","import { MethodName } from '../../constants';\nimport type { RoutupError } from '../../error';\nimport type { Request } from '../../request';\nimport type { Response } from '../../response';\nimport type { Next } from '../../types';\nimport { nextPlaceholder } from '../../utils';\nimport type { DispatchEventCreateContext } from './types';\n\nexport class DispatchEvent {\n /**\n * Request Object.\n */\n request: Request;\n\n /**\n * Response Object.\n */\n response: Response;\n\n /**\n * Params collected during execution.\n */\n params: Record<string, any>;\n\n /**\n * Request path.\n */\n path: string;\n\n /**\n * HTTP Method used for the request.\n */\n method: `${MethodName}`;\n\n /**\n * The relative path on which the router is hung.\n */\n mountPath: string;\n\n /**\n * The error which occurred during the dispatch process.\n */\n error?: RoutupError;\n\n /**\n * Signal that the request hasn't been handled.\n * Therefore, the request must be passed to the next handler or router in the chain.\n */\n next: Next;\n\n /**\n * Indicate if the request has already been dispatched/send.\n */\n protected _dispatched: boolean;\n\n /**\n * Ids of chained router instances.\n */\n routerPath: number[];\n\n /**\n * Collected methods during dispatch process.\n */\n methodsAllowed: string[];\n\n constructor(context: DispatchEventCreateContext) {\n this.request = context.request;\n this.response = context.response;\n\n this.method = context.method || MethodName.GET;\n this.methodsAllowed = [];\n this.mountPath = '/';\n this.params = {};\n this.path = context.path || '/';\n this.routerPath = [];\n this.next = nextPlaceholder;\n }\n\n get dispatched() {\n return this._dispatched || this.response.writableEnded || this.response.headersSent;\n }\n\n set dispatched(value: boolean) {\n this._dispatched = value;\n }\n}\n","import type { RoutupError } from '../../error';\nimport { DispatchEvent } from './module';\n\nexport class DispatchErrorEvent extends DispatchEvent {\n // @ts-expect-error @typescript-eslint/ban-ts-comment\n override error: RoutupError;\n}\n","import type { RequestListener } from 'node:http';\nimport { MethodName } from '../../constants';\nimport type { Request } from '../../request';\nimport { useRequestPath } from '../../request';\nimport type { Response } from '../../response';\nimport type { Router } from '../../router';\nimport { toMethodName } from '../../utils';\nimport { DispatchEvent } from '../../dispatcher';\n\nexport async function dispatchNodeRequest(\n router: Router,\n request: Request,\n response: Response,\n): Promise<void> {\n const event = new DispatchEvent({\n request,\n response,\n path: useRequestPath(request),\n method: toMethodName(request.method, MethodName.GET),\n });\n\n await router.dispatch(event);\n\n if (event.dispatched) {\n return;\n }\n\n if (event.error) {\n event.response.statusCode = event.error.statusCode;\n if (event.error.statusMessage) {\n event.response.statusMessage = event.error.statusMessage;\n }\n\n event.response.end();\n\n return;\n }\n\n event.response.statusCode = 404;\n event.response.end();\n}\n\nexport function createNodeDispatcher(router: Router): RequestListener {\n return (req: Request, res: Response) => {\n // eslint-disable-next-line no-void\n void dispatchNodeRequest(router, req, res);\n };\n}\n","import type { RawResponseHeader } from './type';\n\nexport function transformHeaderToTuples(key: string, value: RawResponseHeader) {\n const output : [string, string][] = [];\n\n if (Array.isArray(value)) {\n for (let j = 0; j < value.length; j++) {\n output.push([key, value[j]]);\n }\n } else if (value !== undefined) {\n output.push([key, String(value)]);\n }\n\n return output;\n}\nexport function transformHeadersToTuples(input: Record<string, RawResponseHeader>) {\n const output: [string, string][] = [];\n\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i].toLowerCase();\n\n output.push(...transformHeaderToTuples(key, input[key]));\n }\n\n return output;\n}\n","import { MethodName } from '../../constants';\nimport { createRequest } from '../../request';\nimport { createResponse } from '../../response';\nimport type { Router } from '../../router';\nimport { toMethodName } from '../../utils';\nimport { DispatchEvent } from '../../dispatcher';\nimport type {\n RawRequest, RawResponse, RawResponseHeaders,\n} from './type';\n\nexport async function dispatchRawRequest(\n router: Router,\n request: RawRequest,\n) : Promise<RawResponse> {\n const method = toMethodName(request.method, MethodName.GET);\n\n const req = createRequest({\n url: request.path,\n method,\n body: request.body,\n headers: request.headers,\n });\n const res = createResponse(req);\n\n const getHeaders = () : RawResponseHeaders => {\n const output : RawResponseHeaders = {};\n\n const headers = res.getHeaders();\n const keys = Object.keys(headers);\n for (let i = 0; i < keys.length; i++) {\n const header = headers[keys[i]];\n if (typeof header === 'number') {\n output[keys[i]] = `${header}`;\n } else if (header) {\n output[keys[i]] = header;\n }\n }\n\n return output;\n };\n\n const createRawResponse = (input: Partial<RawResponse> = {}) : RawResponse => ({\n status: input.status || res.statusCode,\n statusMessage: input.statusMessage || res.statusMessage,\n headers: getHeaders(),\n body: (res as Record<string, any>).body,\n });\n\n const event = new DispatchEvent({\n request: req,\n response: res,\n path: request.path,\n method,\n });\n\n await router.dispatch(event);\n\n if (event.dispatched) {\n return createRawResponse();\n }\n\n if (event.error) {\n return createRawResponse({\n status: event.error.statusCode,\n statusMessage: event.error.statusMessage,\n });\n }\n\n return createRawResponse({\n status: 404,\n });\n}\n\nexport function createRawDispatcher(router: Router) {\n return async (request: RawRequest) => dispatchRawRequest(router, request);\n}\n","import { MethodName } from '../../constants';\nimport type { Router } from '../../router';\nimport type { WebRequest } from '../../types';\nimport { toMethodName } from '../../utils';\nimport { dispatchRawRequest, transformHeadersToTuples } from '../raw';\n\nexport async function dispatchWebRequest(\n router: Router,\n request: WebRequest,\n) : Promise<Response> {\n const url = new URL(request.url);\n const headers : Record<string, string | string[]> = {};\n\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n const method = toMethodName(request.method, MethodName.GET);\n\n const res = await dispatchRawRequest(\n router,\n {\n method,\n path: url.pathname + url.search,\n headers,\n body: request.body,\n },\n );\n\n let body : BodyInit | null | undefined;\n if (\n method === MethodName.HEAD ||\n res.status === 304 ||\n res.status === 101 ||\n res.status === 204 ||\n res.status === 205\n ) {\n body = null;\n } else {\n body = res.body;\n }\n\n return new Response(body, {\n headers: transformHeadersToTuples(res.headers),\n status: res.status,\n statusText: res.statusMessage,\n });\n}\n\nexport function createWebDispatcher(router: Router) {\n return async (request: WebRequest) => dispatchWebRequest(router, request);\n}\n","export enum HandlerType {\n CORE = 'core',\n ERROR = 'error',\n}\n\nexport const HandlerSymbol = Symbol.for('Handler');\n","export enum HookName {\n ERROR = 'error',\n\n DISPATCH_START = 'dispatchStart',\n DISPATCH_END = 'dispatchEnd',\n\n CHILD_MATCH = 'childMatch',\n CHILD_DISPATCH_BEFORE = 'childDispatchBefore',\n CHILD_DISPATCH_AFTER = 'childDispatchAfter',\n}\n","import type { DispatchEvent } from '../dispatcher';\nimport { dispatch, isDispatcherErrorEvent } from '../dispatcher';\nimport type { RoutupError } from '../error';\n\nimport { nextPlaceholder } from '../utils';\nimport { HookName } from './constants';\nimport type {\n HookDefaultListener, HookErrorListener, HookListener, HookUnsubscribeFn,\n} from './types';\n\nexport class HookManager {\n protected items : Record<string, HookListener[]>;\n\n // --------------------------------------------------\n\n constructor() {\n this.items = {};\n }\n\n // --------------------------------------------------\n\n addListener(\n name: `${HookName}`,\n fn: HookListener,\n ) : HookUnsubscribeFn {\n this.items[name] = this.items[name] || [];\n this.items[name].push(fn);\n\n return () => {\n this.removeListener(name, fn);\n };\n }\n\n removeListener(name: `${HookName}`) : void;\n\n removeListener(name: `${HookName}`, fn: HookListener) : void;\n\n removeListener(name: `${HookName}`, fn?: HookListener) : void {\n if (!this.items[name]) {\n return;\n }\n\n if (typeof fn === 'undefined') {\n delete this.items[name];\n return;\n }\n\n if (typeof fn === 'function') {\n const index = this.items[name].indexOf(fn);\n if (index !== -1) {\n this.items[name].splice(index, 1);\n }\n }\n\n if (this.items[name].length === 0) {\n delete this.items[name];\n }\n }\n\n // --------------------------------------------------\n\n /**\n * @throws RoutupError\n *\n * @param name\n * @param event\n */\n async trigger(\n name: `${HookName}`,\n event: DispatchEvent,\n ) : Promise<void> {\n if (!this.items[name] || this.items[name].length === 0) {\n return;\n }\n\n try {\n for (let i = 0; i < this.items[name].length; i++) {\n const hook = this.items[name][i] as HookDefaultListener;\n\n event.dispatched = await dispatch(\n event,\n (next) => Promise.resolve()\n .then(() => {\n event.next = next;\n return this.triggerListener(name, event, hook);\n })\n .catch((err) => next(err)),\n );\n\n event.next = nextPlaceholder;\n\n if (event.dispatched) {\n if (event.error) {\n event.error = undefined;\n }\n\n return;\n }\n }\n } catch (e) {\n event.error = e as RoutupError;\n\n if (!this.isErrorListenerHook(name)) {\n await this.trigger(\n HookName.ERROR,\n event,\n );\n\n if (event.dispatched) {\n if (event.error) {\n event.error = undefined;\n }\n }\n }\n }\n }\n\n private triggerListener(name: `${HookName}`, event: DispatchEvent, listener: HookListener) {\n if (this.isErrorListenerHook(name)) {\n if (isDispatcherErrorEvent(event)) {\n return (listener as HookErrorListener)(event);\n }\n\n return undefined;\n }\n\n return (listener as HookDefaultListener)(event);\n }\n\n private isErrorListenerHook(input: `${HookName}`) {\n return input === HookName.ERROR;\n }\n}\n","import type { Key } from 'path-to-regexp';\nimport { pathToRegexp } from 'path-to-regexp';\nimport type { Path, PathMatcherExecResult, PathMatcherOptions } from './type';\n\nfunction decodeParam(val: unknown) {\n /* istanbul ignore next */\n if (typeof val !== 'string' || val.length === 0) {\n return val;\n }\n\n return decodeURIComponent(val);\n}\n\nexport class PathMatcher {\n protected path: Path;\n\n protected regexp : RegExp;\n\n protected regexpKeys : Key[] = [];\n\n protected regexpOptions: PathMatcherOptions;\n\n constructor(path: Path, options?: PathMatcherOptions) {\n this.path = path;\n\n this.regexpOptions = options || {};\n const regexp = pathToRegexp(path, options);\n\n this.regexp = regexp.regexp;\n this.regexpKeys = regexp.keys;\n }\n\n test(path: string) {\n return this.regexp.test(path);\n }\n\n exec(path: string) : PathMatcherExecResult | undefined {\n if (\n this.path === '/' &&\n this.regexpOptions.end === false\n ) {\n return {\n path: '/',\n params: {},\n };\n }\n\n if (this.path === '*') {\n return {\n path,\n params: {\n 0: decodeParam(path),\n },\n };\n }\n\n const match = this.regexp.exec(path);\n\n if (!match) {\n return undefined;\n }\n\n const params : Record<string, unknown> = {};\n\n for (let i = 1; i < match.length; i++) {\n const key = this.regexpKeys[i - 1];\n const prop = key.name;\n const val = decodeParam(match[i]);\n\n if (typeof val !== 'undefined') {\n params[prop] = val;\n }\n }\n\n return {\n path: match[0],\n params,\n };\n }\n}\n","import type { Path } from './type';\n\nexport function isPath(input: unknown): input is Path {\n return typeof input === 'string';\n}\n","import { MethodName } from '../constants';\nimport type { DispatchEvent, Dispatcher } from '../dispatcher';\nimport { dispatch } from '../dispatcher';\nimport { isError } from '../error';\nimport { HookManager, HookName } from '../hook';\nimport type { Path } from '../path';\nimport { PathMatcher } from '../path';\nimport { toMethodName, withLeadingSlash } from '../utils';\nimport { HandlerSymbol, HandlerType } from './constants';\nimport type { HandlerConfig } from './types';\n\nexport class Handler implements Dispatcher {\n readonly '@instanceof' = HandlerSymbol;\n\n protected config: HandlerConfig;\n\n protected hookManager : HookManager;\n\n protected pathMatcher: PathMatcher | undefined;\n\n protected _method: MethodName | undefined;\n\n // --------------------------------------------------\n\n constructor(handler: HandlerConfig) {\n this.config = handler;\n this.hookManager = new HookManager();\n\n this.mountHooks();\n this.setPath(handler.path);\n }\n\n // --------------------------------------------------\n\n get type() {\n return this.config.type;\n }\n\n get path() {\n return this.config.path;\n }\n\n get method() {\n if (this._method || !this.config.method) {\n return this._method;\n }\n\n this._method = toMethodName(this.config.method);\n return this._method;\n }\n\n // --------------------------------------------------\n\n async dispatch(event: DispatchEvent): Promise<void> {\n if (this.pathMatcher) {\n const pathMatch = this.pathMatcher.exec(event.path);\n if (pathMatch) {\n event.params = {\n ...event.params,\n ...pathMatch.params,\n };\n }\n }\n\n await this.hookManager.trigger(HookName.CHILD_DISPATCH_BEFORE, event);\n if (event.dispatched) {\n return Promise.resolve();\n }\n\n try {\n event.dispatched = await dispatch(event, (done) => {\n if (this.config.type === HandlerType.ERROR) {\n if (event.error) {\n return this.config.fn(event.error, event.request, event.response, done);\n }\n } else {\n return this.config.fn(event.request, event.response, done);\n }\n\n return undefined;\n });\n } catch (e) {\n if (isError(e)) {\n event.error = e;\n\n await this.hookManager.trigger(HookName.ERROR, event);\n\n if (event.dispatched) {\n event.error = undefined;\n } else {\n throw e;\n }\n }\n }\n\n return this.hookManager.trigger(HookName.CHILD_DISPATCH_AFTER, event);\n }\n\n // --------------------------------------------------\n\n matchPath(path: string): boolean {\n if (!this.pathMatcher) {\n return true;\n }\n\n return this.pathMatcher.test(path);\n }\n\n setPath(path?: Path) : void {\n if (typeof path === 'string') {\n path = withLeadingSlash(path);\n }\n\n this.config.path = path;\n\n if (typeof path === 'undefined') {\n this.pathMatcher = undefined;\n return;\n }\n\n this.pathMatcher = new PathMatcher(path, {\n end: !!this.config.method,\n });\n }\n\n // --------------------------------------------------\n\n matchMethod(method: `${MethodName}`): boolean {\n return !this.method ||\n method === this.method ||\n (\n method === MethodName.HEAD &&\n this.method === MethodName.GET\n );\n }\n\n setMethod(input?: `${MethodName}`) : void {\n const method = toMethodName(input);\n\n this.config.method = method;\n this._method = method;\n }\n\n // --------------------------------------------------\n\n protected mountHooks() {\n if (this.config.onBefore) {\n this.hookManager.addListener(HookName.CHILD_DISPATCH_BEFORE, this.config.onBefore);\n }\n\n if (this.config.onAfter) {\n this.hookManager.addListener(HookName.CHILD_DISPATCH_AFTER, this.config.onAfter);\n }\n\n if (this.config.onError) {\n this.hookManager.addListener(HookName.ERROR, this.config.onError);\n }\n }\n}\n","import { HandlerType } from '../constants';\nimport { Handler } from '../module';\nimport type {\n CoreHandlerConfig,\n CoreHandlerFn,\n} from './types';\n\nexport function coreHandler(input: Omit<CoreHandlerConfig, | 'type'>) : Handler;\n\nexport function coreHandler(input: CoreHandlerFn) : Handler;\nexport function coreHandler(input: any) : Handler {\n if (typeof input === 'function') {\n return new Handler({\n type: HandlerType.CORE,\n fn: input,\n });\n }\n\n return new Handler({\n type: HandlerType.CORE,\n ...input,\n });\n}\n","import { HandlerType } from '../constants';\nimport { Handler } from '../module';\nimport type {\n ErrorHandlerConfig,\n ErrorHandlerFn,\n} from './types';\n\nexport function errorHandler(input: Omit<ErrorHandlerConfig, 'type'>) : Handler;\n\nexport function errorHandler(input: ErrorHandlerFn) : Handler;\nexport function errorHandler(input: any) : Handler {\n if (typeof input === 'function') {\n return new Handler({\n type: HandlerType.ERROR,\n fn: input,\n });\n }\n\n return new Handler({\n type: HandlerType.ERROR,\n ...input,\n });\n}\n","import { isInstance, isObject } from '../utils';\nimport { HandlerSymbol } from './constants';\nimport type { Handler } from './module';\nimport type { HandlerConfig } from './types';\n\nexport function isHandlerConfig(input: unknown) : input is HandlerConfig {\n return isObject(input) &&\n typeof input.fn === 'function' &&\n typeof input.type === 'string';\n}\n\nexport function isHandler(input: unknown): input is Handler {\n return isInstance(input, HandlerSymbol);\n}\n","import { isObject } from '../utils';\nimport type {\n Plugin,\n} from './types';\n\nexport function isPlugin(input: unknown): input is Plugin {\n if (!isObject(input)) {\n return false;\n }\n\n if (\n typeof input.name !== 'undefined' &&\n typeof input.name !== 'string'\n ) {\n return false;\n }\n\n return typeof input.install === 'function' &&\n input.install.length === 1;\n}\n","import { buildEtagFn, buildTrustProxyFn } from '../utils';\nimport type { RouterOptions, RouterOptionsInput } from './type';\n\nexport function transformRouterOptions(input: RouterOptionsInput): Partial<RouterOptions> {\n if (typeof input.etag !== 'undefined') {\n input.etag = buildEtagFn(input.etag);\n }\n\n if (typeof input.trustProxy !== 'undefined') {\n input.trustProxy = buildTrustProxyFn(input.trustProxy);\n }\n\n return input as Partial<RouterOptions>;\n}\n","export const RouterSymbol = Symbol.for('Router');\n\nexport enum RouterPipelineStep {\n START,\n LOOKUP,\n CHILD_BEFORE,\n CHILD_DISPATCH,\n CHILD_AFTER,\n FINISH,\n}\n","import { isInstance } from '../utils';\nimport { RouterSymbol } from './constants';\nimport type { Router } from './module';\n\nlet nextId = 0;\nexport function generateRouterID(): number {\n return ++nextId;\n}\n\nexport function isRouterInstance(input: unknown): input is Router {\n return isInstance(input, RouterSymbol);\n}\n","import { distinctArray } from 'smob';\nimport { HeaderName, MethodName } from '../constants';\nimport type { DispatchEvent, Dispatcher } from '../dispatcher';\nimport type { RoutupError } from '../error';\nimport type { HandlerConfig } from '../handler';\nimport {\n Handler, HandlerType, isHandler, isHandlerConfig,\n} from '../handler';\nimport type {\n HookDefaultListener, HookErrorListener, HookListener, HookUnsubscribeFn,\n} from '../hook';\nimport { HookManager, HookName } from '../hook';\nimport type { Path } from '../path';\nimport { PathMatcher, isPath } from '../path';\nimport type { Plugin, PluginInstallContext } from '../plugin';\nimport { isPlugin } from '../plugin';\nimport { send } from '../response';\nimport type { RouterOptionsInput } from '../router-options';\nimport { setRouterOptions } from '../router-options';\nimport { transformRouterOptions } from '../router-options/transform';\nimport { cleanDoubleSlashes, withLeadingSlash, withoutTrailingSlash } from '../utils';\nimport { RouterPipelineStep, RouterSymbol } from './constants';\nimport type { RouterPipelineContext } from './types';\nimport { generateRouterID, isRouterInstance } from './utils';\n\nexport class Router implements Dispatcher {\n readonly '@instanceof' = RouterSymbol;\n\n /**\n * An identifier for the router instance.\n */\n readonly id : number;\n\n /**\n * A label for the router instance.\n */\n readonly name?: string;\n\n /**\n * Array of mounted layers, routes & routers.\n *\n * @protected\n */\n protected stack : (Router | Handler)[] = [];\n\n /**\n * Path matcher for the current mount path.\n *\n * @protected\n */\n protected pathMatcher : PathMatcher | undefined;\n\n /**\n * A hook manager.\n *\n * @protected\n */\n protected hookManager: HookManager;\n\n // --------------------------------------------------\n\n constructor(options: RouterOptionsInput = {}) {\n this.id = generateRouterID();\n this.name = options.name;\n\n this.hookManager = new HookManager();\n\n this.setPath(options.path);\n\n setRouterOptions(this.id, transformRouterOptions(options));\n }\n\n // --------------------------------------------------\n\n matchPath(path: string) : boolean {\n if (this.pathMatcher) {\n return this.pathMatcher.test(path);\n }\n\n return true;\n }\n\n setPath(value?: Path) {\n if (value === '/' || typeof value === 'undefined') {\n this.pathMatcher = undefined;\n return;\n }\n\n this.pathMatcher = new PathMatcher(\n withLeadingSlash(withoutTrailingSlash(`${value}`)),\n {\n end: false,\n },\n );\n }\n\n // --------------------------------------------------\n\n protected async executePipelineStep(context: RouterPipelineContext) : Promise<void> {\n switch (context.step) {\n case RouterPipelineStep.START: {\n return this.executePipelineStepStart(context);\n }\n case RouterPipelineStep.LOOKUP: {\n return this.executePipelineStepLookup(context);\n }\n case RouterPipelineStep.CHILD_BEFORE: {\n return this.executePipelineStepChildBefore(context);\n }\n case RouterPipelineStep.CHILD_DISPATCH: {\n return this.executePipelineStepChildDispatch(context);\n }\n case RouterPipelineStep.CHILD_AFTER: {\n return this.executePipelineStepChildAfter(context);\n }\n case RouterPipelineStep.FINISH:\n default: {\n return this.executePipelineStepFinish(context);\n }\n }\n }\n\n protected async executePipelineStepStart(context: RouterPipelineContext) : Promise<void> {\n return this.hookManager.trigger(HookName.DISPATCH_START, context.event)\n .then(() => {\n if (context.event.dispatched) {\n context.step = RouterPipelineStep.FINISH;\n } else {\n context.step++;\n }\n\n return this.executePipelineStep(context);\n });\n }\n\n protected async executePipelineStepLookup(context: RouterPipelineContext) : Promise<void> {\n if (\n context.event.dispatched ||\n context.stackIndex >= this.stack.length\n ) {\n context.step = RouterPipelineStep.FINISH;\n return this.executePipelineStep(context);\n }\n\n let match : boolean;\n\n const item = this.stack[context.stackIndex];\n\n if (isHandler(item)) {\n if (\n (context.event.error && item.type === HandlerType.CORE) ||\n (!context.event.error && item.type === HandlerType.ERROR)\n ) {\n context.stackIndex++;\n return this.executePipelineStepLookup(context);\n }\n\n match = item.matchPath(context.event.path);\n\n if (match) {\n if (item.method) {\n context.event.methodsAllowed.push(item.method);\n }\n\n if (item.matchMethod(context.event.method)) {\n await this.hookManager.trigger(HookName.CHILD_MATCH, context.event);\n\n if (context.event.dispatched) {\n context.step = RouterPipelineStep.FINISH;\n } else {\n context.step++;\n }\n\n return this.executePipelineStep(context);\n }\n }\n\n context.stackIndex++;\n return this.executePipelineStepLookup(context);\n }\n\n match = item.matchPath(context.event.path);\n\n if (match) {\n await this.hookManager.trigger(HookName.CHILD_MATCH, context.event);\n\n if (context.event.dispatched) {\n context.step = RouterPipelineStep.FINISH;\n } else {\n context.step++;\n }\n\n return this.executePipelineStep(context);\n }\n\n context.stackIndex++;\n return this.executePipelineStepLookup(context);\n }\n\n protected async executePipelineStepChildBefore(context: RouterPipelineContext) : Promise<void> {\n return this.hookManager.trigger(HookName.CHILD_DISPATCH_BEFORE, context.event)\n .then(() => {\n if (context.event.dispatched) {\n context.step = RouterPipelineStep.FINISH;\n } else {\n context.step++;\n }\n\n return this.executePipelineStep(context);\n });\n }\n\n protected async executePipelineStepChildAfter(context: RouterPipelineContext) : Promise<void> {\n return this.hookManager.trigger(HookName.CHILD_DISPATCH_AFTER, context.event)\n .then(() => {\n if (context.event.dispatched) {\n context.step = RouterPipelineStep.FINISH;\n } else {\n context.step = RouterPipelineStep.LOOKUP;\n }\n\n return this.executePipelineStep(context);\n });\n }\n\n protected async executePipelineStepChildDispatch(context: RouterPipelineContext) : Promise<void> {\n if (\n context.event.dispatched ||\n typeof this.stack[context.stackIndex] === 'undefined'\n ) {\n context.step = RouterPipelineStep.FINISH;\n return this.executePipelineStep(context);\n }\n\n try {\n await this.stack[context.stackIndex].dispatch(context.event);\n } catch (e) {\n context.event.error = e as RoutupError;\n\n await this.hookManager.trigger(HookName.ERROR, context.event);\n }\n\n context.stackIndex++;\n context.step++;\n\n return this.executePipelineStep(context);\n }\n\n protected async executePipelineStepFinish(context: RouterPipelineContext) : Promise<void> {\n if (context.event.error || context.event.dispatched) {\n return this.hookManager.trigger(HookName.DISPATCH_END, context.event);\n }\n\n if (\n !context.event.dispatched &&\n context.event.routerPath.length === 1 &&\n context.event.method &&\n context.event.method === MethodName.OPTIONS\n ) {\n if (context.event.methodsAllowed.indexOf(MethodName.GET) !== -1) {\n context.event.methodsAllowed.push(MethodName.HEAD);\n }\n\n distinctArray(context.event.methodsAllowed);\n\n const options = context.event.methodsAllowed\n .map((key) => key.toUpperCase())\n .join(',');\n\n context.event.response.setHeader(HeaderName.ALLOW, options);\n\n await send(context.event.response, options);\n\n context.event.dispatched = true;\n }\n\n return this.hookManager.trigger(HookName.DISPATCH_END, context.event);\n }\n\n // --------------------------------------------------\n\n async dispatch(\n event: DispatchEvent,\n ) : Promise<void> {\n if (this.pathMatcher) {\n const output = this.pathMatcher.exec(event.path);\n if (typeof output !== 'undefined') {\n event.mountPath = cleanDoubleSlashes(`${event.mountPath}/${output.path}`);\n\n if (event.path === output.path) {\n event.path = '/';\n } else {\n event.path = withLeadingSlash(event.path.substring(output.path.length));\n }\n\n event.params = {\n ...event.params,\n ...output.params,\n };\n }\n }\n\n const context : RouterPipelineContext = {\n step: RouterPipelineStep.START,\n event,\n stackIndex: 0,\n };\n\n event.routerPath.push(this.id);\n\n return this.executePipelineStepStart(context)\n .then(() => {\n context.event.routerPath.pop();\n });\n }\n\n // --------------------------------------------------\n\n delete(...handlers: (Handler | HandlerConfig)[]) : this;\n\n delete(path: Path, ...handlers: (Handler | HandlerConfig)[]) : this;\n\n delete(...input: (Path | Handler | HandlerConfig)[]) : this {\n this.useForMethod(MethodName.DELETE, ...input);\n\n return this;\n }\n\n get(...handlers: (Handler | HandlerConfig)[]) : this;\n\n get(path: Path, ...handlers: (Handler | HandlerConfig)[]) : this;\n\n get(...input: (Path | Handler | HandlerConfig)[]) : this {\n this.useForMethod(MethodName.GET, ...input);\n\n return this;\n }\n\n post(...handlers: (Handler | HandlerConfig)[]) : this;\n\n post(path: Path, ...handlers: (Handler | HandlerConfig)[]) : this;\n\n post(...input: (Path | Handler | HandlerConfig)[]) : this {\n this.useForMethod(MethodName.POST, ...input);\n\n return this;\n }\n\n put(...handlers: (Handler | HandlerConfig)[]) : this;\n\n put(path: Path, ...handlers: (Handler | HandlerConfig)[]) : this;\n\n put(...input: (Path | Handler | HandlerConfig)[]) : this {\n this.useForMethod(MethodName.PUT, ...input);\n\n return this;\n }\n\n patch(...handlers: (Handler | HandlerConfig)[]) : this;\n\n patch(path: Path, ...handlers: (Handler | HandlerConfig)[]) : this;\n\n patch(...input: (Path | Handler | HandlerConfig)[]) : this {\n this.useForMethod(MethodName.PATCH, ...input);\n\n return this;\n }\n\n head(...handlers: (Handler | HandlerConfig)[]) : this;\n\n head(path: Path, ...handlers: (Handler | HandlerConfig)[]) : this;\n\n head(...input: (Path | Handler | HandlerConfig)[]) : this {\n this.useForMethod(MethodName.HEAD, ...input);\n\n return this;\n }\n\n options(...handlers: (Handler | HandlerConfig)[]) : this;\n\n options(path: Path, ...handlers: (Handler | HandlerConfig)[]) : this;\n\n options(...input: (Path | Handler | HandlerConfig)[]) : this {\n this.useForMethod(MethodName.OPTIONS, ...input);\n\n return this;\n }\n\n // --------------------------------------------------\n\n protected useForMethod(\n method: MethodName,\n ...input: (Path | Handler | HandlerConfig)[]\n ) {\n let path : Path | undefined;\n\n for (let i = 0; i < input.length; i++) {\n const element = input[i];\n if (isPath(element)) {\n path = element;\n continue;\n }\n\n if (isHandlerConfig(element)) {\n if (path) {\n element.path = path;\n }\n\n element.method = method;\n\n this.use(element);\n\n continue;\n }\n\n if (isHandler(element)) {\n if (path) {\n element.setPath(path);\n }\n\n element.setMethod(method);\n\n this.use(element);\n }\n }\n }\n\n // --------------------------------------------------\n\n use(router: Router) : this;\n\n use(handler: Handler | HandlerConfig) : this;\n\n use(plugin: Plugin) : this;\n\n use(path: Path, router: Router) : this;\n\n use(path: Path, handler: Handler | HandlerConfig) : this;\n\n use(path: Path, plugin: Plugin) : this;\n\n use(...input: unknown[]) : this {\n let path : Path | undefined;\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n\n if (isPath(item)) {\n path = withLeadingSlash(item);\n continue;\n }\n\n if (isRouterInstance(item)) {\n if (path) {\n item.setPath(path);\n }\n this.stack.push(item);\n continue;\n }\n\n if (isHandlerConfig(item)) {\n item.path = path || item.path;\n\n this.stack.push(new Handler(item));\n continue;\n }\n\n if (isHandler(item)) {\n item.setPath(path || item.path);\n\n this.stack.push(item);\n continue;\n }\n\n if (isPlugin(item)) {\n if (path) {\n this.install(item, { path });\n } else {\n this.install(item);\n }\n }\n }\n\n return this;\n }\n\n // --------------------------------------------------\n protected install(\n plugin: Plugin,\n context: PluginInstallContext = {},\n ) : this {\n const name = context.name || plugin.name;\n\n const router = new Router({ name });\n plugin.install(router);\n\n if (context.path) {\n this.use(context.path, router);\n } else {\n this.use(router);\n }\n\n return this;\n }\n\n //---------------------------------------------------------------------------------\n\n /**\n * Add a hook listener.\n *\n * @param name\n * @param fn\n */\n\n on(\n name: `${HookName.DISPATCH_START}` |\n `${HookName.DISPATCH_END}` |\n `${HookName.CHILD_DISPATCH_BEFORE}` |\n `${HookName.CHILD_DISPATCH_AFTER}`,\n fn: HookDefaultListener\n ) : HookUnsubscribeFn;\n\n on(\n name: `${HookName.CHILD_MATCH}`,\n fn: HookErrorListener\n ) : HookUnsubscribeFn;\n\n on(\n name: `${HookName.ERROR}`,\n fn: HookErrorListener\n ) : HookUnsubscribeFn;\n\n on(name: `${HookName}`, fn: HookListener) : HookUnsubscribeFn {\n return this.hookManager.addListener(name, fn);\n }\n\n /**\n * Remove single or all hook listeners.\n *\n * @param name\n */\n\n off(name: `${HookName}`) : this;\n\n off(name: `${HookName}`, fn: HookListener) : this;\n\n off(name: `${HookName}`, fn?: HookListener) : this {\n if (typeof fn === 'undefined') {\n this.hookManager.removeListener(name);\n\n return this;\n }\n\n this.hookManager.removeListener(name, fn);\n return this;\n }\n}\n"],"names":["MethodName","HeaderName","isRequestCacheable","req","modifiedTime","modifiedSince","headers","IF_MODIFIED_SINCE","Date","splitCookiesString","input","Array","isArray","flatMap","el","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","length","test","charAt","notSpecialChar","push","substring","isObject","item","setProperty","record","property","value","getProperty","isStatsObject","obj","Object","prototype","toString","call","ctime","mtime","ino","size","sha1","str","enc","TextEncoder","hash","subtle","digest","encode","btoa","String","fromCharCode","Uint8Array","generateETag","getTime","entity","Buffer","isBuffer","createEtag","options","weak","tag","buildEtagFn","Promise","resolve","undefined","merge","body","encoding","buff","from","threshold","byteLength","buildTrustProxyFn","_address","hop","split","map","trim","compile","isInstance","sym","getMimeType","type","indexOf","getType","getCharsetForMimeType","meta","get","charset","toLowerCase","toMethodName","alt","toUpperCase","nextPlaceholder","_err","normalizeWindowsPath","includes","replace","EXTNAME_RE","extname","match","exec","basename","extension","lastSegment","pop","isPromise","p","then","isNodeStream","pipe","read","isWebStream","pipeTo","isStream","data","TRAILING_SLASH_RE","hasTrailingSlash","queryParams","endsWith","withoutTrailingSlash","slice","s0","s","join","hasLeadingSlash","startsWith","withLeadingSlash","cleanDoubleSlashes","isWebBlob","Blob","isWebResponse","Response","symbol","Symbol","for","setRequestEnv","key","propertyValue","useRequestEnv","unsetRequestEnv","hasOwnProperty","getRequestHeader","name","setRequestHeader","useRequestNegotiator","Negotiator","getRequestAcceptableContentTypes","negotiator","mediaTypes","getRequestAcceptableContentType","items","shift","header","ACCEPT","polluted","mimeTypes","i","mimeType","matches","getRequestAcceptableCharsets","charsets","getRequestAcceptableCharset","getRequestAcceptableEncodings","encodings","getRequestAcceptableEncoding","getRequestAcceptableLanguages","languages","getRequestAcceptableLanguage","matchRequestContentType","contentType","CONTENT_TYPE","defaults","trustProxy","subdomainOffset","etag","proxyIpMax","instances","setRouterOptions","id","findRouterOption","path","routerSymbol","setRequestRouterPath","useRequestRouterPath","getRequestHostName","hostname","X_FORWARDED_HOST","socket","remoteAddress","HOST","trimEnd","offset","index","isRequestHTTP2","getRequestIP","addrs","all","useRequestMountPath","setRequestMountPath","basePath","useRequestParams","useRequestParam","setRequestParams","setRequestParam","params","PathSymbol","useRequestPath","url","parsed","URL","pathname","getRequestProtocol","protocol","default","encrypted","X_FORWARDED_PROTO","createRequest","context","readable","Readable","fromWeb","rawHeaders","keys","j","headersDistinct","defineProperty","assign","aborted","complete","httpVersion","httpVersionMajor","httpVersionMinor","method","rawTrailers","trailers","trailersDistinct","setTimeout","_msecs","_callback","RoutupError","HTTPError","isError","createError","cause","setResponseCacheHeaders","res","cacheControls","concat","maxAge","setHeader","toUTCString","isResponseGone","headersSent","writableEnded","setResponseGone","serializeEventStreamMessage","message","result","event","retry","Number","isInteger","EventStream","response","passThrough","PassThrough","flushed","eventHandlers","open","on","end","err","emit","chunk","write","CACHE_CONTROL","X_ACCEL_BUFFERING","CONNECTION","statusCode","closed","writable","listener","args","listeners","apply","createEventStream","appendResponseHeader","getHeader","appendResponseHeaderDirective","Set","setResponseContentTypeByFileName","fileName","ext","setResponseHeaderAttachment","filename","CONTENT_DISPOSITION","setResponseHeaderContentType","ifNotExists","sendStream","stream","next","WritableStream","catch","reject","e","sendWebBlob","blob","sendWebResponse","webResponse","redirected","LOCATION","status","statusText","statusMessage","forEach","SET_COOKIE","appendHeader","send","Error","JSON","stringify","CONTENT_ENCODING","len","CONTENT_LENGTH","etagFn","chunkHash","ETag","IF_NONE_MATCH","removeHeader","TRANSFER_ENCODING","sendAccepted","sendCreated","sendFile","stats","attachment","dispositionHeader","contentOptions","rangeHeader","RANGE","x","y","Math","min","parseInt","CONTENT_RANGE","ACCEPT_RANGES","LAST_MODIFIED","content","sendFormat","formatDefault","formats","contentTypes","sendRedirect","location","encodedLoc","html","createResponse","request","output","chunkEncoding","callback","chunkEncoded","Writable","decodeStrings","arg2","arg3","cb","arrayBuffer","ArrayBuffer","view","chunkedEncoding","connection","sendDate","shouldKeepAlive","strictContentLength","useChunkedEncodingByDefault","finished","addTrailers","_headers","current","filter","Boolean","assignSocket","_socket","detachSocket","flushHeaders","getHeaderNames","getHeaders","hasHeader","setHeaders","Map","entries","writeContinue","writeEarlyHints","_hints","writeProcessing","writeHead","arg1","dispatch","target","mountPath","routerPath","handled","unsubscribe","off","done","shutdown","dispatched","once","handle","r","resolved","error","isDispatcherErrorEvent","DispatchEvent","GET","methodsAllowed","_dispatched","DispatchErrorEvent","dispatchNodeRequest","router","createNodeDispatcher","transformHeaderToTuples","transformHeadersToTuples","dispatchRawRequest","createRawResponse","createRawDispatcher","dispatchWebRequest","search","HEAD","createWebDispatcher","HandlerType","HandlerSymbol","HookName","HookManager","addListener","fn","removeListener","splice","trigger","hook","triggerListener","isErrorListenerHook","ERROR","decodeParam","val","decodeURIComponent","PathMatcher","regexpKeys","regexpOptions","regexp","pathToRegexp","prop","isPath","Handler","handler","config","hookManager","mountHooks","setPath","_method","pathMatcher","pathMatch","CHILD_DISPATCH_BEFORE","CHILD_DISPATCH_AFTER","matchPath","matchMethod","setMethod","onBefore","onAfter","onError","coreHandler","CORE","errorHandler","isHandlerConfig","isHandler","isPlugin","install","transformRouterOptions","RouterSymbol","RouterPipelineStep","nextId","generateRouterID","isRouterInstance","Router","stack","executePipelineStep","step","START","executePipelineStepStart","LOOKUP","executePipelineStepLookup","CHILD_BEFORE","executePipelineStepChildBefore","CHILD_DISPATCH","executePipelineStepChildDispatch","CHILD_AFTER","executePipelineStepChildAfter","FINISH","executePipelineStepFinish","DISPATCH_START","stackIndex","CHILD_MATCH","DISPATCH_END","OPTIONS","distinctArray","ALLOW","delete","useForMethod","DELETE","post","POST","put","PUT","patch","PATCH","head","element","use","plugin"],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,11 +0,0 @@
1
- export * from './adapters';
2
- export * from './constants';
3
- export * from './dispatcher';
4
- export * from './error';
5
- export * from './handler';
6
- export * from './response';
7
- export * from './request';
8
- export * from './path';
9
- export * from './plugin';
10
- export * from './router';
11
- export * from './types';