routup 1.0.0 → 1.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/etag/module.ts","../src/utils/object.ts","../src/utils/etag/utils.ts","../src/utils/trust-proxy/module.ts","../src/utils/is-instance.ts","../src/utils/mime.ts","../src/utils/path.ts","../src/utils/promise.ts","../src/utils/request.ts","../src/utils/url.ts","../src/config/module.ts","../src/constants.ts","../src/helpers/request/body.ts","../src/helpers/request/cache.ts","../src/helpers/request/cookie.ts","../src/helpers/request/env.ts","../src/helpers/request/header.ts","../src/helpers/request/negotiator.ts","../src/helpers/request/header-accept.ts","../src/helpers/request/header-accept-charset.ts","../src/helpers/request/header-accept-encoding.ts","../src/helpers/request/header-accept-language.ts","../src/helpers/request/header-content-type.ts","../src/helpers/request/hostname.ts","../src/helpers/request/ip.ts","../src/helpers/request/mount-path.ts","../src/helpers/request/params.ts","../src/helpers/request/path.ts","../src/helpers/request/protocol.ts","../src/helpers/request/query.ts","../src/helpers/response/cache.ts","../src/helpers/response/header.ts","../src/helpers/response/utils.ts","../src/helpers/response/header-attachment.ts","../src/helpers/response/header-content-type.ts","../src/helpers/response/send.ts","../src/helpers/response/send-accepted.ts","../src/helpers/response/send-created.ts","../src/helpers/response/send-stream.ts","../src/helpers/response/send-file.ts","../src/helpers/response/send-format.ts","../src/helpers/response/send-redirect.ts","../src/handler/utils.ts","../src/path/matcher.ts","../src/layer/module.ts","../src/layer/utils.ts","../src/route/module.ts","../src/route/utils.ts","../src/router/module.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport { Stats } from 'node:fs';\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 /* istanbul ignore next */\n if (\n typeof Stats === 'function' &&\n obj instanceof Stats\n ) {\n return true;\n }\n\n // quack quack\n return !!obj && typeof obj === 'object' &&\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\n/**\n * Generate an ETag.\n */\nexport function generateETag(input: string | Buffer | Stats) : 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 = crypto\n .createHash('sha1')\n .update(entity, 'utf8')\n .digest('base64')\n .substring(0, 27);\n\n return `\"${entity.length.toString(16)}-${hash}\"`;\n}\n\n/**\n * Create a simple ETag.\n */\nexport function createEtag(\n input: string | Buffer | Stats,\n options?: EtagOptions,\n) : 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 = generateETag(input);\n\n return weak ?\n `W/${tag}` :\n tag;\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","import { 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 () => 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 (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 proxyAddr 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 proxyAddr.compile(input || []);\n}\n","export function isInstance(input: unknown, name: string) {\n return (\n typeof input === 'object' &&\n input !== null &&\n (input as { '@instanceof': symbol })['@instanceof'] === Symbol.for(name)\n );\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 { Path } from '../type';\n\nexport function isPath(input: unknown) : input is Path {\n return typeof input === 'string' || input instanceof RegExp;\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 { GatewayTimeoutErrorOptions } from '@ebec/http';\nimport type { Next, Response } from '../type';\n\n/* istanbul ignore next */\nexport function createRequestTimeout(res: Response, timeout: number, done?: Next) {\n const instance = setTimeout(() => {\n res.statusCode = GatewayTimeoutErrorOptions.statusCode;\n res.statusMessage = GatewayTimeoutErrorOptions.message;\n\n res.end();\n }, timeout);\n\n res.once('close', () => {\n clearTimeout(instance);\n\n /* istanbul ignore next */\n if (typeof done === 'function') {\n done();\n }\n });\n\n /* istanbul ignore next */\n res.once('error', (e) => {\n clearTimeout(instance);\n\n if (typeof done === 'function') {\n done(e);\n }\n });\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.substr(1) : input) || '/';\n}\n\nexport function withLeadingSlash(input = ''): string {\n return hasLeadingSlash(input) ? input : (`/${input}`);\n}\n\nexport function cleanDoubleSlashes(input = ''): string {\n return input.split('://')\n .map((str) => str.replace(/\\/{2,}/g, '/'))\n .join('://');\n}\n","import type { FlattenObject } from 'continu';\nimport { Continu } from 'continu';\nimport process from 'node:process';\nimport zod from 'zod';\nimport type {\n EtagInput,\n TrustProxyInput,\n} from '../utils';\nimport {\n buildEtagFn,\n buildTrustProxyFn,\n} from '../utils';\nimport type { Options, OptionsInput } from './type';\n\nlet instance : Continu<Options, OptionsInput> | undefined;\n\nexport function buildConfig() {\n return new Continu<Options, OptionsInput>({\n defaults: {\n env: process.env.NODE_ENV || 'development',\n trustProxy: () => false,\n subdomainOffset: 2,\n etag: buildEtagFn(),\n proxyIpMax: 0,\n },\n transformers: {\n etag: (value) => buildEtagFn(value as EtagInput),\n trustProxy: (value) => buildTrustProxyFn(value as TrustProxyInput),\n },\n validators: {\n env: (value) => zod.string().safeParse(value),\n trustProxy: (value) => zod.any().safeParse(value),\n subdomainOffset: (value) => zod.number().nonnegative().safeParse(value),\n etag: (value) => zod.any().safeParse(value),\n proxyIpMax: (value) => zod.number().nonnegative().safeParse(value),\n },\n });\n}\n\nexport function useConfig() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = buildConfig();\n\n return instance;\n}\n\nexport function setConfig(config: Continu<Options, OptionsInput>) {\n instance = config;\n}\n\nexport function setConfigOption<K extends keyof FlattenObject<OptionsInput>>(\n key: K,\n value: FlattenObject<OptionsInput>[K],\n) {\n const config = useConfig();\n\n config.setRaw(key, value);\n\n return config.get();\n}\n\nexport function getConfigOption(key: keyof FlattenObject<OptionsInput>) {\n const config = useConfig();\n\n return config.get(key);\n}\n","export enum Method {\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 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_FORWARDED_HOST = 'x-forwarded-host',\n X_FORWARDED_FOR = 'x-forwarded-for',\n X_FORWARDED_PROTO = 'x-forwarded-proto',\n}\n","import { merge } from 'smob';\nimport type { Request } from '../../type';\nimport { isObject } from '../../utils';\n\nconst BodySymbol = Symbol.for('ReqBody');\n\nexport function useRequestBody(req: Request) : Record<string, any>;\nexport function useRequestBody(req: Request, key: string) : any | undefined;\nexport function useRequestBody(req: Request, key?: string) {\n let body : Record<string, any> | undefined;\n\n /* istanbul ignore next */\n if ('body' in req) {\n body = (req as any).body;\n }\n\n if (BodySymbol in req) {\n if (body) {\n body = merge(\n {},\n (req as any)[BodySymbol],\n body,\n );\n } else {\n body = (req as any)[BodySymbol];\n }\n }\n\n if (body) {\n if (typeof key === 'string') {\n return body[key];\n }\n\n return body;\n }\n\n return typeof key === 'string' ?\n undefined :\n {};\n}\n\nexport function hasRequestBody(req: Request) : boolean {\n return 'body' in req || BodySymbol in req;\n}\n\nexport function setRequestBody(req: Request, key: string, value: unknown) : void;\nexport function setRequestBody(req: Request, record: Record<string, any>) : void;\nexport function setRequestBody(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (isObject(key)) {\n (req as any)[BodySymbol] = key;\n return;\n }\n\n (req as any)[BodySymbol] = {\n [key]: value,\n };\n}\n\nexport function extendRequestBody(req: Request, key: string, value: unknown) : void;\nexport function extendRequestBody(req: Request, record: Record<string, any>) : void;\nexport function extendRequestBody(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (hasRequestBody(req)) {\n const body = useRequestBody(req);\n\n // body can not be merged :/\n if (!isObject(body)) {\n return;\n }\n\n if (isObject(key)) {\n (req as any)[BodySymbol] = merge({}, key, body);\n } else {\n body[key] = value;\n (req as any)[BodySymbol] = body;\n }\n\n return;\n }\n\n if (isObject(key)) {\n setRequestBody(req, key);\n\n return;\n }\n\n setRequestBody(req, key, value);\n}\n","import { HeaderName } from '../../constants';\nimport type { Request } from '../../type';\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","import { merge } from 'smob';\nimport type { Request } from '../../type';\nimport { isObject } from '../../utils';\n\nconst CookieSymbol = Symbol.for('ReqCookie');\n\nexport function useRequestCookies(\n req: Request,\n) : Record<string, string> {\n if (CookieSymbol in req) {\n return (req as any)[CookieSymbol];\n }\n\n return {};\n}\n\nexport function hasRequestCookies(req: Request) {\n return CookieSymbol in req &&\n isObject((req as any)[CookieSymbol]);\n}\n\nexport function useRequestCookie(req: Request, name: string) : string | undefined {\n return useRequestCookies(req)[name];\n}\n\nexport function setRequestCookies(req: Request, key: string, value: unknown) : void;\nexport function setRequestCookies(req: Request, record: Record<string, any>) : void;\nexport function setRequestCookies(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (isObject(key)) {\n (req as any)[CookieSymbol] = key;\n return;\n }\n\n (req as any)[CookieSymbol] = {\n [key]: value,\n };\n}\n\nexport function extendRequestCookies(req: Request, key: string, value: string) : void;\nexport function extendRequestCookies(req: Request, record: Record<string, any>) : void;\nexport function extendRequestCookies(\n req: Request,\n key: string | Record<string, any>,\n value?: string,\n) {\n if (hasRequestCookies(req)) {\n const cookies = useRequestCookies(req);\n\n if (isObject(key)) {\n (req as any)[CookieSymbol] = merge({}, key, cookies);\n } else {\n cookies[key] = value as string;\n (req as any)[CookieSymbol] = cookies;\n }\n\n (req as any)[CookieSymbol] = merge((req as any)[CookieSymbol], cookies);\n\n return;\n }\n\n if (isObject(key)) {\n setRequestCookies(req, key);\n\n return;\n }\n\n setRequestCookies(req, key, value);\n}\n","import { hasOwnProperty, merge } from 'smob';\nimport type { Request } from '../../type';\n\nconst envSymbol = Symbol.for('ReqEnv');\n\nexport function setRequestEnv(req: Request, key: string, value: unknown) : void;\nexport function setRequestEnv(req: Request, record: Record<string, any>, append?: boolean) : void;\nexport function setRequestEnv(req: Request, key: Record<string, any> | string, value?: boolean | unknown) : void {\n if (envSymbol in req) {\n if (typeof key === 'object') {\n if (value) {\n (req as any)[envSymbol] = merge((req as any)[envSymbol], key);\n } else {\n (req as any)[envSymbol] = key;\n }\n } else {\n (req as any)[envSymbol][key] = value;\n }\n\n return;\n }\n\n if (typeof key === 'object') {\n (req as any)[envSymbol] = key;\n return;\n }\n\n (req as any)[envSymbol] = {\n [key]: value,\n };\n}\n\nexport function useRequestEnv(req: Request) : Record<string, any>;\nexport function useRequestEnv(req: Request, key: string) : unknown | undefined;\nexport function useRequestEnv(req: Request, key?: string) {\n if (envSymbol in req) {\n if (typeof key === 'string') {\n return (req as any)[envSymbol][key];\n }\n\n return (req as any)[envSymbol];\n }\n\n if (typeof key === 'string') {\n return undefined;\n }\n\n return {};\n}\n\nexport function unsetRequestEnv(req: Request, key: string) {\n if (envSymbol in req) {\n if (hasOwnProperty((req as any)[envSymbol], key)) {\n delete (req as any)[envSymbol][key];\n }\n }\n}\n","import type { IncomingHttpHeaders } from 'node:http';\nimport type { Request } from '../../type';\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 type { Request } from '../../type';\n\nconst NegotiatorSymbol = Symbol.for('ReqNegotiator');\n\nexport function useRequestNegotiator(req: Request) : Negotiator {\n if (NegotiatorSymbol in req) {\n return (req as any)[NegotiatorSymbol];\n }\n\n return new Negotiator(req);\n}\n","import type { Request } from '../../type';\nimport { HeaderName } from '../../constants';\nimport { getMimeType } from '../../utils';\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 '../../type';\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 '../../type';\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 type { Request } from '../../type';\nimport { getMimeType } from '../../utils';\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 type { Request } from '../../type';\nimport { useConfig } from '../../config';\nimport { HeaderName } from '../../constants';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\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 const config = useConfig();\n trustProxy = config.get('trustProxy');\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 proxyAddr from 'proxy-addr';\nimport type { Request } from '../../type';\nimport { useConfig } from '../../config';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\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 const config = useConfig();\n trustProxy = config.get('trustProxy');\n }\n\n return proxyAddr(req, trustProxy);\n}\n","import type { Request } from '../../type';\n\nconst ReqMountPathSymbol = Symbol.for('ReqMountPath');\n\nexport function useRequestMountPath(req: Request) : string {\n if (ReqMountPathSymbol in req) {\n return (req as any)[ReqMountPathSymbol];\n }\n\n return '/';\n}\n\nexport function setRequestMountPath(req: Request, basePath: string) {\n (req as any)[ReqMountPathSymbol] = basePath;\n}\n","import type { Request } from '../../type';\n\nconst ParamsSymbol = Symbol.for('ReqParams');\n\nexport function useRequestParams(req: Request) : Record<string, any> {\n /* istanbul ignore next */\n if ('params' in req) {\n return (req as any).params;\n }\n\n if (ParamsSymbol in req) {\n return (req as any)[ParamsSymbol];\n }\n\n return {};\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 (req as any)[ParamsSymbol] = 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 { URL } from 'node:url';\nimport type { Request } from '../../type';\n\nconst PathSymbol = Symbol.for('ReqPath');\n\nexport function useRequestPath(req: Request) : string {\n if ('path' in req) {\n return (req as any).path;\n }\n\n if (PathSymbol in req) {\n return (req as any)[PathSymbol];\n }\n\n if (typeof req.url === 'undefined') {\n return '/';\n }\n\n const parsed = new URL(req.url, 'http://localhost/');\n\n (req as any)[PathSymbol] = parsed.pathname;\n\n return (req as any)[PathSymbol];\n}\n","import { hasOwnProperty } from 'smob';\nimport { useConfig } from '../../config';\nimport { HeaderName } from '../../constants';\nimport type { Request } from '../../type';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\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 const config = useConfig();\n trustProxy = config.get('trustProxy');\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 { merge } from 'smob';\nimport { isObject } from '../../utils';\nimport type { Request } from '../../type';\n\nconst QuerySymbol = Symbol.for('ReqQuery');\n\nexport function useRequestQuery(req: Request) : Record<string, any>;\nexport function useRequestQuery(req: Request, key: string) : any;\nexport function useRequestQuery(req: Request, key?: string) {\n /* istanbul ignore if */\n if ('query' in req) {\n if (typeof key === 'string') {\n return (req as any).query[key];\n }\n\n return (req as any).query;\n }\n\n if (QuerySymbol in req) {\n if (typeof key === 'string') {\n return (req as any)[QuerySymbol][key];\n }\n\n return (req as any)[QuerySymbol];\n }\n\n return typeof key === 'string' ?\n undefined :\n {};\n}\n\nexport function hasRequestQuery(req: Request) : boolean {\n return (\n (QuerySymbol in req) &&\n isObject((req as any)[QuerySymbol])\n ) ||\n (\n ('query' in req) &&\n isObject(req.query)\n );\n}\n\nexport function setRequestQuery(req: Request, key: string, value: unknown) : void;\nexport function setRequestQuery(req: Request, record: Record<string, any>) : void;\nexport function setRequestQuery(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (isObject(key)) {\n (req as any)[QuerySymbol] = key;\n return;\n }\n\n (req as any)[QuerySymbol] = {\n [key]: value,\n };\n}\n\nexport function extendRequestQuery(req: Request, key: string, value: unknown) : void;\nexport function extendRequestQuery(req: Request, record: Record<string, any>) : void;\nexport function extendRequestQuery(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (hasRequestQuery(req)) {\n const query = useRequestQuery(req);\n\n if (isObject(key)) {\n (req as any)[QuerySymbol] = merge({}, key, query);\n } else {\n query[key] = value;\n (req as any)[QuerySymbol] = query;\n }\n\n return;\n }\n\n if (isObject(key)) {\n setRequestQuery(req, key);\n return;\n }\n\n setRequestQuery(req, key, value);\n}\n","import type { Response } from '../../type';\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 type { OutgoingHttpHeader } from 'node:http';\nimport type { Response } from '../../type';\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 path from 'node:path';\nimport { HeaderName } from '../../constants';\nimport type { Response } from '../../type';\nimport { getCharsetForMimeType, getMimeType } from '../../utils';\n\nexport function setResponseContentTypeByFileName(res: Response, fileName: string) {\n const ext = path.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\n/* istanbul ignore next */\nexport function onResponseFinished(\n res: Response,\n cb: (err?: Error) => void,\n) {\n let called : boolean;\n\n const callCallback = (err?: Error) => {\n if (called) return;\n\n called = true;\n\n cb(err);\n };\n\n res.on('finish', () => {\n callCallback();\n });\n\n res.on('close', () => {\n callCallback();\n });\n\n res.on('error', (err) => {\n callCallback(err);\n });\n}\n","import { HeaderName } from '../../constants';\nimport type { Response } from '../../type';\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 type { Response } from '../../type';\nimport { getMimeType } from '../../utils';\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 { useConfig } from '../../config';\nimport { HeaderName } from '../../constants';\nimport type { Response } from '../../type';\nimport { appendResponseHeaderDirective } from './header';\nimport { setResponseHeaderContentType } from './header-content-type';\n\nexport function send(res: Response, chunk?: any) {\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 chunk = '';\n } else 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 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 (chunk !== undefined) {\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 const config = useConfig();\n const etagFn = config.get('etag');\n\n if (\n typeof len !== 'undefined'\n ) {\n const chunkHash = etagFn(chunk, encoding, len);\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 chunk = '';\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 chunk = '';\n }\n\n if (res.req.method === 'HEAD') {\n // skip body for HEAD\n res.end();\n\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 '../../type';\nimport { send } from './send';\n\nexport function sendAccepted(res: Response, chunk?: any) {\n res.statusCode = 202;\n res.statusMessage = 'Accepted';\n\n return send(res, chunk);\n}\n","import type { Response } from '../../type';\nimport { send } from './send';\n\nexport function sendCreated(res: Response, chunk?: any) {\n res.statusCode = 201;\n res.statusMessage = 'Created';\n\n return send(res, chunk);\n}\n","import type { Readable } from 'node:stream';\nimport type { Response } from '../../type';\n\nexport function sendStream(res: Response, stream: Readable, fn?: CallableFunction) {\n stream.on('open', () => {\n stream.pipe(res);\n });\n\n /* istanbul ignore next */\n stream.on('error', (err) => {\n if (typeof fn === 'function') {\n fn(err);\n } else {\n res.statusCode = 400;\n res.end();\n }\n });\n\n stream.on('close', () => {\n if (typeof fn === 'function') {\n fn();\n } else {\n res.end();\n }\n });\n}\n","import type { Stats } from 'node:fs';\nimport { createReadStream, stat } from 'node:fs';\nimport path from 'node:path';\nimport { HeaderName } from '../../constants';\nimport type { Response } from '../../type';\nimport { setResponseHeaderAttachment } from './header-attachment';\nimport { sendStream } from './send-stream';\nimport { setResponseContentTypeByFileName } from './utils';\n\ntype ReadStreamOptions = {\n end?: number,\n\n start?: number | undefined;\n};\n\nexport type SendFileOptions = {\n stats?: Stats,\n filePath: string,\n attachment?: boolean\n};\n\nfunction resolveStats(\n options: SendFileOptions,\n cb: (err: Error | null, stats: Stats) => void,\n) {\n if (options.stats) {\n cb(null, options.stats);\n return;\n }\n\n stat(options.filePath, (err, stats) => cb(err, stats));\n}\n\nexport function sendFile(res: Response, filePath: string | SendFileOptions, fn?: CallableFunction) {\n let options : SendFileOptions;\n\n if (typeof filePath === 'string') {\n options = {\n filePath,\n };\n } else {\n options = filePath;\n }\n\n const fileName = path.basename(options.filePath);\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 resolveStats(options, (err, stats) => {\n /* istanbul ignore next */\n if (err) {\n if (typeof fn === 'function') {\n fn(err);\n } else {\n res.statusCode = 404;\n res.end();\n }\n\n return;\n }\n\n const streamOptions : ReadStreamOptions = {};\n\n const rangeHeader = res.req.headers[HeaderName.RANGE];\n if (rangeHeader) {\n const [x, y] = rangeHeader.replace('bytes=', '')\n .split('-');\n\n streamOptions.end = Math.min(\n parseInt(y, 10) || stats.size - 1,\n stats.size - 1,\n );\n\n streamOptions.start = parseInt(x, 10) || 0;\n\n if (streamOptions.end >= stats.size) {\n streamOptions.end = stats.size - 1;\n }\n\n if (streamOptions.start >= stats.size) {\n res.setHeader(HeaderName.CONTENT_RANGE, `bytes */${stats.size}`);\n res.statusCode = 416;\n res.end();\n return;\n }\n\n res.setHeader(HeaderName.CONTENT_RANGE, `bytes ${streamOptions.start}-${streamOptions.end}/${stats.size}`);\n res.setHeader(HeaderName.CONTENT_LENGTH, (streamOptions.end - streamOptions.start + 1));\n } else {\n res.setHeader(HeaderName.CONTENT_LENGTH, stats.size);\n }\n\n res.setHeader(HeaderName.ACCEPT_RANGES, 'bytes');\n res.setHeader(HeaderName.LAST_MODIFIED, stats.mtime.toUTCString());\n res.setHeader(HeaderName.ETag, `W/\"${stats.size}-${stats.mtime.getTime()}\"`);\n\n sendStream(res, createReadStream(options.filePath, streamOptions), fn);\n });\n}\n","import type { Response } from '../../type';\nimport { getRequestAcceptableContentType } from '../request';\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 '../../type';\nimport { send } from './send';\n\nexport function sendRedirect(res: Response, location: string, statusCode = 302) {\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 { Next, Response } from '../type';\nimport { send } from '../helpers';\nimport { isPromise } from '../utils';\n\nexport function processHandlerExecutionOutput(res: Response, next: Next, output?: unknown) {\n if (isPromise(output)) {\n output\n .then((r) => {\n if (typeof r !== 'undefined') {\n send(res, r);\n }\n\n return r;\n })\n .catch(next);\n return;\n }\n\n if (typeof output !== 'undefined') {\n send(res, output);\n }\n}\n","import type { Key } from 'path-to-regexp';\nimport { pathToRegexp } from 'path-to-regexp';\nimport type { Path } from '../type';\nimport type { 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 path: Path;\n\n regexp : RegExp;\n\n regexpKeys : Key[] = [];\n\n regexpOptions: PathMatcherOptions;\n\n constructor(path: Path, options?: PathMatcherOptions) {\n this.path = path;\n this.regexpOptions = options || {};\n\n if (path instanceof RegExp) {\n this.regexp = path;\n } else {\n this.regexp = pathToRegexp(path, this.regexpKeys, options);\n }\n }\n\n test(path: string) {\n const fastSlash = this.path === '/' && this.regexpOptions.end === false;\n if (fastSlash) {\n return true;\n }\n\n return this.regexp.test(path);\n }\n\n exec(path: string) : PathMatcherExecResult | undefined {\n let match : RegExpExecArray | null = null;\n\n const fastSlash = this.path === '/' && this.regexpOptions.end === false;\n if (fastSlash) {\n return {\n path: '/',\n params: {},\n };\n }\n\n match = this.regexp.exec(path);\n\n if (!match) {\n return undefined;\n }\n\n if (this.path instanceof RegExp) {\n return {\n path,\n params: {\n 0: decodeParam(match[0]),\n },\n };\n }\n\n const output : 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 output[prop] = val;\n }\n }\n\n return {\n path: match[0],\n params: output,\n };\n }\n}\n","import { BadRequestError } from '@ebec/http';\nimport { setRequestMountPath, setRequestParams } from '../helpers';\nimport type {\n DispatcherMeta, Next, Request,\n Response,\n} from '../type';\nimport { processHandlerExecutionOutput } from '../handler';\nimport { PathMatcher } from '../path';\nimport type { LayerOptions } from './type';\n\nexport class Layer {\n readonly '@instanceof' = Symbol.for('Layer');\n\n protected fn : CallableFunction;\n\n protected pathMatcher : PathMatcher;\n\n // --------------------------------------------------\n\n constructor(\n options: LayerOptions,\n fn: CallableFunction,\n ) {\n this.pathMatcher = new PathMatcher(options.path, options.pathMatcher);\n this.fn = fn;\n }\n\n // --------------------------------------------------\n\n isError() {\n return this.fn.length === 4;\n }\n\n // --------------------------------------------------\n\n dispatch(\n req: Request,\n res: Response,\n meta: DispatcherMeta,\n next: CallableFunction\n ) : void;\n\n dispatch(\n req: Request,\n res: Response,\n meta: DispatcherMeta,\n next: CallableFunction,\n err: Error,\n ) : void;\n\n dispatch(\n req: Request,\n res: Response,\n meta: DispatcherMeta,\n next: Next,\n err?: Error,\n ) : void {\n setRequestParams(req, meta.params || {});\n setRequestMountPath(req, meta.mountPath || '/');\n\n if (typeof err !== 'undefined') {\n if (this.fn.length === 4) {\n try {\n this.fn(err, req, res, next);\n } catch (e) {\n /* istanbul ignore next */\n /* istanbul ignore next */\n if (e instanceof Error) {\n next(e);\n } else {\n next(new BadRequestError({\n message: 'The request could not be processed by the error handler.',\n }));\n }\n }\n\n return;\n }\n\n /* istanbul ignore next */\n next(err);\n /* istanbul ignore next */\n return;\n }\n\n /* istanbul ignore next */\n if (this.fn.length > 3) {\n next();\n return;\n }\n\n try {\n const output = this.fn(req, res, next);\n\n processHandlerExecutionOutput(res, next, output);\n } catch (e) {\n /* istanbul ignore next */\n if (e instanceof Error) {\n next(e);\n } else {\n next(new BadRequestError({\n message: 'The request could not be processed by the handler.',\n }));\n }\n }\n }\n\n // --------------------------------------------------\n\n matchPath(path: string) : boolean {\n return this.pathMatcher.test(path);\n }\n\n exec(path: string) {\n return this.pathMatcher.exec(path);\n }\n}\n","import { isInstance } from '../utils';\nimport type { Layer } from './module';\n\nexport function isLayerInstance(input: unknown) : input is Layer {\n return isInstance(input, 'Layer');\n}\n","import { hasOwnProperty, merge } from 'smob';\nimport { Method } from '../constants';\nimport type {\n DispatcherMeta, Handler, Next, Path,\n\n Request,\n Response,\n} from '../type';\nimport { Layer } from '../layer';\nimport type { PathMatcherOptions } from '../path';\nimport { PathMatcher } from '../path';\nimport type { RouteOptions } from './type';\n\nexport class Route {\n readonly '@instanceof' = Symbol.for('Route');\n\n public path : Path;\n\n protected pathMatcher : PathMatcher;\n\n protected pathMatcherOptions : PathMatcherOptions;\n\n protected layers : Record<string, Layer[]> = {};\n\n // --------------------------------------------------\n\n constructor(options: RouteOptions) {\n this.path = options.path;\n\n this.pathMatcherOptions = {\n end: true,\n strict: this.isStrictPath(),\n ...options.pathMatcher,\n };\n this.pathMatcher = new PathMatcher(this.path, this.pathMatcherOptions);\n }\n\n // --------------------------------------------------\n\n matchPath(path: string) : boolean {\n return this.pathMatcher.test(path);\n }\n\n matchMethod(method: string) : boolean {\n let name = method.toLowerCase();\n\n if (\n name === Method.HEAD &&\n !hasOwnProperty(this.layers, name)\n ) {\n name = Method.GET;\n }\n\n return Object.prototype.hasOwnProperty.call(this.layers, name);\n }\n\n // --------------------------------------------------\n\n getMethods() : string[] {\n const keys = Object.keys(this.layers);\n\n if (\n hasOwnProperty(this.layers, Method.GET) &&\n !hasOwnProperty(this.layers, Method.HEAD)\n ) {\n keys.push(Method.HEAD);\n }\n\n return keys;\n }\n\n // --------------------------------------------------\n\n dispatch(\n req: Request,\n res: Response,\n meta: DispatcherMeta,\n done: Next,\n ) : void {\n /* istanbul ignore next */\n if (!req.method) {\n done();\n return;\n }\n\n let name = req.method.toLowerCase();\n\n if (\n name === Method.HEAD &&\n !hasOwnProperty(this.layers, name)\n ) {\n name = Method.GET;\n }\n\n const layers = this.layers[name];\n\n /* istanbul ignore next */\n if (\n typeof layers === 'undefined' ||\n layers.length === 0 ||\n typeof meta.path === 'undefined'\n ) {\n done();\n\n return;\n }\n\n const layerMeta : DispatcherMeta = {\n ...meta,\n };\n\n const output = this.pathMatcher.exec(meta.path);\n if (output) {\n layerMeta.params = merge({}, (meta.params || {}), output.params);\n }\n\n let index = -1;\n\n const next = (err?: Error) : void => {\n index++;\n\n if (index >= layers.length) {\n setImmediate(done, err);\n return;\n }\n\n const layer = layers[index];\n if (\n err &&\n !layer.isError()\n ) {\n next(err);\n return;\n }\n\n layer.dispatch(req, res, { ...layerMeta }, next);\n };\n\n next();\n }\n\n // --------------------------------------------------\n\n register(method: `${Method}`, ...handlers: Handler[]) {\n this.layers[method] = [];\n\n for (let i = 0; i < handlers.length; i++) {\n const layer = new Layer(\n {\n path: this.path,\n pathMatcher: this.pathMatcherOptions,\n },\n handlers[i],\n );\n\n this.layers[method].push(layer);\n }\n }\n\n get(...handlers: Handler[]) {\n return this.register(Method.GET, ...handlers);\n }\n\n post(...handlers: Handler[]) {\n return this.register(Method.POST, ...handlers);\n }\n\n put(...handlers: Handler[]) {\n return this.register(Method.PUT, ...handlers);\n }\n\n patch(...handlers: Handler[]) {\n return this.register(Method.PATCH, ...handlers);\n }\n\n delete(...handlers: Handler[]) {\n return this.register(Method.DELETE, ...handlers);\n }\n\n head(...handlers: Handler[]) {\n return this.register(Method.HEAD, ...handlers);\n }\n\n options(...handlers: Handler[]) {\n return this.register(Method.OPTIONS, ...handlers);\n }\n\n // --------------------------------------------------\n\n private isStrictPath() {\n return typeof this.path !== 'string' ||\n (this.path !== '/' && this.path.length !== 0);\n }\n}\n","import { isInstance } from '../utils';\nimport type { Route } from './module';\n\nexport function isRouteInstance(input: unknown) : input is Route {\n return isInstance(input, 'Route');\n}\n","import type { RequestListener } from 'node:http';\nimport { createServer } from 'node:http';\nimport { merge, mergeArrays } from 'smob';\nimport type {\n DispatcherMeta,\n ErrorHandler,\n Handler,\n Next,\n Path,\n\n Request,\n Response,\n} from '../type';\nimport {\n HeaderName,\n Method,\n} from '../constants';\nimport {\n send,\n useRequestPath,\n} from '../helpers';\nimport {\n cleanDoubleSlashes,\n createRequestTimeout,\n isInstance,\n\n isPath,\n withLeadingSlash,\n withoutTrailingSlash,\n\n} from '../utils';\nimport type { PathMatcherOptions } from '../path';\nimport { PathMatcher } from '../path';\nimport { Layer, isLayerInstance } from '../layer';\nimport { Route, isRouteInstance } from '../route';\nimport type { RouterOptions } from './type';\n\nexport function isRouterInstance(input: unknown) : input is Router {\n return isInstance(input, 'Router');\n}\n\nexport class Router {\n readonly '@instanceof' = Symbol.for('Router');\n\n /**\n * Array of mounted layers, routes & routers.\n *\n * @protected\n */\n protected stack : (Router | Route | Layer)[] = [];\n\n /**\n * Mount path of instance\n *\n * @protected\n */\n protected path : Path | undefined;\n\n /**\n * Path matcher for the current mount path.\n *\n * @protected\n */\n protected pathMatcher : PathMatcher | undefined;\n\n /**\n * Path matcher options.\n *\n * @protected\n */\n protected pathMatcherOptions : PathMatcherOptions;\n\n /**\n * Is this the root instance?\n *\n * @protected\n */\n protected isRoot : boolean | undefined;\n\n /**\n * Timeout before the router decides to abort the request.\n *\n * @protected\n */\n protected timeout: number | undefined;\n\n // --------------------------------------------------\n\n constructor(ctx?: RouterOptions) {\n ctx = ctx || {};\n\n this.pathMatcherOptions = {\n end: false,\n sensitive: true,\n ...(ctx.pathMatcher || {}),\n };\n\n this.timeout = ctx.timeout;\n\n this.setPath(ctx.path || '/');\n }\n\n // --------------------------------------------------\n\n setPathMatcherOptions(input: PathMatcherOptions) {\n this.pathMatcherOptions = input;\n\n if (this.pathMatcher) {\n this.pathMatcher.regexpOptions = this.pathMatcherOptions;\n }\n }\n\n setPath(value: Path) {\n if (value === '/' || !isPath(value)) {\n this.path = '/';\n return;\n }\n\n if (typeof value === 'string') {\n this.path = withLeadingSlash(withoutTrailingSlash(`${value}`));\n } else {\n this.path = value;\n }\n\n this.pathMatcher = new PathMatcher(this.path, this.pathMatcherOptions);\n }\n\n // --------------------------------------------------\n\n createListener() : RequestListener {\n this.isRoot = true;\n\n return (req, res) => {\n this.dispatch(req, res);\n };\n }\n\n /* istanbul ignore next */\n listen(port: number) {\n const server = createServer(this.createListener());\n return server.listen(port);\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 // --------------------------------------------------\n\n dispatch(\n req: Request,\n res: Response,\n meta?: DispatcherMeta,\n done?: Next,\n ) : void {\n let index = -1;\n\n meta = meta || {};\n\n let allowedMethods : string[] = [];\n\n if (\n this.isRoot &&\n typeof this.timeout === 'number'\n ) {\n createRequestTimeout(res, this.timeout, done);\n }\n\n const fn = (err?: Error) => {\n /* istanbul ignore if */\n if (!this.isRoot) {\n if (typeof done !== 'undefined') {\n setImmediate(() => done(err));\n }\n\n return;\n }\n\n if (typeof err !== 'undefined') {\n res.statusCode = 400;\n res.end();\n\n return;\n }\n\n if (\n req.method &&\n req.method.toLowerCase() === Method.OPTIONS\n ) {\n const options = allowedMethods\n .map((key) => key.toUpperCase())\n .join(',');\n\n res.setHeader(HeaderName.ALLOW, options);\n send(res, options);\n\n return;\n }\n\n res.statusCode = 404;\n res.end();\n };\n\n let path = meta.path || useRequestPath(req);\n\n if (this.pathMatcher) {\n const output = this.pathMatcher.exec(path);\n if (typeof output !== 'undefined') {\n meta.mountPath = cleanDoubleSlashes(`${meta.mountPath || ''}/${output.path}`);\n\n if (path === output.path) {\n path = '/';\n } else {\n path = withLeadingSlash(path.substring(output.path.length));\n }\n\n meta.params = merge(meta.params || {}, output.params);\n }\n }\n\n meta.path = path;\n\n if (!meta.mountPath) {\n meta.mountPath = '/';\n }\n\n const next = (err?: Error) : void => {\n if (index >= this.stack.length) {\n setImmediate(fn, err);\n return;\n }\n\n let layer : Route | Router | Layer | undefined;\n let match = false;\n\n while (!match && index < this.stack.length) {\n index++;\n\n layer = this.stack[index];\n\n if (isLayerInstance(layer)) {\n if (!layer.isError() && err) {\n continue;\n }\n\n match = layer.matchPath(path);\n }\n\n if (isRouterInstance(layer)) {\n match = layer.matchPath(path);\n }\n\n if (isRouteInstance(layer)) {\n match = layer.matchPath(path);\n\n if (\n req.method &&\n !layer.matchMethod(req.method)\n ) {\n match = false;\n\n if (req.method.toLowerCase() === Method.OPTIONS) {\n allowedMethods = mergeArrays(\n allowedMethods,\n layer.getMethods(),\n true,\n );\n }\n }\n }\n }\n\n if (!match || !layer) {\n setImmediate(fn, err);\n return;\n }\n\n const layerMeta : DispatcherMeta = { ...meta };\n\n if (isLayerInstance(layer)) {\n const output = layer.exec(path);\n\n if (output) {\n layerMeta.params = merge(output.params, layerMeta.params || {});\n layerMeta.mountPath = cleanDoubleSlashes(`${layerMeta.mountPath || ''}/${output.path}`);\n }\n }\n\n if (err) {\n if (\n isLayerInstance(layer) &&\n layer.isError()\n ) {\n layer.dispatch(req, res, layerMeta, next, err);\n return;\n }\n\n /* istanbul ignore next */\n setImmediate(next, err);\n return;\n }\n\n layer.dispatch(req, res, layerMeta, next);\n };\n\n next();\n }\n\n /* istanbul ignore next */\n dispatchAsync(\n req: Request,\n res: Response,\n ) : Promise<void> {\n return new Promise((resolve, reject) => {\n this.dispatch(req, res, {}, (err?: Error) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve();\n });\n });\n }\n\n // --------------------------------------------------\n\n route(\n path: Path,\n ) : Route {\n if (\n typeof path === 'string' &&\n path.length > 0\n ) {\n path = withLeadingSlash(path);\n }\n\n const index = this.stack.findIndex(\n (item) => isRouteInstance(item) && item.path === path,\n );\n\n if (index !== -1) {\n return this.stack[index] as Route;\n }\n\n const route = new Route({\n path,\n pathMatcher: {\n sensitive: this.pathMatcherOptions.sensitive,\n },\n });\n this.stack.push(route);\n\n return route;\n }\n\n delete(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.delete(...handlers);\n\n return this;\n }\n\n get(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.get(...handlers);\n\n return this;\n }\n\n post(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.post(...handlers);\n\n return this;\n }\n\n put(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.put(...handlers);\n\n return this;\n }\n\n patch(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.patch(...handlers);\n\n return this;\n }\n\n head(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.head(...handlers);\n\n return this;\n }\n\n options(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.options(...handlers);\n\n return this;\n }\n\n // --------------------------------------------------\n\n use(router: Router) : this;\n\n use(handler: Handler) : this;\n\n use(handler: ErrorHandler) : this;\n\n use(path: Path, router: Router) : this;\n\n use(path: Path, handler: Handler) : this;\n\n use(path: Path, handler: ErrorHandler) : this;\n\n use(...input: unknown[]) : this {\n /* istanbul ignore next */\n if (input.length === 0) {\n return this;\n }\n\n let path : Path | undefined;\n\n if (isPath(input[0])) {\n path = input.shift() as Path;\n }\n\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n if (isRouterInstance(item)) {\n if (path) {\n item.setPath(path);\n }\n item.setPathMatcherOptions(this.pathMatcherOptions);\n this.stack.push(item);\n continue;\n }\n\n if (typeof item === 'function') {\n this.stack.push(new Layer({\n path: path || '/',\n pathMatcher: {\n strict: false,\n end: false,\n sensitive: this.pathMatcherOptions.sensitive,\n },\n }, item));\n }\n }\n\n return this;\n }\n}\n"],"names":["isStatsObject","obj","Stats","Object","prototype","toString","call","ctime","mtime","ino","size","generateETag","input","getTime","length","entity","Buffer","isBuffer","hash","crypto","createHash","update","digest","substring","createEtag","options","weak","tag","isObject","item","Array","isArray","buildEtagFn","undefined","merge","body","encoding","buff","from","threshold","byteLength","buildTrustProxyFn","_address","hop","split","map","value","trim","proxyAddr","compile","isInstance","name","Symbol","for","getMimeType","type","indexOf","getType","getCharsetForMimeType","test","meta","get","charset","toLowerCase","isPath","RegExp","isPromise","p","Promise","then","createRequestTimeout","res","timeout","done","instance","setTimeout","statusCode","GatewayTimeoutErrorOptions","statusMessage","message","end","once","clearTimeout","e","TRAILING_SLASH_RE","hasTrailingSlash","queryParams","endsWith","withoutTrailingSlash","slice","s0","s","join","withTrailingSlash","hasLeadingSlash","startsWith","withoutLeadingSlash","substr","withLeadingSlash","cleanDoubleSlashes","str","replace","buildConfig","Continu","defaults","env","process","NODE_ENV","trustProxy","subdomainOffset","etag","proxyIpMax","transformers","validators","zod","string","safeParse","any","number","nonnegative","useConfig","setConfig","config","setConfigOption","key","setRaw","getConfigOption","Method","GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD","HeaderName","ACCEPT","ACCEPT_CHARSET","ACCEPT_ENCODING","ACCEPT_LANGUAGE","ACCEPT_RANGES","ALLOW","CACHE_CONTROL","CONTENT_DISPOSITION","CONTENT_ENCODING","CONTENT_LENGTH","CONTENT_RANGE","CONTENT_TYPE","COOKIE","ETag","HOST","IF_MODIFIED_SINCE","IF_NONE_MATCH","LAST_MODIFIED","LOCATION","RANGE","RATE_LIMIT_LIMIT","RATE_LIMIT_REMAINING","RATE_LIMIT_RESET","RETRY_AFTER","SET_COOKIE","TRANSFER_ENCODING","X_FORWARDED_HOST","X_FORWARDED_FOR","X_FORWARDED_PROTO","BodySymbol","useRequestBody","req","hasRequestBody","setRequestBody","extendRequestBody","isRequestCacheable","modifiedTime","modifiedSince","headers","Date","CookieSymbol","useRequestCookies","hasRequestCookies","useRequestCookie","setRequestCookies","extendRequestCookies","cookies","envSymbol","setRequestEnv","useRequestEnv","unsetRequestEnv","hasOwnProperty","getRequestHeader","setRequestHeader","NegotiatorSymbol","useRequestNegotiator","Negotiator","getRequestAcceptableContentTypes","negotiator","mediaTypes","getRequestAcceptableContentType","items","shift","header","polluted","mimeTypes","i","mimeType","push","matches","getRequestAcceptableCharsets","charsets","getRequestAcceptableCharset","getRequestAcceptableEncodings","encodings","getRequestAcceptableEncoding","getRequestAcceptableLanguages","languages","getRequestAcceptableLanguage","matchRequestContentType","contentType","getRequestHostName","hostname","socket","remoteAddress","pop","trimEnd","offset","index","getRequestIP","ReqMountPathSymbol","useRequestMountPath","setRequestMountPath","basePath","ParamsSymbol","useRequestParams","params","useRequestParam","setRequestParams","data","setRequestParam","PathSymbol","useRequestPath","path","url","parsed","URL","pathname","getRequestProtocol","protocol","default","encrypted","QuerySymbol","useRequestQuery","query","hasRequestQuery","setRequestQuery","extendRequestQuery","setResponseCacheHeaders","cacheControls","concat","maxAge","setHeader","toUTCString","appendResponseHeader","getHeader","appendResponseHeaderDirective","Set","setResponseContentTypeByFileName","fileName","ext","extname","onResponseFinished","cb","called","callCallback","err","on","setResponseHeaderAttachment","filename","setResponseHeaderContentType","ifNotExists","send","chunk","JSON","stringify","len","etagFn","chunkHash","removeHeader","method","sendAccepted","sendCreated","sendStream","stream","fn","pipe","resolveStats","stats","stat","filePath","sendFile","basename","attachment","dispositionHeader","streamOptions","rangeHeader","x","y","Math","min","parseInt","start","createReadStream","sendFormat","formatDefault","formats","contentTypes","keys","sendRedirect","location","encodedLoc","html","processHandlerExecutionOutput","next","output","r","catch","decodeParam","val","decodeURIComponent","PathMatcher","fastSlash","regexpOptions","regexp","exec","match","regexpKeys","prop","constructor","pathToRegexp","Layer","isError","dispatch","mountPath","Error","BadRequestError","matchPath","pathMatcher","isLayerInstance","Route","matchMethod","layers","getMethods","layerMeta","setImmediate","layer","register","handlers","pathMatcherOptions","post","put","patch","delete","head","isStrictPath","strict","isRouteInstance","isRouterInstance","Router","setPathMatcherOptions","setPath","createListener","isRoot","listen","port","server","createServer","allowedMethods","toUpperCase","stack","mergeArrays","dispatchAsync","resolve","reject","route","findIndex","sensitive","use","ctx"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/etag/module.ts","../src/utils/object.ts","../src/utils/etag/utils.ts","../src/utils/trust-proxy/module.ts","../src/utils/is-instance.ts","../src/utils/mime.ts","../src/utils/path.ts","../src/utils/promise.ts","../src/utils/request.ts","../src/utils/url.ts","../src/config/module.ts","../src/constants.ts","../src/helpers/request/body.ts","../src/helpers/request/cache.ts","../src/helpers/request/cookie.ts","../src/helpers/request/env.ts","../src/helpers/request/header.ts","../src/helpers/request/negotiator.ts","../src/helpers/request/header-accept.ts","../src/helpers/request/header-accept-charset.ts","../src/helpers/request/header-accept-encoding.ts","../src/helpers/request/header-accept-language.ts","../src/helpers/request/header-content-type.ts","../src/helpers/request/hostname.ts","../src/helpers/request/ip.ts","../src/helpers/request/mount-path.ts","../src/helpers/request/params.ts","../src/helpers/request/path.ts","../src/helpers/request/protocol.ts","../src/helpers/request/query.ts","../src/helpers/response/cache.ts","../src/helpers/response/header.ts","../src/helpers/response/utils.ts","../src/helpers/response/header-attachment.ts","../src/helpers/response/header-content-type.ts","../src/helpers/response/send.ts","../src/helpers/response/send-accepted.ts","../src/helpers/response/send-created.ts","../src/helpers/response/send-stream.ts","../src/helpers/response/send-file.ts","../src/helpers/response/send-format.ts","../src/helpers/response/send-redirect.ts","../src/handler/utils.ts","../src/path/matcher.ts","../src/layer/module.ts","../src/layer/utils.ts","../src/route/module.ts","../src/route/utils.ts","../src/router/module.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport { Stats } from 'node:fs';\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 /* istanbul ignore next */\n if (\n typeof Stats === 'function' &&\n obj instanceof Stats\n ) {\n return true;\n }\n\n // quack quack\n return !!obj && typeof obj === 'object' &&\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\n/**\n * Generate an ETag.\n */\nexport function generateETag(input: string | Buffer | Stats) : 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 = crypto\n .createHash('sha1')\n .update(entity, 'utf8')\n .digest('base64')\n .substring(0, 27);\n\n return `\"${entity.length.toString(16)}-${hash}\"`;\n}\n\n/**\n * Create a simple ETag.\n */\nexport function createEtag(\n input: string | Buffer | Stats,\n options?: EtagOptions,\n) : 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 = generateETag(input);\n\n return weak ?\n `W/${tag}` :\n tag;\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","import { 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 () => 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 (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 proxyAddr 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 proxyAddr.compile(input || []);\n}\n","export function isInstance(input: unknown, name: string) {\n return (\n typeof input === 'object' &&\n input !== null &&\n (input as { '@instanceof': symbol })['@instanceof'] === Symbol.for(name)\n );\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 { Path } from '../type';\n\nexport function isPath(input: unknown) : input is Path {\n return typeof input === 'string' || input instanceof RegExp;\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 { GatewayTimeoutErrorOptions } from '@ebec/http';\nimport type { Next, Response } from '../type';\n\n/* istanbul ignore next */\nexport function createRequestTimeout(res: Response, timeout: number, done?: Next) {\n const instance = setTimeout(() => {\n res.statusCode = GatewayTimeoutErrorOptions.statusCode;\n res.statusMessage = GatewayTimeoutErrorOptions.message;\n\n res.end();\n }, timeout);\n\n res.once('close', () => {\n clearTimeout(instance);\n\n /* istanbul ignore next */\n if (typeof done === 'function') {\n done();\n }\n });\n\n /* istanbul ignore next */\n res.once('error', (e) => {\n clearTimeout(instance);\n\n if (typeof done === 'function') {\n done(e);\n }\n });\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.substr(1) : input) || '/';\n}\n\nexport function withLeadingSlash(input = ''): string {\n return hasLeadingSlash(input) ? input : (`/${input}`);\n}\n\nexport function cleanDoubleSlashes(input = ''): string {\n return input.split('://')\n .map((str) => str.replace(/\\/{2,}/g, '/'))\n .join('://');\n}\n","import type { FlattenObject } from 'continu';\nimport { Continu } from 'continu';\nimport process from 'node:process';\nimport zod from 'zod';\nimport type {\n EtagInput,\n TrustProxyInput,\n} from '../utils';\nimport {\n buildEtagFn,\n buildTrustProxyFn,\n} from '../utils';\nimport type { Options, OptionsInput } from './type';\n\nlet instance : Continu<Options, OptionsInput> | undefined;\n\nexport function buildConfig() {\n return new Continu<Options, OptionsInput>({\n defaults: {\n env: process.env.NODE_ENV || 'development',\n trustProxy: () => false,\n subdomainOffset: 2,\n etag: buildEtagFn(),\n proxyIpMax: 0,\n },\n transformers: {\n etag: (value) => buildEtagFn(value as EtagInput),\n trustProxy: (value) => buildTrustProxyFn(value as TrustProxyInput),\n },\n validators: {\n env: (value) => zod.string().safeParse(value),\n trustProxy: (value) => zod.any().safeParse(value),\n subdomainOffset: (value) => zod.number().nonnegative().safeParse(value),\n etag: (value) => zod.any().safeParse(value),\n proxyIpMax: (value) => zod.number().nonnegative().safeParse(value),\n },\n });\n}\n\nexport function useConfig() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = buildConfig();\n\n return instance;\n}\n\nexport function setConfig(config: Continu<Options, OptionsInput>) {\n instance = config;\n}\n\nexport function setConfigOption<K extends keyof FlattenObject<OptionsInput>>(\n key: K,\n value: FlattenObject<OptionsInput>[K],\n) {\n const config = useConfig();\n\n config.setRaw(key, value);\n\n return config.get();\n}\n\nexport function getConfigOption(key: keyof FlattenObject<OptionsInput>) {\n const config = useConfig();\n\n return config.get(key);\n}\n","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 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_FORWARDED_HOST = 'x-forwarded-host',\n X_FORWARDED_FOR = 'x-forwarded-for',\n X_FORWARDED_PROTO = 'x-forwarded-proto',\n}\n","import { merge } from 'smob';\nimport type { Request } from '../../type';\nimport { isObject } from '../../utils';\n\nconst BodySymbol = Symbol.for('ReqBody');\n\nexport function useRequestBody(req: Request) : Record<string, any>;\nexport function useRequestBody(req: Request, key: string) : any | undefined;\nexport function useRequestBody(req: Request, key?: string) {\n let body : Record<string, any> | undefined;\n\n /* istanbul ignore next */\n if ('body' in req) {\n body = (req as any).body;\n }\n\n if (BodySymbol in req) {\n if (body) {\n body = merge(\n {},\n (req as any)[BodySymbol],\n body,\n );\n } else {\n body = (req as any)[BodySymbol];\n }\n }\n\n if (body) {\n if (typeof key === 'string') {\n return body[key];\n }\n\n return body;\n }\n\n return typeof key === 'string' ?\n undefined :\n {};\n}\n\nexport function hasRequestBody(req: Request) : boolean {\n return 'body' in req || BodySymbol in req;\n}\n\nexport function setRequestBody(req: Request, key: string, value: unknown) : void;\nexport function setRequestBody(req: Request, record: Record<string, any>) : void;\nexport function setRequestBody(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (isObject(key)) {\n (req as any)[BodySymbol] = key;\n return;\n }\n\n (req as any)[BodySymbol] = {\n [key]: value,\n };\n}\n\nexport function extendRequestBody(req: Request, key: string, value: unknown) : void;\nexport function extendRequestBody(req: Request, record: Record<string, any>) : void;\nexport function extendRequestBody(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (hasRequestBody(req)) {\n const body = useRequestBody(req);\n\n // body can not be merged :/\n if (!isObject(body)) {\n return;\n }\n\n if (isObject(key)) {\n (req as any)[BodySymbol] = merge({}, key, body);\n } else {\n body[key] = value;\n (req as any)[BodySymbol] = body;\n }\n\n return;\n }\n\n if (isObject(key)) {\n setRequestBody(req, key);\n\n return;\n }\n\n setRequestBody(req, key, value);\n}\n","import { HeaderName } from '../../constants';\nimport type { Request } from '../../type';\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","import { merge } from 'smob';\nimport type { Request } from '../../type';\nimport { isObject } from '../../utils';\n\nconst CookieSymbol = Symbol.for('ReqCookie');\n\nexport function useRequestCookies(\n req: Request,\n) : Record<string, string> {\n if (CookieSymbol in req) {\n return (req as any)[CookieSymbol];\n }\n\n return {};\n}\n\nexport function hasRequestCookies(req: Request) {\n return CookieSymbol in req &&\n isObject((req as any)[CookieSymbol]);\n}\n\nexport function useRequestCookie(req: Request, name: string) : string | undefined {\n return useRequestCookies(req)[name];\n}\n\nexport function setRequestCookies(req: Request, key: string, value: unknown) : void;\nexport function setRequestCookies(req: Request, record: Record<string, any>) : void;\nexport function setRequestCookies(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (isObject(key)) {\n (req as any)[CookieSymbol] = key;\n return;\n }\n\n (req as any)[CookieSymbol] = {\n [key]: value,\n };\n}\n\nexport function extendRequestCookies(req: Request, key: string, value: string) : void;\nexport function extendRequestCookies(req: Request, record: Record<string, any>) : void;\nexport function extendRequestCookies(\n req: Request,\n key: string | Record<string, any>,\n value?: string,\n) {\n if (hasRequestCookies(req)) {\n const cookies = useRequestCookies(req);\n\n if (isObject(key)) {\n (req as any)[CookieSymbol] = merge({}, key, cookies);\n } else {\n cookies[key] = value as string;\n (req as any)[CookieSymbol] = cookies;\n }\n\n (req as any)[CookieSymbol] = merge((req as any)[CookieSymbol], cookies);\n\n return;\n }\n\n if (isObject(key)) {\n setRequestCookies(req, key);\n\n return;\n }\n\n setRequestCookies(req, key, value);\n}\n","import { hasOwnProperty, merge } from 'smob';\nimport type { Request } from '../../type';\n\nconst envSymbol = Symbol.for('ReqEnv');\n\nexport function setRequestEnv(req: Request, key: string, value: unknown) : void;\nexport function setRequestEnv(req: Request, record: Record<string, any>, append?: boolean) : void;\nexport function setRequestEnv(req: Request, key: Record<string, any> | string, value?: boolean | unknown) : void {\n if (envSymbol in req) {\n if (typeof key === 'object') {\n if (value) {\n (req as any)[envSymbol] = merge((req as any)[envSymbol], key);\n } else {\n (req as any)[envSymbol] = key;\n }\n } else {\n (req as any)[envSymbol][key] = value;\n }\n\n return;\n }\n\n if (typeof key === 'object') {\n (req as any)[envSymbol] = key;\n return;\n }\n\n (req as any)[envSymbol] = {\n [key]: value,\n };\n}\n\nexport function useRequestEnv(req: Request) : Record<string, any>;\nexport function useRequestEnv(req: Request, key: string) : unknown | undefined;\nexport function useRequestEnv(req: Request, key?: string) {\n if (envSymbol in req) {\n if (typeof key === 'string') {\n return (req as any)[envSymbol][key];\n }\n\n return (req as any)[envSymbol];\n }\n\n if (typeof key === 'string') {\n return undefined;\n }\n\n return {};\n}\n\nexport function unsetRequestEnv(req: Request, key: string) {\n if (envSymbol in req) {\n if (hasOwnProperty((req as any)[envSymbol], key)) {\n delete (req as any)[envSymbol][key];\n }\n }\n}\n","import type { IncomingHttpHeaders } from 'node:http';\nimport type { Request } from '../../type';\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 type { Request } from '../../type';\n\nconst NegotiatorSymbol = Symbol.for('ReqNegotiator');\n\nexport function useRequestNegotiator(req: Request) : Negotiator {\n if (NegotiatorSymbol in req) {\n return (req as any)[NegotiatorSymbol];\n }\n\n return new Negotiator(req);\n}\n","import type { Request } from '../../type';\nimport { HeaderName } from '../../constants';\nimport { getMimeType } from '../../utils';\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 '../../type';\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 '../../type';\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 type { Request } from '../../type';\nimport { getMimeType } from '../../utils';\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 type { Request } from '../../type';\nimport { useConfig } from '../../config';\nimport { HeaderName } from '../../constants';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\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 const config = useConfig();\n trustProxy = config.get('trustProxy');\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 proxyAddr from 'proxy-addr';\nimport type { Request } from '../../type';\nimport { useConfig } from '../../config';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\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 const config = useConfig();\n trustProxy = config.get('trustProxy');\n }\n\n return proxyAddr(req, trustProxy);\n}\n","import type { Request } from '../../type';\n\nconst ReqMountPathSymbol = Symbol.for('ReqMountPath');\n\nexport function useRequestMountPath(req: Request) : string {\n if (ReqMountPathSymbol in req) {\n return (req as any)[ReqMountPathSymbol];\n }\n\n return '/';\n}\n\nexport function setRequestMountPath(req: Request, basePath: string) {\n (req as any)[ReqMountPathSymbol] = basePath;\n}\n","import type { Request } from '../../type';\n\nconst ParamsSymbol = Symbol.for('ReqParams');\n\nexport function useRequestParams(req: Request) : Record<string, any> {\n /* istanbul ignore next */\n if ('params' in req) {\n return (req as any).params;\n }\n\n if (ParamsSymbol in req) {\n return (req as any)[ParamsSymbol];\n }\n\n return {};\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 (req as any)[ParamsSymbol] = 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 { URL } from 'node:url';\nimport type { Request } from '../../type';\n\nconst PathSymbol = Symbol.for('ReqPath');\n\nexport function useRequestPath(req: Request) : string {\n if ('path' in req) {\n return (req as any).path;\n }\n\n if (PathSymbol in req) {\n return (req as any)[PathSymbol];\n }\n\n if (typeof req.url === 'undefined') {\n return '/';\n }\n\n const parsed = new URL(req.url, 'http://localhost/');\n\n (req as any)[PathSymbol] = parsed.pathname;\n\n return (req as any)[PathSymbol];\n}\n","import { hasOwnProperty } from 'smob';\nimport { useConfig } from '../../config';\nimport { HeaderName } from '../../constants';\nimport type { Request } from '../../type';\nimport type { TrustProxyFn, TrustProxyInput } from '../../utils';\nimport { buildTrustProxyFn } from '../../utils';\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 const config = useConfig();\n trustProxy = config.get('trustProxy');\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 { merge } from 'smob';\nimport { isObject } from '../../utils';\nimport type { Request } from '../../type';\n\nconst QuerySymbol = Symbol.for('ReqQuery');\n\nexport function useRequestQuery(req: Request) : Record<string, any>;\nexport function useRequestQuery(req: Request, key: string) : any;\nexport function useRequestQuery(req: Request, key?: string) {\n /* istanbul ignore if */\n if ('query' in req) {\n if (typeof key === 'string') {\n return (req as any).query[key];\n }\n\n return (req as any).query;\n }\n\n if (QuerySymbol in req) {\n if (typeof key === 'string') {\n return (req as any)[QuerySymbol][key];\n }\n\n return (req as any)[QuerySymbol];\n }\n\n return typeof key === 'string' ?\n undefined :\n {};\n}\n\nexport function hasRequestQuery(req: Request) : boolean {\n return (\n (QuerySymbol in req) &&\n isObject((req as any)[QuerySymbol])\n ) ||\n (\n ('query' in req) &&\n isObject(req.query)\n );\n}\n\nexport function setRequestQuery(req: Request, key: string, value: unknown) : void;\nexport function setRequestQuery(req: Request, record: Record<string, any>) : void;\nexport function setRequestQuery(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (isObject(key)) {\n (req as any)[QuerySymbol] = key;\n return;\n }\n\n (req as any)[QuerySymbol] = {\n [key]: value,\n };\n}\n\nexport function extendRequestQuery(req: Request, key: string, value: unknown) : void;\nexport function extendRequestQuery(req: Request, record: Record<string, any>) : void;\nexport function extendRequestQuery(req: Request, key: Record<string, any> | string, value?: unknown) : void {\n if (hasRequestQuery(req)) {\n const query = useRequestQuery(req);\n\n if (isObject(key)) {\n (req as any)[QuerySymbol] = merge({}, key, query);\n } else {\n query[key] = value;\n (req as any)[QuerySymbol] = query;\n }\n\n return;\n }\n\n if (isObject(key)) {\n setRequestQuery(req, key);\n return;\n }\n\n setRequestQuery(req, key, value);\n}\n","import type { Response } from '../../type';\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 type { OutgoingHttpHeader } from 'node:http';\nimport type { Response } from '../../type';\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 path from 'node:path';\nimport { HeaderName } from '../../constants';\nimport type { Response } from '../../type';\nimport { getCharsetForMimeType, getMimeType } from '../../utils';\n\nexport function setResponseContentTypeByFileName(res: Response, fileName: string) {\n const ext = path.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\n/* istanbul ignore next */\nexport function onResponseFinished(\n res: Response,\n cb: (err?: Error) => void,\n) {\n let called : boolean;\n\n const callCallback = (err?: Error) => {\n if (called) return;\n\n called = true;\n\n cb(err);\n };\n\n res.on('finish', () => {\n callCallback();\n });\n\n res.on('close', () => {\n callCallback();\n });\n\n res.on('error', (err) => {\n callCallback(err);\n });\n}\n","import { HeaderName } from '../../constants';\nimport type { Response } from '../../type';\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 type { Response } from '../../type';\nimport { getMimeType } from '../../utils';\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 { useConfig } from '../../config';\nimport { HeaderName } from '../../constants';\nimport type { Response } from '../../type';\nimport { appendResponseHeaderDirective } from './header';\nimport { setResponseHeaderContentType } from './header-content-type';\n\nexport function send(res: Response, chunk?: any) {\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 chunk = '';\n } else 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 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 (chunk !== undefined) {\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 const config = useConfig();\n const etagFn = config.get('etag');\n\n if (\n typeof len !== 'undefined'\n ) {\n const chunkHash = etagFn(chunk, encoding, len);\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 chunk = '';\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 chunk = '';\n }\n\n if (res.req.method === 'HEAD') {\n // skip body for HEAD\n res.end();\n\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 '../../type';\nimport { send } from './send';\n\nexport function sendAccepted(res: Response, chunk?: any) {\n res.statusCode = 202;\n res.statusMessage = 'Accepted';\n\n return send(res, chunk);\n}\n","import type { Response } from '../../type';\nimport { send } from './send';\n\nexport function sendCreated(res: Response, chunk?: any) {\n res.statusCode = 201;\n res.statusMessage = 'Created';\n\n return send(res, chunk);\n}\n","import type { Readable } from 'node:stream';\nimport type { Response } from '../../type';\n\nexport function sendStream(res: Response, stream: Readable, fn?: CallableFunction) {\n stream.on('open', () => {\n stream.pipe(res);\n });\n\n /* istanbul ignore next */\n stream.on('error', (err) => {\n if (typeof fn === 'function') {\n fn(err);\n } else {\n res.statusCode = 400;\n res.end();\n }\n });\n\n stream.on('close', () => {\n if (typeof fn === 'function') {\n fn();\n } else {\n res.end();\n }\n });\n}\n","import type { Stats } from 'node:fs';\nimport { createReadStream, stat } from 'node:fs';\nimport path from 'node:path';\nimport { HeaderName } from '../../constants';\nimport type { Response } from '../../type';\nimport { setResponseHeaderAttachment } from './header-attachment';\nimport { sendStream } from './send-stream';\nimport { setResponseContentTypeByFileName } from './utils';\n\ntype ReadStreamOptions = {\n end?: number,\n\n start?: number | undefined;\n};\n\nexport type SendFileOptions = {\n stats?: Stats,\n filePath: string,\n attachment?: boolean\n};\n\nfunction resolveStats(\n options: SendFileOptions,\n cb: (err: Error | null, stats: Stats) => void,\n) {\n if (options.stats) {\n cb(null, options.stats);\n return;\n }\n\n stat(options.filePath, (err, stats) => cb(err, stats));\n}\n\nexport function sendFile(res: Response, filePath: string | SendFileOptions, fn?: CallableFunction) {\n let options : SendFileOptions;\n\n if (typeof filePath === 'string') {\n options = {\n filePath,\n };\n } else {\n options = filePath;\n }\n\n const fileName = path.basename(options.filePath);\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 resolveStats(options, (err, stats) => {\n /* istanbul ignore next */\n if (err) {\n if (typeof fn === 'function') {\n fn(err);\n } else {\n res.statusCode = 404;\n res.end();\n }\n\n return;\n }\n\n const streamOptions : ReadStreamOptions = {};\n\n const rangeHeader = res.req.headers[HeaderName.RANGE];\n if (rangeHeader) {\n const [x, y] = rangeHeader.replace('bytes=', '')\n .split('-');\n\n streamOptions.end = Math.min(\n parseInt(y, 10) || stats.size - 1,\n stats.size - 1,\n );\n\n streamOptions.start = parseInt(x, 10) || 0;\n\n if (streamOptions.end >= stats.size) {\n streamOptions.end = stats.size - 1;\n }\n\n if (streamOptions.start >= stats.size) {\n res.setHeader(HeaderName.CONTENT_RANGE, `bytes */${stats.size}`);\n res.statusCode = 416;\n res.end();\n return;\n }\n\n res.setHeader(HeaderName.CONTENT_RANGE, `bytes ${streamOptions.start}-${streamOptions.end}/${stats.size}`);\n res.setHeader(HeaderName.CONTENT_LENGTH, (streamOptions.end - streamOptions.start + 1));\n } else {\n res.setHeader(HeaderName.CONTENT_LENGTH, stats.size);\n }\n\n res.setHeader(HeaderName.ACCEPT_RANGES, 'bytes');\n res.setHeader(HeaderName.LAST_MODIFIED, stats.mtime.toUTCString());\n res.setHeader(HeaderName.ETag, `W/\"${stats.size}-${stats.mtime.getTime()}\"`);\n\n sendStream(res, createReadStream(options.filePath, streamOptions), fn);\n });\n}\n","import type { Response } from '../../type';\nimport { getRequestAcceptableContentType } from '../request';\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 '../../type';\nimport { send } from './send';\n\nexport function sendRedirect(res: Response, location: string, statusCode = 302) {\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 { Next, Response } from '../type';\nimport { send } from '../helpers';\nimport { isPromise } from '../utils';\n\nexport function processHandlerExecutionOutput(res: Response, next: Next, output?: unknown) {\n if (isPromise(output)) {\n output\n .then((r) => {\n if (typeof r !== 'undefined') {\n send(res, r);\n }\n\n return r;\n })\n .catch(next);\n return;\n }\n\n if (typeof output !== 'undefined') {\n send(res, output);\n }\n}\n","import type { Key } from 'path-to-regexp';\nimport { pathToRegexp } from 'path-to-regexp';\nimport type { Path } from '../type';\nimport type { 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 path: Path;\n\n regexp : RegExp;\n\n regexpKeys : Key[] = [];\n\n regexpOptions: PathMatcherOptions;\n\n constructor(path: Path, options?: PathMatcherOptions) {\n this.path = path;\n this.regexpOptions = options || {};\n\n if (path instanceof RegExp) {\n this.regexp = path;\n } else {\n this.regexp = pathToRegexp(path, this.regexpKeys, options);\n }\n }\n\n test(path: string) {\n const fastSlash = this.path === '/' && this.regexpOptions.end === false;\n if (fastSlash) {\n return true;\n }\n\n return this.regexp.test(path);\n }\n\n exec(path: string) : PathMatcherExecResult | undefined {\n let match : RegExpExecArray | null = null;\n\n const fastSlash = this.path === '/' && this.regexpOptions.end === false;\n if (fastSlash) {\n return {\n path: '/',\n params: {},\n };\n }\n\n match = this.regexp.exec(path);\n\n if (!match) {\n return undefined;\n }\n\n if (this.path instanceof RegExp) {\n return {\n path,\n params: {\n 0: decodeParam(match[0]),\n },\n };\n }\n\n const output : 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 output[prop] = val;\n }\n }\n\n return {\n path: match[0],\n params: output,\n };\n }\n}\n","import { BadRequestError } from '@ebec/http';\nimport { setRequestMountPath, setRequestParams } from '../helpers';\nimport type {\n DispatcherMeta, Next, Request,\n Response,\n} from '../type';\nimport { processHandlerExecutionOutput } from '../handler';\nimport { PathMatcher } from '../path';\nimport type { LayerOptions } from './type';\n\nexport class Layer {\n readonly '@instanceof' = Symbol.for('Layer');\n\n protected fn : CallableFunction;\n\n protected pathMatcher : PathMatcher;\n\n // --------------------------------------------------\n\n constructor(\n options: LayerOptions,\n fn: CallableFunction,\n ) {\n this.pathMatcher = new PathMatcher(options.path, options.pathMatcher);\n this.fn = fn;\n }\n\n // --------------------------------------------------\n\n isError() {\n return this.fn.length === 4;\n }\n\n // --------------------------------------------------\n\n dispatch(\n req: Request,\n res: Response,\n meta: DispatcherMeta,\n next: CallableFunction\n ) : void;\n\n dispatch(\n req: Request,\n res: Response,\n meta: DispatcherMeta,\n next: CallableFunction,\n err: Error,\n ) : void;\n\n dispatch(\n req: Request,\n res: Response,\n meta: DispatcherMeta,\n next: Next,\n err?: Error,\n ) : void {\n setRequestParams(req, meta.params || {});\n setRequestMountPath(req, meta.mountPath || '/');\n\n if (typeof err !== 'undefined') {\n if (this.fn.length === 4) {\n try {\n this.fn(err, req, res, next);\n } catch (e) {\n /* istanbul ignore next */\n /* istanbul ignore next */\n if (e instanceof Error) {\n next(e);\n } else {\n next(new BadRequestError({\n message: 'The request could not be processed by the error handler.',\n }));\n }\n }\n\n return;\n }\n\n /* istanbul ignore next */\n next(err);\n /* istanbul ignore next */\n return;\n }\n\n /* istanbul ignore next */\n if (this.fn.length > 3) {\n next();\n return;\n }\n\n try {\n const output = this.fn(req, res, next);\n\n processHandlerExecutionOutput(res, next, output);\n } catch (e) {\n /* istanbul ignore next */\n if (e instanceof Error) {\n next(e);\n } else {\n next(new BadRequestError({\n message: 'The request could not be processed by the handler.',\n }));\n }\n }\n }\n\n // --------------------------------------------------\n\n matchPath(path: string) : boolean {\n return this.pathMatcher.test(path);\n }\n\n exec(path: string) {\n return this.pathMatcher.exec(path);\n }\n}\n","import { isInstance } from '../utils';\nimport type { Layer } from './module';\n\nexport function isLayerInstance(input: unknown) : input is Layer {\n return isInstance(input, 'Layer');\n}\n","import { hasOwnProperty, merge } from 'smob';\nimport { MethodName } from '../constants';\nimport type {\n DispatcherMeta, Handler, Next, Path,\n\n Request,\n Response,\n} from '../type';\nimport { Layer } from '../layer';\nimport type { PathMatcherOptions } from '../path';\nimport { PathMatcher } from '../path';\nimport type { RouteOptions } from './type';\n\nexport class Route {\n readonly '@instanceof' = Symbol.for('Route');\n\n public path : Path;\n\n protected pathMatcher : PathMatcher;\n\n protected pathMatcherOptions : PathMatcherOptions;\n\n protected layers : Record<string, Layer[]> = {};\n\n // --------------------------------------------------\n\n constructor(options: RouteOptions) {\n this.path = options.path;\n\n this.pathMatcherOptions = {\n end: true,\n strict: this.isStrictPath(),\n ...options.pathMatcher,\n };\n this.pathMatcher = new PathMatcher(this.path, this.pathMatcherOptions);\n }\n\n // --------------------------------------------------\n\n matchPath(path: string) : boolean {\n return this.pathMatcher.test(path);\n }\n\n matchMethod(method: string) : boolean {\n let name = method.toLowerCase();\n\n if (\n name === MethodName.HEAD &&\n !hasOwnProperty(this.layers, name)\n ) {\n name = MethodName.GET;\n }\n\n return Object.prototype.hasOwnProperty.call(this.layers, name);\n }\n\n // --------------------------------------------------\n\n getMethods() : string[] {\n const keys = Object.keys(this.layers);\n\n if (\n hasOwnProperty(this.layers, MethodName.GET) &&\n !hasOwnProperty(this.layers, MethodName.HEAD)\n ) {\n keys.push(MethodName.HEAD);\n }\n\n return keys;\n }\n\n // --------------------------------------------------\n\n dispatch(\n req: Request,\n res: Response,\n meta: DispatcherMeta,\n done: Next,\n ) : void {\n /* istanbul ignore next */\n if (!req.method) {\n done();\n return;\n }\n\n let name = req.method.toLowerCase();\n\n if (\n name === MethodName.HEAD &&\n !hasOwnProperty(this.layers, name)\n ) {\n name = MethodName.GET;\n }\n\n const layers = this.layers[name];\n\n /* istanbul ignore next */\n if (\n typeof layers === 'undefined' ||\n layers.length === 0 ||\n typeof meta.path === 'undefined'\n ) {\n done();\n\n return;\n }\n\n const layerMeta : DispatcherMeta = {\n ...meta,\n };\n\n const output = this.pathMatcher.exec(meta.path);\n if (output) {\n layerMeta.params = merge({}, (meta.params || {}), output.params);\n }\n\n let index = -1;\n\n const next = (err?: Error) : void => {\n index++;\n\n if (index >= layers.length) {\n setImmediate(done, err);\n return;\n }\n\n const layer = layers[index];\n if (\n err &&\n !layer.isError()\n ) {\n next(err);\n return;\n }\n\n layer.dispatch(req, res, { ...layerMeta }, next);\n };\n\n next();\n }\n\n // --------------------------------------------------\n\n register(method: `${MethodName}`, ...handlers: Handler[]) {\n this.layers[method] = [];\n\n for (let i = 0; i < handlers.length; i++) {\n const layer = new Layer(\n {\n path: this.path,\n pathMatcher: this.pathMatcherOptions,\n },\n handlers[i],\n );\n\n this.layers[method].push(layer);\n }\n }\n\n get(...handlers: Handler[]) {\n return this.register(MethodName.GET, ...handlers);\n }\n\n post(...handlers: Handler[]) {\n return this.register(MethodName.POST, ...handlers);\n }\n\n put(...handlers: Handler[]) {\n return this.register(MethodName.PUT, ...handlers);\n }\n\n patch(...handlers: Handler[]) {\n return this.register(MethodName.PATCH, ...handlers);\n }\n\n delete(...handlers: Handler[]) {\n return this.register(MethodName.DELETE, ...handlers);\n }\n\n head(...handlers: Handler[]) {\n return this.register(MethodName.HEAD, ...handlers);\n }\n\n options(...handlers: Handler[]) {\n return this.register(MethodName.OPTIONS, ...handlers);\n }\n\n // --------------------------------------------------\n\n private isStrictPath() {\n return typeof this.path !== 'string' ||\n (this.path !== '/' && this.path.length !== 0);\n }\n}\n","import { isInstance } from '../utils';\nimport type { Route } from './module';\n\nexport function isRouteInstance(input: unknown) : input is Route {\n return isInstance(input, 'Route');\n}\n","import type { RequestListener } from 'node:http';\nimport { createServer } from 'node:http';\nimport { distinctArray, merge } from 'smob';\nimport type {\n DispatcherMeta,\n ErrorHandler,\n Handler,\n Next,\n Path,\n\n Request,\n Response,\n} from '../type';\nimport {\n HeaderName,\n MethodName,\n} from '../constants';\nimport {\n send,\n useRequestPath,\n} from '../helpers';\nimport {\n cleanDoubleSlashes,\n createRequestTimeout,\n isInstance,\n\n isPath,\n withLeadingSlash,\n withoutTrailingSlash,\n\n} from '../utils';\nimport type { PathMatcherOptions } from '../path';\nimport { PathMatcher } from '../path';\nimport { Layer, isLayerInstance } from '../layer';\nimport { Route, isRouteInstance } from '../route';\nimport type { RouterOptions } from './type';\n\nexport function isRouterInstance(input: unknown) : input is Router {\n return isInstance(input, 'Router');\n}\n\nexport class Router {\n readonly '@instanceof' = Symbol.for('Router');\n\n /**\n * Array of mounted layers, routes & routers.\n *\n * @protected\n */\n protected stack : (Router | Route | Layer)[] = [];\n\n /**\n * Mount path of instance\n *\n * @protected\n */\n protected path : Path | undefined;\n\n /**\n * Path matcher for the current mount path.\n *\n * @protected\n */\n protected pathMatcher : PathMatcher | undefined;\n\n /**\n * Path matcher options.\n *\n * @protected\n */\n protected pathMatcherOptions : PathMatcherOptions;\n\n /**\n * Is this the root instance?\n *\n * @protected\n */\n protected isRoot : boolean | undefined;\n\n /**\n * Timeout before the router decides to abort the request.\n *\n * @protected\n */\n protected timeout: number | undefined;\n\n // --------------------------------------------------\n\n constructor(ctx?: RouterOptions) {\n ctx = ctx || {};\n\n this.pathMatcherOptions = {\n end: false,\n sensitive: true,\n ...(ctx.pathMatcher || {}),\n };\n\n this.timeout = ctx.timeout;\n\n this.setPath(ctx.path || '/');\n }\n\n // --------------------------------------------------\n\n setPathMatcherOptions(input: PathMatcherOptions) {\n this.pathMatcherOptions = input;\n\n if (this.pathMatcher) {\n this.pathMatcher.regexpOptions = this.pathMatcherOptions;\n }\n }\n\n setPath(value: Path) {\n if (value === '/' || !isPath(value)) {\n this.path = '/';\n return;\n }\n\n if (typeof value === 'string') {\n this.path = withLeadingSlash(withoutTrailingSlash(`${value}`));\n } else {\n this.path = value;\n }\n\n this.pathMatcher = new PathMatcher(this.path, this.pathMatcherOptions);\n }\n\n // --------------------------------------------------\n\n createListener() : RequestListener {\n this.isRoot = true;\n\n return (req, res) => {\n this.dispatch(req, res);\n };\n }\n\n /* istanbul ignore next */\n listen(port: number) {\n const server = createServer(this.createListener());\n return server.listen(port);\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 // --------------------------------------------------\n\n dispatch(\n req: Request,\n res: Response,\n meta?: DispatcherMeta,\n done?: Next,\n ) : void {\n let index = -1;\n\n meta = meta || {};\n\n let allowedMethods : string[] = [];\n\n if (\n this.isRoot &&\n typeof this.timeout === 'number'\n ) {\n createRequestTimeout(res, this.timeout, done);\n }\n\n const fn = (err?: Error) => {\n /* istanbul ignore if */\n if (!this.isRoot) {\n if (typeof done !== 'undefined') {\n setImmediate(() => done(err));\n }\n\n return;\n }\n\n if (typeof err !== 'undefined') {\n res.statusCode = 400;\n res.end();\n\n return;\n }\n\n if (\n req.method &&\n req.method.toLowerCase() === MethodName.OPTIONS\n ) {\n const options = allowedMethods\n .map((key) => key.toUpperCase())\n .join(',');\n\n res.setHeader(HeaderName.ALLOW, options);\n send(res, options);\n\n return;\n }\n\n res.statusCode = 404;\n res.end();\n };\n\n let path = meta.path || useRequestPath(req);\n\n if (this.pathMatcher) {\n const output = this.pathMatcher.exec(path);\n if (typeof output !== 'undefined') {\n meta.mountPath = cleanDoubleSlashes(`${meta.mountPath || ''}/${output.path}`);\n\n if (path === output.path) {\n path = '/';\n } else {\n path = withLeadingSlash(path.substring(output.path.length));\n }\n\n meta.params = merge(meta.params || {}, output.params);\n }\n }\n\n meta.path = path;\n\n if (!meta.mountPath) {\n meta.mountPath = '/';\n }\n\n const next = (err?: Error) : void => {\n if (index >= this.stack.length) {\n setImmediate(fn, err);\n return;\n }\n\n let layer : Route | Router | Layer | undefined;\n let match = false;\n\n while (!match && index < this.stack.length) {\n index++;\n\n layer = this.stack[index];\n\n if (isLayerInstance(layer)) {\n if (!layer.isError() && err) {\n continue;\n }\n\n match = layer.matchPath(path);\n }\n\n if (isRouterInstance(layer)) {\n match = layer.matchPath(path);\n }\n\n if (isRouteInstance(layer)) {\n match = layer.matchPath(path);\n\n if (\n req.method &&\n !layer.matchMethod(req.method)\n ) {\n match = false;\n\n if (req.method.toLowerCase() === MethodName.OPTIONS) {\n allowedMethods = distinctArray(merge(\n allowedMethods,\n layer.getMethods(),\n ));\n }\n }\n }\n }\n\n if (!match || !layer) {\n setImmediate(fn, err);\n return;\n }\n\n const layerMeta : DispatcherMeta = { ...meta };\n\n if (isLayerInstance(layer)) {\n const output = layer.exec(path);\n\n if (output) {\n layerMeta.params = merge(output.params, layerMeta.params || {});\n layerMeta.mountPath = cleanDoubleSlashes(`${layerMeta.mountPath || ''}/${output.path}`);\n }\n }\n\n if (err) {\n if (\n isLayerInstance(layer) &&\n layer.isError()\n ) {\n layer.dispatch(req, res, layerMeta, next, err);\n return;\n }\n\n /* istanbul ignore next */\n setImmediate(next, err);\n return;\n }\n\n layer.dispatch(req, res, layerMeta, next);\n };\n\n next();\n }\n\n /* istanbul ignore next */\n dispatchAsync(\n req: Request,\n res: Response,\n ) : Promise<void> {\n return new Promise((resolve, reject) => {\n this.dispatch(req, res, {}, (err?: Error) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve();\n });\n });\n }\n\n // --------------------------------------------------\n\n route(\n path: Path,\n ) : Route {\n if (\n typeof path === 'string' &&\n path.length > 0\n ) {\n path = withLeadingSlash(path);\n }\n\n const index = this.stack.findIndex(\n (item) => isRouteInstance(item) && item.path === path,\n );\n\n if (index !== -1) {\n return this.stack[index] as Route;\n }\n\n const route = new Route({\n path,\n pathMatcher: {\n sensitive: this.pathMatcherOptions.sensitive,\n },\n });\n this.stack.push(route);\n\n return route;\n }\n\n delete(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.delete(...handlers);\n\n return this;\n }\n\n get(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.get(...handlers);\n\n return this;\n }\n\n post(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.post(...handlers);\n\n return this;\n }\n\n put(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.put(...handlers);\n\n return this;\n }\n\n patch(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.patch(...handlers);\n\n return this;\n }\n\n head(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.head(...handlers);\n\n return this;\n }\n\n options(path: Path, ...handlers: Handler[]) : this {\n const route = this.route(path);\n route.options(...handlers);\n\n return this;\n }\n\n // --------------------------------------------------\n\n use(router: Router) : this;\n\n use(handler: Handler) : this;\n\n use(handler: ErrorHandler) : this;\n\n use(path: Path, router: Router) : this;\n\n use(path: Path, handler: Handler) : this;\n\n use(path: Path, handler: ErrorHandler) : this;\n\n use(...input: unknown[]) : this {\n /* istanbul ignore next */\n if (input.length === 0) {\n return this;\n }\n\n let path : Path | undefined;\n\n if (isPath(input[0])) {\n path = input.shift() as Path;\n }\n\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n if (isRouterInstance(item)) {\n if (path) {\n item.setPath(path);\n }\n item.setPathMatcherOptions(this.pathMatcherOptions);\n this.stack.push(item);\n continue;\n }\n\n if (typeof item === 'function') {\n this.stack.push(new Layer({\n path: path || '/',\n pathMatcher: {\n strict: false,\n end: false,\n sensitive: this.pathMatcherOptions.sensitive,\n },\n }, item));\n }\n }\n\n return this;\n }\n}\n"],"names":["isStatsObject","obj","Stats","Object","prototype","toString","call","ctime","mtime","ino","size","generateETag","input","getTime","length","entity","Buffer","isBuffer","hash","crypto","createHash","update","digest","substring","createEtag","options","weak","tag","isObject","item","Array","isArray","buildEtagFn","undefined","merge","body","encoding","buff","from","threshold","byteLength","buildTrustProxyFn","_address","hop","split","map","value","trim","proxyAddr","compile","isInstance","name","Symbol","for","getMimeType","type","indexOf","getType","getCharsetForMimeType","test","meta","get","charset","toLowerCase","isPath","RegExp","isPromise","p","Promise","then","createRequestTimeout","res","timeout","done","instance","setTimeout","statusCode","GatewayTimeoutErrorOptions","statusMessage","message","end","once","clearTimeout","e","TRAILING_SLASH_RE","hasTrailingSlash","queryParams","endsWith","withoutTrailingSlash","slice","s0","s","join","withTrailingSlash","hasLeadingSlash","startsWith","withoutLeadingSlash","substr","withLeadingSlash","cleanDoubleSlashes","str","replace","buildConfig","Continu","defaults","env","process","NODE_ENV","trustProxy","subdomainOffset","etag","proxyIpMax","transformers","validators","zod","string","safeParse","any","number","nonnegative","useConfig","setConfig","config","setConfigOption","key","setRaw","getConfigOption","MethodName","GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD","HeaderName","ACCEPT","ACCEPT_CHARSET","ACCEPT_ENCODING","ACCEPT_LANGUAGE","ACCEPT_RANGES","ALLOW","CACHE_CONTROL","CONTENT_DISPOSITION","CONTENT_ENCODING","CONTENT_LENGTH","CONTENT_RANGE","CONTENT_TYPE","COOKIE","ETag","HOST","IF_MODIFIED_SINCE","IF_NONE_MATCH","LAST_MODIFIED","LOCATION","RANGE","RATE_LIMIT_LIMIT","RATE_LIMIT_REMAINING","RATE_LIMIT_RESET","RETRY_AFTER","SET_COOKIE","TRANSFER_ENCODING","X_FORWARDED_HOST","X_FORWARDED_FOR","X_FORWARDED_PROTO","BodySymbol","useRequestBody","req","hasRequestBody","setRequestBody","extendRequestBody","isRequestCacheable","modifiedTime","modifiedSince","headers","Date","CookieSymbol","useRequestCookies","hasRequestCookies","useRequestCookie","setRequestCookies","extendRequestCookies","cookies","envSymbol","setRequestEnv","useRequestEnv","unsetRequestEnv","hasOwnProperty","getRequestHeader","setRequestHeader","NegotiatorSymbol","useRequestNegotiator","Negotiator","getRequestAcceptableContentTypes","negotiator","mediaTypes","getRequestAcceptableContentType","items","shift","header","polluted","mimeTypes","i","mimeType","push","matches","getRequestAcceptableCharsets","charsets","getRequestAcceptableCharset","getRequestAcceptableEncodings","encodings","getRequestAcceptableEncoding","getRequestAcceptableLanguages","languages","getRequestAcceptableLanguage","matchRequestContentType","contentType","getRequestHostName","hostname","socket","remoteAddress","pop","trimEnd","offset","index","getRequestIP","ReqMountPathSymbol","useRequestMountPath","setRequestMountPath","basePath","ParamsSymbol","useRequestParams","params","useRequestParam","setRequestParams","data","setRequestParam","PathSymbol","useRequestPath","path","url","parsed","URL","pathname","getRequestProtocol","protocol","default","encrypted","QuerySymbol","useRequestQuery","query","hasRequestQuery","setRequestQuery","extendRequestQuery","setResponseCacheHeaders","cacheControls","concat","maxAge","setHeader","toUTCString","appendResponseHeader","getHeader","appendResponseHeaderDirective","Set","setResponseContentTypeByFileName","fileName","ext","extname","onResponseFinished","cb","called","callCallback","err","on","setResponseHeaderAttachment","filename","setResponseHeaderContentType","ifNotExists","send","chunk","JSON","stringify","len","etagFn","chunkHash","removeHeader","method","sendAccepted","sendCreated","sendStream","stream","fn","pipe","resolveStats","stats","stat","filePath","sendFile","basename","attachment","dispositionHeader","streamOptions","rangeHeader","x","y","Math","min","parseInt","start","createReadStream","sendFormat","formatDefault","formats","contentTypes","keys","sendRedirect","location","encodedLoc","html","processHandlerExecutionOutput","next","output","r","catch","decodeParam","val","decodeURIComponent","PathMatcher","fastSlash","regexpOptions","regexp","exec","match","regexpKeys","prop","constructor","pathToRegexp","Layer","isError","dispatch","mountPath","Error","BadRequestError","matchPath","pathMatcher","isLayerInstance","Route","matchMethod","layers","getMethods","layerMeta","setImmediate","layer","register","handlers","pathMatcherOptions","post","put","patch","delete","head","isStrictPath","strict","isRouteInstance","isRouterInstance","Router","setPathMatcherOptions","setPath","createListener","isRoot","listen","port","server","createServer","allowedMethods","toUpperCase","stack","distinctArray","dispatchAsync","resolve","reject","route","findIndex","sensitive","use","ctx"],"mappings":"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"}