routup 4.0.2 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +49 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +49 -49
- package/dist/index.mjs.map +1 -1
- package/package.json +18 -19
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 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","open","response","on","end","err","emit","passThrough","chunk","write","CACHE_CONTROL","X_ACCEL_BUFFERING","CONNECTION","statusCode","closed","writable","flushed","listener","eventHandlers","args","listeners","apply","PassThrough","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","_dispatched","GET","methodsAllowed","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","regexp","regexpOptions","regexpKeys","prop","pathToRegexp","isPath","Handler","config","_method","pathMatcher","pathMatch","hookManager","CHILD_DISPATCH_BEFORE","CHILD_DISPATCH_AFTER","matchPath","setPath","matchMethod","setMethod","mountHooks","onBefore","onAfter","onError","handler","coreHandler","CORE","errorHandler","isHandlerConfig","isHandler","isPlugin","install","transformRouterOptions","RouterSymbol","RouterPipelineStep","nextId","generateRouterID","isRouterInstance","Router","executePipelineStep","step","START","executePipelineStepStart","LOOKUP","executePipelineStepLookup","CHILD_BEFORE","executePipelineStepChildBefore","CHILD_DISPATCH","executePipelineStepChildDispatch","CHILD_AFTER","executePipelineStepChildAfter","FINISH","executePipelineStepFinish","DISPATCH_START","stackIndex","stack","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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"}
|
|
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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"}
|