routup 1.0.0-alpha.1 → 1.0.0-alpha.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.
- package/dist/index.cjs +0 -1
- package/dist/index.cjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1626,5 +1626,4 @@ exports.withLeadingSlash = withLeadingSlash;
|
|
|
1626
1626
|
exports.withTrailingSlash = withTrailingSlash;
|
|
1627
1627
|
exports.withoutLeadingSlash = withoutLeadingSlash;
|
|
1628
1628
|
exports.withoutTrailingSlash = withoutTrailingSlash;
|
|
1629
|
-
module.exports = Object.assign(exports.default, exports);
|
|
1630
1629
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/utils/object.ts","../src/utils/etag/module.ts","../src/utils/etag/utils.ts","../src/utils/trust-proxy/module.ts","../src/utils/is-instance.ts","../src/utils/mime.ts","../src/utils/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":["/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport 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 // genuine fs.Stats\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","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport { isObject } from '../object';\nimport { createEtag } from './module';\nimport type { EtagFn, EtagOptions } from './type';\n\nexport function buildEtagFn(input?: boolean | EtagOptions | EtagFn) : EtagFn {\n if (typeof input === 'function') {\n return input;\n }\n\n input = input ?? true;\n\n if (input === false) {\n return () => 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","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport 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","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Path } from '../type';\n\nexport function isPath(input: unknown) : input is Path {\n return typeof input === 'string' || input instanceof RegExp;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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 if (typeof done === 'function') {\n done();\n }\n });\n\n res.once('error', (e) => {\n clearTimeout(instance);\n\n if (typeof done === 'function') {\n done(e);\n }\n });\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nconst 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport 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_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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport type { Request } from '../../type';\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 setRequestBody(req: Request, key: string, value: unknown) : void;\nexport function setRequestBody(req: Request, record: Record<string, any>, append?: boolean) : void;\nexport function setRequestBody(req: Request, key: Record<string, any> | string, value?: boolean | unknown) : void {\n if (BodySymbol in req) {\n if (typeof key === 'object') {\n if (value) {\n (req as any)[BodySymbol] = merge((req as any)[BodySymbol], key);\n } else {\n (req as any)[BodySymbol] = key;\n }\n } else {\n (req as any)[BodySymbol][key] = value;\n }\n\n return;\n }\n\n if (typeof key === 'object') {\n (req as any)[BodySymbol] = key;\n return;\n }\n\n (req as any)[BodySymbol] = {\n [key]: value,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Request } from '../../type';\n\nexport function isRequestCacheable(req: Request, modifiedTime: string | Date) : boolean {\n const modifiedSince = req.headers['if-modified-since'];\n if (!modifiedSince) {\n return false;\n }\n\n modifiedTime = typeof modifiedTime === 'string' ?\n new Date(modifiedTime) :\n modifiedTime;\n\n return new Date(modifiedSince) >= modifiedTime;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IncomingMessage } from 'node:http';\nimport { merge } from 'smob';\nimport { isObject } from '../../utils';\nimport type { RequestFn } from '../type';\n\nconst CookieSymbol = Symbol.for('ReqCookie');\n\nlet requestFn : undefined | RequestFn;\n\nexport function setRequestCookieFn(fn: RequestFn) {\n requestFn = fn;\n}\n\nexport function useRequestCookies(\n req: IncomingMessage,\n) : Record<string, string> {\n if (\n !(CookieSymbol in req) &&\n typeof requestFn !== 'undefined'\n ) {\n (req as any)[CookieSymbol] = requestFn(req);\n }\n\n if (CookieSymbol in req) {\n return (req as any)[CookieSymbol];\n }\n\n return {};\n}\n\nexport function hasRequestCookies(req: IncomingMessage) {\n return CookieSymbol in req && isObject((req as any)[CookieSymbol]);\n}\n\nexport function useRequestCookie(req: IncomingMessage, name: string) : string | undefined {\n return useRequestCookies(req)[name];\n}\n\nexport function setRequestCookies(\n req: IncomingMessage,\n record: Record<string, any>,\n mergeIt?: boolean,\n) : void {\n if (CookieSymbol in req) {\n if (mergeIt) {\n (req as any)[CookieSymbol] = merge((req as any)[CookieSymbol], record);\n }\n\n return;\n }\n\n (req as any)[CookieSymbol] = record;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { Request } from '../../type';\n\nconst ParamsSymbol = Symbol.for('ReqParams');\n\nexport function useRequestParams(req: Request) : Record<string, any> {\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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { URL } from 'node:url';\nimport type { Request } from '../../type';\n\nexport function useRequestPath(req: Request) : string {\n if ('path' in req) {\n return (req as any).path;\n }\n\n if (typeof req.url === 'undefined') {\n return '/';\n }\n\n const parsed = new URL(req.url, 'http://localhost/');\n\n return parsed.pathname;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport { isObject } from '../../utils';\nimport type { Request } from '../../type';\nimport type { RequestFn } from '../type';\n\nconst QuerySymbol = Symbol.for('ReqQuery');\n\nlet requestFn : undefined | RequestFn;\n\nexport function setRequestQueryFn(fn: RequestFn) {\n requestFn = fn;\n}\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 (\n !(QuerySymbol in req) &&\n typeof requestFn !== 'undefined'\n ) {\n (req as any)[QuerySymbol] = requestFn(req);\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 {};\n}\n\nexport function hasRequestQuery(req: Request) : boolean {\n return (QuerySymbol in req) && isObject((req as any)[QuerySymbol]);\n}\n\nexport function setRequestQuery(req: Request, key: string, value: unknown) : void;\nexport function setRequestQuery(req: Request, record: Record<string, any>, append?: boolean) : void;\nexport function setRequestQuery(req: Request, key: Record<string, any> | string, value?: boolean | unknown) : void {\n if (QuerySymbol in req) {\n if (typeof key === 'object') {\n if (value) {\n (req as any)[QuerySymbol] = merge((req as any)[QuerySymbol], key);\n } else {\n (req as any)[QuerySymbol] = key;\n }\n } else {\n (req as any)[QuerySymbol][key] = value;\n }\n\n return;\n }\n\n if (typeof key === 'object') {\n (req as any)[QuerySymbol] = key;\n return;\n }\n\n (req as any)[QuerySymbol] = {\n [key]: value,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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\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', async () => {\n callCallback();\n });\n\n res.on('close', async () => {\n callCallback();\n });\n\n res.on('error', async (err) => {\n callCallback(err);\n });\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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 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.start >= stats.size || streamOptions.end >= 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Response } from '../../type';\n\nexport type ResponseFormat = {\n [key: string]: () => void,\n default: () => void\n};\n\nexport function sendFormat(_res: Response, _format: ResponseFormat) {\n\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isInstance } from '../utils';\nimport type { Layer } from './module';\n\nexport function isLayerInstance(input: unknown) : input is Layer {\n return isInstance(input, 'Layer');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isInstance } from '../utils';\nimport type { Route } from './module';\n\nexport function isRouteInstance(input: unknown) : input is Route {\n return isInstance(input, 'Route');\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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":["isObject","item","Array","isArray","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","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_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","setRequestBody","isRequestCacheable","modifiedTime","modifiedSince","headers","Date","CookieSymbol","requestFn","setRequestCookieFn","fn","useRequestCookies","hasRequestCookies","useRequestCookie","setRequestCookies","record","mergeIt","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","useRequestPath","path","url","parsed","URL","pathname","getRequestProtocol","protocol","default","encrypted","QuerySymbol","setRequestQueryFn","useRequestQuery","query","hasRequestQuery","setRequestQuery","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","pipe","resolveStats","stats","stat","filePath","sendFile","basename","attachment","dispositionHeader","streamOptions","rangeHeader","x","y","Math","min","parseInt","start","createReadStream","sendFormat","_res","_format","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","keys","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/object.ts","../src/utils/etag/module.ts","../src/utils/etag/utils.ts","../src/utils/trust-proxy/module.ts","../src/utils/is-instance.ts","../src/utils/mime.ts","../src/utils/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":["/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport 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 // genuine fs.Stats\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","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport { isObject } from '../object';\nimport { createEtag } from './module';\nimport type { EtagFn, EtagOptions } from './type';\n\nexport function buildEtagFn(input?: boolean | EtagOptions | EtagFn) : EtagFn {\n if (typeof input === 'function') {\n return input;\n }\n\n input = input ?? true;\n\n if (input === false) {\n return () => 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","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport 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","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Path } from '../type';\n\nexport function isPath(input: unknown) : input is Path {\n return typeof input === 'string' || input instanceof RegExp;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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 if (typeof done === 'function') {\n done();\n }\n });\n\n res.once('error', (e) => {\n clearTimeout(instance);\n\n if (typeof done === 'function') {\n done(e);\n }\n });\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nconst 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport 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_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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport type { Request } from '../../type';\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 setRequestBody(req: Request, key: string, value: unknown) : void;\nexport function setRequestBody(req: Request, record: Record<string, any>, append?: boolean) : void;\nexport function setRequestBody(req: Request, key: Record<string, any> | string, value?: boolean | unknown) : void {\n if (BodySymbol in req) {\n if (typeof key === 'object') {\n if (value) {\n (req as any)[BodySymbol] = merge((req as any)[BodySymbol], key);\n } else {\n (req as any)[BodySymbol] = key;\n }\n } else {\n (req as any)[BodySymbol][key] = value;\n }\n\n return;\n }\n\n if (typeof key === 'object') {\n (req as any)[BodySymbol] = key;\n return;\n }\n\n (req as any)[BodySymbol] = {\n [key]: value,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Request } from '../../type';\n\nexport function isRequestCacheable(req: Request, modifiedTime: string | Date) : boolean {\n const modifiedSince = req.headers['if-modified-since'];\n if (!modifiedSince) {\n return false;\n }\n\n modifiedTime = typeof modifiedTime === 'string' ?\n new Date(modifiedTime) :\n modifiedTime;\n\n return new Date(modifiedSince) >= modifiedTime;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IncomingMessage } from 'node:http';\nimport { merge } from 'smob';\nimport { isObject } from '../../utils';\nimport type { RequestFn } from '../type';\n\nconst CookieSymbol = Symbol.for('ReqCookie');\n\nlet requestFn : undefined | RequestFn;\n\nexport function setRequestCookieFn(fn: RequestFn) {\n requestFn = fn;\n}\n\nexport function useRequestCookies(\n req: IncomingMessage,\n) : Record<string, string> {\n if (\n !(CookieSymbol in req) &&\n typeof requestFn !== 'undefined'\n ) {\n (req as any)[CookieSymbol] = requestFn(req);\n }\n\n if (CookieSymbol in req) {\n return (req as any)[CookieSymbol];\n }\n\n return {};\n}\n\nexport function hasRequestCookies(req: IncomingMessage) {\n return CookieSymbol in req && isObject((req as any)[CookieSymbol]);\n}\n\nexport function useRequestCookie(req: IncomingMessage, name: string) : string | undefined {\n return useRequestCookies(req)[name];\n}\n\nexport function setRequestCookies(\n req: IncomingMessage,\n record: Record<string, any>,\n mergeIt?: boolean,\n) : void {\n if (CookieSymbol in req) {\n if (mergeIt) {\n (req as any)[CookieSymbol] = merge((req as any)[CookieSymbol], record);\n }\n\n return;\n }\n\n (req as any)[CookieSymbol] = record;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { Request } from '../../type';\n\nconst ParamsSymbol = Symbol.for('ReqParams');\n\nexport function useRequestParams(req: Request) : Record<string, any> {\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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { URL } from 'node:url';\nimport type { Request } from '../../type';\n\nexport function useRequestPath(req: Request) : string {\n if ('path' in req) {\n return (req as any).path;\n }\n\n if (typeof req.url === 'undefined') {\n return '/';\n }\n\n const parsed = new URL(req.url, 'http://localhost/');\n\n return parsed.pathname;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport { isObject } from '../../utils';\nimport type { Request } from '../../type';\nimport type { RequestFn } from '../type';\n\nconst QuerySymbol = Symbol.for('ReqQuery');\n\nlet requestFn : undefined | RequestFn;\n\nexport function setRequestQueryFn(fn: RequestFn) {\n requestFn = fn;\n}\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 (\n !(QuerySymbol in req) &&\n typeof requestFn !== 'undefined'\n ) {\n (req as any)[QuerySymbol] = requestFn(req);\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 {};\n}\n\nexport function hasRequestQuery(req: Request) : boolean {\n return (QuerySymbol in req) && isObject((req as any)[QuerySymbol]);\n}\n\nexport function setRequestQuery(req: Request, key: string, value: unknown) : void;\nexport function setRequestQuery(req: Request, record: Record<string, any>, append?: boolean) : void;\nexport function setRequestQuery(req: Request, key: Record<string, any> | string, value?: boolean | unknown) : void {\n if (QuerySymbol in req) {\n if (typeof key === 'object') {\n if (value) {\n (req as any)[QuerySymbol] = merge((req as any)[QuerySymbol], key);\n } else {\n (req as any)[QuerySymbol] = key;\n }\n } else {\n (req as any)[QuerySymbol][key] = value;\n }\n\n return;\n }\n\n if (typeof key === 'object') {\n (req as any)[QuerySymbol] = key;\n return;\n }\n\n (req as any)[QuerySymbol] = {\n [key]: value,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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\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', async () => {\n callCallback();\n });\n\n res.on('close', async () => {\n callCallback();\n });\n\n res.on('error', async (err) => {\n callCallback(err);\n });\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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 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.start >= stats.size || streamOptions.end >= 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Response } from '../../type';\n\nexport type ResponseFormat = {\n [key: string]: () => void,\n default: () => void\n};\n\nexport function sendFormat(_res: Response, _format: ResponseFormat) {\n\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isInstance } from '../utils';\nimport type { Layer } from './module';\n\nexport function isLayerInstance(input: unknown) : input is Layer {\n return isInstance(input, 'Layer');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isInstance } from '../utils';\nimport type { Route } from './module';\n\nexport function isRouteInstance(input: unknown) : input is Route {\n return isInstance(input, 'Route');\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport 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":["isObject","item","Array","isArray","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","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_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","setRequestBody","isRequestCacheable","modifiedTime","modifiedSince","headers","Date","CookieSymbol","requestFn","setRequestCookieFn","fn","useRequestCookies","hasRequestCookies","useRequestCookie","setRequestCookies","record","mergeIt","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","useRequestPath","path","url","parsed","URL","pathname","getRequestProtocol","protocol","default","encrypted","QuerySymbol","setRequestQueryFn","useRequestQuery","query","hasRequestQuery","setRequestQuery","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","pipe","resolveStats","stats","stat","filePath","sendFile","basename","attachment","dispositionHeader","streamOptions","rangeHeader","x","y","Math","min","parseInt","start","createReadStream","sendFormat","_res","_format","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","keys","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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"}
|