diff --git a/cjs/nanoexpress.cjs.map b/cjs/nanoexpress.cjs.map index 9db1ebe2..004db2a1 100644 --- a/cjs/nanoexpress.cjs.map +++ b/cjs/nanoexpress.cjs.map @@ -1 +1 @@ -{"version":3,"file":"nanoexpress.cjs","sources":["../src/constants.ts","../src/helpers/gc.ts","../src/helpers/loggy.ts","../src/hooks/manager.ts","../src/helpers/http-codes.ts","../src/helpers/http-methods.ts","../src/helpers/invalid.ts","../src/helpers/iterate-blocks.ts","../src/helpers/mime.ts","../src/helpers/slashify.ts","../src/helpers/noop.ts","../src/polyfills/http-request.ts","../src/polyfills/http-response.ts","../src/utils/legacy.ts","../src/route-engine.ts","../src/router.ts","../src/app.ts","../src/exposes/websocket.ts","../src/hooks/index.ts","../src/nanoexpress.ts"],"sourcesContent":["// Http(Request/Response)\nexport const request: unique symbol = Symbol('NanoexpressHttpRequestInstance');\nexport const response: unique symbol = Symbol(\n 'NanoexpressHttpResponseInstance'\n);\n\n// HttpRequest symbols\n\nexport const reqConfig: unique symbol = Symbol('NanoexpressHttpRequestConfig');\nexport const reqEvents: unique symbol = Symbol('NanoexpressHttpRequestEvents');\nexport const reqRequest: unique symbol = Symbol(\n 'NanoexpressHttpRequestRawInstance'\n);\nexport const reqRawResponse: unique symbol = Symbol(\n 'NanoexpressHttpResponseRawInstance'\n);\n\n// HttpResponse symbols\nexport const resHeaders: unique symbol = Symbol(\n 'NanoexpressHttpResponseHeaders'\n);\nexport const resConfig: unique symbol = Symbol('NanoexpressHttpResponseConfig');\nexport const resEvents: unique symbol = Symbol('NanoexpressHttpResponseEvents');\nexport const resAbortHandler: unique symbol = Symbol(\n 'NanoexpressHttpResponseAbortHandler'\n);\nexport const resAbortHandlerExpose: unique symbol = Symbol(\n 'NanoexpressHttpResponseAbortHandlerExpose'\n);\n\nexport const appInstance: unique symbol = Symbol('NanoexpressAppInstance');\nexport const routerInstances: unique symbol = Symbol(\n 'NanoexpressRouterInstances'\n);\nexport const wsInstances: unique symbol = Symbol(\n 'NanoexpressWebSocketInstances'\n);\n","export default function _gc(): boolean {\n try {\n if (global.gc) {\n global.gc();\n }\n return true;\n } catch (e) {\n return false;\n }\n}\n","import debugLog from 'debug';\n\nexport const debug = debugLog('nanoexpress');\nexport const error = debugLog('nanoexpress:error');\n\nexport const warn = debugLog('nanoexpress:warn');\n","export type Dependencies = Array;\n\ninterface ICallbackState {\n handler: () => never;\n dependencies: Dependencies;\n isEffect: boolean;\n mounted: boolean;\n}\n\nconst lastDeps: Dependencies[] = [];\nconst callbacks: ICallbackState[] = [];\nlet hookIndex = 0;\n\nconst register =\n (runValue = false, returnValue = false) =>\n (\n callback: (...args: any[]) => any,\n dependencies: Dependencies\n ): (() => any) | any => {\n if (\n !dependencies ||\n !lastDeps[hookIndex] ||\n !lastDeps[hookIndex].every(\n (dep, depIndex) => dep === dependencies[depIndex]\n )\n ) {\n callbacks[hookIndex] = {\n handler: runValue ? callback() : callback,\n dependencies,\n isEffect: runValue && !returnValue,\n mounted: runValue\n };\n lastDeps[hookIndex] = dependencies;\n }\n\n const _callback = callbacks[hookIndex].handler;\n hookIndex += 1;\n\n if (returnValue) {\n return _callback;\n }\n };\nconst unregister = (): void => {\n callbacks.forEach((callback) => {\n if (\n callback.isEffect &&\n callback.mounted &&\n typeof callback.handler === 'function'\n ) {\n callback.handler();\n callback.mounted = false;\n }\n });\n hookIndex = 0;\n};\n\nexport { register, unregister };\n","import { STATUS_CODES } from 'http';\n\nconst codesBetween = Array.from({ length: 500 })\n .fill(0)\n .map((_, index) => 100 + index);\n\nconst httpCodes = codesBetween.reduce((codes, code) => {\n const codeString = STATUS_CODES[code];\n if (codeString) {\n codes[code] = `${code} ${codeString}`;\n }\n return codes;\n}, {} as Record);\n\nexport default httpCodes;\n","import { HttpMethod } from '../../types/nanoexpress';\n\nexport default [\n 'get',\n 'post',\n 'put',\n 'patch',\n 'del',\n 'any',\n 'head',\n 'options',\n 'trace'\n].map((m) => m.toUpperCase()) as HttpMethod[];\n","export default function invalid(message: string): void {\n throw new Error(message);\n}\n","import {\n BlockMode,\n IBlock\n} from '@nanoexpress/route-syntax-parser/types/interfaces';\n\nexport default (blocks: IBlock[]): BlockMode[] => {\n return [...new Set(blocks.map((block) => block.mode))];\n};\n","const mimes = {\n '3gp': 'video/3gpp',\n a: 'application/octet-stream',\n ai: 'application/postscript',\n aif: 'audio/x-aiff',\n aiff: 'audio/x-aiff',\n asc: 'application/pgp-signature',\n asf: 'video/x-ms-asf',\n asm: 'text/x-asm',\n asx: 'video/x-ms-asf',\n atom: 'application/atom+xml',\n au: 'audio/basic',\n avi: 'video/x-msvideo',\n bat: 'application/x-msdownload',\n bin: 'application/octet-stream',\n bmp: 'image/bmp',\n bz2: 'application/x-bzip2',\n c: 'text/x-c',\n cab: 'application/vnd.ms-cab-compressed',\n cc: 'text/x-c',\n chm: 'application/vnd.ms-htmlhelp',\n class: 'application/octet-stream',\n com: 'application/x-msdownload',\n conf: 'text/plain',\n cpp: 'text/x-c',\n crt: 'application/x-x509-ca-cert',\n css: 'text/css',\n csv: 'text/csv',\n cxx: 'text/x-c',\n deb: 'application/x-debian-package',\n der: 'application/x-x509-ca-cert',\n diff: 'text/x-diff',\n djv: 'image/vnd.djvu',\n djvu: 'image/vnd.djvu',\n dll: 'application/x-msdownload',\n dmg: 'application/octet-stream',\n doc: 'application/msword',\n dot: 'application/msword',\n dtd: 'application/xml-dtd',\n dvi: 'application/x-dvi',\n ear: 'application/java-archive',\n eml: 'message/rfc822',\n eps: 'application/postscript',\n exe: 'application/x-msdownload',\n f: 'text/x-fortran',\n f77: 'text/x-fortran',\n f90: 'text/x-fortran',\n flv: 'video/x-flv',\n for: 'text/x-fortran',\n gem: 'application/octet-stream',\n gemspec: 'text/x-script.ruby',\n gif: 'image/gif',\n gz: 'application/x-gzip',\n h: 'text/x-c',\n hh: 'text/x-c',\n htm: 'text/html',\n html: 'text/html',\n ico: 'image/vnd.microsoft.icon',\n ics: 'text/calendar',\n ifb: 'text/calendar',\n iso: 'application/octet-stream',\n jar: 'application/java-archive',\n java: 'text/x-java-source',\n jnlp: 'application/x-java-jnlp-file',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n js: 'application/javascript',\n json: 'application/json',\n log: 'text/plain',\n m3u: 'audio/x-mpegurl',\n m4v: 'video/mp4',\n man: 'text/troff',\n mathml: 'application/mathml+xml',\n mbox: 'application/mbox',\n mdoc: 'text/troff',\n me: 'text/troff',\n mid: 'audio/midi',\n midi: 'audio/midi',\n mime: 'message/rfc822',\n mjs: 'application/javascript',\n mml: 'application/mathml+xml',\n mng: 'video/x-mng',\n mov: 'video/quicktime',\n mp3: 'audio/mpeg',\n mp4: 'video/mp4',\n mp4v: 'video/mp4',\n mpeg: 'video/mpeg',\n mpg: 'video/mpeg',\n ms: 'text/troff',\n msi: 'application/x-msdownload',\n odp: 'application/vnd.oasis.opendocument.presentation',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odt: 'application/vnd.oasis.opendocument.text',\n ogg: 'application/ogg',\n p: 'text/x-pascal',\n pas: 'text/x-pascal',\n pbm: 'image/x-portable-bitmap',\n pdf: 'application/pdf',\n pem: 'application/x-x509-ca-cert',\n pgm: 'image/x-portable-graymap',\n pgp: 'application/pgp-encrypted',\n pkg: 'application/octet-stream',\n pl: 'text/x-script.perl',\n pm: 'text/x-script.perl-module',\n png: 'image/png',\n pnm: 'image/x-portable-anymap',\n ppm: 'image/x-portable-pixmap',\n pps: 'application/vnd.ms-powerpoint',\n ppt: 'application/vnd.ms-powerpoint',\n ps: 'application/postscript',\n psd: 'image/vnd.adobe.photoshop',\n py: 'text/x-script.python',\n qt: 'video/quicktime',\n ra: 'audio/x-pn-realaudio',\n rake: 'text/x-script.ruby',\n ram: 'audio/x-pn-realaudio',\n rar: 'application/x-rar-compressed',\n rb: 'text/x-script.ruby',\n rdf: 'application/rdf+xml',\n roff: 'text/troff',\n rpm: 'application/x-redhat-package-manager',\n rss: 'application/rss+xml',\n rtf: 'application/rtf',\n ru: 'text/x-script.ruby',\n s: 'text/x-asm',\n sgm: 'text/sgml',\n sgml: 'text/sgml',\n sh: 'application/x-sh',\n sig: 'application/pgp-signature',\n snd: 'audio/basic',\n so: 'application/octet-stream',\n svg: 'image/svg+xml',\n svgz: 'image/svg+xml',\n swf: 'application/x-shockwave-flash',\n t: 'text/troff',\n tar: 'application/x-tar',\n tbz: 'application/x-bzip-compressed-tar',\n tcl: 'application/x-tcl',\n tex: 'application/x-tex',\n texi: 'application/x-texinfo',\n texinfo: 'application/x-texinfo',\n text: 'text/plain',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n torrent: 'application/x-bittorrent',\n tr: 'text/troff',\n txt: 'text/plain',\n vcf: 'text/x-vcard',\n vcs: 'text/x-vcalendar',\n vrml: 'model/vrml',\n war: 'application/java-archive',\n wav: 'audio/x-wav',\n wma: 'audio/x-ms-wma',\n wmv: 'video/x-ms-wmv',\n wmx: 'video/x-ms-wmx',\n wrl: 'model/vrml',\n wsdl: 'application/wsdl+xml',\n xbm: 'image/x-xbitmap',\n xhtml: 'application/xhtml+xml',\n xls: 'application/vnd.ms-excel',\n xml: 'application/xml',\n xpm: 'image/x-xpixmap',\n xsl: 'application/xml',\n xslt: 'application/xslt+xml',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n zip: 'application/zip',\n default: 'text/html'\n};\n\ntype valueof = T[keyof T];\n\nconst getMime = (path: string): valueof | undefined => {\n const i = Number(path.lastIndexOf('.'));\n return mimes[path.substr(i + 1).toLowerCase() as keyof typeof mimes];\n};\n\nexport { getMime, mimes };\n","export default (path: string): string =>\n path !== '*' &&\n path.charAt(path.length - 1) !== '/' &&\n path.charAt(path.length - 1) !== '*' &&\n (path.lastIndexOf('.') === -1 || path.lastIndexOf('.') < path.length - 4)\n ? `${path}/`\n : path;\n","export default (): void => {};\n","/* eslint-disable max-lines, max-lines-per-function */\nimport { EventEmitter } from 'events';\nimport queryParse from 'fast-query-parse';\nimport { Readable, Writable } from 'stream';\nimport {\n HttpRequest as uWS_HttpRequest,\n HttpResponse as uWS_HttpResponse\n} from 'uWebSockets.js';\nimport { RequestSchema, RequestSchemaWithBody } from '../../types/find-route';\nimport { HttpMethod, INanoexpressOptions } from '../../types/nanoexpress';\nimport { reqConfig, reqEvents, reqRawResponse, reqRequest } from '../constants';\nimport { invalid } from '../helpers';\n\nexport default class HttpRequest<\n THttpMethod = HttpMethod,\n THttpSchema extends RequestSchemaWithBody = RequestSchema\n> {\n protected [reqConfig]: INanoexpressOptions;\n\n protected [reqEvents]!: EventEmitter | null;\n\n protected [reqRequest]!: uWS_HttpRequest;\n\n protected [reqRawResponse]!: uWS_HttpResponse;\n\n protected registered: boolean;\n\n baseUrl!: string;\n\n url!: string;\n\n originalUrl!: string;\n\n path!: string;\n\n method!: THttpMethod;\n\n headers!: THttpSchema['headers'];\n\n params?: THttpSchema['params'];\n\n body?: THttpSchema['body'];\n\n query: THttpSchema['query'] = null;\n\n stream!: Readable;\n\n id = 0;\n\n constructor(options: INanoexpressOptions) {\n this[reqConfig] = options;\n\n this.registered = false;\n\n return this;\n }\n\n setRequest(req: uWS_HttpRequest, res: uWS_HttpResponse): this {\n const options = this[reqConfig];\n\n this[reqRequest] = req;\n this[reqRawResponse] = res;\n\n const query = req.getQuery();\n const url = req.getUrl();\n\n this.url = url;\n this.originalUrl = this.url;\n this.path = url;\n this.baseUrl = '';\n\n this.method = req.getMethod().toUpperCase() as unknown as THttpMethod;\n\n this.headers = {};\n req.forEach((key, value) => {\n (this.headers as RequestSchema['headers'])[key] = value;\n });\n\n if (url.charAt(url.length - 1) !== '/') {\n this.url += '/';\n this.path += '/';\n this.originalUrl += '/';\n }\n\n if (options.enableExpressCompatibility && query) {\n this.originalUrl += `?${query}`;\n }\n this.query = queryParse(query);\n\n // @ts-ignore\n if (this.method === 'POST' || this.method === 'PUT') {\n // Imitiate some modes\n this.stream = new Readable({ read(): void {} });\n\n // Protected variables\n this[reqEvents] = null;\n this.registered = false;\n }\n\n // eslint-disable-next-line security-node/detect-insecure-randomness\n this.id = Math.round(Math.random() * 1e5);\n\n return this;\n }\n\n on(event: string, listener: (...args: any[]) => void): this {\n const { stream } = this;\n if (stream) {\n stream.on(event, listener);\n }\n return this;\n }\n\n emit(event: string, ...args: any[]): this {\n const { stream } = this;\n if (stream) {\n stream.emit(event, ...args);\n }\n return this;\n }\n\n getHeader(key: string): string {\n return this.headers[key];\n }\n\n hasHeader(key: string): boolean {\n return !!this.headers[key];\n }\n\n getParameter(index: number): string {\n return this[reqRequest].getParameter(index);\n }\n\n pipe(destination: Writable): Writable | void | Promise {\n const { stream } = this;\n\n if (stream.readableDidRead || stream.readableEnded) {\n return invalid('Stream already used, cannot use one stream twice');\n }\n\n if (stream) {\n return stream.pipe(destination);\n }\n return invalid(\n 'Stream was not defined, something wrong, please check your code or method is not a POST or PUT'\n );\n }\n\n async *[Symbol.asyncIterator](): any {\n const { stream } = this;\n\n if (stream) {\n for await (const chunk of stream) {\n yield chunk;\n }\n }\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport { EventEmitter } from 'events';\nimport { createReadStream, ReadStream, statSync } from 'fs';\nimport uWS, { RecognizedString } from 'uWebSockets.js';\nimport {\n BrotliCompress,\n BrotliOptions,\n createBrotliCompress,\n createDeflate,\n createGzip,\n Deflate,\n Gzip,\n ZlibOptions\n} from 'zlib';\nimport { INanoexpressOptions } from '../../types/nanoexpress';\nimport {\n request as resRequest,\n resAbortHandler,\n resAbortHandlerExpose,\n resConfig,\n resEvents,\n resHeaders,\n response as resResponse\n} from '../constants';\nimport { debug, getMime, httpCodes, invalid, warn } from '../helpers';\nimport HttpRequest from './http-request';\n\n/**\n * HttpResponse class\n * @constructor\n * @class\n * @namespace nanoexpress.HttpResponse\n * @memberof nanoexpress\n * @example new HttpResponse().setResponse(uWS.HttpResponse)\n */\nclass HttpResponse {\n public [resRequest]: HttpRequest | null;\n\n public [resResponse]: uWS.HttpResponse | null;\n\n // Expose functionality properties\n protected [resHeaders]: Record | null;\n\n protected [resAbortHandler]: (() => void)[];\n\n protected [resAbortHandlerExpose]: boolean;\n\n protected [resConfig]: INanoexpressOptions;\n\n protected [resEvents]: EventEmitter | null;\n\n public done: boolean;\n\n public aborted: boolean;\n\n public streaming: boolean;\n\n protected _headersSet = false;\n\n protected registered: boolean;\n\n protected mode: 'immediate' | 'queue' | 'cork' = 'queue';\n\n public serialize?: (\n data: Record | string | number | boolean\n ) => string;\n\n public compiledResponse?: string;\n\n public statusCode: number;\n\n id = 0;\n\n constructor(config: INanoexpressOptions) {\n this[resConfig] = config;\n this.done = false;\n this.aborted = false;\n this._headersSet = false;\n this.registered = false;\n this.streaming = false;\n this[resEvents] = null;\n this[resAbortHandler] = [];\n this[resAbortHandlerExpose] = false;\n\n this[resRequest] = null;\n this[resResponse] = null;\n this[resHeaders] = null;\n\n this.mode = config.responseMode;\n\n this.statusCode = 200;\n }\n\n protected registerEvents(): this {\n const emitter = this[resEvents];\n\n if (emitter && !this.registered) {\n this.exposeAborted();\n\n emitter\n .on('pipe', (stream) => {\n debug('stream.pipe(res)');\n\n this.streaming = true;\n this.stream(stream);\n })\n .on('data', () => {\n debug('stream.pipe(res):data event');\n })\n\n .on('unpipe', () => {\n debug('stream.unpipe(res)');\n\n this.aborted = true;\n })\n .on('error', () => {\n debug('stream.pipe(res) error');\n this.aborted = true;\n this.end();\n });\n this.registered = true;\n }\n\n return this;\n }\n\n /**\n * Registers event to response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.on('end', (eventArgument) => {...})\n */\n on(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.on(eventName, eventArgument);\n\n debug('res.on(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Registers event to response to be fired once\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.once('end', (eventArgument) => {...})\n */\n once(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.once(eventName, eventArgument);\n\n debug('res.once(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Removes event from response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.off('end', (eventArgument) => {...})\n */\n off(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n return this;\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.off(eventName, eventArgument);\n\n debug('res.off(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Removes listener from response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.removeListener('end', (eventArgument) => {...})\n */\n removeListener(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n return this;\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.removeListener(eventName, eventArgument);\n\n debug('res.removeListener(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Emits event to response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns Emit response\n * @memberof nanoexpress.HttpResponse\n * @example res.emit('end', 1)\n */\n emit(eventName: string | symbol, eventArgument?: never): boolean {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n debug('res.emit(%s, argument)', eventName);\n\n emitter = this[resEvents] as EventEmitter;\n return emitter.emit(eventName, eventArgument);\n }\n\n /**\n * Set new HttpResponse for current pool\n * @param res Native uWS.HttpResponse instance\n * @param req HttpResponse instance\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setResponse(res, req)\n */\n setResponse(res: uWS.HttpResponse, req: HttpRequest): this {\n this[resRequest] = req;\n this[resResponse] = res;\n this.done = false;\n this.aborted = res.aborted || false;\n this._headersSet = false;\n this.streaming = false;\n this.registered = false;\n this[resEvents] = null;\n this[resAbortHandlerExpose] = false;\n this[resAbortHandler].length = 0;\n\n this[resHeaders] = null;\n this.statusCode = 200;\n\n // eslint-disable-next-line security-node/detect-insecure-randomness\n this.id = Math.round(Math.random() * 1e5);\n\n return this;\n }\n\n // Native methods re-implementing\n /**\n * Ends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.end('text');\n */\n end(body?: uWS.RecognizedString, closeConnection?: boolean): this {\n const { mode } = this;\n const res = this[resResponse];\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._end(body, closeConnection);\n });\n return this;\n }\n return this._end(body, closeConnection);\n }\n\n /**\n * Initializes Server-Side Events from your stream\n * @param body Writable stream or PassThrough\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sse(sseStream);\n */\n sse(body: ReadStream): this {\n const { mode } = this;\n const res = this[resResponse];\n\n this.exposeAborted();\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._sse(body);\n });\n return this;\n }\n return this._sse(body);\n }\n\n protected _sse(body: ReadStream): this {\n const {\n mode,\n statusCode,\n done,\n streaming,\n _headersSet,\n [resHeaders]: _headers\n } = this;\n const res = this[resResponse];\n\n if (!done && res && !streaming && !done) {\n debug(\n 'res.sse(body) called with status %d and has headers',\n statusCode,\n _headersSet\n );\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n res.writeHeader('Content-Type', 'text/event-stream; charset=utf-8');\n res.writeHeader('Connection', 'keep-alive');\n res.writeHeader('Cache-Control', 'no-cache, no-store, no-transform');\n\n body.on('data', (data) => {\n if (!this.aborted) {\n res.write(data);\n }\n });\n this.streaming = true;\n this[resResponse] = null;\n }\n return this;\n }\n\n /**\n * @private\n * Ends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res._end('text');\n */\n protected _end(body?: uWS.RecognizedString, closeConnection?: boolean): this {\n const {\n mode,\n statusCode,\n done,\n streaming,\n _headersSet,\n [resHeaders]: _headers\n } = this;\n const res = this[resResponse];\n\n if (!done && res && !streaming) {\n debug(\n 'res.end(body) called with status %d and has headers',\n statusCode,\n _headersSet\n );\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n res.end(body, closeConnection);\n this.done = true;\n this[resResponse] = null;\n }\n return this;\n }\n\n /**\n * Sets response status\n * @deprecated Please use `res.statusCode` instead\n * @param code Status code\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.status(204);\n */\n\n status(code: number): this {\n debug('res.status(%d)', code);\n\n this.statusCode = code;\n\n return this;\n }\n\n /**\n * Combine of `res.status` and `res.setHeaders`\n * @param code Status code\n * @param headers Record object containing headers\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.writeHead(200, {'X-Header': 1234});\n */\n writeHead(\n code: number | Record,\n headers?: Record\n ): this {\n if (typeof code === 'object' && !headers) {\n headers = code;\n code = 200;\n }\n\n if (code !== undefined && code !== 200) {\n this.statusCode = code as number;\n }\n if (headers !== undefined) {\n this.setHeaders(headers);\n }\n\n return this;\n }\n\n /**\n * Redirect current locate to new\n * @param code Redirect code\n * @param path Path to be redirected\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.redirect('/foo');\n */\n redirect(code: number | string, path?: string): this {\n if (!path && typeof code === 'string') {\n path = code;\n code = 301;\n }\n if (path && path.indexOf('/') === -1) {\n path = `/${path}`;\n }\n\n this.statusCode = code as number;\n this.setHeader('Location', path as string);\n\n return this.end();\n }\n\n /**\n * Sends status with empty body\n * @param code Status code\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sendStatus(204);\n */\n sendStatus(code: number): this {\n debug('res.sendStatus(%d)', code);\n\n this.statusCode = code;\n return this.end();\n }\n\n /**\n * Sends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.send({status: 'success'});\n */\n send(\n data: Record | string | number | boolean,\n closeConnection?: boolean\n ): this {\n const { done, compiledResponse } = this;\n if (!done && this[resResponse]) {\n if (compiledResponse) {\n return this.end(compiledResponse, closeConnection);\n }\n if (this.serialize) {\n return this.end(this.serialize(data), closeConnection);\n }\n if (typeof data === 'object') {\n this.setHeader('Content-Type', 'application/json; charset=utf-8');\n return this.end(\n JSON.stringify(\n data,\n this[resConfig].json_replacer,\n this[resConfig].json_spaces\n ),\n closeConnection\n );\n }\n\n return this.end(data as string, closeConnection);\n }\n return this;\n }\n\n /**\n * @deprecated Use `res.stream` instead of\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.pipe(readableStream)\n * @alias res.stream(readableStream)\n */\n pipe(stream: ReadStream, size?: number, compressed?: boolean): this {\n debug('res.pipe(stream, %d, %j)', size, compressed);\n\n return this.stream(stream, size, compressed);\n }\n\n /**\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.stream(readableStream)\n */\n stream(stream: ReadStream, size?: number, compressed = false): this {\n const { mode, [resRequest]: req, [resResponse]: res } = this;\n\n if (req && (!size || Number.isNaN(size)) && req.headers['content-length']) {\n size = +req.headers['content-length'];\n } else if ((!size || Number.isNaN(size)) && stream.path) {\n ({ size } = statSync(stream.path));\n }\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._stream(stream, size, compressed);\n });\n return this;\n }\n\n return this._stream(stream, size, compressed);\n }\n\n /**\n * @private\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res._stream(readableStream)\n */\n protected _stream(\n stream: ReadStream,\n size?: number,\n compressed = false\n ): this {\n if (!this.done && this[resResponse] && this[resResponse] !== null) {\n const res = this[resResponse] as uWS.HttpResponse;\n const config = this[resConfig];\n const { mode, statusCode, _headersSet, [resHeaders]: _headers } = this;\n\n this.exposeAborted();\n let calledData = !config.enableExpressCompatibility;\n\n if (compressed) {\n const compressedStream = this.compressStream(stream);\n\n if (compressedStream) {\n stream = compressedStream as unknown as ReadStream;\n }\n }\n\n const onclose = (): void => {\n if (calledData) {\n this.done = true;\n this.streaming = false;\n this.emit('close');\n } else if (stream.path) {\n stream.close();\n warn(\n 'res.stream(stream) data was not called, but mimicked by [nanoexpress], performance may be dropped and even can be stuck at responses, so please use official middlewares to avoid such errors'\n );\n this.stream(createReadStream(stream.path), size, compressed);\n }\n };\n const onfinish = (): void => {\n if (calledData) {\n if (typeof stream.close === 'function') {\n stream.close();\n } else {\n stream.emit('close');\n }\n }\n this.emit('finish');\n };\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n\n if (compressed || !size || Number.isNaN(size)) {\n debug('res.stream:compressed(stream, %d, %j)', size, compressed);\n stream\n .on('data', (buffer: Buffer): void => {\n calledData = true;\n\n if (this.aborted || this.done) {\n return;\n }\n res.write(\n buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n )\n );\n })\n .on('close', onclose)\n .on('finish', onfinish);\n } else {\n debug('res.stream:uncompressed(stream, %d, %j)', size, compressed);\n stream.on('data', (buffer: Buffer): void => {\n calledData = true;\n if (this.done || this.aborted) {\n return;\n }\n buffer = buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n ) as Buffer;\n\n const lastOffset = res.getWriteOffset();\n const [ok, done] = res.tryEnd(buffer, size as number);\n\n if (done) {\n this.done = true;\n } else if (!ok) {\n stream.pause();\n\n res.onWritable((offset: number): boolean => {\n if (this.done || this.aborted) {\n return true;\n }\n const [writeOk, writeDone] = res.tryEnd(\n buffer.slice(offset - lastOffset),\n size as number\n );\n if (writeDone) {\n this.done = true;\n } else if (writeOk) {\n stream.resume();\n }\n return writeOk;\n });\n }\n });\n }\n stream\n .on('error', (error) => {\n stream.destroy(error);\n this.aborted = true;\n this.emit('error', error as never);\n })\n .on('close', onclose)\n .on('finish', onfinish);\n }\n return this;\n }\n\n /**\n * Compress stream into compressed into\n * @param stream Readable stream\n * @param options One of compressions (BrotliCompress, ZlibOptions)\n * @param priority Compression picking priority\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.compressStream(writableStream)\n */\n compressStream(\n stream: ReadStream,\n options?: BrotliOptions | ZlibOptions,\n priority = ['gzip', 'br', 'deflate']\n ): BrotliCompress | Gzip | Deflate | null {\n const req = this[resRequest];\n\n if (!req) {\n invalid(\n 'This method requires active `HttpRequest`. Please load required middleware'\n );\n return null;\n }\n if (!req.headers) {\n invalid(\n 'This method requires active `HttpRequest.headers`. Please load required middleware'\n );\n return null;\n }\n const contentEncoding = req.headers['content-encoding'];\n const encoding = priority.find(\n (currentEncoding) =>\n contentEncoding && contentEncoding.indexOf(currentEncoding) !== -1\n );\n\n let compression = null;\n\n if (encoding === 'br') {\n compression = createBrotliCompress(options);\n } else if (encoding === 'gzip') {\n compression = createGzip(options);\n } else if (encoding === 'deflare') {\n compression = createDeflate(options);\n }\n\n if (compression && encoding) {\n stream.pipe(compression);\n this.setHeader('content-encoding', encoding);\n }\n\n return compression;\n }\n\n /**\n * Sends file to end user with efficient stream\n * @param path File absolute path\n * @param lastModified Sets `Last-Modified` header to prevent infinite re-loading\n * @param compressed Compresses file and saves bandwidth of user\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sendFile('foo.mp4')\n */\n sendFile(path: string, lastModified = true, compressed = false): this {\n const req = this[resRequest];\n const headers = req?.headers;\n\n const stat = statSync(path);\n let { size } = stat;\n\n // handling last modified\n if (lastModified) {\n const { mtime } = stat;\n\n mtime.setMilliseconds(0);\n const mtimeutc = mtime.toUTCString();\n\n // Return 304 if last-modified\n if (headers && headers['if-modified-since']) {\n if (new Date(headers['if-modified-since']) >= mtime) {\n this.statusCode = 304;\n return this.end();\n }\n }\n this.setHeader('last-modified', mtimeutc);\n }\n this.setHeader('content-type', getMime(path) as string);\n\n let start: number | undefined = 0;\n let end: number | undefined = 0;\n\n if (headers && headers.range) {\n [start, end] = headers.range\n .substr(6)\n .split('-')\n .map((byte: string) => (byte ? parseInt(byte, 10) : undefined));\n\n // Chrome patch for work\n if (end === undefined) {\n end = size - 1;\n }\n\n if (start !== undefined) {\n this.statusCode = 206;\n this.setHeader('accept-ranges', 'bytes');\n this.setHeader('content-range', `bytes ${start}-${end}/${size}`);\n size = end - start + 1;\n }\n }\n\n // for size = 0\n if (end < 0) {\n end = 0;\n }\n\n const createStreamInstance = end\n ? createReadStream(path, { start, end })\n : createReadStream(path);\n\n return this.stream(createStreamInstance, size, compressed);\n }\n\n /**\n * Enters or continues chunked encoding mode. Writes part of the response. End with zero length write.\n * @param chunk Content response chunk\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.write(Buffer.from('Hi'));\n */\n write(chunk: uWS.RecognizedString | ArrayBuffer): this {\n const res = this[resResponse];\n if (!this.done && res && !this.streaming) {\n debug('res.write(%s)', chunk);\n res.write(chunk);\n return this;\n }\n return this;\n }\n\n /**\n *\n * Exposed methods\n */\n exposeAborted(): this {\n const res = this[resResponse];\n if (!this[resAbortHandlerExpose] && res) {\n debug('res.onAborted is exposed');\n res.onAborted(() => {\n this.aborted = true;\n warn('res.onAborted is called');\n\n this[resAbortHandler].forEach((callback) => callback());\n });\n this[resAbortHandlerExpose] = true;\n }\n\n return this;\n }\n\n onAborted(handler: () => void): this {\n this[resAbortHandler].push(handler);\n\n return this;\n }\n\n /**\n * Get response header value by key\n * @param key Header key\n * @returns Returns value of header got by key\n * @example res.getHeader('cookie');\n * @memberof nanoexpress.HttpResponse\n */\n getHeader(key: string): RecognizedString | null {\n const headers = this[resHeaders];\n if (headers && headers[key]) {\n debug(\"res.getHeader('%s')\", key);\n return headers[key];\n }\n return null;\n }\n\n /**\n * Checks response header value by key\n * @param key Header key\n * @returns Returns `true` if header exists whereas `false` in other cases\n * @example res.hasHeader('cookie');\n * @memberof nanoexpress.HttpResponse\n */\n hasHeader(key: string): boolean {\n debug(\"res.hasHeader('%s')\", key);\n return this.getHeader(key) !== null;\n }\n\n /**\n * Set response header value by key\n * @param key Header key\n * @param value Header value\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setHeader('content-type', 'application/json');\n */\n setHeader(key: string, value: uWS.RecognizedString): this {\n const { mode, [resResponse]: res } = this;\n\n debug(\"res.setHeader('%s', '%s')\", key, value);\n\n if (res && mode === 'immediate') {\n res.writeHeader(key, value);\n return this;\n }\n\n if (!this[resHeaders]) {\n this[resHeaders] = {};\n }\n\n this._headersSet = true;\n const headers = this[resHeaders] as Record;\n headers[key] = value;\n\n return this;\n }\n\n /**\n * Set response header value by key\n * @param key Header key\n * @param value Header value\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.set('content-type', 'application/json');\n * @alias res.setHeader('content-type', 'application/json');\n */\n set(key: string, value: uWS.RecognizedString): this {\n return this.setHeader(key, value);\n }\n\n /**\n * Set response headers by Record dict\n * @param headers Header key/value record dict\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setHeaders({'content-type':'application/json'});\n */\n setHeaders(headers: Record): this {\n const { mode, [resResponse]: res } = this;\n\n if (res && mode === 'immediate') {\n warn('res.setHeaders(headers) cannot be set due of immediate mode');\n return this;\n }\n\n debug('res.setHeaders(headers)');\n this._headersSet = true;\n\n if (this[resHeaders]) {\n Object.assign(this[resHeaders], headers);\n } else {\n this[resHeaders] = headers;\n }\n\n return this;\n }\n\n /**\n * Remove response header value by key\n * @param key Header key\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.removeHeader('cookie');\n */\n removeHeader(key: string): this {\n const { mode, [resResponse]: res } = this;\n\n if (res && mode === 'immediate') {\n warn(\"res.removeHeader('%s') cannot be set due of immediate mode\", key);\n return this;\n }\n\n debug(\"res.removeHeader('%s')\", key);\n\n const headers = this[resHeaders];\n if (headers && headers[key]) {\n headers[key] = null;\n }\n\n return this;\n }\n\n /**\n * Set response content type\n * @param contentType Content type\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.type('application/json');\n */\n type(contentType: string): this {\n debug('res.type(%s)', contentType);\n return this.setHeader('content-type', contentType);\n }\n}\n\nexport default HttpResponse;\n","import { MiddlewareHandler } from '../../types/find-route';\nimport { HttpMethod } from '../../types/nanoexpress';\nimport { warn } from '../helpers/loggy';\nimport { HttpRequest, HttpResponse } from '../polyfills';\n\nexport type LegacyHttpHandler = (\n req: HttpRequest,\n res: HttpResponse,\n next: (err?: Error, done?: boolean) => void\n) =>\n | HttpResponse\n | string\n | Record\n | Promise | string>;\n\nexport default (\n middleware: LegacyHttpHandler\n): MiddlewareHandler => {\n warn(\n 'legacy middlewares is deprecated and in future we will remove express.js middlewares support'\n );\n const httpHandler = function legacyMiddlewarePolyfillHandler(\n req: HttpRequest,\n res: HttpResponse\n ): Promise {\n return new Promise((resolve, reject) => {\n middleware(req, res, (err) => {\n if (err) {\n reject(err);\n } else {\n // @ts-ignore\n resolve();\n }\n });\n });\n };\n const displayName = middleware.name;\n httpHandler.raw = middleware;\n httpHandler.displayName = displayName;\n return httpHandler;\n};\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport analyze from '@nanoexpress/route-syntax-parser';\nimport fastDecodeURI from 'fast-decode-uri-component';\nimport { pathToRegexp } from 'path-to-regexp';\nimport {\n HttpHandler,\n PreparedRoute,\n UnpreparedRoute\n} from '../types/find-route';\nimport { HttpMethod, INanoexpressOptions } from '../types/nanoexpress';\nimport { debug, invalid, iterateBlocks, slashify, _gc } from './helpers';\nimport { HttpRequest, HttpResponse } from './polyfills';\nimport legacyUtil, { LegacyHttpHandler } from './utils/legacy';\n\nexport default class RouteEngine {\n protected options: INanoexpressOptions;\n\n protected routes: PreparedRoute[];\n\n public async: boolean;\n\n public await: boolean;\n\n public params = false;\n\n public headers = false;\n\n public cookies = false;\n\n public query = false;\n\n public body = false;\n\n public property = false;\n\n constructor(options: INanoexpressOptions) {\n this.options = options;\n this.routes = [];\n this.async = false;\n this.await = false;\n }\n\n parse(incomingRoute: UnpreparedRoute): PreparedRoute {\n const { options: config } = this;\n\n const route: PreparedRoute = {\n ...incomingRoute,\n all: false,\n regex: false,\n fetch_params: false,\n async: false,\n await: false,\n legacy: false,\n analyzeBlocks: []\n };\n\n if (typeof route.path === 'string') {\n if (config.ignoreTrailingSlash) {\n route.path = slashify(route.path);\n route.originalUrl = slashify(route.originalUrl);\n }\n\n route.path = fastDecodeURI(route.path);\n\n if (route.baseUrl === '*') {\n route.all = true;\n } else if (route.path.indexOf(':') !== -1) {\n route.fetch_params = true;\n route.param_keys = [];\n route.path = pathToRegexp(route.path, route.param_keys);\n route.regex = true;\n } else if (route.path.indexOf('/*') !== -1) {\n route.baseUrl = route.path.substr(0, route.path.indexOf('/*') + 1);\n route.path = route.path.substr(route.baseUrl.length);\n route.all = true;\n } else if (\n route.baseUrl.length > 1 &&\n route.baseUrl.indexOf('/*') !== -1\n ) {\n route.baseUrl = route.baseUrl.substring(0, route.baseUrl.indexOf('/*'));\n route.originalUrl = route.originalUrl.substring(\n 0,\n route.originalUrl.indexOf('/*') + 1\n );\n route.all = true;\n }\n } else if (route.path instanceof RegExp) {\n route.regex = true;\n }\n route.async = route.handler.constructor.name === 'AsyncFunction';\n route.await = route.handler.toString().includes('await');\n route.legacy = route.handler.toString().includes('next(');\n route.analyzeBlocks = analyze>(route.handler);\n const usedBlocks = iterateBlocks(route.analyzeBlocks);\n\n if (route.legacy) {\n if (config.enableExpressCompatibility) {\n route.handler = legacyUtil(\n route.handler as LegacyHttpHandler\n );\n route.async = true;\n route.await = true;\n } else {\n invalid(\n 'Express.js compatibility mode is disabled, please enable before using *express.js* middlewares, but take care - performance will not be same as disabled'\n );\n }\n }\n\n if (!this.params && route.fetch_params) {\n this.params = true;\n }\n if (!this.async && route.async) {\n this.async = true;\n }\n if (!this.await && route.await) {\n this.await = true;\n }\n\n usedBlocks.forEach((blockName): void => {\n if (blockName === 'property') {\n //\n } else {\n if (!this[blockName]) {\n this[blockName] = true;\n }\n }\n });\n\n debug(\n 'route registered [%s] baseurl(%s) path(%s) - originalurl(%s)',\n route.method,\n route.baseUrl,\n route.path,\n route.originalUrl\n );\n\n return route;\n }\n\n on(\n method: HttpMethod,\n path: string | RegExp | Array,\n handler: HttpHandler | HttpHandler[],\n baseUrl: string,\n originalUrl: string\n ): this {\n if (Array.isArray(method)) {\n method.forEach((methodId) => {\n this.on(methodId, path, handler, baseUrl, originalUrl);\n });\n return this;\n }\n if (Array.isArray(path)) {\n path.forEach((pathId) => {\n this.on(method, pathId, handler, baseUrl, originalUrl);\n });\n return this;\n }\n if (Array.isArray(handler)) {\n handler.forEach((handlerId) => {\n this.on(method, path, handlerId, baseUrl, originalUrl);\n });\n return this;\n }\n\n this.routes.push(\n this.parse({ method, path, baseUrl, originalUrl, handler })\n );\n\n _gc();\n\n return this;\n }\n\n off(\n method: HttpMethod,\n path: string,\n handler: HttpHandler,\n baseUrl: string,\n originalUrl: string\n ): this {\n const parsed = this.parse({ method, path, baseUrl, originalUrl, handler });\n\n if (!handler) {\n this.routes = this.routes.filter(\n (route) =>\n !(route.method === parsed.method && route.path === parsed.path)\n );\n } else {\n this.routes = this.routes.filter(\n (route) =>\n !(\n route.method === parsed.method &&\n route.path === parsed.path &&\n route.handler === parsed.handler\n )\n );\n }\n\n _gc();\n\n return this;\n }\n\n async lookup(\n req: HttpRequest,\n res: HttpResponse\n ): Promise {\n const { routes, options } = this;\n let response;\n\n for (let i = 0, len = routes.length; i < len; i += 1) {\n const route = routes[i];\n\n // Early return for performance reason\n if (res.done) {\n debug('routes lookup early exit');\n return res;\n }\n\n if (route.method === 'ANY' || route.method === req.method) {\n let found = false;\n\n if (route.all) {\n found =\n route.path && route.path !== '*'\n ? req.path.includes(route.path as string)\n : route.originalUrl === '*' ||\n req.originalUrl.substr(route.originalUrl.length).length > 1;\n } else if (route.regex && (route.path as RegExp).test(req.path)) {\n found = true;\n } else if (route.path === req.path && route.baseUrl === req.baseUrl) {\n found = true;\n } else if (route.originalUrl === req.originalUrl) {\n found = true;\n }\n\n if (found) {\n if (route.fetch_params && route.param_keys) {\n const exec = (route.path as RegExp).exec(req.path);\n\n req.params = {} as Record;\n for (\n let p = 0, lenp = route.param_keys.length;\n exec && p < lenp;\n p += 1\n ) {\n const key = route.param_keys[p].name;\n const value = exec[p + 1];\n\n req.params[key] = value;\n }\n }\n\n // Prepare url after found\n if (\n options.enableExpressCompatibility &&\n route.baseUrl !== '' &&\n route.baseUrl !== '*' &&\n req.path.indexOf(route.baseUrl) === 0\n ) {\n req.baseUrl = route.baseUrl;\n req.path = req.originalUrl.substr(req.baseUrl.length);\n req.url = req.originalUrl.substr(req.baseUrl.length);\n }\n\n if (route.async || route.legacy) {\n response = await route.handler(req, res);\n } else {\n response = route.handler(req, res);\n }\n\n if (res.streaming || res.done || response === res) {\n debug('routes lookup was done with HttpResponse');\n return res;\n }\n if (!res.streaming && !res.done && response) {\n debug('routes lookup was done with async json result');\n return res.send(response as string | Record);\n }\n\n debug('routes lookup was done without any match');\n } else {\n debug('routes lookup was not found without any match');\n }\n }\n }\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function */\nimport { RecognizedString, WebSocketBehavior } from 'uWebSockets.js';\nimport {\n MiddlewareHandler,\n RequestSchema,\n RequestSchemaWithBody,\n RouteHandler,\n UnpreparedRoute\n} from '../types/find-route';\nimport { HttpMethod, IWebsocketRoute } from '../types/nanoexpress';\nimport App from './app';\nimport { appInstance, routerInstances, wsInstances } from './constants';\nimport { invalid, _gc } from './helpers';\nimport RouteEngine from './route-engine';\n\nexport default class Router {\n protected [appInstance]!: App | Router;\n\n protected _engine?: RouteEngine;\n\n [routerInstances]: UnpreparedRoute[];\n\n [wsInstances]: IWebsocketRoute[];\n\n _basePath: string;\n\n constructor() {\n this[routerInstances] = [];\n this[wsInstances] = [];\n this._basePath = '';\n\n return this;\n }\n\n on(\n method: HttpMethod,\n path: string | RegExp,\n handlers:\n | MiddlewareHandler\n | MiddlewareHandler[]\n | RouteHandler\n | RouteHandler[],\n baseUrl: string,\n originalUrl: string\n ): this {\n const { _engine } = this;\n\n if (_engine) {\n _engine.on(method, path, handlers, baseUrl, originalUrl);\n } else if (Array.isArray(handlers)) {\n handlers.forEach((handler) => {\n this[routerInstances].push({\n method,\n path,\n baseUrl,\n handler,\n originalUrl\n });\n });\n } else {\n this[routerInstances].push({\n method,\n path,\n baseUrl,\n handler: handlers,\n originalUrl\n });\n }\n\n return this;\n }\n\n use(\n path: string | MiddlewareHandler | Router,\n ...middlewares: Array\n ): this {\n if (typeof path === 'function' || path instanceof Router) {\n middlewares.unshift(path);\n path = '*';\n }\n if (Array.isArray(path)) {\n if (\n path.every(\n (routePath) =>\n typeof routePath === 'function' || path instanceof Router\n )\n ) {\n return this.use('*', ...path);\n }\n }\n middlewares.forEach((handler: Router | MiddlewareHandler) => {\n if (handler instanceof Router) {\n const _routers = handler[routerInstances];\n const _ws = handler[wsInstances];\n\n handler[appInstance] = this;\n handler._basePath = path as string;\n\n _routers.forEach(\n ({ method, path: routePath, handler: routeHandler, baseUrl }) => {\n this.on(\n method,\n routePath as string,\n routeHandler,\n path as string,\n (path as string) + baseUrl + (routePath as string)\n );\n }\n );\n this[wsInstances].push(..._ws);\n\n _routers.length = 0;\n _ws.length = 0;\n } else if (Array.isArray(handler)) {\n this.use(path, ...handler);\n } else {\n this.on(\n 'ANY',\n '*',\n handler,\n path as string,\n this._basePath + (path as string)\n );\n }\n });\n\n _gc();\n\n return this;\n }\n\n get(\n path: string | RegExp,\n ...handlers: RouteHandler<'GET', T>[]\n ): this {\n return this.on(\n 'GET',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n post(\n path: string | RegExp,\n ...handlers: RouteHandler<'POST', T>[]\n ): this {\n return this.on(\n 'POST',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n put(\n path: string | RegExp,\n ...handlers: RouteHandler<'PUT', T>[]\n ): this {\n return this.on(\n 'PUT',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n options(\n path: string | RegExp,\n ...handlers: RouteHandler<'OPTIONS', T>[]\n ): this {\n return this.on(\n 'OPTIONS',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n del(\n path: string | RegExp,\n ...handlers: RouteHandler<'DEL', T>[]\n ): this {\n return this.on(\n 'DEL',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n /**\n *\n * @param path\n * @param handlers\n * @alias Router.del\n * @returns Router\n */\n delete(\n path: string | RegExp,\n ...handlers: RouteHandler<'DEL', T>[]\n ): this {\n return this.del(path, ...handlers);\n }\n\n /**\n * @param path The accessible path to be called route handler\n * @param handlers List of middlewares and/or routes\n * @returns Router\n */\n all(\n path: string | RegExp,\n ...handlers: RouteHandler<'ANY', T>[]\n ): this {\n return this.on(\n 'ANY',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n ws(path: RecognizedString, options?: WebSocketBehavior): this {\n const normalisedPath =\n this._basePath === '*'\n ? '*'\n : path === '/'\n ? this._basePath\n : `${this._basePath}${path}`;\n\n this[wsInstances].push({\n path: normalisedPath,\n options\n } as IWebsocketRoute);\n\n return this;\n }\n\n /**\n * @deprecated Use `app.publish()` for safety, this method will not work anymore\n * @param topic\n * @param message\n * @param isBinary\n * @param compress\n * @returns Status of publish\n */\n publish(\n topic: RecognizedString,\n message: RecognizedString,\n isBinary?: boolean,\n compress?: boolean\n ): boolean {\n const app = this[appInstance];\n if (app) {\n return app.publish(topic, message, isBinary, compress);\n }\n invalid(\n 'nanoexpress [Router]: Please attach to `Application` before using publish'\n );\n return false;\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport { resAbortHandler } from './constants';\nimport uWS, {\n HttpRequest as uWS_HttpRequest,\n HttpResponse as uWS_HttpResponse,\n RecognizedString,\n TemplatedApp,\n us_listen_socket,\n WebSocketBehavior\n} from 'uWebSockets.js';\nimport { HttpHandler, RequestSchema } from '../types/find-route';\nimport {\n HttpMethod,\n INanoexpressOptions,\n IWebsocketRoute\n} from '../types/nanoexpress';\nimport _gc from './helpers/gc';\nimport { debug, warn } from './helpers/loggy';\nimport { unregister } from './hooks/manager';\nimport { HttpRequest, HttpResponse } from './polyfills';\nimport RouteEngine from './route-engine';\nimport RouterTemplate from './router';\nimport noop from './helpers/noop';\n\nclass App extends RouterTemplate {\n get https(): boolean {\n return this._options.https !== undefined;\n }\n\n get _console(): Console {\n return this._options.console || console;\n }\n\n get raw(): TemplatedApp {\n return this._app;\n }\n\n protected _app: TemplatedApp;\n\n protected _options: INanoexpressOptions;\n\n protected _engine: RouteEngine;\n\n protected _ws: IWebsocketRoute[];\n\n protected _requestPools: HttpRequest[];\n\n protected _responsePools: HttpResponse[];\n\n protected _poolsSize: number;\n\n protected time: [number, number];\n\n protected _separateServed: boolean;\n\n protected _ran: boolean;\n\n protected _instance: Record;\n\n protected defaultRoute: HttpHandler | null;\n\n protected errorRoute:\n | ((err: Error, req: HttpRequest, res: HttpResponse) => void)\n | null;\n\n constructor(options: INanoexpressOptions, app: TemplatedApp) {\n super();\n this._options = options;\n this._app = app;\n this._engine = new RouteEngine(options);\n\n this.defaultRoute = (_, res): HttpResponse => {\n return res.status(404).send({ status: 'error', code: 404 });\n };\n this.errorRoute = (err, _, res): HttpResponse => {\n return res.status(500).send({\n status: 'error',\n message: err.message\n });\n };\n\n this._ws = [];\n this._requestPools = [];\n this._responsePools = [];\n this._poolsSize = options.poolSize || 10;\n\n this.time = process.hrtime();\n this._separateServed = false;\n this._ran = false;\n\n this._instance = {};\n return this;\n }\n\n setNotFoundHandler(handler: HttpHandler): this {\n this.defaultRoute = handler;\n\n return this;\n }\n\n setErrorHandler(\n handler: (err: Error, req: HttpRequest, res: HttpResponse) => void\n ): this {\n this.errorRoute = handler;\n\n return this;\n }\n\n handleError(error: Error, req: HttpRequest, res: HttpResponse): this {\n if (res && !res.aborted && !res.done && !res.streaming && this.errorRoute) {\n this.errorRoute(error, req, res);\n }\n\n return this;\n }\n\n ws(path: RecognizedString, options: WebSocketBehavior): this {\n this._app.ws(path, options);\n\n return this;\n }\n\n publish(\n topic: RecognizedString,\n message: RecognizedString,\n isBinary?: boolean,\n compress?: boolean\n ): boolean {\n return this._app.publish(topic, message, isBinary, compress);\n }\n\n run(): this {\n const {\n _app: app,\n _options: options,\n _ws,\n _requestPools,\n _responsePools,\n _poolsSize,\n _engine,\n _ran\n } = this;\n\n if (!_ran) {\n const handler = async (\n rawRes: uWS_HttpResponse,\n rawReq: uWS_HttpRequest\n ): Promise => {\n let req: HttpRequest;\n let res: HttpResponse;\n let response;\n\n if (_requestPools.length > 0) {\n req = _requestPools.shift() as HttpRequest;\n req.setRequest(rawReq, rawRes);\n } else {\n req = new HttpRequest(options);\n req.setRequest(rawReq, rawRes);\n }\n if (_responsePools.length > 0) {\n res = _responsePools.shift() as HttpResponse;\n res.setResponse(rawRes, req);\n } else {\n res = new HttpResponse(options);\n res.setResponse(rawRes, req);\n }\n\n if (\n options.ignoreTrailingSlash &&\n req.path.charAt(req.path.length - 1) !== '/' &&\n (req.path.lastIndexOf('.') === -1 ||\n req.path.lastIndexOf('.') < req.path.length - 4)\n ) {\n if (options.enableExpressCompatibility) {\n debug(\n 'res.redirect called instead of fast quick-fix on route ending without \"/\" for express.js middlewares compatibility'\n );\n res.redirect(`http://${req.headers.host}${req.originalUrl}/`);\n return rawRes;\n }\n }\n\n if (req.method === 'POST' || req.method === 'PUT') {\n res.exposeAborted();\n\n rawRes.onData((arrayChunk: ArrayBuffer, isLast: boolean) => {\n req.stream.push(Buffer.from(arrayChunk.slice(0)));\n\n if (isLast) {\n req.stream.push(null);\n }\n });\n }\n\n if (res.aborted || res.done || req.method === 'OPTIONS') {\n debug('early returned ranning %o', {\n aborted: res.aborted,\n done: res.done,\n method: req.method\n });\n return;\n }\n\n if (_engine.async && _engine.await) {\n res.exposeAborted();\n response = await _engine.lookup(req, res).catch((err) => {\n this.handleError(err, req, res as HttpResponse);\n });\n if (res[resAbortHandler]) {\n res.onAborted(unregister);\n } else {\n unregister();\n }\n if (_requestPools.length < _poolsSize) {\n _requestPools.push(req);\n }\n if (_responsePools.length < _poolsSize) {\n _responsePools.push(res);\n }\n return rawRes;\n }\n\n await _engine.lookup(req, res).catch((err) => {\n this.handleError(err, req, res as HttpResponse);\n });\n if (res[resAbortHandler]) {\n res.onAborted(unregister);\n } else {\n unregister();\n }\n if (_requestPools.length < _poolsSize) {\n _requestPools.push(req);\n }\n if (_responsePools.length < _poolsSize) {\n _responsePools.push(res);\n }\n\n if (\n res &&\n !res.done &&\n !res.streaming &&\n response === undefined &&\n this.defaultRoute !== null\n ) {\n debug('routes lookup was not found any route, fallback to not-found');\n const notFound = await this.defaultRoute(req, res);\n\n if (notFound !== res) {\n res.send(notFound as string | Record);\n }\n }\n return rawRes;\n };\n\n app.any('/*', handler);\n\n _ws.forEach(({ path, options: wsOptions }) => {\n app.ws(path, wsOptions);\n });\n // Cleanup GC\n _ws.length = 0;\n _gc();\n\n this._ran = true;\n }\n\n return this;\n }\n\n listenSocket(\n port: number,\n host = 'localhost',\n is_ssl = false,\n handler: () => void = noop\n ): Promise {\n const { _options: options } = this;\n\n if (\n (port === 80 || port === 443) &&\n this.https &&\n options.https?.separateServer &&\n !this._separateServed\n ) {\n const httpsPort =\n typeof options.https.separateServer === 'number'\n ? options.https.separateServer\n : 443;\n this._separateServed = true;\n return Promise.all([\n this.listenSocket(port, host, false, handler),\n this.listenSocket(httpsPort, host, true, handler)\n ]);\n }\n\n return this._appApplyListen(host, port, is_ssl, handler);\n }\n\n listen(\n ...args: Array void)>\n ): Promise {\n let port = 8000;\n let host = 'localhost';\n let ssl = false;\n let handler: () => void = () => {};\n\n args.forEach((listenArg): void => {\n if (typeof +listenArg === 'number' && !Number.isNaN(+listenArg)) {\n port = +listenArg;\n } else if (typeof listenArg === 'function') {\n handler = listenArg;\n } else if (\n typeof listenArg === 'string' &&\n (listenArg === 'localhost' || listenArg.includes('.'))\n ) {\n host = listenArg;\n } else if (listenArg === true) {\n ssl = true;\n }\n });\n this.run();\n return this.listenSocket(port, host, ssl, handler);\n }\n\n close(port: number, host = 'localhost'): boolean {\n const id = `${host}:${port}`;\n const token = this._instance[id];\n\n this._separateServed = false;\n this.time[0] = 0;\n this.time[1] = 0;\n\n return this._close(token, id);\n }\n\n protected _appApplyListen(\n host: string,\n port: number,\n is_ssl = false,\n handler: () => void = noop\n ): Promise {\n const { _console, _options: options, _app: app } = this;\n const sslString = is_ssl ? 'HTTPS ' : is_ssl === false ? 'HTTP ' : '';\n\n return new Promise((resolve, reject): void => {\n if (port === undefined) {\n const _errorContext = 'error' in _console ? _console : console;\n\n _errorContext.error('[Server]: PORT is required');\n return undefined;\n }\n const id = `${host}:${port}`;\n\n const onListenHandler = (token: us_listen_socket): void => {\n if (token) {\n const _debugContext = 'debug' in _console ? _console : console;\n const end = process.hrtime(this.time);\n\n this._instance[id] = token;\n _debugContext.debug(\n `[${sslString}Server]: started successfully at [${id}] in [${(\n (Number(end[0]) * 1000 + Number(end[1])) /\n 1000000\n ).toFixed(2)}ms] on PID[${process.pid}]`\n );\n _gc();\n handler();\n return resolve(token);\n }\n const _errorContext = 'error' in _console ? _console : console;\n\n const err = new Error(\n this.https &&\n (!options.https ||\n !options.https.cert_file_name ||\n !options.https.key_file_name)\n ? `[${sslString}Server]: SSL certificate was not defined or loaded`\n : `[${sslString}Server]: failed to host at [${id}]`\n );\n _errorContext.error(err.message);\n _gc();\n return reject(err);\n };\n\n if (host && host !== 'localhost') {\n app.listen(host, port, onListenHandler);\n } else {\n app.listen(port, onListenHandler);\n }\n });\n }\n\n _close(token: us_listen_socket | null, id: string): boolean {\n const { _console } = this;\n\n if (token) {\n const _debugContext = 'debug' in _console ? _console : console;\n\n uWS.us_listen_socket_close(token);\n this._instance[id] = null;\n _debugContext.debug('[Server]: stopped successfully');\n _gc();\n\n return true;\n }\n\n const _errorContext = 'error' in _console ? _console : console;\n\n _errorContext.error('[Server]: Error, failed while stopping');\n _gc();\n\n return false;\n }\n\n /**\n * @deprecated There no way to disable these methods as they are not available by default\n */\n disable(tag: string): this {\n warn(\n `[Server]: The tag [${tag}] cannot be disabled as not set, not supported and not available`\n );\n return this;\n }\n\n /**\n * @deprecated Please use configuration at initialization such as `nanoexpress({json_spaces:2})` insteadof `app.set('json_spaces', 2)`\n */\n set(key: keyof INanoexpressOptions, value: string | number): this {\n // @ts-ignore\n this._options[key] = value;\n return this;\n }\n}\n\nexport default App;\n","import EventsEmitter from 'events';\nimport {\n HttpRequest,\n HttpResponse,\n us_socket_context_t,\n WebSocketBehavior\n} from 'uWebSockets.js';\nexport default function exposeWebsocket(\n handler: (req: HttpRequest, res: HttpResponse) => void | Promise,\n options = {}\n): WebSocketBehavior {\n if (typeof (options as WebSocketBehavior).open === 'function') {\n return options;\n }\n\n return {\n ...options,\n open(ws): void {\n ws.emit('connection', ws);\n },\n async upgrade(\n res: HttpResponse,\n req: HttpRequest,\n context: us_socket_context_t\n ): Promise {\n const secWsKey = req.getHeader('sec-websocket-key');\n const secWsProtocol = req.getHeader('sec-websocket-protocol');\n const secWsExtensions = req.getHeader('sec-websocket-extensions');\n\n const events = new EventsEmitter();\n\n res.on = events.on.bind(events);\n res.once = events.once.bind(events);\n res.off = events.off.bind(events);\n res.emit = events.emit.bind(events);\n\n let aborted = false;\n res.onAborted(() => {\n aborted = true;\n events.emit('error', { aborted });\n });\n\n res.emit('upgrade', req, res);\n\n try {\n await handler(req, res);\n } catch (error) {\n aborted = true;\n events.emit('error', error);\n }\n if (!aborted) {\n events.emit('willUpgrade', req);\n res.upgrade(\n { req, ...res },\n secWsKey,\n secWsProtocol,\n secWsExtensions,\n context\n );\n events.emit('upgraded', req);\n }\n },\n message: (ws, message, isBinary): void => {\n ws.emit('message', message, isBinary);\n },\n drain: (ws): void => {\n ws.emit('drain', ws.getBufferedAmount());\n },\n close: (ws, code, message): void => {\n ws.emit('close', code, message);\n }\n };\n}\n","import { Dependencies, register } from './manager';\n\nexport const useCallback = register(false, true);\n\nexport const useEffect = register(true);\nexport const useMemo = register(true, true);\nexport const useState = (initialValue: T): [T, (value: T) => void] => {\n let value = useMemo(() => initialValue, []) as T;\n\n const setValue = (newValue: T): void => {\n value = newValue;\n };\n\n return [value, setValue];\n};\nexport const useRef = (ref: T | null, dependencies: Dependencies): T =>\n useMemo(() => ({ current: ref ?? null }), dependencies);\n","import uWS from 'uWebSockets.js';\nimport { INanoexpressOptions } from '../types/nanoexpress';\nimport App from './app';\nimport { exposeWebsocket } from './exposes/index';\nimport { useCallback, useEffect, useMemo, useRef, useState } from './hooks';\nimport Router from './router';\n\n/**\n * Instance initializer for nanoexpress\n * @param options Instance options\n * @param options.enableExpressCompatibility Sets polyfill status\n * @param options.ignoreTrailingSlash Normalizes trailing slash on routes\n * @returns\n */\nconst nanoexpress = (\n options: INanoexpressOptions = {\n ignoreTrailingSlash: true,\n enableExpressCompatibility: false,\n responseMode: 'cork'\n }\n): App => {\n let app;\n\n if (options.https) {\n app = uWS.SSLApp(options.https);\n } else if (options.http) {\n app = uWS.App(options.http);\n } else {\n app = uWS.App();\n }\n\n return new App(options, app);\n};\n\nnanoexpress.Router = Router;\nnanoexpress.App = App;\n\n// Add exposes\nnanoexpress.exposeWebsocket = exposeWebsocket;\n\nexport {\n nanoexpress as default,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n};\n"],"names":["STATUS_CODES","Readable","resRequest","resResponse","EventEmitter","statSync","createReadStream","createBrotliCompress","createGzip","createDeflate","pathToRegexp","RouterTemplate"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"nanoexpress.cjs","sources":["../src/constants.ts","../src/helpers/gc.ts","../src/helpers/loggy.ts","../src/hooks/manager.ts","../src/helpers/http-codes.ts","../src/helpers/http-methods.ts","../src/helpers/invalid.ts","../src/helpers/iterate-blocks.ts","../src/helpers/mime.ts","../src/helpers/slashify.ts","../src/helpers/noop.ts","../src/polyfills/http-request.ts","../src/polyfills/http-response.ts","../src/utils/legacy.ts","../src/route-engine.ts","../src/router.ts","../src/app.ts","../src/exposes/websocket.ts","../src/hooks/index.ts","../src/nanoexpress.ts"],"sourcesContent":["// Http(Request/Response)\nexport const request: unique symbol = Symbol('NanoexpressHttpRequestInstance');\nexport const response: unique symbol = Symbol(\n 'NanoexpressHttpResponseInstance'\n);\n\n// HttpRequest symbols\n\nexport const reqConfig: unique symbol = Symbol('NanoexpressHttpRequestConfig');\nexport const reqEvents: unique symbol = Symbol('NanoexpressHttpRequestEvents');\nexport const reqRequest: unique symbol = Symbol(\n 'NanoexpressHttpRequestRawInstance'\n);\nexport const reqRawResponse: unique symbol = Symbol(\n 'NanoexpressHttpResponseRawInstance'\n);\n\n// HttpResponse symbols\nexport const resHeaders: unique symbol = Symbol(\n 'NanoexpressHttpResponseHeaders'\n);\nexport const resConfig: unique symbol = Symbol('NanoexpressHttpResponseConfig');\nexport const resEvents: unique symbol = Symbol('NanoexpressHttpResponseEvents');\nexport const resAbortHandler: unique symbol = Symbol(\n 'NanoexpressHttpResponseAbortHandler'\n);\nexport const resAbortHandlerExpose: unique symbol = Symbol(\n 'NanoexpressHttpResponseAbortHandlerExpose'\n);\n\nexport const appInstance: unique symbol = Symbol('NanoexpressAppInstance');\nexport const routerInstances: unique symbol = Symbol(\n 'NanoexpressRouterInstances'\n);\nexport const wsInstances: unique symbol = Symbol(\n 'NanoexpressWebSocketInstances'\n);\n","export default function _gc(): boolean {\n try {\n if (global.gc) {\n global.gc();\n }\n return true;\n } catch (e) {\n return false;\n }\n}\n","import debugLog from 'debug';\n\nexport const debug = debugLog('nanoexpress');\nexport const error = debugLog('nanoexpress:error');\n\nexport const warn = debugLog('nanoexpress:warn');\n","export type Dependencies = Array;\n\ninterface ICallbackState {\n handler: () => never;\n dependencies: Dependencies;\n isEffect: boolean;\n mounted: boolean;\n}\n\nconst lastDeps: Dependencies[] = [];\nconst callbacks: ICallbackState[] = [];\nlet hookIndex = 0;\n\nconst register =\n (runValue = false, returnValue = false) =>\n (\n callback: (...args: any[]) => any,\n dependencies: Dependencies\n ): (() => any) | any => {\n if (\n !dependencies ||\n !lastDeps[hookIndex] ||\n !lastDeps[hookIndex].every(\n (dep, depIndex) => dep === dependencies[depIndex]\n )\n ) {\n callbacks[hookIndex] = {\n handler: runValue ? callback() : callback,\n dependencies,\n isEffect: runValue && !returnValue,\n mounted: runValue\n };\n lastDeps[hookIndex] = dependencies;\n }\n\n const _callback = callbacks[hookIndex].handler;\n hookIndex += 1;\n\n if (returnValue) {\n return _callback;\n }\n };\nconst unregister = (): void => {\n callbacks.forEach((callback) => {\n if (\n callback.isEffect &&\n callback.mounted &&\n typeof callback.handler === 'function'\n ) {\n callback.handler();\n callback.mounted = false;\n }\n });\n hookIndex = 0;\n};\n\nexport { register, unregister };\n","import { STATUS_CODES } from 'http';\n\nconst codesBetween = Array.from({ length: 500 })\n .fill(0)\n .map((_, index) => 100 + index);\n\nconst httpCodes = codesBetween.reduce((codes, code) => {\n const codeString = STATUS_CODES[code];\n if (codeString) {\n codes[code] = `${code} ${codeString}`;\n }\n return codes;\n}, {} as Record);\n\nexport default httpCodes;\n","import { HttpMethod } from '../../types/nanoexpress';\n\nexport default [\n 'get',\n 'post',\n 'put',\n 'patch',\n 'del',\n 'any',\n 'head',\n 'options',\n 'trace'\n].map((m) => m.toUpperCase()) as HttpMethod[];\n","export default function invalid(message: string): void {\n throw new Error(message);\n}\n","import {\n BlockMode,\n IBlock\n} from '@nanoexpress/route-syntax-parser/types/interfaces';\n\nexport default (blocks: IBlock[]): BlockMode[] => {\n return [...new Set(blocks.map((block) => block.mode))];\n};\n","const mimes = {\n '3gp': 'video/3gpp',\n a: 'application/octet-stream',\n ai: 'application/postscript',\n aif: 'audio/x-aiff',\n aiff: 'audio/x-aiff',\n asc: 'application/pgp-signature',\n asf: 'video/x-ms-asf',\n asm: 'text/x-asm',\n asx: 'video/x-ms-asf',\n atom: 'application/atom+xml',\n au: 'audio/basic',\n avi: 'video/x-msvideo',\n bat: 'application/x-msdownload',\n bin: 'application/octet-stream',\n bmp: 'image/bmp',\n bz2: 'application/x-bzip2',\n c: 'text/x-c',\n cab: 'application/vnd.ms-cab-compressed',\n cc: 'text/x-c',\n chm: 'application/vnd.ms-htmlhelp',\n class: 'application/octet-stream',\n com: 'application/x-msdownload',\n conf: 'text/plain',\n cpp: 'text/x-c',\n crt: 'application/x-x509-ca-cert',\n css: 'text/css',\n csv: 'text/csv',\n cxx: 'text/x-c',\n deb: 'application/x-debian-package',\n der: 'application/x-x509-ca-cert',\n diff: 'text/x-diff',\n djv: 'image/vnd.djvu',\n djvu: 'image/vnd.djvu',\n dll: 'application/x-msdownload',\n dmg: 'application/octet-stream',\n doc: 'application/msword',\n dot: 'application/msword',\n dtd: 'application/xml-dtd',\n dvi: 'application/x-dvi',\n ear: 'application/java-archive',\n eml: 'message/rfc822',\n eps: 'application/postscript',\n exe: 'application/x-msdownload',\n f: 'text/x-fortran',\n f77: 'text/x-fortran',\n f90: 'text/x-fortran',\n flv: 'video/x-flv',\n for: 'text/x-fortran',\n gem: 'application/octet-stream',\n gemspec: 'text/x-script.ruby',\n gif: 'image/gif',\n gz: 'application/x-gzip',\n h: 'text/x-c',\n hh: 'text/x-c',\n htm: 'text/html',\n html: 'text/html',\n ico: 'image/vnd.microsoft.icon',\n ics: 'text/calendar',\n ifb: 'text/calendar',\n iso: 'application/octet-stream',\n jar: 'application/java-archive',\n java: 'text/x-java-source',\n jnlp: 'application/x-java-jnlp-file',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n js: 'application/javascript',\n json: 'application/json',\n log: 'text/plain',\n m3u: 'audio/x-mpegurl',\n m4v: 'video/mp4',\n man: 'text/troff',\n mathml: 'application/mathml+xml',\n mbox: 'application/mbox',\n mdoc: 'text/troff',\n me: 'text/troff',\n mid: 'audio/midi',\n midi: 'audio/midi',\n mime: 'message/rfc822',\n mjs: 'application/javascript',\n mml: 'application/mathml+xml',\n mng: 'video/x-mng',\n mov: 'video/quicktime',\n mp3: 'audio/mpeg',\n mp4: 'video/mp4',\n mp4v: 'video/mp4',\n mpeg: 'video/mpeg',\n mpg: 'video/mpeg',\n ms: 'text/troff',\n msi: 'application/x-msdownload',\n odp: 'application/vnd.oasis.opendocument.presentation',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odt: 'application/vnd.oasis.opendocument.text',\n ogg: 'application/ogg',\n p: 'text/x-pascal',\n pas: 'text/x-pascal',\n pbm: 'image/x-portable-bitmap',\n pdf: 'application/pdf',\n pem: 'application/x-x509-ca-cert',\n pgm: 'image/x-portable-graymap',\n pgp: 'application/pgp-encrypted',\n pkg: 'application/octet-stream',\n pl: 'text/x-script.perl',\n pm: 'text/x-script.perl-module',\n png: 'image/png',\n pnm: 'image/x-portable-anymap',\n ppm: 'image/x-portable-pixmap',\n pps: 'application/vnd.ms-powerpoint',\n ppt: 'application/vnd.ms-powerpoint',\n ps: 'application/postscript',\n psd: 'image/vnd.adobe.photoshop',\n py: 'text/x-script.python',\n qt: 'video/quicktime',\n ra: 'audio/x-pn-realaudio',\n rake: 'text/x-script.ruby',\n ram: 'audio/x-pn-realaudio',\n rar: 'application/x-rar-compressed',\n rb: 'text/x-script.ruby',\n rdf: 'application/rdf+xml',\n roff: 'text/troff',\n rpm: 'application/x-redhat-package-manager',\n rss: 'application/rss+xml',\n rtf: 'application/rtf',\n ru: 'text/x-script.ruby',\n s: 'text/x-asm',\n sgm: 'text/sgml',\n sgml: 'text/sgml',\n sh: 'application/x-sh',\n sig: 'application/pgp-signature',\n snd: 'audio/basic',\n so: 'application/octet-stream',\n svg: 'image/svg+xml',\n svgz: 'image/svg+xml',\n swf: 'application/x-shockwave-flash',\n t: 'text/troff',\n tar: 'application/x-tar',\n tbz: 'application/x-bzip-compressed-tar',\n tcl: 'application/x-tcl',\n tex: 'application/x-tex',\n texi: 'application/x-texinfo',\n texinfo: 'application/x-texinfo',\n text: 'text/plain',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n torrent: 'application/x-bittorrent',\n tr: 'text/troff',\n txt: 'text/plain',\n vcf: 'text/x-vcard',\n vcs: 'text/x-vcalendar',\n vrml: 'model/vrml',\n war: 'application/java-archive',\n wav: 'audio/x-wav',\n wma: 'audio/x-ms-wma',\n wmv: 'video/x-ms-wmv',\n wmx: 'video/x-ms-wmx',\n wrl: 'model/vrml',\n wsdl: 'application/wsdl+xml',\n xbm: 'image/x-xbitmap',\n xhtml: 'application/xhtml+xml',\n xls: 'application/vnd.ms-excel',\n xml: 'application/xml',\n xpm: 'image/x-xpixmap',\n xsl: 'application/xml',\n xslt: 'application/xslt+xml',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n zip: 'application/zip',\n default: 'text/html'\n};\n\ntype valueof = T[keyof T];\n\nconst getMime = (path: string): valueof | undefined => {\n const i = Number(path.lastIndexOf('.'));\n return mimes[path.substr(i + 1).toLowerCase() as keyof typeof mimes];\n};\n\nexport { getMime, mimes };\n","export default (path: string): string =>\n path !== '*' &&\n path.charAt(path.length - 1) !== '/' &&\n path.charAt(path.length - 1) !== '*' &&\n (path.lastIndexOf('.') === -1 || path.lastIndexOf('.') < path.length - 4)\n ? `${path}/`\n : path;\n","export default (): void => {};\n","/* eslint-disable max-lines, max-lines-per-function */\nimport { EventEmitter } from 'events';\nimport queryParse from 'fast-query-parse';\nimport { Readable, Writable } from 'stream';\nimport {\n HttpRequest as uWS_HttpRequest,\n HttpResponse as uWS_HttpResponse\n} from 'uWebSockets.js';\nimport { RequestSchema, RequestSchemaWithBody } from '../../types/find-route';\nimport { HttpMethod, INanoexpressOptions } from '../../types/nanoexpress';\nimport { reqConfig, reqEvents, reqRawResponse, reqRequest } from '../constants';\nimport { invalid } from '../helpers';\n\nexport default class HttpRequest<\n THttpMethod = HttpMethod,\n THttpSchema extends RequestSchemaWithBody = RequestSchema\n> {\n protected [reqConfig]: INanoexpressOptions;\n\n protected [reqEvents]!: EventEmitter | null;\n\n protected [reqRequest]!: uWS_HttpRequest;\n\n protected [reqRawResponse]!: uWS_HttpResponse;\n\n protected registered: boolean;\n\n baseUrl!: string;\n\n url!: string;\n\n originalUrl!: string;\n\n path!: string;\n\n method!: THttpMethod;\n\n headers!: THttpSchema['headers'];\n\n params?: THttpSchema['params'];\n\n body?: THttpSchema['body'];\n\n query: THttpSchema['query'] = null;\n\n stream!: Readable;\n\n id = 0;\n\n constructor(options: INanoexpressOptions) {\n this[reqConfig] = options;\n\n this.registered = false;\n\n return this;\n }\n\n setRequest(req: uWS_HttpRequest, res: uWS_HttpResponse): this {\n const options = this[reqConfig];\n\n this[reqRequest] = req;\n this[reqRawResponse] = res;\n\n const query = req.getQuery();\n const url = req.getUrl();\n\n this.url = url;\n this.originalUrl = this.url;\n this.path = url;\n this.baseUrl = '';\n\n this.method = req.getMethod().toUpperCase() as unknown as THttpMethod;\n\n this.headers = {};\n req.forEach((key, value) => {\n (this.headers as RequestSchema['headers'])[key] = value;\n });\n\n if (url.charAt(url.length - 1) !== '/') {\n this.url += '/';\n this.path += '/';\n this.originalUrl += '/';\n }\n\n if (options.enableExpressCompatibility && query) {\n this.originalUrl += `?${query}`;\n }\n this.query = queryParse(query);\n\n // @ts-ignore\n if (this.method === 'POST' || this.method === 'PUT') {\n // Imitiate some modes\n this.stream = new Readable({ read(): void {} });\n\n // Protected variables\n this[reqEvents] = null;\n this.registered = false;\n }\n\n this.id = Math.round(Math.random() * 1e5);\n\n return this;\n }\n\n on(event: string, listener: (...args: any[]) => void): this {\n const { stream } = this;\n if (stream) {\n stream.on(event, listener);\n }\n return this;\n }\n\n emit(event: string, ...args: any[]): this {\n const { stream } = this;\n if (stream) {\n stream.emit(event, ...args);\n }\n return this;\n }\n\n getHeader(key: string): string {\n return this.headers[key];\n }\n\n hasHeader(key: string): boolean {\n return !!this.headers[key];\n }\n\n getParameter(index: number): string {\n return this[reqRequest].getParameter(index);\n }\n\n pipe(destination: Writable): Writable | void | Promise {\n const { stream } = this;\n\n if (stream.readableDidRead || stream.readableEnded) {\n return invalid('Stream already used, cannot use one stream twice');\n }\n\n if (stream) {\n return stream.pipe(destination);\n }\n return invalid(\n 'Stream was not defined, something wrong, please check your code or method is not a POST or PUT'\n );\n }\n\n async *[Symbol.asyncIterator](): any {\n const { stream } = this;\n\n if (stream) {\n for await (const chunk of stream) {\n yield chunk;\n }\n }\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport { EventEmitter } from 'events';\nimport { createReadStream, ReadStream, statSync } from 'fs';\nimport uWS, { RecognizedString } from 'uWebSockets.js';\nimport {\n BrotliCompress,\n BrotliOptions,\n createBrotliCompress,\n createDeflate,\n createGzip,\n Deflate,\n Gzip,\n ZlibOptions\n} from 'zlib';\nimport { INanoexpressOptions } from '../../types/nanoexpress';\nimport {\n request as resRequest,\n resAbortHandler,\n resAbortHandlerExpose,\n resConfig,\n resEvents,\n resHeaders,\n response as resResponse\n} from '../constants';\nimport { debug, getMime, httpCodes, invalid, warn } from '../helpers';\nimport HttpRequest from './http-request';\n\n/**\n * HttpResponse class\n * @constructor\n * @class\n * @namespace nanoexpress.HttpResponse\n * @memberof nanoexpress\n * @example new HttpResponse().setResponse(uWS.HttpResponse)\n */\nclass HttpResponse {\n public [resRequest]: HttpRequest | null;\n\n public [resResponse]: uWS.HttpResponse | null;\n\n // Expose functionality properties\n protected [resHeaders]: Record | null;\n\n protected [resAbortHandler]: (() => void)[];\n\n protected [resAbortHandlerExpose]: boolean;\n\n protected [resConfig]: INanoexpressOptions;\n\n protected [resEvents]: EventEmitter | null;\n\n public done: boolean;\n\n public aborted: boolean;\n\n public streaming: boolean;\n\n protected _headersSet = false;\n\n protected registered: boolean;\n\n protected mode: 'immediate' | 'queue' | 'cork' = 'queue';\n\n public serialize?: (\n data: Record | string | number | boolean\n ) => string;\n\n public compiledResponse?: string;\n\n public statusCode: number;\n\n id = 0;\n\n constructor(config: INanoexpressOptions) {\n this[resConfig] = config;\n this.done = false;\n this.aborted = false;\n this._headersSet = false;\n this.registered = false;\n this.streaming = false;\n this[resEvents] = null;\n this[resAbortHandler] = [];\n this[resAbortHandlerExpose] = false;\n\n this[resRequest] = null;\n this[resResponse] = null;\n this[resHeaders] = null;\n\n this.mode = config.responseMode;\n\n this.statusCode = 200;\n }\n\n protected registerEvents(): this {\n const emitter = this[resEvents];\n\n if (emitter && !this.registered) {\n this.exposeAborted();\n\n emitter\n .on('pipe', (stream) => {\n debug('stream.pipe(res)');\n\n this.streaming = true;\n this.stream(stream);\n })\n .on('data', () => {\n debug('stream.pipe(res):data event');\n })\n\n .on('unpipe', () => {\n debug('stream.unpipe(res)');\n\n this.aborted = true;\n })\n .on('error', () => {\n debug('stream.pipe(res) error');\n this.aborted = true;\n this.end();\n });\n this.registered = true;\n }\n\n return this;\n }\n\n /**\n * Registers event to response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.on('end', (eventArgument) => {...})\n */\n on(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.on(eventName, eventArgument);\n\n debug('res.on(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Registers event to response to be fired once\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.once('end', (eventArgument) => {...})\n */\n once(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.once(eventName, eventArgument);\n\n debug('res.once(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Removes event from response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.off('end', (eventArgument) => {...})\n */\n off(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n return this;\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.off(eventName, eventArgument);\n\n debug('res.off(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Removes listener from response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.removeListener('end', (eventArgument) => {...})\n */\n removeListener(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n return this;\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.removeListener(eventName, eventArgument);\n\n debug('res.removeListener(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Emits event to response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns Emit response\n * @memberof nanoexpress.HttpResponse\n * @example res.emit('end', 1)\n */\n emit(eventName: string | symbol, eventArgument?: never): boolean {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n debug('res.emit(%s, argument)', eventName);\n\n emitter = this[resEvents] as EventEmitter;\n return emitter.emit(eventName, eventArgument);\n }\n\n /**\n * Set new HttpResponse for current pool\n * @param res Native uWS.HttpResponse instance\n * @param req HttpResponse instance\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setResponse(res, req)\n */\n setResponse(res: uWS.HttpResponse, req: HttpRequest): this {\n this[resRequest] = req;\n this[resResponse] = res;\n this.done = false;\n this.aborted = res.aborted || false;\n this._headersSet = false;\n this.streaming = false;\n this.registered = false;\n this[resEvents] = null;\n this[resAbortHandlerExpose] = false;\n this[resAbortHandler].length = 0;\n\n this[resHeaders] = null;\n this.statusCode = 200;\n\n this.id = Math.round(Math.random() * 1e5);\n\n return this;\n }\n\n // Native methods re-implementing\n /**\n * Ends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.end('text');\n */\n end(body?: uWS.RecognizedString, closeConnection?: boolean): this {\n const { mode } = this;\n const res = this[resResponse];\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._end(body, closeConnection);\n });\n return this;\n }\n return this._end(body, closeConnection);\n }\n\n /**\n * Initializes Server-Side Events from your stream\n * @param body Writable stream or PassThrough\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sse(sseStream);\n */\n sse(body: ReadStream): this {\n const { mode } = this;\n const res = this[resResponse];\n\n this.exposeAborted();\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._sse(body);\n });\n return this;\n }\n return this._sse(body);\n }\n\n protected _sse(body: ReadStream): this {\n const {\n mode,\n statusCode,\n done,\n streaming,\n _headersSet,\n [resHeaders]: _headers\n } = this;\n const res = this[resResponse];\n\n if (!done && res && !streaming && !done) {\n debug(\n 'res.sse(body) called with status %d and has headers',\n statusCode,\n _headersSet\n );\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n res.writeHeader('Content-Type', 'text/event-stream; charset=utf-8');\n res.writeHeader('Connection', 'keep-alive');\n res.writeHeader('Cache-Control', 'no-cache, no-store, no-transform');\n\n body.on('data', (data) => {\n if (!this.aborted) {\n res.write(data);\n }\n });\n this.streaming = true;\n this[resResponse] = null;\n }\n return this;\n }\n\n /**\n * @private\n * Ends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res._end('text');\n */\n protected _end(body?: uWS.RecognizedString, closeConnection?: boolean): this {\n const {\n mode,\n statusCode,\n done,\n streaming,\n _headersSet,\n [resHeaders]: _headers\n } = this;\n const res = this[resResponse];\n\n if (!done && res && !streaming) {\n debug(\n 'res.end(body) called with status %d and has headers',\n statusCode,\n _headersSet\n );\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n res.end(body, closeConnection);\n this.done = true;\n this[resResponse] = null;\n }\n return this;\n }\n\n /**\n * Sets response status\n * @deprecated Please use `res.statusCode` instead\n * @param code Status code\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.status(204);\n */\n\n status(code: number): this {\n debug('res.status(%d)', code);\n\n this.statusCode = code;\n\n return this;\n }\n\n /**\n * Combine of `res.status` and `res.setHeaders`\n * @param code Status code\n * @param headers Record object containing headers\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.writeHead(200, {'X-Header': 1234});\n */\n writeHead(\n code: number | Record,\n headers?: Record\n ): this {\n if (typeof code === 'object' && !headers) {\n headers = code;\n code = 200;\n }\n\n if (code !== undefined && code !== 200) {\n this.statusCode = code as number;\n }\n if (headers !== undefined) {\n this.setHeaders(headers);\n }\n\n return this;\n }\n\n /**\n * Redirect current locate to new\n * @param code Redirect code\n * @param path Path to be redirected\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.redirect('/foo');\n */\n redirect(code: number | string, path?: string): this {\n if (!path && typeof code === 'string') {\n path = code;\n code = 301;\n }\n if (path && path.indexOf('/') === -1) {\n path = `/${path}`;\n }\n\n this.statusCode = code as number;\n this.setHeader('Location', path as string);\n\n return this.end();\n }\n\n /**\n * Sends status with empty body\n * @param code Status code\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sendStatus(204);\n */\n sendStatus(code: number): this {\n debug('res.sendStatus(%d)', code);\n\n this.statusCode = code;\n return this.end();\n }\n\n /**\n * Sends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.send({status: 'success'});\n */\n send(\n data: Record | string | number | boolean,\n closeConnection?: boolean\n ): this {\n const { done, compiledResponse } = this;\n if (!done && this[resResponse]) {\n if (compiledResponse) {\n return this.end(compiledResponse, closeConnection);\n }\n if (this.serialize) {\n return this.end(this.serialize(data), closeConnection);\n }\n if (typeof data === 'object') {\n this.setHeader('Content-Type', 'application/json; charset=utf-8');\n return this.end(\n JSON.stringify(\n data,\n this[resConfig].json_replacer,\n this[resConfig].json_spaces\n ),\n closeConnection\n );\n }\n\n return this.end(data as string, closeConnection);\n }\n return this;\n }\n\n /**\n * @deprecated Use `res.stream` instead of\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.pipe(readableStream)\n * @alias res.stream(readableStream)\n */\n pipe(stream: ReadStream, size?: number, compressed?: boolean): this {\n debug('res.pipe(stream, %d, %j)', size, compressed);\n\n return this.stream(stream, size, compressed);\n }\n\n /**\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.stream(readableStream)\n */\n stream(stream: ReadStream, size?: number, compressed = false): this {\n const { mode, [resRequest]: req, [resResponse]: res } = this;\n\n if (req && (!size || Number.isNaN(size)) && req.headers['content-length']) {\n size = +req.headers['content-length'];\n } else if ((!size || Number.isNaN(size)) && stream.path) {\n ({ size } = statSync(stream.path));\n }\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._stream(stream, size, compressed);\n });\n return this;\n }\n\n return this._stream(stream, size, compressed);\n }\n\n /**\n * @private\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res._stream(readableStream)\n */\n protected _stream(\n stream: ReadStream,\n size?: number,\n compressed = false\n ): this {\n if (!this.done && this[resResponse] && this[resResponse] !== null) {\n const res = this[resResponse] as uWS.HttpResponse;\n const config = this[resConfig];\n const { mode, statusCode, _headersSet, [resHeaders]: _headers } = this;\n\n this.exposeAborted();\n let calledData = !config.enableExpressCompatibility;\n\n if (compressed) {\n const compressedStream = this.compressStream(stream);\n\n if (compressedStream) {\n stream = compressedStream as unknown as ReadStream;\n }\n }\n\n const onclose = (): void => {\n if (calledData) {\n this.done = true;\n this.streaming = false;\n this.emit('close');\n } else if (stream.path) {\n stream.close();\n warn(\n 'res.stream(stream) data was not called, but mimicked by [nanoexpress], performance may be dropped and even can be stuck at responses, so please use official middlewares to avoid such errors'\n );\n this.stream(createReadStream(stream.path), size, compressed);\n }\n };\n const onfinish = (): void => {\n if (calledData) {\n if (typeof stream.close === 'function') {\n stream.close();\n } else {\n stream.emit('close');\n }\n }\n this.emit('finish');\n };\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n\n if (compressed || !size || Number.isNaN(size)) {\n debug('res.stream:compressed(stream, %d, %j)', size, compressed);\n stream\n .on('data', (buffer: Buffer): void => {\n calledData = true;\n\n if (this.aborted || this.done) {\n return;\n }\n res.write(\n buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n )\n );\n })\n .on('close', onclose)\n .on('finish', onfinish);\n } else {\n debug('res.stream:uncompressed(stream, %d, %j)', size, compressed);\n stream.on('data', (buffer: Buffer): void => {\n calledData = true;\n if (this.done || this.aborted) {\n return;\n }\n buffer = buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n ) as Buffer;\n\n const lastOffset = res.getWriteOffset();\n const [ok, done] = res.tryEnd(buffer, size as number);\n\n if (done) {\n this.done = true;\n } else if (!ok) {\n stream.pause();\n\n res.onWritable((offset: number): boolean => {\n if (this.done || this.aborted) {\n return true;\n }\n const [writeOk, writeDone] = res.tryEnd(\n buffer.slice(offset - lastOffset),\n size as number\n );\n if (writeDone) {\n this.done = true;\n } else if (writeOk) {\n stream.resume();\n }\n return writeOk;\n });\n }\n });\n }\n stream\n .on('error', (error) => {\n stream.destroy(error);\n this.aborted = true;\n this.emit('error', error as never);\n })\n .on('close', onclose)\n .on('finish', onfinish);\n }\n return this;\n }\n\n /**\n * Compress stream into compressed into\n * @param stream Readable stream\n * @param options One of compressions (BrotliCompress, ZlibOptions)\n * @param priority Compression picking priority\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.compressStream(writableStream)\n */\n compressStream(\n stream: ReadStream,\n options?: BrotliOptions | ZlibOptions,\n priority = ['gzip', 'br', 'deflate']\n ): BrotliCompress | Gzip | Deflate | null {\n const req = this[resRequest];\n\n if (!req) {\n invalid(\n 'This method requires active `HttpRequest`. Please load required middleware'\n );\n return null;\n }\n if (!req.headers) {\n invalid(\n 'This method requires active `HttpRequest.headers`. Please load required middleware'\n );\n return null;\n }\n const contentEncoding = req.headers['content-encoding'];\n const encoding = priority.find(\n (currentEncoding) =>\n contentEncoding && contentEncoding.indexOf(currentEncoding) !== -1\n );\n\n let compression = null;\n\n if (encoding === 'br') {\n compression = createBrotliCompress(options);\n } else if (encoding === 'gzip') {\n compression = createGzip(options);\n } else if (encoding === 'deflare') {\n compression = createDeflate(options);\n }\n\n if (compression && encoding) {\n stream.pipe(compression);\n this.setHeader('content-encoding', encoding);\n }\n\n return compression;\n }\n\n /**\n * Sends file to end user with efficient stream\n * @param path File absolute path\n * @param lastModified Sets `Last-Modified` header to prevent infinite re-loading\n * @param compressed Compresses file and saves bandwidth of user\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sendFile('foo.mp4')\n */\n sendFile(path: string, lastModified = true, compressed = false): this {\n const req = this[resRequest];\n const headers = req?.headers;\n\n const stat = statSync(path);\n let { size } = stat;\n\n // handling last modified\n if (lastModified) {\n const { mtime } = stat;\n\n mtime.setMilliseconds(0);\n const mtimeutc = mtime.toUTCString();\n\n // Return 304 if last-modified\n if (headers && headers['if-modified-since']) {\n if (new Date(headers['if-modified-since']) >= mtime) {\n this.statusCode = 304;\n return this.end();\n }\n }\n this.setHeader('last-modified', mtimeutc);\n }\n this.setHeader('content-type', getMime(path) as string);\n\n let start: number | undefined = 0;\n let end: number | undefined = 0;\n\n if (headers && headers.range) {\n [start, end] = headers.range\n .substr(6)\n .split('-')\n .map((byte: string) => (byte ? parseInt(byte, 10) : undefined));\n\n // Chrome patch for work\n if (end === undefined) {\n end = size - 1;\n }\n\n if (start !== undefined) {\n this.statusCode = 206;\n this.setHeader('accept-ranges', 'bytes');\n this.setHeader('content-range', `bytes ${start}-${end}/${size}`);\n size = end - start + 1;\n }\n }\n\n // for size = 0\n if (end < 0) {\n end = 0;\n }\n\n const createStreamInstance = end\n ? createReadStream(path, { start, end })\n : createReadStream(path);\n\n return this.stream(createStreamInstance, size, compressed);\n }\n\n /**\n * Enters or continues chunked encoding mode. Writes part of the response. End with zero length write.\n * @param chunk Content response chunk\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.write(Buffer.from('Hi'));\n */\n write(chunk: uWS.RecognizedString | ArrayBuffer): this {\n const res = this[resResponse];\n if (!this.done && res && !this.streaming) {\n debug('res.write(%s)', chunk);\n res.write(chunk);\n return this;\n }\n return this;\n }\n\n /**\n *\n * Exposed methods\n */\n exposeAborted(): this {\n const res = this[resResponse];\n if (!this[resAbortHandlerExpose] && res) {\n debug('res.onAborted is exposed');\n res.onAborted(() => {\n this.aborted = true;\n warn('res.onAborted is called');\n\n this[resAbortHandler].forEach((callback) => callback());\n });\n this[resAbortHandlerExpose] = true;\n }\n\n return this;\n }\n\n onAborted(handler: () => void): this {\n this[resAbortHandler].push(handler);\n\n return this;\n }\n\n /**\n * Get response header value by key\n * @param key Header key\n * @returns Returns value of header got by key\n * @example res.getHeader('cookie');\n * @memberof nanoexpress.HttpResponse\n */\n getHeader(key: string): RecognizedString | null {\n const headers = this[resHeaders];\n if (headers && headers[key]) {\n debug(\"res.getHeader('%s')\", key);\n return headers[key];\n }\n return null;\n }\n\n /**\n * Checks response header value by key\n * @param key Header key\n * @returns Returns `true` if header exists whereas `false` in other cases\n * @example res.hasHeader('cookie');\n * @memberof nanoexpress.HttpResponse\n */\n hasHeader(key: string): boolean {\n debug(\"res.hasHeader('%s')\", key);\n return this.getHeader(key) !== null;\n }\n\n /**\n * Set response header value by key\n * @param key Header key\n * @param value Header value\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setHeader('content-type', 'application/json');\n */\n setHeader(key: string, value: uWS.RecognizedString): this {\n const { mode, [resResponse]: res } = this;\n\n debug(\"res.setHeader('%s', '%s')\", key, value);\n\n if (res && mode === 'immediate') {\n res.writeHeader(key, value);\n return this;\n }\n\n if (!this[resHeaders]) {\n this[resHeaders] = {};\n }\n\n this._headersSet = true;\n const headers = this[resHeaders] as Record;\n headers[key] = value;\n\n return this;\n }\n\n /**\n * Set response header value by key\n * @param key Header key\n * @param value Header value\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.set('content-type', 'application/json');\n * @alias res.setHeader('content-type', 'application/json');\n */\n set(key: string, value: uWS.RecognizedString): this {\n return this.setHeader(key, value);\n }\n\n /**\n * Set response headers by Record dict\n * @param headers Header key/value record dict\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setHeaders({'content-type':'application/json'});\n */\n setHeaders(headers: Record): this {\n const { mode, [resResponse]: res } = this;\n\n if (res && mode === 'immediate') {\n warn('res.setHeaders(headers) cannot be set due of immediate mode');\n return this;\n }\n\n debug('res.setHeaders(headers)');\n this._headersSet = true;\n\n if (this[resHeaders]) {\n Object.assign(this[resHeaders], headers);\n } else {\n this[resHeaders] = headers;\n }\n\n return this;\n }\n\n /**\n * Remove response header value by key\n * @param key Header key\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.removeHeader('cookie');\n */\n removeHeader(key: string): this {\n const { mode, [resResponse]: res } = this;\n\n if (res && mode === 'immediate') {\n warn(\"res.removeHeader('%s') cannot be set due of immediate mode\", key);\n return this;\n }\n\n debug(\"res.removeHeader('%s')\", key);\n\n const headers = this[resHeaders];\n if (headers && headers[key]) {\n headers[key] = null;\n }\n\n return this;\n }\n\n /**\n * Set response content type\n * @param contentType Content type\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.type('application/json');\n */\n type(contentType: string): this {\n debug('res.type(%s)', contentType);\n return this.setHeader('content-type', contentType);\n }\n}\n\nexport default HttpResponse;\n","import { MiddlewareHandler } from '../../types/find-route';\nimport { HttpMethod } from '../../types/nanoexpress';\nimport { warn } from '../helpers/loggy';\nimport { HttpRequest, HttpResponse } from '../polyfills';\n\nexport type LegacyHttpHandler = (\n req: HttpRequest,\n res: HttpResponse,\n next: (err?: Error, done?: boolean) => void\n) =>\n | HttpResponse\n | string\n | Record\n | Promise | string>;\n\nexport default (\n middleware: LegacyHttpHandler\n): MiddlewareHandler => {\n warn(\n 'legacy middlewares is deprecated and in future we will remove express.js middlewares support'\n );\n const httpHandler = function legacyMiddlewarePolyfillHandler(\n req: HttpRequest,\n res: HttpResponse\n ): Promise {\n return new Promise((resolve, reject) => {\n middleware(req, res, (err) => {\n if (err) {\n reject(err);\n } else {\n // @ts-ignore\n resolve();\n }\n });\n });\n };\n const displayName = middleware.name;\n httpHandler.raw = middleware;\n httpHandler.displayName = displayName;\n return httpHandler;\n};\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport analyze from '@nanoexpress/route-syntax-parser';\nimport fastDecodeURI from 'fast-decode-uri-component';\nimport { pathToRegexp } from 'path-to-regexp';\nimport {\n HttpHandler,\n PreparedRoute,\n UnpreparedRoute\n} from '../types/find-route';\nimport { HttpMethod, INanoexpressOptions } from '../types/nanoexpress';\nimport { debug, invalid, iterateBlocks, slashify, _gc } from './helpers';\nimport { HttpRequest, HttpResponse } from './polyfills';\nimport legacyUtil, { LegacyHttpHandler } from './utils/legacy';\n\nexport default class RouteEngine {\n protected options: INanoexpressOptions;\n\n protected routes: PreparedRoute[];\n\n public async: boolean;\n\n public await: boolean;\n\n public params = false;\n\n public headers = false;\n\n public cookies = false;\n\n public query = false;\n\n public body = false;\n\n public property = false;\n\n constructor(options: INanoexpressOptions) {\n this.options = options;\n this.routes = [];\n this.async = false;\n this.await = false;\n }\n\n parse(incomingRoute: UnpreparedRoute): PreparedRoute {\n const { options: config } = this;\n\n const route: PreparedRoute = {\n ...incomingRoute,\n all: false,\n regex: false,\n fetch_params: false,\n async: false,\n await: false,\n legacy: false,\n analyzeBlocks: []\n };\n\n if (typeof route.path === 'string') {\n if (config.ignoreTrailingSlash) {\n route.path = slashify(route.path);\n route.originalUrl = slashify(route.originalUrl);\n }\n\n route.path = fastDecodeURI(route.path);\n\n if (route.baseUrl === '*') {\n route.all = true;\n } else if (route.path.indexOf(':') !== -1) {\n route.fetch_params = true;\n route.param_keys = [];\n route.path = pathToRegexp(route.path, route.param_keys);\n route.regex = true;\n } else if (route.path.indexOf('/*') !== -1) {\n route.baseUrl = route.path.substr(0, route.path.indexOf('/*') + 1);\n route.path = route.path.substr(route.baseUrl.length);\n route.all = true;\n } else if (\n route.baseUrl.length > 1 &&\n route.baseUrl.indexOf('/*') !== -1\n ) {\n route.baseUrl = route.baseUrl.substring(0, route.baseUrl.indexOf('/*'));\n route.originalUrl = route.originalUrl.substring(\n 0,\n route.originalUrl.indexOf('/*') + 1\n );\n route.all = true;\n }\n } else if (route.path instanceof RegExp) {\n route.regex = true;\n }\n route.async = route.handler.constructor.name === 'AsyncFunction';\n route.await = route.handler.toString().includes('await');\n route.legacy = route.handler.toString().includes('next(');\n route.analyzeBlocks = analyze>(route.handler);\n const usedBlocks = iterateBlocks(route.analyzeBlocks);\n\n if (route.legacy) {\n if (config.enableExpressCompatibility) {\n route.handler = legacyUtil(\n route.handler as LegacyHttpHandler\n );\n route.async = true;\n route.await = true;\n } else {\n invalid(\n 'Express.js compatibility mode is disabled, please enable before using *express.js* middlewares, but take care - performance will not be same as disabled'\n );\n }\n }\n\n if (!this.params && route.fetch_params) {\n this.params = true;\n }\n if (!this.async && route.async) {\n this.async = true;\n }\n if (!this.await && route.await) {\n this.await = true;\n }\n\n usedBlocks.forEach((blockName): void => {\n if (blockName === 'property') {\n //\n } else {\n if (!this[blockName]) {\n this[blockName] = true;\n }\n }\n });\n\n debug(\n 'route registered [%s] baseurl(%s) path(%s) - originalurl(%s)',\n route.method,\n route.baseUrl,\n route.path,\n route.originalUrl\n );\n\n return route;\n }\n\n on(\n method: HttpMethod,\n path: string | RegExp | Array,\n handler: HttpHandler | HttpHandler[],\n baseUrl: string,\n originalUrl: string\n ): this {\n if (Array.isArray(method)) {\n method.forEach((methodId) => {\n this.on(methodId, path, handler, baseUrl, originalUrl);\n });\n return this;\n }\n if (Array.isArray(path)) {\n path.forEach((pathId) => {\n this.on(method, pathId, handler, baseUrl, originalUrl);\n });\n return this;\n }\n if (Array.isArray(handler)) {\n handler.forEach((handlerId) => {\n this.on(method, path, handlerId, baseUrl, originalUrl);\n });\n return this;\n }\n\n this.routes.push(\n this.parse({ method, path, baseUrl, originalUrl, handler })\n );\n\n _gc();\n\n return this;\n }\n\n off(\n method: HttpMethod,\n path: string,\n handler: HttpHandler,\n baseUrl: string,\n originalUrl: string\n ): this {\n const parsed = this.parse({ method, path, baseUrl, originalUrl, handler });\n\n if (!handler) {\n this.routes = this.routes.filter(\n (route) =>\n !(route.method === parsed.method && route.path === parsed.path)\n );\n } else {\n this.routes = this.routes.filter(\n (route) =>\n !(\n route.method === parsed.method &&\n route.path === parsed.path &&\n route.handler === parsed.handler\n )\n );\n }\n\n _gc();\n\n return this;\n }\n\n async lookup(\n req: HttpRequest,\n res: HttpResponse\n ): Promise {\n const { routes, options } = this;\n let response;\n\n for (let i = 0, len = routes.length; i < len; i += 1) {\n const route = routes[i];\n\n // Early return for performance reason\n if (res.done) {\n debug('routes lookup early exit');\n return res;\n }\n\n if (route.method === 'ANY' || route.method === req.method) {\n let found = false;\n\n if (route.all) {\n found =\n route.path && route.path !== '*'\n ? req.path.includes(route.path as string)\n : route.originalUrl === '*' ||\n req.originalUrl.substr(route.originalUrl.length).length > 1;\n } else if (route.regex && (route.path as RegExp).test(req.path)) {\n found = true;\n } else if (route.path === req.path && route.baseUrl === req.baseUrl) {\n found = true;\n } else if (route.originalUrl === req.originalUrl) {\n found = true;\n }\n\n if (found) {\n if (route.fetch_params && route.param_keys) {\n const exec = (route.path as RegExp).exec(req.path);\n\n req.params = {} as Record;\n for (\n let p = 0, lenp = route.param_keys.length;\n exec && p < lenp;\n p += 1\n ) {\n const key = route.param_keys[p].name;\n const value = exec[p + 1];\n\n req.params[key] = value;\n }\n }\n\n // Prepare url after found\n if (\n options.enableExpressCompatibility &&\n route.baseUrl !== '' &&\n route.baseUrl !== '*' &&\n req.path.indexOf(route.baseUrl) === 0\n ) {\n req.baseUrl = route.baseUrl;\n req.path = req.originalUrl.substr(req.baseUrl.length);\n req.url = req.originalUrl.substr(req.baseUrl.length);\n }\n\n if (route.async || route.legacy) {\n response = await route.handler(req, res);\n } else {\n response = route.handler(req, res);\n }\n\n if (res.streaming || res.done || response === res) {\n debug('routes lookup was done with HttpResponse');\n return res;\n }\n if (!res.streaming && !res.done && response) {\n debug('routes lookup was done with async json result');\n return res.send(response as string | Record);\n }\n\n debug('routes lookup was done without any match');\n } else {\n debug('routes lookup was not found without any match');\n }\n }\n }\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function */\nimport { RecognizedString, WebSocketBehavior } from 'uWebSockets.js';\nimport {\n MiddlewareHandler,\n RequestSchema,\n RequestSchemaWithBody,\n RouteHandler,\n UnpreparedRoute\n} from '../types/find-route';\nimport { HttpMethod, IWebsocketRoute } from '../types/nanoexpress';\nimport App from './app';\nimport { appInstance, routerInstances, wsInstances } from './constants';\nimport { invalid, _gc } from './helpers';\nimport RouteEngine from './route-engine';\n\nexport default class Router {\n protected [appInstance]!: App | Router;\n\n protected _engine?: RouteEngine;\n\n [routerInstances]: UnpreparedRoute[];\n\n [wsInstances]: IWebsocketRoute[];\n\n _basePath: string;\n\n constructor() {\n this[routerInstances] = [];\n this[wsInstances] = [];\n this._basePath = '';\n\n return this;\n }\n\n on(\n method: HttpMethod,\n path: string | RegExp,\n handlers:\n | MiddlewareHandler\n | MiddlewareHandler[]\n | RouteHandler\n | RouteHandler[],\n baseUrl: string,\n originalUrl: string\n ): this {\n const { _engine } = this;\n\n if (_engine) {\n _engine.on(method, path, handlers, baseUrl, originalUrl);\n } else if (Array.isArray(handlers)) {\n handlers.forEach((handler) => {\n this[routerInstances].push({\n method,\n path,\n baseUrl,\n handler,\n originalUrl\n });\n });\n } else {\n this[routerInstances].push({\n method,\n path,\n baseUrl,\n handler: handlers,\n originalUrl\n });\n }\n\n return this;\n }\n\n use(\n path: string | MiddlewareHandler | Router,\n ...middlewares: Array\n ): this {\n if (typeof path === 'function' || path instanceof Router) {\n middlewares.unshift(path);\n path = '*';\n }\n if (Array.isArray(path)) {\n if (\n path.every(\n (routePath) =>\n typeof routePath === 'function' || path instanceof Router\n )\n ) {\n return this.use('*', ...path);\n }\n }\n middlewares.forEach((handler: Router | MiddlewareHandler) => {\n if (handler instanceof Router) {\n const _routers = handler[routerInstances];\n const _ws = handler[wsInstances];\n\n handler[appInstance] = this;\n handler._basePath = path as string;\n\n _routers.forEach(\n ({ method, path: routePath, handler: routeHandler, baseUrl }) => {\n this.on(\n method,\n routePath as string,\n routeHandler,\n path as string,\n (path as string) + baseUrl + (routePath as string)\n );\n }\n );\n this[wsInstances].push(..._ws);\n\n _routers.length = 0;\n _ws.length = 0;\n } else if (Array.isArray(handler)) {\n this.use(path, ...handler);\n } else {\n this.on(\n 'ANY',\n '*',\n handler,\n path as string,\n this._basePath + (path as string)\n );\n }\n });\n\n _gc();\n\n return this;\n }\n\n get(\n path: string | RegExp,\n ...handlers: RouteHandler<'GET', T>[]\n ): this {\n return this.on(\n 'GET',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n post(\n path: string | RegExp,\n ...handlers: RouteHandler<'POST', T>[]\n ): this {\n return this.on(\n 'POST',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n put(\n path: string | RegExp,\n ...handlers: RouteHandler<'PUT', T>[]\n ): this {\n return this.on(\n 'PUT',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n options(\n path: string | RegExp,\n ...handlers: RouteHandler<'OPTIONS', T>[]\n ): this {\n return this.on(\n 'OPTIONS',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n del(\n path: string | RegExp,\n ...handlers: RouteHandler<'DEL', T>[]\n ): this {\n return this.on(\n 'DEL',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n /**\n *\n * @param path\n * @param handlers\n * @alias Router.del\n * @returns Router\n */\n delete(\n path: string | RegExp,\n ...handlers: RouteHandler<'DEL', T>[]\n ): this {\n return this.del(path, ...handlers);\n }\n\n /**\n * @param path The accessible path to be called route handler\n * @param handlers List of middlewares and/or routes\n * @returns Router\n */\n all(\n path: string | RegExp,\n ...handlers: RouteHandler<'ANY', T>[]\n ): this {\n return this.on(\n 'ANY',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n ws(path: RecognizedString, options?: WebSocketBehavior): this {\n const normalisedPath =\n this._basePath === '*'\n ? '*'\n : path === '/'\n ? this._basePath\n : `${this._basePath}${path}`;\n\n this[wsInstances].push({\n path: normalisedPath,\n options\n } as IWebsocketRoute);\n\n return this;\n }\n\n /**\n * @deprecated Use `app.publish()` for safety, this method will not work anymore\n * @param topic\n * @param message\n * @param isBinary\n * @param compress\n * @returns Status of publish\n */\n publish(\n topic: RecognizedString,\n message: RecognizedString,\n isBinary?: boolean,\n compress?: boolean\n ): boolean {\n const app = this[appInstance];\n if (app) {\n return app.publish(topic, message, isBinary, compress);\n }\n invalid(\n 'nanoexpress [Router]: Please attach to `Application` before using publish'\n );\n return false;\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport { resAbortHandler } from './constants';\nimport uWS, {\n HttpRequest as uWS_HttpRequest,\n HttpResponse as uWS_HttpResponse,\n RecognizedString,\n TemplatedApp,\n us_listen_socket,\n WebSocketBehavior\n} from 'uWebSockets.js';\nimport { HttpHandler, RequestSchema } from '../types/find-route';\nimport {\n HttpMethod,\n INanoexpressOptions,\n IWebsocketRoute\n} from '../types/nanoexpress';\nimport _gc from './helpers/gc';\nimport { debug, warn } from './helpers/loggy';\nimport { unregister } from './hooks/manager';\nimport { HttpRequest, HttpResponse } from './polyfills';\nimport RouteEngine from './route-engine';\nimport RouterTemplate from './router';\nimport noop from './helpers/noop';\n\nclass App extends RouterTemplate {\n get https(): boolean {\n return this._options.https !== undefined;\n }\n\n get _console(): Console {\n return this._options.console || console;\n }\n\n get raw(): TemplatedApp {\n return this._app;\n }\n\n protected _app: TemplatedApp;\n\n protected _options: INanoexpressOptions;\n\n protected _engine: RouteEngine;\n\n protected _ws: IWebsocketRoute[];\n\n protected _requestPools: HttpRequest[];\n\n protected _responsePools: HttpResponse[];\n\n protected _poolsSize: number;\n\n protected time: [number, number];\n\n protected _separateServed: boolean;\n\n protected _ran: boolean;\n\n protected _instance: Record;\n\n protected defaultRoute: HttpHandler | null;\n\n protected errorRoute:\n | ((err: Error, req: HttpRequest, res: HttpResponse) => void)\n | null;\n\n constructor(options: INanoexpressOptions, app: TemplatedApp) {\n super();\n this._options = options;\n this._app = app;\n this._engine = new RouteEngine(options);\n\n this.defaultRoute = (_, res): HttpResponse => {\n return res.status(404).send({ status: 'error', code: 404 });\n };\n this.errorRoute = (err, _, res): HttpResponse => {\n return res.status(500).send({\n status: 'error',\n message: err.message\n });\n };\n\n this._ws = [];\n this._requestPools = [];\n this._responsePools = [];\n this._poolsSize = options.poolSize || 10;\n\n this.time = process.hrtime();\n this._separateServed = false;\n this._ran = false;\n\n this._instance = {};\n return this;\n }\n\n setNotFoundHandler(handler: HttpHandler): this {\n this.defaultRoute = handler;\n\n return this;\n }\n\n setErrorHandler(\n handler: (err: Error, req: HttpRequest, res: HttpResponse) => void\n ): this {\n this.errorRoute = handler;\n\n return this;\n }\n\n handleError(error: Error, req: HttpRequest, res: HttpResponse): this {\n if (res && !res.aborted && !res.done && !res.streaming && this.errorRoute) {\n this.errorRoute(error, req, res);\n }\n\n return this;\n }\n\n ws(path: RecognizedString, options: WebSocketBehavior): this {\n this._app.ws(path, options);\n\n return this;\n }\n\n publish(\n topic: RecognizedString,\n message: RecognizedString,\n isBinary?: boolean,\n compress?: boolean\n ): boolean {\n return this._app.publish(topic, message, isBinary, compress);\n }\n\n run(): this {\n const {\n _app: app,\n _options: options,\n _ws,\n _requestPools,\n _responsePools,\n _poolsSize,\n _engine,\n _ran\n } = this;\n\n if (!_ran) {\n const handler = async (\n rawRes: uWS_HttpResponse,\n rawReq: uWS_HttpRequest\n ): Promise => {\n let req: HttpRequest;\n let res: HttpResponse;\n let response;\n\n if (_requestPools.length > 0) {\n req = _requestPools.shift() as HttpRequest;\n req.setRequest(rawReq, rawRes);\n } else {\n req = new HttpRequest(options);\n req.setRequest(rawReq, rawRes);\n }\n if (_responsePools.length > 0) {\n res = _responsePools.shift() as HttpResponse;\n res.setResponse(rawRes, req);\n } else {\n res = new HttpResponse(options);\n res.setResponse(rawRes, req);\n }\n\n if (\n options.ignoreTrailingSlash &&\n req.path.charAt(req.path.length - 1) !== '/' &&\n (req.path.lastIndexOf('.') === -1 ||\n req.path.lastIndexOf('.') < req.path.length - 4)\n ) {\n if (options.enableExpressCompatibility) {\n debug(\n 'res.redirect called instead of fast quick-fix on route ending without \"/\" for express.js middlewares compatibility'\n );\n res.redirect(`http://${req.headers.host}${req.originalUrl}/`);\n return rawRes;\n }\n }\n\n if (req.method === 'POST' || req.method === 'PUT') {\n res.exposeAborted();\n\n rawRes.onData((arrayChunk: ArrayBuffer, isLast: boolean) => {\n req.stream.push(Buffer.from(arrayChunk.slice(0)));\n\n if (isLast) {\n req.stream.push(null);\n }\n });\n }\n\n if (res.aborted || res.done || req.method === 'OPTIONS') {\n debug('early returned ranning %o', {\n aborted: res.aborted,\n done: res.done,\n method: req.method\n });\n return;\n }\n\n if (_engine.async && _engine.await) {\n res.exposeAborted();\n response = await _engine.lookup(req, res).catch((err) => {\n this.handleError(err, req, res as HttpResponse);\n });\n if (res[resAbortHandler]) {\n res.onAborted(unregister);\n } else {\n unregister();\n }\n if (_requestPools.length < _poolsSize) {\n _requestPools.push(req);\n }\n if (_responsePools.length < _poolsSize) {\n _responsePools.push(res);\n }\n return rawRes;\n }\n\n await _engine.lookup(req, res).catch((err) => {\n this.handleError(err, req, res as HttpResponse);\n });\n if (res[resAbortHandler]) {\n res.onAborted(unregister);\n } else {\n unregister();\n }\n if (_requestPools.length < _poolsSize) {\n _requestPools.push(req);\n }\n if (_responsePools.length < _poolsSize) {\n _responsePools.push(res);\n }\n\n if (\n res &&\n !res.done &&\n !res.streaming &&\n response === undefined &&\n this.defaultRoute !== null\n ) {\n debug('routes lookup was not found any route, fallback to not-found');\n const notFound = await this.defaultRoute(req, res);\n\n if (notFound !== res) {\n res.send(notFound as string | Record);\n }\n }\n return rawRes;\n };\n\n app.any('/*', handler);\n\n _ws.forEach(({ path, options: wsOptions }) => {\n app.ws(path, wsOptions);\n });\n // Cleanup GC\n _ws.length = 0;\n _gc();\n\n this._ran = true;\n }\n\n return this;\n }\n\n listenSocket(\n port: number,\n host = 'localhost',\n is_ssl = false,\n handler: () => void = noop\n ): Promise {\n const { _options: options } = this;\n\n if (\n (port === 80 || port === 443) &&\n this.https &&\n options.https?.separateServer &&\n !this._separateServed\n ) {\n const httpsPort =\n typeof options.https.separateServer === 'number'\n ? options.https.separateServer\n : 443;\n this._separateServed = true;\n return Promise.all([\n this.listenSocket(port, host, false, handler),\n this.listenSocket(httpsPort, host, true, handler)\n ]);\n }\n\n return this._appApplyListen(host, port, is_ssl, handler);\n }\n\n listen(\n ...args: Array void)>\n ): Promise {\n let port = 8000;\n let host = 'localhost';\n let ssl = false;\n let handler: () => void = () => {};\n\n args.forEach((listenArg): void => {\n if (typeof +listenArg === 'number' && !Number.isNaN(+listenArg)) {\n port = +listenArg;\n } else if (typeof listenArg === 'function') {\n handler = listenArg;\n } else if (\n typeof listenArg === 'string' &&\n (listenArg === 'localhost' || listenArg.includes('.'))\n ) {\n host = listenArg;\n } else if (listenArg === true) {\n ssl = true;\n }\n });\n this.run();\n return this.listenSocket(port, host, ssl, handler);\n }\n\n close(port: number, host = 'localhost'): boolean {\n const id = `${host}:${port}`;\n const token = this._instance[id];\n\n this._separateServed = false;\n this.time[0] = 0;\n this.time[1] = 0;\n\n return this._close(token, id);\n }\n\n protected _appApplyListen(\n host: string,\n port: number,\n is_ssl = false,\n handler: () => void = noop\n ): Promise {\n const { _console, _options: options, _app: app } = this;\n const sslString = is_ssl ? 'HTTPS ' : is_ssl === false ? 'HTTP ' : '';\n\n return new Promise((resolve, reject): void => {\n if (port === undefined) {\n const _errorContext = 'error' in _console ? _console : console;\n\n _errorContext.error('[Server]: PORT is required');\n return undefined;\n }\n const id = `${host}:${port}`;\n\n const onListenHandler = (token: us_listen_socket): void => {\n if (token) {\n const _debugContext = 'debug' in _console ? _console : console;\n const end = process.hrtime(this.time);\n\n this._instance[id] = token;\n _debugContext.debug(\n `[${sslString}Server]: started successfully at [${id}] in [${(\n (Number(end[0]) * 1000 + Number(end[1])) /\n 1000000\n ).toFixed(2)}ms] on PID[${process.pid}]`\n );\n _gc();\n handler();\n return resolve(token);\n }\n const _errorContext = 'error' in _console ? _console : console;\n\n const err = new Error(\n this.https &&\n (!options.https ||\n !options.https.cert_file_name ||\n !options.https.key_file_name)\n ? `[${sslString}Server]: SSL certificate was not defined or loaded`\n : `[${sslString}Server]: failed to host at [${id}]`\n );\n _errorContext.error(err.message);\n _gc();\n return reject(err);\n };\n\n if (host && host !== 'localhost') {\n app.listen(host, port, onListenHandler);\n } else {\n app.listen(port, onListenHandler);\n }\n });\n }\n\n _close(token: us_listen_socket | null, id: string): boolean {\n const { _console } = this;\n\n if (token) {\n const _debugContext = 'debug' in _console ? _console : console;\n\n uWS.us_listen_socket_close(token);\n this._instance[id] = null;\n _debugContext.debug('[Server]: stopped successfully');\n _gc();\n\n return true;\n }\n\n const _errorContext = 'error' in _console ? _console : console;\n\n _errorContext.error('[Server]: Error, failed while stopping');\n _gc();\n\n return false;\n }\n\n /**\n * @deprecated There no way to disable these methods as they are not available by default\n */\n disable(tag: string): this {\n warn(\n `[Server]: The tag [${tag}] cannot be disabled as not set, not supported and not available`\n );\n return this;\n }\n\n /**\n * @deprecated Please use configuration at initialization such as `nanoexpress({json_spaces:2})` insteadof `app.set('json_spaces', 2)`\n */\n set(key: keyof INanoexpressOptions, value: string | number): this {\n // @ts-ignore\n this._options[key] = value;\n return this;\n }\n}\n\nexport default App;\n","import EventsEmitter from 'events';\nimport {\n HttpRequest,\n HttpResponse,\n us_socket_context_t,\n WebSocketBehavior\n} from 'uWebSockets.js';\nexport default function exposeWebsocket(\n handler: (req: HttpRequest, res: HttpResponse) => void | Promise,\n options = {}\n): WebSocketBehavior {\n if (typeof (options as WebSocketBehavior).open === 'function') {\n return options;\n }\n\n return {\n ...options,\n open(ws): void {\n ws.emit('connection', ws);\n },\n async upgrade(\n res: HttpResponse,\n req: HttpRequest,\n context: us_socket_context_t\n ): Promise {\n const secWsKey = req.getHeader('sec-websocket-key');\n const secWsProtocol = req.getHeader('sec-websocket-protocol');\n const secWsExtensions = req.getHeader('sec-websocket-extensions');\n\n const events = new EventsEmitter();\n\n res.on = events.on.bind(events);\n res.once = events.once.bind(events);\n res.off = events.off.bind(events);\n res.emit = events.emit.bind(events);\n\n let aborted = false;\n res.onAborted(() => {\n aborted = true;\n events.emit('error', { aborted });\n });\n\n res.emit('upgrade', req, res);\n\n try {\n await handler(req, res);\n } catch (error) {\n aborted = true;\n events.emit('error', error);\n }\n if (!aborted) {\n events.emit('willUpgrade', req);\n res.upgrade(\n { req, ...res },\n secWsKey,\n secWsProtocol,\n secWsExtensions,\n context\n );\n events.emit('upgraded', req);\n }\n },\n message: (ws, message, isBinary): void => {\n ws.emit('message', message, isBinary);\n },\n drain: (ws): void => {\n ws.emit('drain', ws.getBufferedAmount());\n },\n close: (ws, code, message): void => {\n ws.emit('close', code, message);\n }\n };\n}\n","import { Dependencies, register } from './manager';\n\nexport const useCallback = register(false, true);\n\nexport const useEffect = register(true);\nexport const useMemo = register(true, true);\nexport const useState = (initialValue: T): [T, (value: T) => void] => {\n let value = useMemo(() => initialValue, []) as T;\n\n const setValue = (newValue: T): void => {\n value = newValue;\n };\n\n return [value, setValue];\n};\nexport const useRef = (ref: T | null, dependencies: Dependencies): T =>\n useMemo(() => ({ current: ref ?? null }), dependencies);\n","import uWS from 'uWebSockets.js';\nimport { INanoexpressOptions } from '../types/nanoexpress';\nimport App from './app';\nimport { exposeWebsocket } from './exposes/index';\nimport { useCallback, useEffect, useMemo, useRef, useState } from './hooks';\nimport Router from './router';\n\n/**\n * Instance initializer for nanoexpress\n * @param options Instance options\n * @param options.enableExpressCompatibility Sets polyfill status\n * @param options.ignoreTrailingSlash Normalizes trailing slash on routes\n * @returns\n */\nconst nanoexpress = (\n options: INanoexpressOptions = {\n ignoreTrailingSlash: true,\n enableExpressCompatibility: false,\n responseMode: 'cork'\n }\n): App => {\n let app;\n\n if (options.https) {\n app = uWS.SSLApp(options.https);\n } else if (options.http) {\n app = uWS.App(options.http);\n } else {\n app = uWS.App();\n }\n\n return new App(options, app);\n};\n\nnanoexpress.Router = Router;\nnanoexpress.App = App;\n\n// Add exposes\nnanoexpress.exposeWebsocket = exposeWebsocket;\n\nexport {\n nanoexpress as default,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n};\n"],"names":["STATUS_CODES","Readable","resRequest","resResponse","EventEmitter","statSync","createReadStream","createBrotliCompress","createGzip","createDeflate","pathToRegexp","RouterTemplate"],"mappings":"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"} \ No newline at end of file diff --git a/esm/nanoexpress.js.map b/esm/nanoexpress.js.map index 0b14a7ef..5cf67ff8 100644 --- a/esm/nanoexpress.js.map +++ b/esm/nanoexpress.js.map @@ -1 +1 @@ -{"version":3,"file":"nanoexpress.js","sources":["../src/constants.ts","../src/helpers/gc.ts","../src/helpers/loggy.ts","../src/hooks/manager.ts","../src/helpers/http-codes.ts","../src/helpers/http-methods.ts","../src/helpers/invalid.ts","../src/helpers/iterate-blocks.ts","../src/helpers/mime.ts","../src/helpers/slashify.ts","../src/helpers/noop.ts","../src/polyfills/http-request.ts","../src/polyfills/http-response.ts","../src/utils/legacy.ts","../src/route-engine.ts","../src/router.ts","../src/app.ts","../src/exposes/websocket.ts","../src/hooks/index.ts","../src/nanoexpress.ts"],"sourcesContent":["// Http(Request/Response)\nexport const request: unique symbol = Symbol('NanoexpressHttpRequestInstance');\nexport const response: unique symbol = Symbol(\n 'NanoexpressHttpResponseInstance'\n);\n\n// HttpRequest symbols\n\nexport const reqConfig: unique symbol = Symbol('NanoexpressHttpRequestConfig');\nexport const reqEvents: unique symbol = Symbol('NanoexpressHttpRequestEvents');\nexport const reqRequest: unique symbol = Symbol(\n 'NanoexpressHttpRequestRawInstance'\n);\nexport const reqRawResponse: unique symbol = Symbol(\n 'NanoexpressHttpResponseRawInstance'\n);\n\n// HttpResponse symbols\nexport const resHeaders: unique symbol = Symbol(\n 'NanoexpressHttpResponseHeaders'\n);\nexport const resConfig: unique symbol = Symbol('NanoexpressHttpResponseConfig');\nexport const resEvents: unique symbol = Symbol('NanoexpressHttpResponseEvents');\nexport const resAbortHandler: unique symbol = Symbol(\n 'NanoexpressHttpResponseAbortHandler'\n);\nexport const resAbortHandlerExpose: unique symbol = Symbol(\n 'NanoexpressHttpResponseAbortHandlerExpose'\n);\n\nexport const appInstance: unique symbol = Symbol('NanoexpressAppInstance');\nexport const routerInstances: unique symbol = Symbol(\n 'NanoexpressRouterInstances'\n);\nexport const wsInstances: unique symbol = Symbol(\n 'NanoexpressWebSocketInstances'\n);\n","export default function _gc(): boolean {\n try {\n if (global.gc) {\n global.gc();\n }\n return true;\n } catch (e) {\n return false;\n }\n}\n","import debugLog from 'debug';\n\nexport const debug = debugLog('nanoexpress');\nexport const error = debugLog('nanoexpress:error');\n\nexport const warn = debugLog('nanoexpress:warn');\n","export type Dependencies = Array;\n\ninterface ICallbackState {\n handler: () => never;\n dependencies: Dependencies;\n isEffect: boolean;\n mounted: boolean;\n}\n\nconst lastDeps: Dependencies[] = [];\nconst callbacks: ICallbackState[] = [];\nlet hookIndex = 0;\n\nconst register =\n (runValue = false, returnValue = false) =>\n (\n callback: (...args: any[]) => any,\n dependencies: Dependencies\n ): (() => any) | any => {\n if (\n !dependencies ||\n !lastDeps[hookIndex] ||\n !lastDeps[hookIndex].every(\n (dep, depIndex) => dep === dependencies[depIndex]\n )\n ) {\n callbacks[hookIndex] = {\n handler: runValue ? callback() : callback,\n dependencies,\n isEffect: runValue && !returnValue,\n mounted: runValue\n };\n lastDeps[hookIndex] = dependencies;\n }\n\n const _callback = callbacks[hookIndex].handler;\n hookIndex += 1;\n\n if (returnValue) {\n return _callback;\n }\n };\nconst unregister = (): void => {\n callbacks.forEach((callback) => {\n if (\n callback.isEffect &&\n callback.mounted &&\n typeof callback.handler === 'function'\n ) {\n callback.handler();\n callback.mounted = false;\n }\n });\n hookIndex = 0;\n};\n\nexport { register, unregister };\n","import { STATUS_CODES } from 'http';\n\nconst codesBetween = Array.from({ length: 500 })\n .fill(0)\n .map((_, index) => 100 + index);\n\nconst httpCodes = codesBetween.reduce((codes, code) => {\n const codeString = STATUS_CODES[code];\n if (codeString) {\n codes[code] = `${code} ${codeString}`;\n }\n return codes;\n}, {} as Record);\n\nexport default httpCodes;\n","import { HttpMethod } from '../../types/nanoexpress';\n\nexport default [\n 'get',\n 'post',\n 'put',\n 'patch',\n 'del',\n 'any',\n 'head',\n 'options',\n 'trace'\n].map((m) => m.toUpperCase()) as HttpMethod[];\n","export default function invalid(message: string): void {\n throw new Error(message);\n}\n","import {\n BlockMode,\n IBlock\n} from '@nanoexpress/route-syntax-parser/types/interfaces';\n\nexport default (blocks: IBlock[]): BlockMode[] => {\n return [...new Set(blocks.map((block) => block.mode))];\n};\n","const mimes = {\n '3gp': 'video/3gpp',\n a: 'application/octet-stream',\n ai: 'application/postscript',\n aif: 'audio/x-aiff',\n aiff: 'audio/x-aiff',\n asc: 'application/pgp-signature',\n asf: 'video/x-ms-asf',\n asm: 'text/x-asm',\n asx: 'video/x-ms-asf',\n atom: 'application/atom+xml',\n au: 'audio/basic',\n avi: 'video/x-msvideo',\n bat: 'application/x-msdownload',\n bin: 'application/octet-stream',\n bmp: 'image/bmp',\n bz2: 'application/x-bzip2',\n c: 'text/x-c',\n cab: 'application/vnd.ms-cab-compressed',\n cc: 'text/x-c',\n chm: 'application/vnd.ms-htmlhelp',\n class: 'application/octet-stream',\n com: 'application/x-msdownload',\n conf: 'text/plain',\n cpp: 'text/x-c',\n crt: 'application/x-x509-ca-cert',\n css: 'text/css',\n csv: 'text/csv',\n cxx: 'text/x-c',\n deb: 'application/x-debian-package',\n der: 'application/x-x509-ca-cert',\n diff: 'text/x-diff',\n djv: 'image/vnd.djvu',\n djvu: 'image/vnd.djvu',\n dll: 'application/x-msdownload',\n dmg: 'application/octet-stream',\n doc: 'application/msword',\n dot: 'application/msword',\n dtd: 'application/xml-dtd',\n dvi: 'application/x-dvi',\n ear: 'application/java-archive',\n eml: 'message/rfc822',\n eps: 'application/postscript',\n exe: 'application/x-msdownload',\n f: 'text/x-fortran',\n f77: 'text/x-fortran',\n f90: 'text/x-fortran',\n flv: 'video/x-flv',\n for: 'text/x-fortran',\n gem: 'application/octet-stream',\n gemspec: 'text/x-script.ruby',\n gif: 'image/gif',\n gz: 'application/x-gzip',\n h: 'text/x-c',\n hh: 'text/x-c',\n htm: 'text/html',\n html: 'text/html',\n ico: 'image/vnd.microsoft.icon',\n ics: 'text/calendar',\n ifb: 'text/calendar',\n iso: 'application/octet-stream',\n jar: 'application/java-archive',\n java: 'text/x-java-source',\n jnlp: 'application/x-java-jnlp-file',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n js: 'application/javascript',\n json: 'application/json',\n log: 'text/plain',\n m3u: 'audio/x-mpegurl',\n m4v: 'video/mp4',\n man: 'text/troff',\n mathml: 'application/mathml+xml',\n mbox: 'application/mbox',\n mdoc: 'text/troff',\n me: 'text/troff',\n mid: 'audio/midi',\n midi: 'audio/midi',\n mime: 'message/rfc822',\n mjs: 'application/javascript',\n mml: 'application/mathml+xml',\n mng: 'video/x-mng',\n mov: 'video/quicktime',\n mp3: 'audio/mpeg',\n mp4: 'video/mp4',\n mp4v: 'video/mp4',\n mpeg: 'video/mpeg',\n mpg: 'video/mpeg',\n ms: 'text/troff',\n msi: 'application/x-msdownload',\n odp: 'application/vnd.oasis.opendocument.presentation',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odt: 'application/vnd.oasis.opendocument.text',\n ogg: 'application/ogg',\n p: 'text/x-pascal',\n pas: 'text/x-pascal',\n pbm: 'image/x-portable-bitmap',\n pdf: 'application/pdf',\n pem: 'application/x-x509-ca-cert',\n pgm: 'image/x-portable-graymap',\n pgp: 'application/pgp-encrypted',\n pkg: 'application/octet-stream',\n pl: 'text/x-script.perl',\n pm: 'text/x-script.perl-module',\n png: 'image/png',\n pnm: 'image/x-portable-anymap',\n ppm: 'image/x-portable-pixmap',\n pps: 'application/vnd.ms-powerpoint',\n ppt: 'application/vnd.ms-powerpoint',\n ps: 'application/postscript',\n psd: 'image/vnd.adobe.photoshop',\n py: 'text/x-script.python',\n qt: 'video/quicktime',\n ra: 'audio/x-pn-realaudio',\n rake: 'text/x-script.ruby',\n ram: 'audio/x-pn-realaudio',\n rar: 'application/x-rar-compressed',\n rb: 'text/x-script.ruby',\n rdf: 'application/rdf+xml',\n roff: 'text/troff',\n rpm: 'application/x-redhat-package-manager',\n rss: 'application/rss+xml',\n rtf: 'application/rtf',\n ru: 'text/x-script.ruby',\n s: 'text/x-asm',\n sgm: 'text/sgml',\n sgml: 'text/sgml',\n sh: 'application/x-sh',\n sig: 'application/pgp-signature',\n snd: 'audio/basic',\n so: 'application/octet-stream',\n svg: 'image/svg+xml',\n svgz: 'image/svg+xml',\n swf: 'application/x-shockwave-flash',\n t: 'text/troff',\n tar: 'application/x-tar',\n tbz: 'application/x-bzip-compressed-tar',\n tcl: 'application/x-tcl',\n tex: 'application/x-tex',\n texi: 'application/x-texinfo',\n texinfo: 'application/x-texinfo',\n text: 'text/plain',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n torrent: 'application/x-bittorrent',\n tr: 'text/troff',\n txt: 'text/plain',\n vcf: 'text/x-vcard',\n vcs: 'text/x-vcalendar',\n vrml: 'model/vrml',\n war: 'application/java-archive',\n wav: 'audio/x-wav',\n wma: 'audio/x-ms-wma',\n wmv: 'video/x-ms-wmv',\n wmx: 'video/x-ms-wmx',\n wrl: 'model/vrml',\n wsdl: 'application/wsdl+xml',\n xbm: 'image/x-xbitmap',\n xhtml: 'application/xhtml+xml',\n xls: 'application/vnd.ms-excel',\n xml: 'application/xml',\n xpm: 'image/x-xpixmap',\n xsl: 'application/xml',\n xslt: 'application/xslt+xml',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n zip: 'application/zip',\n default: 'text/html'\n};\n\ntype valueof = T[keyof T];\n\nconst getMime = (path: string): valueof | undefined => {\n const i = Number(path.lastIndexOf('.'));\n return mimes[path.substr(i + 1).toLowerCase() as keyof typeof mimes];\n};\n\nexport { getMime, mimes };\n","export default (path: string): string =>\n path !== '*' &&\n path.charAt(path.length - 1) !== '/' &&\n path.charAt(path.length - 1) !== '*' &&\n (path.lastIndexOf('.') === -1 || path.lastIndexOf('.') < path.length - 4)\n ? `${path}/`\n : path;\n","export default (): void => {};\n","/* eslint-disable max-lines, max-lines-per-function */\nimport { EventEmitter } from 'events';\nimport queryParse from 'fast-query-parse';\nimport { Readable, Writable } from 'stream';\nimport {\n HttpRequest as uWS_HttpRequest,\n HttpResponse as uWS_HttpResponse\n} from 'uWebSockets.js';\nimport { RequestSchema, RequestSchemaWithBody } from '../../types/find-route';\nimport { HttpMethod, INanoexpressOptions } from '../../types/nanoexpress';\nimport { reqConfig, reqEvents, reqRawResponse, reqRequest } from '../constants';\nimport { invalid } from '../helpers';\n\nexport default class HttpRequest<\n THttpMethod = HttpMethod,\n THttpSchema extends RequestSchemaWithBody = RequestSchema\n> {\n protected [reqConfig]: INanoexpressOptions;\n\n protected [reqEvents]!: EventEmitter | null;\n\n protected [reqRequest]!: uWS_HttpRequest;\n\n protected [reqRawResponse]!: uWS_HttpResponse;\n\n protected registered: boolean;\n\n baseUrl!: string;\n\n url!: string;\n\n originalUrl!: string;\n\n path!: string;\n\n method!: THttpMethod;\n\n headers!: THttpSchema['headers'];\n\n params?: THttpSchema['params'];\n\n body?: THttpSchema['body'];\n\n query: THttpSchema['query'] = null;\n\n stream!: Readable;\n\n id = 0;\n\n constructor(options: INanoexpressOptions) {\n this[reqConfig] = options;\n\n this.registered = false;\n\n return this;\n }\n\n setRequest(req: uWS_HttpRequest, res: uWS_HttpResponse): this {\n const options = this[reqConfig];\n\n this[reqRequest] = req;\n this[reqRawResponse] = res;\n\n const query = req.getQuery();\n const url = req.getUrl();\n\n this.url = url;\n this.originalUrl = this.url;\n this.path = url;\n this.baseUrl = '';\n\n this.method = req.getMethod().toUpperCase() as unknown as THttpMethod;\n\n this.headers = {};\n req.forEach((key, value) => {\n (this.headers as RequestSchema['headers'])[key] = value;\n });\n\n if (url.charAt(url.length - 1) !== '/') {\n this.url += '/';\n this.path += '/';\n this.originalUrl += '/';\n }\n\n if (options.enableExpressCompatibility && query) {\n this.originalUrl += `?${query}`;\n }\n this.query = queryParse(query);\n\n // @ts-ignore\n if (this.method === 'POST' || this.method === 'PUT') {\n // Imitiate some modes\n this.stream = new Readable({ read(): void {} });\n\n // Protected variables\n this[reqEvents] = null;\n this.registered = false;\n }\n\n // eslint-disable-next-line security-node/detect-insecure-randomness\n this.id = Math.round(Math.random() * 1e5);\n\n return this;\n }\n\n on(event: string, listener: (...args: any[]) => void): this {\n const { stream } = this;\n if (stream) {\n stream.on(event, listener);\n }\n return this;\n }\n\n emit(event: string, ...args: any[]): this {\n const { stream } = this;\n if (stream) {\n stream.emit(event, ...args);\n }\n return this;\n }\n\n getHeader(key: string): string {\n return this.headers[key];\n }\n\n hasHeader(key: string): boolean {\n return !!this.headers[key];\n }\n\n getParameter(index: number): string {\n return this[reqRequest].getParameter(index);\n }\n\n pipe(destination: Writable): Writable | void | Promise {\n const { stream } = this;\n\n if (stream.readableDidRead || stream.readableEnded) {\n return invalid('Stream already used, cannot use one stream twice');\n }\n\n if (stream) {\n return stream.pipe(destination);\n }\n return invalid(\n 'Stream was not defined, something wrong, please check your code or method is not a POST or PUT'\n );\n }\n\n async *[Symbol.asyncIterator](): any {\n const { stream } = this;\n\n if (stream) {\n for await (const chunk of stream) {\n yield chunk;\n }\n }\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport { EventEmitter } from 'events';\nimport { createReadStream, ReadStream, statSync } from 'fs';\nimport uWS, { RecognizedString } from 'uWebSockets.js';\nimport {\n BrotliCompress,\n BrotliOptions,\n createBrotliCompress,\n createDeflate,\n createGzip,\n Deflate,\n Gzip,\n ZlibOptions\n} from 'zlib';\nimport { INanoexpressOptions } from '../../types/nanoexpress';\nimport {\n request as resRequest,\n resAbortHandler,\n resAbortHandlerExpose,\n resConfig,\n resEvents,\n resHeaders,\n response as resResponse\n} from '../constants';\nimport { debug, getMime, httpCodes, invalid, warn } from '../helpers';\nimport HttpRequest from './http-request';\n\n/**\n * HttpResponse class\n * @constructor\n * @class\n * @namespace nanoexpress.HttpResponse\n * @memberof nanoexpress\n * @example new HttpResponse().setResponse(uWS.HttpResponse)\n */\nclass HttpResponse {\n public [resRequest]: HttpRequest | null;\n\n public [resResponse]: uWS.HttpResponse | null;\n\n // Expose functionality properties\n protected [resHeaders]: Record | null;\n\n protected [resAbortHandler]: (() => void)[];\n\n protected [resAbortHandlerExpose]: boolean;\n\n protected [resConfig]: INanoexpressOptions;\n\n protected [resEvents]: EventEmitter | null;\n\n public done: boolean;\n\n public aborted: boolean;\n\n public streaming: boolean;\n\n protected _headersSet = false;\n\n protected registered: boolean;\n\n protected mode: 'immediate' | 'queue' | 'cork' = 'queue';\n\n public serialize?: (\n data: Record | string | number | boolean\n ) => string;\n\n public compiledResponse?: string;\n\n public statusCode: number;\n\n id = 0;\n\n constructor(config: INanoexpressOptions) {\n this[resConfig] = config;\n this.done = false;\n this.aborted = false;\n this._headersSet = false;\n this.registered = false;\n this.streaming = false;\n this[resEvents] = null;\n this[resAbortHandler] = [];\n this[resAbortHandlerExpose] = false;\n\n this[resRequest] = null;\n this[resResponse] = null;\n this[resHeaders] = null;\n\n this.mode = config.responseMode;\n\n this.statusCode = 200;\n }\n\n protected registerEvents(): this {\n const emitter = this[resEvents];\n\n if (emitter && !this.registered) {\n this.exposeAborted();\n\n emitter\n .on('pipe', (stream) => {\n debug('stream.pipe(res)');\n\n this.streaming = true;\n this.stream(stream);\n })\n .on('data', () => {\n debug('stream.pipe(res):data event');\n })\n\n .on('unpipe', () => {\n debug('stream.unpipe(res)');\n\n this.aborted = true;\n })\n .on('error', () => {\n debug('stream.pipe(res) error');\n this.aborted = true;\n this.end();\n });\n this.registered = true;\n }\n\n return this;\n }\n\n /**\n * Registers event to response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.on('end', (eventArgument) => {...})\n */\n on(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.on(eventName, eventArgument);\n\n debug('res.on(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Registers event to response to be fired once\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.once('end', (eventArgument) => {...})\n */\n once(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.once(eventName, eventArgument);\n\n debug('res.once(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Removes event from response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.off('end', (eventArgument) => {...})\n */\n off(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n return this;\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.off(eventName, eventArgument);\n\n debug('res.off(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Removes listener from response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.removeListener('end', (eventArgument) => {...})\n */\n removeListener(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n return this;\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.removeListener(eventName, eventArgument);\n\n debug('res.removeListener(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Emits event to response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns Emit response\n * @memberof nanoexpress.HttpResponse\n * @example res.emit('end', 1)\n */\n emit(eventName: string | symbol, eventArgument?: never): boolean {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n debug('res.emit(%s, argument)', eventName);\n\n emitter = this[resEvents] as EventEmitter;\n return emitter.emit(eventName, eventArgument);\n }\n\n /**\n * Set new HttpResponse for current pool\n * @param res Native uWS.HttpResponse instance\n * @param req HttpResponse instance\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setResponse(res, req)\n */\n setResponse(res: uWS.HttpResponse, req: HttpRequest): this {\n this[resRequest] = req;\n this[resResponse] = res;\n this.done = false;\n this.aborted = res.aborted || false;\n this._headersSet = false;\n this.streaming = false;\n this.registered = false;\n this[resEvents] = null;\n this[resAbortHandlerExpose] = false;\n this[resAbortHandler].length = 0;\n\n this[resHeaders] = null;\n this.statusCode = 200;\n\n // eslint-disable-next-line security-node/detect-insecure-randomness\n this.id = Math.round(Math.random() * 1e5);\n\n return this;\n }\n\n // Native methods re-implementing\n /**\n * Ends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.end('text');\n */\n end(body?: uWS.RecognizedString, closeConnection?: boolean): this {\n const { mode } = this;\n const res = this[resResponse];\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._end(body, closeConnection);\n });\n return this;\n }\n return this._end(body, closeConnection);\n }\n\n /**\n * Initializes Server-Side Events from your stream\n * @param body Writable stream or PassThrough\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sse(sseStream);\n */\n sse(body: ReadStream): this {\n const { mode } = this;\n const res = this[resResponse];\n\n this.exposeAborted();\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._sse(body);\n });\n return this;\n }\n return this._sse(body);\n }\n\n protected _sse(body: ReadStream): this {\n const {\n mode,\n statusCode,\n done,\n streaming,\n _headersSet,\n [resHeaders]: _headers\n } = this;\n const res = this[resResponse];\n\n if (!done && res && !streaming && !done) {\n debug(\n 'res.sse(body) called with status %d and has headers',\n statusCode,\n _headersSet\n );\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n res.writeHeader('Content-Type', 'text/event-stream; charset=utf-8');\n res.writeHeader('Connection', 'keep-alive');\n res.writeHeader('Cache-Control', 'no-cache, no-store, no-transform');\n\n body.on('data', (data) => {\n if (!this.aborted) {\n res.write(data);\n }\n });\n this.streaming = true;\n this[resResponse] = null;\n }\n return this;\n }\n\n /**\n * @private\n * Ends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res._end('text');\n */\n protected _end(body?: uWS.RecognizedString, closeConnection?: boolean): this {\n const {\n mode,\n statusCode,\n done,\n streaming,\n _headersSet,\n [resHeaders]: _headers\n } = this;\n const res = this[resResponse];\n\n if (!done && res && !streaming) {\n debug(\n 'res.end(body) called with status %d and has headers',\n statusCode,\n _headersSet\n );\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n res.end(body, closeConnection);\n this.done = true;\n this[resResponse] = null;\n }\n return this;\n }\n\n /**\n * Sets response status\n * @deprecated Please use `res.statusCode` instead\n * @param code Status code\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.status(204);\n */\n\n status(code: number): this {\n debug('res.status(%d)', code);\n\n this.statusCode = code;\n\n return this;\n }\n\n /**\n * Combine of `res.status` and `res.setHeaders`\n * @param code Status code\n * @param headers Record object containing headers\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.writeHead(200, {'X-Header': 1234});\n */\n writeHead(\n code: number | Record,\n headers?: Record\n ): this {\n if (typeof code === 'object' && !headers) {\n headers = code;\n code = 200;\n }\n\n if (code !== undefined && code !== 200) {\n this.statusCode = code as number;\n }\n if (headers !== undefined) {\n this.setHeaders(headers);\n }\n\n return this;\n }\n\n /**\n * Redirect current locate to new\n * @param code Redirect code\n * @param path Path to be redirected\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.redirect('/foo');\n */\n redirect(code: number | string, path?: string): this {\n if (!path && typeof code === 'string') {\n path = code;\n code = 301;\n }\n if (path && path.indexOf('/') === -1) {\n path = `/${path}`;\n }\n\n this.statusCode = code as number;\n this.setHeader('Location', path as string);\n\n return this.end();\n }\n\n /**\n * Sends status with empty body\n * @param code Status code\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sendStatus(204);\n */\n sendStatus(code: number): this {\n debug('res.sendStatus(%d)', code);\n\n this.statusCode = code;\n return this.end();\n }\n\n /**\n * Sends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.send({status: 'success'});\n */\n send(\n data: Record | string | number | boolean,\n closeConnection?: boolean\n ): this {\n const { done, compiledResponse } = this;\n if (!done && this[resResponse]) {\n if (compiledResponse) {\n return this.end(compiledResponse, closeConnection);\n }\n if (this.serialize) {\n return this.end(this.serialize(data), closeConnection);\n }\n if (typeof data === 'object') {\n this.setHeader('Content-Type', 'application/json; charset=utf-8');\n return this.end(\n JSON.stringify(\n data,\n this[resConfig].json_replacer,\n this[resConfig].json_spaces\n ),\n closeConnection\n );\n }\n\n return this.end(data as string, closeConnection);\n }\n return this;\n }\n\n /**\n * @deprecated Use `res.stream` instead of\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.pipe(readableStream)\n * @alias res.stream(readableStream)\n */\n pipe(stream: ReadStream, size?: number, compressed?: boolean): this {\n debug('res.pipe(stream, %d, %j)', size, compressed);\n\n return this.stream(stream, size, compressed);\n }\n\n /**\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.stream(readableStream)\n */\n stream(stream: ReadStream, size?: number, compressed = false): this {\n const { mode, [resRequest]: req, [resResponse]: res } = this;\n\n if (req && (!size || Number.isNaN(size)) && req.headers['content-length']) {\n size = +req.headers['content-length'];\n } else if ((!size || Number.isNaN(size)) && stream.path) {\n ({ size } = statSync(stream.path));\n }\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._stream(stream, size, compressed);\n });\n return this;\n }\n\n return this._stream(stream, size, compressed);\n }\n\n /**\n * @private\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res._stream(readableStream)\n */\n protected _stream(\n stream: ReadStream,\n size?: number,\n compressed = false\n ): this {\n if (!this.done && this[resResponse] && this[resResponse] !== null) {\n const res = this[resResponse] as uWS.HttpResponse;\n const config = this[resConfig];\n const { mode, statusCode, _headersSet, [resHeaders]: _headers } = this;\n\n this.exposeAborted();\n let calledData = !config.enableExpressCompatibility;\n\n if (compressed) {\n const compressedStream = this.compressStream(stream);\n\n if (compressedStream) {\n stream = compressedStream as unknown as ReadStream;\n }\n }\n\n const onclose = (): void => {\n if (calledData) {\n this.done = true;\n this.streaming = false;\n this.emit('close');\n } else if (stream.path) {\n stream.close();\n warn(\n 'res.stream(stream) data was not called, but mimicked by [nanoexpress], performance may be dropped and even can be stuck at responses, so please use official middlewares to avoid such errors'\n );\n this.stream(createReadStream(stream.path), size, compressed);\n }\n };\n const onfinish = (): void => {\n if (calledData) {\n if (typeof stream.close === 'function') {\n stream.close();\n } else {\n stream.emit('close');\n }\n }\n this.emit('finish');\n };\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n\n if (compressed || !size || Number.isNaN(size)) {\n debug('res.stream:compressed(stream, %d, %j)', size, compressed);\n stream\n .on('data', (buffer: Buffer): void => {\n calledData = true;\n\n if (this.aborted || this.done) {\n return;\n }\n res.write(\n buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n )\n );\n })\n .on('close', onclose)\n .on('finish', onfinish);\n } else {\n debug('res.stream:uncompressed(stream, %d, %j)', size, compressed);\n stream.on('data', (buffer: Buffer): void => {\n calledData = true;\n if (this.done || this.aborted) {\n return;\n }\n buffer = buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n ) as Buffer;\n\n const lastOffset = res.getWriteOffset();\n const [ok, done] = res.tryEnd(buffer, size as number);\n\n if (done) {\n this.done = true;\n } else if (!ok) {\n stream.pause();\n\n res.onWritable((offset: number): boolean => {\n if (this.done || this.aborted) {\n return true;\n }\n const [writeOk, writeDone] = res.tryEnd(\n buffer.slice(offset - lastOffset),\n size as number\n );\n if (writeDone) {\n this.done = true;\n } else if (writeOk) {\n stream.resume();\n }\n return writeOk;\n });\n }\n });\n }\n stream\n .on('error', (error) => {\n stream.destroy(error);\n this.aborted = true;\n this.emit('error', error as never);\n })\n .on('close', onclose)\n .on('finish', onfinish);\n }\n return this;\n }\n\n /**\n * Compress stream into compressed into\n * @param stream Readable stream\n * @param options One of compressions (BrotliCompress, ZlibOptions)\n * @param priority Compression picking priority\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.compressStream(writableStream)\n */\n compressStream(\n stream: ReadStream,\n options?: BrotliOptions | ZlibOptions,\n priority = ['gzip', 'br', 'deflate']\n ): BrotliCompress | Gzip | Deflate | null {\n const req = this[resRequest];\n\n if (!req) {\n invalid(\n 'This method requires active `HttpRequest`. Please load required middleware'\n );\n return null;\n }\n if (!req.headers) {\n invalid(\n 'This method requires active `HttpRequest.headers`. Please load required middleware'\n );\n return null;\n }\n const contentEncoding = req.headers['content-encoding'];\n const encoding = priority.find(\n (currentEncoding) =>\n contentEncoding && contentEncoding.indexOf(currentEncoding) !== -1\n );\n\n let compression = null;\n\n if (encoding === 'br') {\n compression = createBrotliCompress(options);\n } else if (encoding === 'gzip') {\n compression = createGzip(options);\n } else if (encoding === 'deflare') {\n compression = createDeflate(options);\n }\n\n if (compression && encoding) {\n stream.pipe(compression);\n this.setHeader('content-encoding', encoding);\n }\n\n return compression;\n }\n\n /**\n * Sends file to end user with efficient stream\n * @param path File absolute path\n * @param lastModified Sets `Last-Modified` header to prevent infinite re-loading\n * @param compressed Compresses file and saves bandwidth of user\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sendFile('foo.mp4')\n */\n sendFile(path: string, lastModified = true, compressed = false): this {\n const req = this[resRequest];\n const headers = req?.headers;\n\n const stat = statSync(path);\n let { size } = stat;\n\n // handling last modified\n if (lastModified) {\n const { mtime } = stat;\n\n mtime.setMilliseconds(0);\n const mtimeutc = mtime.toUTCString();\n\n // Return 304 if last-modified\n if (headers && headers['if-modified-since']) {\n if (new Date(headers['if-modified-since']) >= mtime) {\n this.statusCode = 304;\n return this.end();\n }\n }\n this.setHeader('last-modified', mtimeutc);\n }\n this.setHeader('content-type', getMime(path) as string);\n\n let start: number | undefined = 0;\n let end: number | undefined = 0;\n\n if (headers && headers.range) {\n [start, end] = headers.range\n .substr(6)\n .split('-')\n .map((byte: string) => (byte ? parseInt(byte, 10) : undefined));\n\n // Chrome patch for work\n if (end === undefined) {\n end = size - 1;\n }\n\n if (start !== undefined) {\n this.statusCode = 206;\n this.setHeader('accept-ranges', 'bytes');\n this.setHeader('content-range', `bytes ${start}-${end}/${size}`);\n size = end - start + 1;\n }\n }\n\n // for size = 0\n if (end < 0) {\n end = 0;\n }\n\n const createStreamInstance = end\n ? createReadStream(path, { start, end })\n : createReadStream(path);\n\n return this.stream(createStreamInstance, size, compressed);\n }\n\n /**\n * Enters or continues chunked encoding mode. Writes part of the response. End with zero length write.\n * @param chunk Content response chunk\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.write(Buffer.from('Hi'));\n */\n write(chunk: uWS.RecognizedString | ArrayBuffer): this {\n const res = this[resResponse];\n if (!this.done && res && !this.streaming) {\n debug('res.write(%s)', chunk);\n res.write(chunk);\n return this;\n }\n return this;\n }\n\n /**\n *\n * Exposed methods\n */\n exposeAborted(): this {\n const res = this[resResponse];\n if (!this[resAbortHandlerExpose] && res) {\n debug('res.onAborted is exposed');\n res.onAborted(() => {\n this.aborted = true;\n warn('res.onAborted is called');\n\n this[resAbortHandler].forEach((callback) => callback());\n });\n this[resAbortHandlerExpose] = true;\n }\n\n return this;\n }\n\n onAborted(handler: () => void): this {\n this[resAbortHandler].push(handler);\n\n return this;\n }\n\n /**\n * Get response header value by key\n * @param key Header key\n * @returns Returns value of header got by key\n * @example res.getHeader('cookie');\n * @memberof nanoexpress.HttpResponse\n */\n getHeader(key: string): RecognizedString | null {\n const headers = this[resHeaders];\n if (headers && headers[key]) {\n debug(\"res.getHeader('%s')\", key);\n return headers[key];\n }\n return null;\n }\n\n /**\n * Checks response header value by key\n * @param key Header key\n * @returns Returns `true` if header exists whereas `false` in other cases\n * @example res.hasHeader('cookie');\n * @memberof nanoexpress.HttpResponse\n */\n hasHeader(key: string): boolean {\n debug(\"res.hasHeader('%s')\", key);\n return this.getHeader(key) !== null;\n }\n\n /**\n * Set response header value by key\n * @param key Header key\n * @param value Header value\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setHeader('content-type', 'application/json');\n */\n setHeader(key: string, value: uWS.RecognizedString): this {\n const { mode, [resResponse]: res } = this;\n\n debug(\"res.setHeader('%s', '%s')\", key, value);\n\n if (res && mode === 'immediate') {\n res.writeHeader(key, value);\n return this;\n }\n\n if (!this[resHeaders]) {\n this[resHeaders] = {};\n }\n\n this._headersSet = true;\n const headers = this[resHeaders] as Record;\n headers[key] = value;\n\n return this;\n }\n\n /**\n * Set response header value by key\n * @param key Header key\n * @param value Header value\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.set('content-type', 'application/json');\n * @alias res.setHeader('content-type', 'application/json');\n */\n set(key: string, value: uWS.RecognizedString): this {\n return this.setHeader(key, value);\n }\n\n /**\n * Set response headers by Record dict\n * @param headers Header key/value record dict\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setHeaders({'content-type':'application/json'});\n */\n setHeaders(headers: Record): this {\n const { mode, [resResponse]: res } = this;\n\n if (res && mode === 'immediate') {\n warn('res.setHeaders(headers) cannot be set due of immediate mode');\n return this;\n }\n\n debug('res.setHeaders(headers)');\n this._headersSet = true;\n\n if (this[resHeaders]) {\n Object.assign(this[resHeaders], headers);\n } else {\n this[resHeaders] = headers;\n }\n\n return this;\n }\n\n /**\n * Remove response header value by key\n * @param key Header key\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.removeHeader('cookie');\n */\n removeHeader(key: string): this {\n const { mode, [resResponse]: res } = this;\n\n if (res && mode === 'immediate') {\n warn(\"res.removeHeader('%s') cannot be set due of immediate mode\", key);\n return this;\n }\n\n debug(\"res.removeHeader('%s')\", key);\n\n const headers = this[resHeaders];\n if (headers && headers[key]) {\n headers[key] = null;\n }\n\n return this;\n }\n\n /**\n * Set response content type\n * @param contentType Content type\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.type('application/json');\n */\n type(contentType: string): this {\n debug('res.type(%s)', contentType);\n return this.setHeader('content-type', contentType);\n }\n}\n\nexport default HttpResponse;\n","import { MiddlewareHandler } from '../../types/find-route';\nimport { HttpMethod } from '../../types/nanoexpress';\nimport { warn } from '../helpers/loggy';\nimport { HttpRequest, HttpResponse } from '../polyfills';\n\nexport type LegacyHttpHandler = (\n req: HttpRequest,\n res: HttpResponse,\n next: (err?: Error, done?: boolean) => void\n) =>\n | HttpResponse\n | string\n | Record\n | Promise | string>;\n\nexport default (\n middleware: LegacyHttpHandler\n): MiddlewareHandler => {\n warn(\n 'legacy middlewares is deprecated and in future we will remove express.js middlewares support'\n );\n const httpHandler = function legacyMiddlewarePolyfillHandler(\n req: HttpRequest,\n res: HttpResponse\n ): Promise {\n return new Promise((resolve, reject) => {\n middleware(req, res, (err) => {\n if (err) {\n reject(err);\n } else {\n // @ts-ignore\n resolve();\n }\n });\n });\n };\n const displayName = middleware.name;\n httpHandler.raw = middleware;\n httpHandler.displayName = displayName;\n return httpHandler;\n};\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport analyze from '@nanoexpress/route-syntax-parser';\nimport fastDecodeURI from 'fast-decode-uri-component';\nimport { pathToRegexp } from 'path-to-regexp';\nimport {\n HttpHandler,\n PreparedRoute,\n UnpreparedRoute\n} from '../types/find-route';\nimport { HttpMethod, INanoexpressOptions } from '../types/nanoexpress';\nimport { debug, invalid, iterateBlocks, slashify, _gc } from './helpers';\nimport { HttpRequest, HttpResponse } from './polyfills';\nimport legacyUtil, { LegacyHttpHandler } from './utils/legacy';\n\nexport default class RouteEngine {\n protected options: INanoexpressOptions;\n\n protected routes: PreparedRoute[];\n\n public async: boolean;\n\n public await: boolean;\n\n public params = false;\n\n public headers = false;\n\n public cookies = false;\n\n public query = false;\n\n public body = false;\n\n public property = false;\n\n constructor(options: INanoexpressOptions) {\n this.options = options;\n this.routes = [];\n this.async = false;\n this.await = false;\n }\n\n parse(incomingRoute: UnpreparedRoute): PreparedRoute {\n const { options: config } = this;\n\n const route: PreparedRoute = {\n ...incomingRoute,\n all: false,\n regex: false,\n fetch_params: false,\n async: false,\n await: false,\n legacy: false,\n analyzeBlocks: []\n };\n\n if (typeof route.path === 'string') {\n if (config.ignoreTrailingSlash) {\n route.path = slashify(route.path);\n route.originalUrl = slashify(route.originalUrl);\n }\n\n route.path = fastDecodeURI(route.path);\n\n if (route.baseUrl === '*') {\n route.all = true;\n } else if (route.path.indexOf(':') !== -1) {\n route.fetch_params = true;\n route.param_keys = [];\n route.path = pathToRegexp(route.path, route.param_keys);\n route.regex = true;\n } else if (route.path.indexOf('/*') !== -1) {\n route.baseUrl = route.path.substr(0, route.path.indexOf('/*') + 1);\n route.path = route.path.substr(route.baseUrl.length);\n route.all = true;\n } else if (\n route.baseUrl.length > 1 &&\n route.baseUrl.indexOf('/*') !== -1\n ) {\n route.baseUrl = route.baseUrl.substring(0, route.baseUrl.indexOf('/*'));\n route.originalUrl = route.originalUrl.substring(\n 0,\n route.originalUrl.indexOf('/*') + 1\n );\n route.all = true;\n }\n } else if (route.path instanceof RegExp) {\n route.regex = true;\n }\n route.async = route.handler.constructor.name === 'AsyncFunction';\n route.await = route.handler.toString().includes('await');\n route.legacy = route.handler.toString().includes('next(');\n route.analyzeBlocks = analyze>(route.handler);\n const usedBlocks = iterateBlocks(route.analyzeBlocks);\n\n if (route.legacy) {\n if (config.enableExpressCompatibility) {\n route.handler = legacyUtil(\n route.handler as LegacyHttpHandler\n );\n route.async = true;\n route.await = true;\n } else {\n invalid(\n 'Express.js compatibility mode is disabled, please enable before using *express.js* middlewares, but take care - performance will not be same as disabled'\n );\n }\n }\n\n if (!this.params && route.fetch_params) {\n this.params = true;\n }\n if (!this.async && route.async) {\n this.async = true;\n }\n if (!this.await && route.await) {\n this.await = true;\n }\n\n usedBlocks.forEach((blockName): void => {\n if (blockName === 'property') {\n //\n } else {\n if (!this[blockName]) {\n this[blockName] = true;\n }\n }\n });\n\n debug(\n 'route registered [%s] baseurl(%s) path(%s) - originalurl(%s)',\n route.method,\n route.baseUrl,\n route.path,\n route.originalUrl\n );\n\n return route;\n }\n\n on(\n method: HttpMethod,\n path: string | RegExp | Array,\n handler: HttpHandler | HttpHandler[],\n baseUrl: string,\n originalUrl: string\n ): this {\n if (Array.isArray(method)) {\n method.forEach((methodId) => {\n this.on(methodId, path, handler, baseUrl, originalUrl);\n });\n return this;\n }\n if (Array.isArray(path)) {\n path.forEach((pathId) => {\n this.on(method, pathId, handler, baseUrl, originalUrl);\n });\n return this;\n }\n if (Array.isArray(handler)) {\n handler.forEach((handlerId) => {\n this.on(method, path, handlerId, baseUrl, originalUrl);\n });\n return this;\n }\n\n this.routes.push(\n this.parse({ method, path, baseUrl, originalUrl, handler })\n );\n\n _gc();\n\n return this;\n }\n\n off(\n method: HttpMethod,\n path: string,\n handler: HttpHandler,\n baseUrl: string,\n originalUrl: string\n ): this {\n const parsed = this.parse({ method, path, baseUrl, originalUrl, handler });\n\n if (!handler) {\n this.routes = this.routes.filter(\n (route) =>\n !(route.method === parsed.method && route.path === parsed.path)\n );\n } else {\n this.routes = this.routes.filter(\n (route) =>\n !(\n route.method === parsed.method &&\n route.path === parsed.path &&\n route.handler === parsed.handler\n )\n );\n }\n\n _gc();\n\n return this;\n }\n\n async lookup(\n req: HttpRequest,\n res: HttpResponse\n ): Promise {\n const { routes, options } = this;\n let response;\n\n for (let i = 0, len = routes.length; i < len; i += 1) {\n const route = routes[i];\n\n // Early return for performance reason\n if (res.done) {\n debug('routes lookup early exit');\n return res;\n }\n\n if (route.method === 'ANY' || route.method === req.method) {\n let found = false;\n\n if (route.all) {\n found =\n route.path && route.path !== '*'\n ? req.path.includes(route.path as string)\n : route.originalUrl === '*' ||\n req.originalUrl.substr(route.originalUrl.length).length > 1;\n } else if (route.regex && (route.path as RegExp).test(req.path)) {\n found = true;\n } else if (route.path === req.path && route.baseUrl === req.baseUrl) {\n found = true;\n } else if (route.originalUrl === req.originalUrl) {\n found = true;\n }\n\n if (found) {\n if (route.fetch_params && route.param_keys) {\n const exec = (route.path as RegExp).exec(req.path);\n\n req.params = {} as Record;\n for (\n let p = 0, lenp = route.param_keys.length;\n exec && p < lenp;\n p += 1\n ) {\n const key = route.param_keys[p].name;\n const value = exec[p + 1];\n\n req.params[key] = value;\n }\n }\n\n // Prepare url after found\n if (\n options.enableExpressCompatibility &&\n route.baseUrl !== '' &&\n route.baseUrl !== '*' &&\n req.path.indexOf(route.baseUrl) === 0\n ) {\n req.baseUrl = route.baseUrl;\n req.path = req.originalUrl.substr(req.baseUrl.length);\n req.url = req.originalUrl.substr(req.baseUrl.length);\n }\n\n if (route.async || route.legacy) {\n response = await route.handler(req, res);\n } else {\n response = route.handler(req, res);\n }\n\n if (res.streaming || res.done || response === res) {\n debug('routes lookup was done with HttpResponse');\n return res;\n }\n if (!res.streaming && !res.done && response) {\n debug('routes lookup was done with async json result');\n return res.send(response as string | Record);\n }\n\n debug('routes lookup was done without any match');\n } else {\n debug('routes lookup was not found without any match');\n }\n }\n }\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function */\nimport { RecognizedString, WebSocketBehavior } from 'uWebSockets.js';\nimport {\n MiddlewareHandler,\n RequestSchema,\n RequestSchemaWithBody,\n RouteHandler,\n UnpreparedRoute\n} from '../types/find-route';\nimport { HttpMethod, IWebsocketRoute } from '../types/nanoexpress';\nimport App from './app';\nimport { appInstance, routerInstances, wsInstances } from './constants';\nimport { invalid, _gc } from './helpers';\nimport RouteEngine from './route-engine';\n\nexport default class Router {\n protected [appInstance]!: App | Router;\n\n protected _engine?: RouteEngine;\n\n [routerInstances]: UnpreparedRoute[];\n\n [wsInstances]: IWebsocketRoute[];\n\n _basePath: string;\n\n constructor() {\n this[routerInstances] = [];\n this[wsInstances] = [];\n this._basePath = '';\n\n return this;\n }\n\n on(\n method: HttpMethod,\n path: string | RegExp,\n handlers:\n | MiddlewareHandler\n | MiddlewareHandler[]\n | RouteHandler\n | RouteHandler[],\n baseUrl: string,\n originalUrl: string\n ): this {\n const { _engine } = this;\n\n if (_engine) {\n _engine.on(method, path, handlers, baseUrl, originalUrl);\n } else if (Array.isArray(handlers)) {\n handlers.forEach((handler) => {\n this[routerInstances].push({\n method,\n path,\n baseUrl,\n handler,\n originalUrl\n });\n });\n } else {\n this[routerInstances].push({\n method,\n path,\n baseUrl,\n handler: handlers,\n originalUrl\n });\n }\n\n return this;\n }\n\n use(\n path: string | MiddlewareHandler | Router,\n ...middlewares: Array\n ): this {\n if (typeof path === 'function' || path instanceof Router) {\n middlewares.unshift(path);\n path = '*';\n }\n if (Array.isArray(path)) {\n if (\n path.every(\n (routePath) =>\n typeof routePath === 'function' || path instanceof Router\n )\n ) {\n return this.use('*', ...path);\n }\n }\n middlewares.forEach((handler: Router | MiddlewareHandler) => {\n if (handler instanceof Router) {\n const _routers = handler[routerInstances];\n const _ws = handler[wsInstances];\n\n handler[appInstance] = this;\n handler._basePath = path as string;\n\n _routers.forEach(\n ({ method, path: routePath, handler: routeHandler, baseUrl }) => {\n this.on(\n method,\n routePath as string,\n routeHandler,\n path as string,\n (path as string) + baseUrl + (routePath as string)\n );\n }\n );\n this[wsInstances].push(..._ws);\n\n _routers.length = 0;\n _ws.length = 0;\n } else if (Array.isArray(handler)) {\n this.use(path, ...handler);\n } else {\n this.on(\n 'ANY',\n '*',\n handler,\n path as string,\n this._basePath + (path as string)\n );\n }\n });\n\n _gc();\n\n return this;\n }\n\n get(\n path: string | RegExp,\n ...handlers: RouteHandler<'GET', T>[]\n ): this {\n return this.on(\n 'GET',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n post(\n path: string | RegExp,\n ...handlers: RouteHandler<'POST', T>[]\n ): this {\n return this.on(\n 'POST',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n put(\n path: string | RegExp,\n ...handlers: RouteHandler<'PUT', T>[]\n ): this {\n return this.on(\n 'PUT',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n options(\n path: string | RegExp,\n ...handlers: RouteHandler<'OPTIONS', T>[]\n ): this {\n return this.on(\n 'OPTIONS',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n del(\n path: string | RegExp,\n ...handlers: RouteHandler<'DEL', T>[]\n ): this {\n return this.on(\n 'DEL',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n /**\n *\n * @param path\n * @param handlers\n * @alias Router.del\n * @returns Router\n */\n delete(\n path: string | RegExp,\n ...handlers: RouteHandler<'DEL', T>[]\n ): this {\n return this.del(path, ...handlers);\n }\n\n /**\n * @param path The accessible path to be called route handler\n * @param handlers List of middlewares and/or routes\n * @returns Router\n */\n all(\n path: string | RegExp,\n ...handlers: RouteHandler<'ANY', T>[]\n ): this {\n return this.on(\n 'ANY',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n ws(path: RecognizedString, options?: WebSocketBehavior): this {\n const normalisedPath =\n this._basePath === '*'\n ? '*'\n : path === '/'\n ? this._basePath\n : `${this._basePath}${path}`;\n\n this[wsInstances].push({\n path: normalisedPath,\n options\n } as IWebsocketRoute);\n\n return this;\n }\n\n /**\n * @deprecated Use `app.publish()` for safety, this method will not work anymore\n * @param topic\n * @param message\n * @param isBinary\n * @param compress\n * @returns Status of publish\n */\n publish(\n topic: RecognizedString,\n message: RecognizedString,\n isBinary?: boolean,\n compress?: boolean\n ): boolean {\n const app = this[appInstance];\n if (app) {\n return app.publish(topic, message, isBinary, compress);\n }\n invalid(\n 'nanoexpress [Router]: Please attach to `Application` before using publish'\n );\n return false;\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport { resAbortHandler } from './constants';\nimport uWS, {\n HttpRequest as uWS_HttpRequest,\n HttpResponse as uWS_HttpResponse,\n RecognizedString,\n TemplatedApp,\n us_listen_socket,\n WebSocketBehavior\n} from 'uWebSockets.js';\nimport { HttpHandler, RequestSchema } from '../types/find-route';\nimport {\n HttpMethod,\n INanoexpressOptions,\n IWebsocketRoute\n} from '../types/nanoexpress';\nimport _gc from './helpers/gc';\nimport { debug, warn } from './helpers/loggy';\nimport { unregister } from './hooks/manager';\nimport { HttpRequest, HttpResponse } from './polyfills';\nimport RouteEngine from './route-engine';\nimport RouterTemplate from './router';\nimport noop from './helpers/noop';\n\nclass App extends RouterTemplate {\n get https(): boolean {\n return this._options.https !== undefined;\n }\n\n get _console(): Console {\n return this._options.console || console;\n }\n\n get raw(): TemplatedApp {\n return this._app;\n }\n\n protected _app: TemplatedApp;\n\n protected _options: INanoexpressOptions;\n\n protected _engine: RouteEngine;\n\n protected _ws: IWebsocketRoute[];\n\n protected _requestPools: HttpRequest[];\n\n protected _responsePools: HttpResponse[];\n\n protected _poolsSize: number;\n\n protected time: [number, number];\n\n protected _separateServed: boolean;\n\n protected _ran: boolean;\n\n protected _instance: Record;\n\n protected defaultRoute: HttpHandler | null;\n\n protected errorRoute:\n | ((err: Error, req: HttpRequest, res: HttpResponse) => void)\n | null;\n\n constructor(options: INanoexpressOptions, app: TemplatedApp) {\n super();\n this._options = options;\n this._app = app;\n this._engine = new RouteEngine(options);\n\n this.defaultRoute = (_, res): HttpResponse => {\n return res.status(404).send({ status: 'error', code: 404 });\n };\n this.errorRoute = (err, _, res): HttpResponse => {\n return res.status(500).send({\n status: 'error',\n message: err.message\n });\n };\n\n this._ws = [];\n this._requestPools = [];\n this._responsePools = [];\n this._poolsSize = options.poolSize || 10;\n\n this.time = process.hrtime();\n this._separateServed = false;\n this._ran = false;\n\n this._instance = {};\n return this;\n }\n\n setNotFoundHandler(handler: HttpHandler): this {\n this.defaultRoute = handler;\n\n return this;\n }\n\n setErrorHandler(\n handler: (err: Error, req: HttpRequest, res: HttpResponse) => void\n ): this {\n this.errorRoute = handler;\n\n return this;\n }\n\n handleError(error: Error, req: HttpRequest, res: HttpResponse): this {\n if (res && !res.aborted && !res.done && !res.streaming && this.errorRoute) {\n this.errorRoute(error, req, res);\n }\n\n return this;\n }\n\n ws(path: RecognizedString, options: WebSocketBehavior): this {\n this._app.ws(path, options);\n\n return this;\n }\n\n publish(\n topic: RecognizedString,\n message: RecognizedString,\n isBinary?: boolean,\n compress?: boolean\n ): boolean {\n return this._app.publish(topic, message, isBinary, compress);\n }\n\n run(): this {\n const {\n _app: app,\n _options: options,\n _ws,\n _requestPools,\n _responsePools,\n _poolsSize,\n _engine,\n _ran\n } = this;\n\n if (!_ran) {\n const handler = async (\n rawRes: uWS_HttpResponse,\n rawReq: uWS_HttpRequest\n ): Promise => {\n let req: HttpRequest;\n let res: HttpResponse;\n let response;\n\n if (_requestPools.length > 0) {\n req = _requestPools.shift() as HttpRequest;\n req.setRequest(rawReq, rawRes);\n } else {\n req = new HttpRequest(options);\n req.setRequest(rawReq, rawRes);\n }\n if (_responsePools.length > 0) {\n res = _responsePools.shift() as HttpResponse;\n res.setResponse(rawRes, req);\n } else {\n res = new HttpResponse(options);\n res.setResponse(rawRes, req);\n }\n\n if (\n options.ignoreTrailingSlash &&\n req.path.charAt(req.path.length - 1) !== '/' &&\n (req.path.lastIndexOf('.') === -1 ||\n req.path.lastIndexOf('.') < req.path.length - 4)\n ) {\n if (options.enableExpressCompatibility) {\n debug(\n 'res.redirect called instead of fast quick-fix on route ending without \"/\" for express.js middlewares compatibility'\n );\n res.redirect(`http://${req.headers.host}${req.originalUrl}/`);\n return rawRes;\n }\n }\n\n if (req.method === 'POST' || req.method === 'PUT') {\n res.exposeAborted();\n\n rawRes.onData((arrayChunk: ArrayBuffer, isLast: boolean) => {\n req.stream.push(Buffer.from(arrayChunk.slice(0)));\n\n if (isLast) {\n req.stream.push(null);\n }\n });\n }\n\n if (res.aborted || res.done || req.method === 'OPTIONS') {\n debug('early returned ranning %o', {\n aborted: res.aborted,\n done: res.done,\n method: req.method\n });\n return;\n }\n\n if (_engine.async && _engine.await) {\n res.exposeAborted();\n response = await _engine.lookup(req, res).catch((err) => {\n this.handleError(err, req, res as HttpResponse);\n });\n if (res[resAbortHandler]) {\n res.onAborted(unregister);\n } else {\n unregister();\n }\n if (_requestPools.length < _poolsSize) {\n _requestPools.push(req);\n }\n if (_responsePools.length < _poolsSize) {\n _responsePools.push(res);\n }\n return rawRes;\n }\n\n await _engine.lookup(req, res).catch((err) => {\n this.handleError(err, req, res as HttpResponse);\n });\n if (res[resAbortHandler]) {\n res.onAborted(unregister);\n } else {\n unregister();\n }\n if (_requestPools.length < _poolsSize) {\n _requestPools.push(req);\n }\n if (_responsePools.length < _poolsSize) {\n _responsePools.push(res);\n }\n\n if (\n res &&\n !res.done &&\n !res.streaming &&\n response === undefined &&\n this.defaultRoute !== null\n ) {\n debug('routes lookup was not found any route, fallback to not-found');\n const notFound = await this.defaultRoute(req, res);\n\n if (notFound !== res) {\n res.send(notFound as string | Record);\n }\n }\n return rawRes;\n };\n\n app.any('/*', handler);\n\n _ws.forEach(({ path, options: wsOptions }) => {\n app.ws(path, wsOptions);\n });\n // Cleanup GC\n _ws.length = 0;\n _gc();\n\n this._ran = true;\n }\n\n return this;\n }\n\n listenSocket(\n port: number,\n host = 'localhost',\n is_ssl = false,\n handler: () => void = noop\n ): Promise {\n const { _options: options } = this;\n\n if (\n (port === 80 || port === 443) &&\n this.https &&\n options.https?.separateServer &&\n !this._separateServed\n ) {\n const httpsPort =\n typeof options.https.separateServer === 'number'\n ? options.https.separateServer\n : 443;\n this._separateServed = true;\n return Promise.all([\n this.listenSocket(port, host, false, handler),\n this.listenSocket(httpsPort, host, true, handler)\n ]);\n }\n\n return this._appApplyListen(host, port, is_ssl, handler);\n }\n\n listen(\n ...args: Array void)>\n ): Promise {\n let port = 8000;\n let host = 'localhost';\n let ssl = false;\n let handler: () => void = () => {};\n\n args.forEach((listenArg): void => {\n if (typeof +listenArg === 'number' && !Number.isNaN(+listenArg)) {\n port = +listenArg;\n } else if (typeof listenArg === 'function') {\n handler = listenArg;\n } else if (\n typeof listenArg === 'string' &&\n (listenArg === 'localhost' || listenArg.includes('.'))\n ) {\n host = listenArg;\n } else if (listenArg === true) {\n ssl = true;\n }\n });\n this.run();\n return this.listenSocket(port, host, ssl, handler);\n }\n\n close(port: number, host = 'localhost'): boolean {\n const id = `${host}:${port}`;\n const token = this._instance[id];\n\n this._separateServed = false;\n this.time[0] = 0;\n this.time[1] = 0;\n\n return this._close(token, id);\n }\n\n protected _appApplyListen(\n host: string,\n port: number,\n is_ssl = false,\n handler: () => void = noop\n ): Promise {\n const { _console, _options: options, _app: app } = this;\n const sslString = is_ssl ? 'HTTPS ' : is_ssl === false ? 'HTTP ' : '';\n\n return new Promise((resolve, reject): void => {\n if (port === undefined) {\n const _errorContext = 'error' in _console ? _console : console;\n\n _errorContext.error('[Server]: PORT is required');\n return undefined;\n }\n const id = `${host}:${port}`;\n\n const onListenHandler = (token: us_listen_socket): void => {\n if (token) {\n const _debugContext = 'debug' in _console ? _console : console;\n const end = process.hrtime(this.time);\n\n this._instance[id] = token;\n _debugContext.debug(\n `[${sslString}Server]: started successfully at [${id}] in [${(\n (Number(end[0]) * 1000 + Number(end[1])) /\n 1000000\n ).toFixed(2)}ms] on PID[${process.pid}]`\n );\n _gc();\n handler();\n return resolve(token);\n }\n const _errorContext = 'error' in _console ? _console : console;\n\n const err = new Error(\n this.https &&\n (!options.https ||\n !options.https.cert_file_name ||\n !options.https.key_file_name)\n ? `[${sslString}Server]: SSL certificate was not defined or loaded`\n : `[${sslString}Server]: failed to host at [${id}]`\n );\n _errorContext.error(err.message);\n _gc();\n return reject(err);\n };\n\n if (host && host !== 'localhost') {\n app.listen(host, port, onListenHandler);\n } else {\n app.listen(port, onListenHandler);\n }\n });\n }\n\n _close(token: us_listen_socket | null, id: string): boolean {\n const { _console } = this;\n\n if (token) {\n const _debugContext = 'debug' in _console ? _console : console;\n\n uWS.us_listen_socket_close(token);\n this._instance[id] = null;\n _debugContext.debug('[Server]: stopped successfully');\n _gc();\n\n return true;\n }\n\n const _errorContext = 'error' in _console ? _console : console;\n\n _errorContext.error('[Server]: Error, failed while stopping');\n _gc();\n\n return false;\n }\n\n /**\n * @deprecated There no way to disable these methods as they are not available by default\n */\n disable(tag: string): this {\n warn(\n `[Server]: The tag [${tag}] cannot be disabled as not set, not supported and not available`\n );\n return this;\n }\n\n /**\n * @deprecated Please use configuration at initialization such as `nanoexpress({json_spaces:2})` insteadof `app.set('json_spaces', 2)`\n */\n set(key: keyof INanoexpressOptions, value: string | number): this {\n // @ts-ignore\n this._options[key] = value;\n return this;\n }\n}\n\nexport default App;\n","import EventsEmitter from 'events';\nimport {\n HttpRequest,\n HttpResponse,\n us_socket_context_t,\n WebSocketBehavior\n} from 'uWebSockets.js';\nexport default function exposeWebsocket(\n handler: (req: HttpRequest, res: HttpResponse) => void | Promise,\n options = {}\n): WebSocketBehavior {\n if (typeof (options as WebSocketBehavior).open === 'function') {\n return options;\n }\n\n return {\n ...options,\n open(ws): void {\n ws.emit('connection', ws);\n },\n async upgrade(\n res: HttpResponse,\n req: HttpRequest,\n context: us_socket_context_t\n ): Promise {\n const secWsKey = req.getHeader('sec-websocket-key');\n const secWsProtocol = req.getHeader('sec-websocket-protocol');\n const secWsExtensions = req.getHeader('sec-websocket-extensions');\n\n const events = new EventsEmitter();\n\n res.on = events.on.bind(events);\n res.once = events.once.bind(events);\n res.off = events.off.bind(events);\n res.emit = events.emit.bind(events);\n\n let aborted = false;\n res.onAborted(() => {\n aborted = true;\n events.emit('error', { aborted });\n });\n\n res.emit('upgrade', req, res);\n\n try {\n await handler(req, res);\n } catch (error) {\n aborted = true;\n events.emit('error', error);\n }\n if (!aborted) {\n events.emit('willUpgrade', req);\n res.upgrade(\n { req, ...res },\n secWsKey,\n secWsProtocol,\n secWsExtensions,\n context\n );\n events.emit('upgraded', req);\n }\n },\n message: (ws, message, isBinary): void => {\n ws.emit('message', message, isBinary);\n },\n drain: (ws): void => {\n ws.emit('drain', ws.getBufferedAmount());\n },\n close: (ws, code, message): void => {\n ws.emit('close', code, message);\n }\n };\n}\n","import { Dependencies, register } from './manager';\n\nexport const useCallback = register(false, true);\n\nexport const useEffect = register(true);\nexport const useMemo = register(true, true);\nexport const useState = (initialValue: T): [T, (value: T) => void] => {\n let value = useMemo(() => initialValue, []) as T;\n\n const setValue = (newValue: T): void => {\n value = newValue;\n };\n\n return [value, setValue];\n};\nexport const useRef = (ref: T | null, dependencies: Dependencies): T =>\n useMemo(() => ({ current: ref ?? null }), dependencies);\n","import uWS from 'uWebSockets.js';\nimport { INanoexpressOptions } from '../types/nanoexpress';\nimport App from './app';\nimport { exposeWebsocket } from './exposes/index';\nimport { useCallback, useEffect, useMemo, useRef, useState } from './hooks';\nimport Router from './router';\n\n/**\n * Instance initializer for nanoexpress\n * @param options Instance options\n * @param options.enableExpressCompatibility Sets polyfill status\n * @param options.ignoreTrailingSlash Normalizes trailing slash on routes\n * @returns\n */\nconst nanoexpress = (\n options: INanoexpressOptions = {\n ignoreTrailingSlash: true,\n enableExpressCompatibility: false,\n responseMode: 'cork'\n }\n): App => {\n let app;\n\n if (options.https) {\n app = uWS.SSLApp(options.https);\n } else if (options.http) {\n app = uWS.App(options.http);\n } else {\n app = uWS.App();\n }\n\n return new App(options, app);\n};\n\nnanoexpress.Router = Router;\nnanoexpress.App = App;\n\n// Add exposes\nnanoexpress.exposeWebsocket = exposeWebsocket;\n\nexport {\n nanoexpress as default,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n};\n"],"names":["resRequest","resResponse","RouterTemplate"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"nanoexpress.js","sources":["../src/constants.ts","../src/helpers/gc.ts","../src/helpers/loggy.ts","../src/hooks/manager.ts","../src/helpers/http-codes.ts","../src/helpers/http-methods.ts","../src/helpers/invalid.ts","../src/helpers/iterate-blocks.ts","../src/helpers/mime.ts","../src/helpers/slashify.ts","../src/helpers/noop.ts","../src/polyfills/http-request.ts","../src/polyfills/http-response.ts","../src/utils/legacy.ts","../src/route-engine.ts","../src/router.ts","../src/app.ts","../src/exposes/websocket.ts","../src/hooks/index.ts","../src/nanoexpress.ts"],"sourcesContent":["// Http(Request/Response)\nexport const request: unique symbol = Symbol('NanoexpressHttpRequestInstance');\nexport const response: unique symbol = Symbol(\n 'NanoexpressHttpResponseInstance'\n);\n\n// HttpRequest symbols\n\nexport const reqConfig: unique symbol = Symbol('NanoexpressHttpRequestConfig');\nexport const reqEvents: unique symbol = Symbol('NanoexpressHttpRequestEvents');\nexport const reqRequest: unique symbol = Symbol(\n 'NanoexpressHttpRequestRawInstance'\n);\nexport const reqRawResponse: unique symbol = Symbol(\n 'NanoexpressHttpResponseRawInstance'\n);\n\n// HttpResponse symbols\nexport const resHeaders: unique symbol = Symbol(\n 'NanoexpressHttpResponseHeaders'\n);\nexport const resConfig: unique symbol = Symbol('NanoexpressHttpResponseConfig');\nexport const resEvents: unique symbol = Symbol('NanoexpressHttpResponseEvents');\nexport const resAbortHandler: unique symbol = Symbol(\n 'NanoexpressHttpResponseAbortHandler'\n);\nexport const resAbortHandlerExpose: unique symbol = Symbol(\n 'NanoexpressHttpResponseAbortHandlerExpose'\n);\n\nexport const appInstance: unique symbol = Symbol('NanoexpressAppInstance');\nexport const routerInstances: unique symbol = Symbol(\n 'NanoexpressRouterInstances'\n);\nexport const wsInstances: unique symbol = Symbol(\n 'NanoexpressWebSocketInstances'\n);\n","export default function _gc(): boolean {\n try {\n if (global.gc) {\n global.gc();\n }\n return true;\n } catch (e) {\n return false;\n }\n}\n","import debugLog from 'debug';\n\nexport const debug = debugLog('nanoexpress');\nexport const error = debugLog('nanoexpress:error');\n\nexport const warn = debugLog('nanoexpress:warn');\n","export type Dependencies = Array;\n\ninterface ICallbackState {\n handler: () => never;\n dependencies: Dependencies;\n isEffect: boolean;\n mounted: boolean;\n}\n\nconst lastDeps: Dependencies[] = [];\nconst callbacks: ICallbackState[] = [];\nlet hookIndex = 0;\n\nconst register =\n (runValue = false, returnValue = false) =>\n (\n callback: (...args: any[]) => any,\n dependencies: Dependencies\n ): (() => any) | any => {\n if (\n !dependencies ||\n !lastDeps[hookIndex] ||\n !lastDeps[hookIndex].every(\n (dep, depIndex) => dep === dependencies[depIndex]\n )\n ) {\n callbacks[hookIndex] = {\n handler: runValue ? callback() : callback,\n dependencies,\n isEffect: runValue && !returnValue,\n mounted: runValue\n };\n lastDeps[hookIndex] = dependencies;\n }\n\n const _callback = callbacks[hookIndex].handler;\n hookIndex += 1;\n\n if (returnValue) {\n return _callback;\n }\n };\nconst unregister = (): void => {\n callbacks.forEach((callback) => {\n if (\n callback.isEffect &&\n callback.mounted &&\n typeof callback.handler === 'function'\n ) {\n callback.handler();\n callback.mounted = false;\n }\n });\n hookIndex = 0;\n};\n\nexport { register, unregister };\n","import { STATUS_CODES } from 'http';\n\nconst codesBetween = Array.from({ length: 500 })\n .fill(0)\n .map((_, index) => 100 + index);\n\nconst httpCodes = codesBetween.reduce((codes, code) => {\n const codeString = STATUS_CODES[code];\n if (codeString) {\n codes[code] = `${code} ${codeString}`;\n }\n return codes;\n}, {} as Record);\n\nexport default httpCodes;\n","import { HttpMethod } from '../../types/nanoexpress';\n\nexport default [\n 'get',\n 'post',\n 'put',\n 'patch',\n 'del',\n 'any',\n 'head',\n 'options',\n 'trace'\n].map((m) => m.toUpperCase()) as HttpMethod[];\n","export default function invalid(message: string): void {\n throw new Error(message);\n}\n","import {\n BlockMode,\n IBlock\n} from '@nanoexpress/route-syntax-parser/types/interfaces';\n\nexport default (blocks: IBlock[]): BlockMode[] => {\n return [...new Set(blocks.map((block) => block.mode))];\n};\n","const mimes = {\n '3gp': 'video/3gpp',\n a: 'application/octet-stream',\n ai: 'application/postscript',\n aif: 'audio/x-aiff',\n aiff: 'audio/x-aiff',\n asc: 'application/pgp-signature',\n asf: 'video/x-ms-asf',\n asm: 'text/x-asm',\n asx: 'video/x-ms-asf',\n atom: 'application/atom+xml',\n au: 'audio/basic',\n avi: 'video/x-msvideo',\n bat: 'application/x-msdownload',\n bin: 'application/octet-stream',\n bmp: 'image/bmp',\n bz2: 'application/x-bzip2',\n c: 'text/x-c',\n cab: 'application/vnd.ms-cab-compressed',\n cc: 'text/x-c',\n chm: 'application/vnd.ms-htmlhelp',\n class: 'application/octet-stream',\n com: 'application/x-msdownload',\n conf: 'text/plain',\n cpp: 'text/x-c',\n crt: 'application/x-x509-ca-cert',\n css: 'text/css',\n csv: 'text/csv',\n cxx: 'text/x-c',\n deb: 'application/x-debian-package',\n der: 'application/x-x509-ca-cert',\n diff: 'text/x-diff',\n djv: 'image/vnd.djvu',\n djvu: 'image/vnd.djvu',\n dll: 'application/x-msdownload',\n dmg: 'application/octet-stream',\n doc: 'application/msword',\n dot: 'application/msword',\n dtd: 'application/xml-dtd',\n dvi: 'application/x-dvi',\n ear: 'application/java-archive',\n eml: 'message/rfc822',\n eps: 'application/postscript',\n exe: 'application/x-msdownload',\n f: 'text/x-fortran',\n f77: 'text/x-fortran',\n f90: 'text/x-fortran',\n flv: 'video/x-flv',\n for: 'text/x-fortran',\n gem: 'application/octet-stream',\n gemspec: 'text/x-script.ruby',\n gif: 'image/gif',\n gz: 'application/x-gzip',\n h: 'text/x-c',\n hh: 'text/x-c',\n htm: 'text/html',\n html: 'text/html',\n ico: 'image/vnd.microsoft.icon',\n ics: 'text/calendar',\n ifb: 'text/calendar',\n iso: 'application/octet-stream',\n jar: 'application/java-archive',\n java: 'text/x-java-source',\n jnlp: 'application/x-java-jnlp-file',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n js: 'application/javascript',\n json: 'application/json',\n log: 'text/plain',\n m3u: 'audio/x-mpegurl',\n m4v: 'video/mp4',\n man: 'text/troff',\n mathml: 'application/mathml+xml',\n mbox: 'application/mbox',\n mdoc: 'text/troff',\n me: 'text/troff',\n mid: 'audio/midi',\n midi: 'audio/midi',\n mime: 'message/rfc822',\n mjs: 'application/javascript',\n mml: 'application/mathml+xml',\n mng: 'video/x-mng',\n mov: 'video/quicktime',\n mp3: 'audio/mpeg',\n mp4: 'video/mp4',\n mp4v: 'video/mp4',\n mpeg: 'video/mpeg',\n mpg: 'video/mpeg',\n ms: 'text/troff',\n msi: 'application/x-msdownload',\n odp: 'application/vnd.oasis.opendocument.presentation',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odt: 'application/vnd.oasis.opendocument.text',\n ogg: 'application/ogg',\n p: 'text/x-pascal',\n pas: 'text/x-pascal',\n pbm: 'image/x-portable-bitmap',\n pdf: 'application/pdf',\n pem: 'application/x-x509-ca-cert',\n pgm: 'image/x-portable-graymap',\n pgp: 'application/pgp-encrypted',\n pkg: 'application/octet-stream',\n pl: 'text/x-script.perl',\n pm: 'text/x-script.perl-module',\n png: 'image/png',\n pnm: 'image/x-portable-anymap',\n ppm: 'image/x-portable-pixmap',\n pps: 'application/vnd.ms-powerpoint',\n ppt: 'application/vnd.ms-powerpoint',\n ps: 'application/postscript',\n psd: 'image/vnd.adobe.photoshop',\n py: 'text/x-script.python',\n qt: 'video/quicktime',\n ra: 'audio/x-pn-realaudio',\n rake: 'text/x-script.ruby',\n ram: 'audio/x-pn-realaudio',\n rar: 'application/x-rar-compressed',\n rb: 'text/x-script.ruby',\n rdf: 'application/rdf+xml',\n roff: 'text/troff',\n rpm: 'application/x-redhat-package-manager',\n rss: 'application/rss+xml',\n rtf: 'application/rtf',\n ru: 'text/x-script.ruby',\n s: 'text/x-asm',\n sgm: 'text/sgml',\n sgml: 'text/sgml',\n sh: 'application/x-sh',\n sig: 'application/pgp-signature',\n snd: 'audio/basic',\n so: 'application/octet-stream',\n svg: 'image/svg+xml',\n svgz: 'image/svg+xml',\n swf: 'application/x-shockwave-flash',\n t: 'text/troff',\n tar: 'application/x-tar',\n tbz: 'application/x-bzip-compressed-tar',\n tcl: 'application/x-tcl',\n tex: 'application/x-tex',\n texi: 'application/x-texinfo',\n texinfo: 'application/x-texinfo',\n text: 'text/plain',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n torrent: 'application/x-bittorrent',\n tr: 'text/troff',\n txt: 'text/plain',\n vcf: 'text/x-vcard',\n vcs: 'text/x-vcalendar',\n vrml: 'model/vrml',\n war: 'application/java-archive',\n wav: 'audio/x-wav',\n wma: 'audio/x-ms-wma',\n wmv: 'video/x-ms-wmv',\n wmx: 'video/x-ms-wmx',\n wrl: 'model/vrml',\n wsdl: 'application/wsdl+xml',\n xbm: 'image/x-xbitmap',\n xhtml: 'application/xhtml+xml',\n xls: 'application/vnd.ms-excel',\n xml: 'application/xml',\n xpm: 'image/x-xpixmap',\n xsl: 'application/xml',\n xslt: 'application/xslt+xml',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n zip: 'application/zip',\n default: 'text/html'\n};\n\ntype valueof = T[keyof T];\n\nconst getMime = (path: string): valueof | undefined => {\n const i = Number(path.lastIndexOf('.'));\n return mimes[path.substr(i + 1).toLowerCase() as keyof typeof mimes];\n};\n\nexport { getMime, mimes };\n","export default (path: string): string =>\n path !== '*' &&\n path.charAt(path.length - 1) !== '/' &&\n path.charAt(path.length - 1) !== '*' &&\n (path.lastIndexOf('.') === -1 || path.lastIndexOf('.') < path.length - 4)\n ? `${path}/`\n : path;\n","export default (): void => {};\n","/* eslint-disable max-lines, max-lines-per-function */\nimport { EventEmitter } from 'events';\nimport queryParse from 'fast-query-parse';\nimport { Readable, Writable } from 'stream';\nimport {\n HttpRequest as uWS_HttpRequest,\n HttpResponse as uWS_HttpResponse\n} from 'uWebSockets.js';\nimport { RequestSchema, RequestSchemaWithBody } from '../../types/find-route';\nimport { HttpMethod, INanoexpressOptions } from '../../types/nanoexpress';\nimport { reqConfig, reqEvents, reqRawResponse, reqRequest } from '../constants';\nimport { invalid } from '../helpers';\n\nexport default class HttpRequest<\n THttpMethod = HttpMethod,\n THttpSchema extends RequestSchemaWithBody = RequestSchema\n> {\n protected [reqConfig]: INanoexpressOptions;\n\n protected [reqEvents]!: EventEmitter | null;\n\n protected [reqRequest]!: uWS_HttpRequest;\n\n protected [reqRawResponse]!: uWS_HttpResponse;\n\n protected registered: boolean;\n\n baseUrl!: string;\n\n url!: string;\n\n originalUrl!: string;\n\n path!: string;\n\n method!: THttpMethod;\n\n headers!: THttpSchema['headers'];\n\n params?: THttpSchema['params'];\n\n body?: THttpSchema['body'];\n\n query: THttpSchema['query'] = null;\n\n stream!: Readable;\n\n id = 0;\n\n constructor(options: INanoexpressOptions) {\n this[reqConfig] = options;\n\n this.registered = false;\n\n return this;\n }\n\n setRequest(req: uWS_HttpRequest, res: uWS_HttpResponse): this {\n const options = this[reqConfig];\n\n this[reqRequest] = req;\n this[reqRawResponse] = res;\n\n const query = req.getQuery();\n const url = req.getUrl();\n\n this.url = url;\n this.originalUrl = this.url;\n this.path = url;\n this.baseUrl = '';\n\n this.method = req.getMethod().toUpperCase() as unknown as THttpMethod;\n\n this.headers = {};\n req.forEach((key, value) => {\n (this.headers as RequestSchema['headers'])[key] = value;\n });\n\n if (url.charAt(url.length - 1) !== '/') {\n this.url += '/';\n this.path += '/';\n this.originalUrl += '/';\n }\n\n if (options.enableExpressCompatibility && query) {\n this.originalUrl += `?${query}`;\n }\n this.query = queryParse(query);\n\n // @ts-ignore\n if (this.method === 'POST' || this.method === 'PUT') {\n // Imitiate some modes\n this.stream = new Readable({ read(): void {} });\n\n // Protected variables\n this[reqEvents] = null;\n this.registered = false;\n }\n\n this.id = Math.round(Math.random() * 1e5);\n\n return this;\n }\n\n on(event: string, listener: (...args: any[]) => void): this {\n const { stream } = this;\n if (stream) {\n stream.on(event, listener);\n }\n return this;\n }\n\n emit(event: string, ...args: any[]): this {\n const { stream } = this;\n if (stream) {\n stream.emit(event, ...args);\n }\n return this;\n }\n\n getHeader(key: string): string {\n return this.headers[key];\n }\n\n hasHeader(key: string): boolean {\n return !!this.headers[key];\n }\n\n getParameter(index: number): string {\n return this[reqRequest].getParameter(index);\n }\n\n pipe(destination: Writable): Writable | void | Promise {\n const { stream } = this;\n\n if (stream.readableDidRead || stream.readableEnded) {\n return invalid('Stream already used, cannot use one stream twice');\n }\n\n if (stream) {\n return stream.pipe(destination);\n }\n return invalid(\n 'Stream was not defined, something wrong, please check your code or method is not a POST or PUT'\n );\n }\n\n async *[Symbol.asyncIterator](): any {\n const { stream } = this;\n\n if (stream) {\n for await (const chunk of stream) {\n yield chunk;\n }\n }\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport { EventEmitter } from 'events';\nimport { createReadStream, ReadStream, statSync } from 'fs';\nimport uWS, { RecognizedString } from 'uWebSockets.js';\nimport {\n BrotliCompress,\n BrotliOptions,\n createBrotliCompress,\n createDeflate,\n createGzip,\n Deflate,\n Gzip,\n ZlibOptions\n} from 'zlib';\nimport { INanoexpressOptions } from '../../types/nanoexpress';\nimport {\n request as resRequest,\n resAbortHandler,\n resAbortHandlerExpose,\n resConfig,\n resEvents,\n resHeaders,\n response as resResponse\n} from '../constants';\nimport { debug, getMime, httpCodes, invalid, warn } from '../helpers';\nimport HttpRequest from './http-request';\n\n/**\n * HttpResponse class\n * @constructor\n * @class\n * @namespace nanoexpress.HttpResponse\n * @memberof nanoexpress\n * @example new HttpResponse().setResponse(uWS.HttpResponse)\n */\nclass HttpResponse {\n public [resRequest]: HttpRequest | null;\n\n public [resResponse]: uWS.HttpResponse | null;\n\n // Expose functionality properties\n protected [resHeaders]: Record | null;\n\n protected [resAbortHandler]: (() => void)[];\n\n protected [resAbortHandlerExpose]: boolean;\n\n protected [resConfig]: INanoexpressOptions;\n\n protected [resEvents]: EventEmitter | null;\n\n public done: boolean;\n\n public aborted: boolean;\n\n public streaming: boolean;\n\n protected _headersSet = false;\n\n protected registered: boolean;\n\n protected mode: 'immediate' | 'queue' | 'cork' = 'queue';\n\n public serialize?: (\n data: Record | string | number | boolean\n ) => string;\n\n public compiledResponse?: string;\n\n public statusCode: number;\n\n id = 0;\n\n constructor(config: INanoexpressOptions) {\n this[resConfig] = config;\n this.done = false;\n this.aborted = false;\n this._headersSet = false;\n this.registered = false;\n this.streaming = false;\n this[resEvents] = null;\n this[resAbortHandler] = [];\n this[resAbortHandlerExpose] = false;\n\n this[resRequest] = null;\n this[resResponse] = null;\n this[resHeaders] = null;\n\n this.mode = config.responseMode;\n\n this.statusCode = 200;\n }\n\n protected registerEvents(): this {\n const emitter = this[resEvents];\n\n if (emitter && !this.registered) {\n this.exposeAborted();\n\n emitter\n .on('pipe', (stream) => {\n debug('stream.pipe(res)');\n\n this.streaming = true;\n this.stream(stream);\n })\n .on('data', () => {\n debug('stream.pipe(res):data event');\n })\n\n .on('unpipe', () => {\n debug('stream.unpipe(res)');\n\n this.aborted = true;\n })\n .on('error', () => {\n debug('stream.pipe(res) error');\n this.aborted = true;\n this.end();\n });\n this.registered = true;\n }\n\n return this;\n }\n\n /**\n * Registers event to response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.on('end', (eventArgument) => {...})\n */\n on(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.on(eventName, eventArgument);\n\n debug('res.on(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Registers event to response to be fired once\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.once('end', (eventArgument) => {...})\n */\n once(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.once(eventName, eventArgument);\n\n debug('res.once(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Removes event from response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.off('end', (eventArgument) => {...})\n */\n off(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n return this;\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.off(eventName, eventArgument);\n\n debug('res.off(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Removes listener from response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.removeListener('end', (eventArgument) => {...})\n */\n removeListener(\n eventName: string | symbol,\n eventArgument: (eventArgument?: unknown) => void\n ): this {\n let emitter = this[resEvents];\n\n if (!emitter) {\n return this;\n }\n emitter = this[resEvents] as EventEmitter;\n emitter.removeListener(eventName, eventArgument);\n\n debug('res.removeListener(%s, handler)', eventName);\n\n this.registerEvents();\n\n return this;\n }\n\n /**\n * Emits event to response\n * @param eventName Event name\n * @param eventArgument Any argument\n * @returns Emit response\n * @memberof nanoexpress.HttpResponse\n * @example res.emit('end', 1)\n */\n emit(eventName: string | symbol, eventArgument?: never): boolean {\n let emitter = this[resEvents];\n\n if (!emitter) {\n this[resEvents] = new EventEmitter();\n }\n debug('res.emit(%s, argument)', eventName);\n\n emitter = this[resEvents] as EventEmitter;\n return emitter.emit(eventName, eventArgument);\n }\n\n /**\n * Set new HttpResponse for current pool\n * @param res Native uWS.HttpResponse instance\n * @param req HttpResponse instance\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setResponse(res, req)\n */\n setResponse(res: uWS.HttpResponse, req: HttpRequest): this {\n this[resRequest] = req;\n this[resResponse] = res;\n this.done = false;\n this.aborted = res.aborted || false;\n this._headersSet = false;\n this.streaming = false;\n this.registered = false;\n this[resEvents] = null;\n this[resAbortHandlerExpose] = false;\n this[resAbortHandler].length = 0;\n\n this[resHeaders] = null;\n this.statusCode = 200;\n\n this.id = Math.round(Math.random() * 1e5);\n\n return this;\n }\n\n // Native methods re-implementing\n /**\n * Ends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.end('text');\n */\n end(body?: uWS.RecognizedString, closeConnection?: boolean): this {\n const { mode } = this;\n const res = this[resResponse];\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._end(body, closeConnection);\n });\n return this;\n }\n return this._end(body, closeConnection);\n }\n\n /**\n * Initializes Server-Side Events from your stream\n * @param body Writable stream or PassThrough\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sse(sseStream);\n */\n sse(body: ReadStream): this {\n const { mode } = this;\n const res = this[resResponse];\n\n this.exposeAborted();\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._sse(body);\n });\n return this;\n }\n return this._sse(body);\n }\n\n protected _sse(body: ReadStream): this {\n const {\n mode,\n statusCode,\n done,\n streaming,\n _headersSet,\n [resHeaders]: _headers\n } = this;\n const res = this[resResponse];\n\n if (!done && res && !streaming && !done) {\n debug(\n 'res.sse(body) called with status %d and has headers',\n statusCode,\n _headersSet\n );\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n res.writeHeader('Content-Type', 'text/event-stream; charset=utf-8');\n res.writeHeader('Connection', 'keep-alive');\n res.writeHeader('Cache-Control', 'no-cache, no-store, no-transform');\n\n body.on('data', (data) => {\n if (!this.aborted) {\n res.write(data);\n }\n });\n this.streaming = true;\n this[resResponse] = null;\n }\n return this;\n }\n\n /**\n * @private\n * Ends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res._end('text');\n */\n protected _end(body?: uWS.RecognizedString, closeConnection?: boolean): this {\n const {\n mode,\n statusCode,\n done,\n streaming,\n _headersSet,\n [resHeaders]: _headers\n } = this;\n const res = this[resResponse];\n\n if (!done && res && !streaming) {\n debug(\n 'res.end(body) called with status %d and has headers',\n statusCode,\n _headersSet\n );\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n res.end(body, closeConnection);\n this.done = true;\n this[resResponse] = null;\n }\n return this;\n }\n\n /**\n * Sets response status\n * @deprecated Please use `res.statusCode` instead\n * @param code Status code\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.status(204);\n */\n\n status(code: number): this {\n debug('res.status(%d)', code);\n\n this.statusCode = code;\n\n return this;\n }\n\n /**\n * Combine of `res.status` and `res.setHeaders`\n * @param code Status code\n * @param headers Record object containing headers\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.writeHead(200, {'X-Header': 1234});\n */\n writeHead(\n code: number | Record,\n headers?: Record\n ): this {\n if (typeof code === 'object' && !headers) {\n headers = code;\n code = 200;\n }\n\n if (code !== undefined && code !== 200) {\n this.statusCode = code as number;\n }\n if (headers !== undefined) {\n this.setHeaders(headers);\n }\n\n return this;\n }\n\n /**\n * Redirect current locate to new\n * @param code Redirect code\n * @param path Path to be redirected\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.redirect('/foo');\n */\n redirect(code: number | string, path?: string): this {\n if (!path && typeof code === 'string') {\n path = code;\n code = 301;\n }\n if (path && path.indexOf('/') === -1) {\n path = `/${path}`;\n }\n\n this.statusCode = code as number;\n this.setHeader('Location', path as string);\n\n return this.end();\n }\n\n /**\n * Sends status with empty body\n * @param code Status code\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sendStatus(204);\n */\n sendStatus(code: number): this {\n debug('res.sendStatus(%d)', code);\n\n this.statusCode = code;\n return this.end();\n }\n\n /**\n * Sends this response by copying the contents of body.\n * @param body Body content\n * @param closeConnection Gives boolean to connection statement\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.send({status: 'success'});\n */\n send(\n data: Record | string | number | boolean,\n closeConnection?: boolean\n ): this {\n const { done, compiledResponse } = this;\n if (!done && this[resResponse]) {\n if (compiledResponse) {\n return this.end(compiledResponse, closeConnection);\n }\n if (this.serialize) {\n return this.end(this.serialize(data), closeConnection);\n }\n if (typeof data === 'object') {\n this.setHeader('Content-Type', 'application/json; charset=utf-8');\n return this.end(\n JSON.stringify(\n data,\n this[resConfig].json_replacer,\n this[resConfig].json_spaces\n ),\n closeConnection\n );\n }\n\n return this.end(data as string, closeConnection);\n }\n return this;\n }\n\n /**\n * @deprecated Use `res.stream` instead of\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.pipe(readableStream)\n * @alias res.stream(readableStream)\n */\n pipe(stream: ReadStream, size?: number, compressed?: boolean): this {\n debug('res.pipe(stream, %d, %j)', size, compressed);\n\n return this.stream(stream, size, compressed);\n }\n\n /**\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.stream(readableStream)\n */\n stream(stream: ReadStream, size?: number, compressed = false): this {\n const { mode, [resRequest]: req, [resResponse]: res } = this;\n\n if (req && (!size || Number.isNaN(size)) && req.headers['content-length']) {\n size = +req.headers['content-length'];\n } else if ((!size || Number.isNaN(size)) && stream.path) {\n ({ size } = statSync(stream.path));\n }\n\n if (res && mode === 'cork') {\n res.cork(() => {\n this._stream(stream, size, compressed);\n });\n return this;\n }\n\n return this._stream(stream, size, compressed);\n }\n\n /**\n * @private\n * Streams input stream to response output\n * @param stream Input stream\n * @param size Stream size\n * @param compressed Compressed status\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res._stream(readableStream)\n */\n protected _stream(\n stream: ReadStream,\n size?: number,\n compressed = false\n ): this {\n if (!this.done && this[resResponse] && this[resResponse] !== null) {\n const res = this[resResponse] as uWS.HttpResponse;\n const config = this[resConfig];\n const { mode, statusCode, _headersSet, [resHeaders]: _headers } = this;\n\n this.exposeAborted();\n let calledData = !config.enableExpressCompatibility;\n\n if (compressed) {\n const compressedStream = this.compressStream(stream);\n\n if (compressedStream) {\n stream = compressedStream as unknown as ReadStream;\n }\n }\n\n const onclose = (): void => {\n if (calledData) {\n this.done = true;\n this.streaming = false;\n this.emit('close');\n } else if (stream.path) {\n stream.close();\n warn(\n 'res.stream(stream) data was not called, but mimicked by [nanoexpress], performance may be dropped and even can be stuck at responses, so please use official middlewares to avoid such errors'\n );\n this.stream(createReadStream(stream.path), size, compressed);\n }\n };\n const onfinish = (): void => {\n if (calledData) {\n if (typeof stream.close === 'function') {\n stream.close();\n } else {\n stream.emit('close');\n }\n }\n this.emit('finish');\n };\n\n res.writeStatus(httpCodes[statusCode]);\n if (mode !== 'immediate') {\n // headers\n if (_headersSet) {\n for (const header in _headers) {\n const value = _headers[header];\n if (value) {\n res.writeHeader(header, value);\n }\n }\n }\n }\n\n if (compressed || !size || Number.isNaN(size)) {\n debug('res.stream:compressed(stream, %d, %j)', size, compressed);\n stream\n .on('data', (buffer: Buffer): void => {\n calledData = true;\n\n if (this.aborted || this.done) {\n return;\n }\n res.write(\n buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n )\n );\n })\n .on('close', onclose)\n .on('finish', onfinish);\n } else {\n debug('res.stream:uncompressed(stream, %d, %j)', size, compressed);\n stream.on('data', (buffer: Buffer): void => {\n calledData = true;\n if (this.done || this.aborted) {\n return;\n }\n buffer = buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n ) as Buffer;\n\n const lastOffset = res.getWriteOffset();\n const [ok, done] = res.tryEnd(buffer, size as number);\n\n if (done) {\n this.done = true;\n } else if (!ok) {\n stream.pause();\n\n res.onWritable((offset: number): boolean => {\n if (this.done || this.aborted) {\n return true;\n }\n const [writeOk, writeDone] = res.tryEnd(\n buffer.slice(offset - lastOffset),\n size as number\n );\n if (writeDone) {\n this.done = true;\n } else if (writeOk) {\n stream.resume();\n }\n return writeOk;\n });\n }\n });\n }\n stream\n .on('error', (error) => {\n stream.destroy(error);\n this.aborted = true;\n this.emit('error', error as never);\n })\n .on('close', onclose)\n .on('finish', onfinish);\n }\n return this;\n }\n\n /**\n * Compress stream into compressed into\n * @param stream Readable stream\n * @param options One of compressions (BrotliCompress, ZlibOptions)\n * @param priority Compression picking priority\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.compressStream(writableStream)\n */\n compressStream(\n stream: ReadStream,\n options?: BrotliOptions | ZlibOptions,\n priority = ['gzip', 'br', 'deflate']\n ): BrotliCompress | Gzip | Deflate | null {\n const req = this[resRequest];\n\n if (!req) {\n invalid(\n 'This method requires active `HttpRequest`. Please load required middleware'\n );\n return null;\n }\n if (!req.headers) {\n invalid(\n 'This method requires active `HttpRequest.headers`. Please load required middleware'\n );\n return null;\n }\n const contentEncoding = req.headers['content-encoding'];\n const encoding = priority.find(\n (currentEncoding) =>\n contentEncoding && contentEncoding.indexOf(currentEncoding) !== -1\n );\n\n let compression = null;\n\n if (encoding === 'br') {\n compression = createBrotliCompress(options);\n } else if (encoding === 'gzip') {\n compression = createGzip(options);\n } else if (encoding === 'deflare') {\n compression = createDeflate(options);\n }\n\n if (compression && encoding) {\n stream.pipe(compression);\n this.setHeader('content-encoding', encoding);\n }\n\n return compression;\n }\n\n /**\n * Sends file to end user with efficient stream\n * @param path File absolute path\n * @param lastModified Sets `Last-Modified` header to prevent infinite re-loading\n * @param compressed Compresses file and saves bandwidth of user\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.sendFile('foo.mp4')\n */\n sendFile(path: string, lastModified = true, compressed = false): this {\n const req = this[resRequest];\n const headers = req?.headers;\n\n const stat = statSync(path);\n let { size } = stat;\n\n // handling last modified\n if (lastModified) {\n const { mtime } = stat;\n\n mtime.setMilliseconds(0);\n const mtimeutc = mtime.toUTCString();\n\n // Return 304 if last-modified\n if (headers && headers['if-modified-since']) {\n if (new Date(headers['if-modified-since']) >= mtime) {\n this.statusCode = 304;\n return this.end();\n }\n }\n this.setHeader('last-modified', mtimeutc);\n }\n this.setHeader('content-type', getMime(path) as string);\n\n let start: number | undefined = 0;\n let end: number | undefined = 0;\n\n if (headers && headers.range) {\n [start, end] = headers.range\n .substr(6)\n .split('-')\n .map((byte: string) => (byte ? parseInt(byte, 10) : undefined));\n\n // Chrome patch for work\n if (end === undefined) {\n end = size - 1;\n }\n\n if (start !== undefined) {\n this.statusCode = 206;\n this.setHeader('accept-ranges', 'bytes');\n this.setHeader('content-range', `bytes ${start}-${end}/${size}`);\n size = end - start + 1;\n }\n }\n\n // for size = 0\n if (end < 0) {\n end = 0;\n }\n\n const createStreamInstance = end\n ? createReadStream(path, { start, end })\n : createReadStream(path);\n\n return this.stream(createStreamInstance, size, compressed);\n }\n\n /**\n * Enters or continues chunked encoding mode. Writes part of the response. End with zero length write.\n * @param chunk Content response chunk\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.write(Buffer.from('Hi'));\n */\n write(chunk: uWS.RecognizedString | ArrayBuffer): this {\n const res = this[resResponse];\n if (!this.done && res && !this.streaming) {\n debug('res.write(%s)', chunk);\n res.write(chunk);\n return this;\n }\n return this;\n }\n\n /**\n *\n * Exposed methods\n */\n exposeAborted(): this {\n const res = this[resResponse];\n if (!this[resAbortHandlerExpose] && res) {\n debug('res.onAborted is exposed');\n res.onAborted(() => {\n this.aborted = true;\n warn('res.onAborted is called');\n\n this[resAbortHandler].forEach((callback) => callback());\n });\n this[resAbortHandlerExpose] = true;\n }\n\n return this;\n }\n\n onAborted(handler: () => void): this {\n this[resAbortHandler].push(handler);\n\n return this;\n }\n\n /**\n * Get response header value by key\n * @param key Header key\n * @returns Returns value of header got by key\n * @example res.getHeader('cookie');\n * @memberof nanoexpress.HttpResponse\n */\n getHeader(key: string): RecognizedString | null {\n const headers = this[resHeaders];\n if (headers && headers[key]) {\n debug(\"res.getHeader('%s')\", key);\n return headers[key];\n }\n return null;\n }\n\n /**\n * Checks response header value by key\n * @param key Header key\n * @returns Returns `true` if header exists whereas `false` in other cases\n * @example res.hasHeader('cookie');\n * @memberof nanoexpress.HttpResponse\n */\n hasHeader(key: string): boolean {\n debug(\"res.hasHeader('%s')\", key);\n return this.getHeader(key) !== null;\n }\n\n /**\n * Set response header value by key\n * @param key Header key\n * @param value Header value\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setHeader('content-type', 'application/json');\n */\n setHeader(key: string, value: uWS.RecognizedString): this {\n const { mode, [resResponse]: res } = this;\n\n debug(\"res.setHeader('%s', '%s')\", key, value);\n\n if (res && mode === 'immediate') {\n res.writeHeader(key, value);\n return this;\n }\n\n if (!this[resHeaders]) {\n this[resHeaders] = {};\n }\n\n this._headersSet = true;\n const headers = this[resHeaders] as Record;\n headers[key] = value;\n\n return this;\n }\n\n /**\n * Set response header value by key\n * @param key Header key\n * @param value Header value\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.set('content-type', 'application/json');\n * @alias res.setHeader('content-type', 'application/json');\n */\n set(key: string, value: uWS.RecognizedString): this {\n return this.setHeader(key, value);\n }\n\n /**\n * Set response headers by Record dict\n * @param headers Header key/value record dict\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.setHeaders({'content-type':'application/json'});\n */\n setHeaders(headers: Record): this {\n const { mode, [resResponse]: res } = this;\n\n if (res && mode === 'immediate') {\n warn('res.setHeaders(headers) cannot be set due of immediate mode');\n return this;\n }\n\n debug('res.setHeaders(headers)');\n this._headersSet = true;\n\n if (this[resHeaders]) {\n Object.assign(this[resHeaders], headers);\n } else {\n this[resHeaders] = headers;\n }\n\n return this;\n }\n\n /**\n * Remove response header value by key\n * @param key Header key\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.removeHeader('cookie');\n */\n removeHeader(key: string): this {\n const { mode, [resResponse]: res } = this;\n\n if (res && mode === 'immediate') {\n warn(\"res.removeHeader('%s') cannot be set due of immediate mode\", key);\n return this;\n }\n\n debug(\"res.removeHeader('%s')\", key);\n\n const headers = this[resHeaders];\n if (headers && headers[key]) {\n headers[key] = null;\n }\n\n return this;\n }\n\n /**\n * Set response content type\n * @param contentType Content type\n * @returns nanoexpress.HttpResponse\n * @memberof nanoexpress.HttpResponse\n * @example res.type('application/json');\n */\n type(contentType: string): this {\n debug('res.type(%s)', contentType);\n return this.setHeader('content-type', contentType);\n }\n}\n\nexport default HttpResponse;\n","import { MiddlewareHandler } from '../../types/find-route';\nimport { HttpMethod } from '../../types/nanoexpress';\nimport { warn } from '../helpers/loggy';\nimport { HttpRequest, HttpResponse } from '../polyfills';\n\nexport type LegacyHttpHandler = (\n req: HttpRequest,\n res: HttpResponse,\n next: (err?: Error, done?: boolean) => void\n) =>\n | HttpResponse\n | string\n | Record\n | Promise | string>;\n\nexport default (\n middleware: LegacyHttpHandler\n): MiddlewareHandler => {\n warn(\n 'legacy middlewares is deprecated and in future we will remove express.js middlewares support'\n );\n const httpHandler = function legacyMiddlewarePolyfillHandler(\n req: HttpRequest,\n res: HttpResponse\n ): Promise {\n return new Promise((resolve, reject) => {\n middleware(req, res, (err) => {\n if (err) {\n reject(err);\n } else {\n // @ts-ignore\n resolve();\n }\n });\n });\n };\n const displayName = middleware.name;\n httpHandler.raw = middleware;\n httpHandler.displayName = displayName;\n return httpHandler;\n};\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport analyze from '@nanoexpress/route-syntax-parser';\nimport fastDecodeURI from 'fast-decode-uri-component';\nimport { pathToRegexp } from 'path-to-regexp';\nimport {\n HttpHandler,\n PreparedRoute,\n UnpreparedRoute\n} from '../types/find-route';\nimport { HttpMethod, INanoexpressOptions } from '../types/nanoexpress';\nimport { debug, invalid, iterateBlocks, slashify, _gc } from './helpers';\nimport { HttpRequest, HttpResponse } from './polyfills';\nimport legacyUtil, { LegacyHttpHandler } from './utils/legacy';\n\nexport default class RouteEngine {\n protected options: INanoexpressOptions;\n\n protected routes: PreparedRoute[];\n\n public async: boolean;\n\n public await: boolean;\n\n public params = false;\n\n public headers = false;\n\n public cookies = false;\n\n public query = false;\n\n public body = false;\n\n public property = false;\n\n constructor(options: INanoexpressOptions) {\n this.options = options;\n this.routes = [];\n this.async = false;\n this.await = false;\n }\n\n parse(incomingRoute: UnpreparedRoute): PreparedRoute {\n const { options: config } = this;\n\n const route: PreparedRoute = {\n ...incomingRoute,\n all: false,\n regex: false,\n fetch_params: false,\n async: false,\n await: false,\n legacy: false,\n analyzeBlocks: []\n };\n\n if (typeof route.path === 'string') {\n if (config.ignoreTrailingSlash) {\n route.path = slashify(route.path);\n route.originalUrl = slashify(route.originalUrl);\n }\n\n route.path = fastDecodeURI(route.path);\n\n if (route.baseUrl === '*') {\n route.all = true;\n } else if (route.path.indexOf(':') !== -1) {\n route.fetch_params = true;\n route.param_keys = [];\n route.path = pathToRegexp(route.path, route.param_keys);\n route.regex = true;\n } else if (route.path.indexOf('/*') !== -1) {\n route.baseUrl = route.path.substr(0, route.path.indexOf('/*') + 1);\n route.path = route.path.substr(route.baseUrl.length);\n route.all = true;\n } else if (\n route.baseUrl.length > 1 &&\n route.baseUrl.indexOf('/*') !== -1\n ) {\n route.baseUrl = route.baseUrl.substring(0, route.baseUrl.indexOf('/*'));\n route.originalUrl = route.originalUrl.substring(\n 0,\n route.originalUrl.indexOf('/*') + 1\n );\n route.all = true;\n }\n } else if (route.path instanceof RegExp) {\n route.regex = true;\n }\n route.async = route.handler.constructor.name === 'AsyncFunction';\n route.await = route.handler.toString().includes('await');\n route.legacy = route.handler.toString().includes('next(');\n route.analyzeBlocks = analyze>(route.handler);\n const usedBlocks = iterateBlocks(route.analyzeBlocks);\n\n if (route.legacy) {\n if (config.enableExpressCompatibility) {\n route.handler = legacyUtil(\n route.handler as LegacyHttpHandler\n );\n route.async = true;\n route.await = true;\n } else {\n invalid(\n 'Express.js compatibility mode is disabled, please enable before using *express.js* middlewares, but take care - performance will not be same as disabled'\n );\n }\n }\n\n if (!this.params && route.fetch_params) {\n this.params = true;\n }\n if (!this.async && route.async) {\n this.async = true;\n }\n if (!this.await && route.await) {\n this.await = true;\n }\n\n usedBlocks.forEach((blockName): void => {\n if (blockName === 'property') {\n //\n } else {\n if (!this[blockName]) {\n this[blockName] = true;\n }\n }\n });\n\n debug(\n 'route registered [%s] baseurl(%s) path(%s) - originalurl(%s)',\n route.method,\n route.baseUrl,\n route.path,\n route.originalUrl\n );\n\n return route;\n }\n\n on(\n method: HttpMethod,\n path: string | RegExp | Array,\n handler: HttpHandler | HttpHandler[],\n baseUrl: string,\n originalUrl: string\n ): this {\n if (Array.isArray(method)) {\n method.forEach((methodId) => {\n this.on(methodId, path, handler, baseUrl, originalUrl);\n });\n return this;\n }\n if (Array.isArray(path)) {\n path.forEach((pathId) => {\n this.on(method, pathId, handler, baseUrl, originalUrl);\n });\n return this;\n }\n if (Array.isArray(handler)) {\n handler.forEach((handlerId) => {\n this.on(method, path, handlerId, baseUrl, originalUrl);\n });\n return this;\n }\n\n this.routes.push(\n this.parse({ method, path, baseUrl, originalUrl, handler })\n );\n\n _gc();\n\n return this;\n }\n\n off(\n method: HttpMethod,\n path: string,\n handler: HttpHandler,\n baseUrl: string,\n originalUrl: string\n ): this {\n const parsed = this.parse({ method, path, baseUrl, originalUrl, handler });\n\n if (!handler) {\n this.routes = this.routes.filter(\n (route) =>\n !(route.method === parsed.method && route.path === parsed.path)\n );\n } else {\n this.routes = this.routes.filter(\n (route) =>\n !(\n route.method === parsed.method &&\n route.path === parsed.path &&\n route.handler === parsed.handler\n )\n );\n }\n\n _gc();\n\n return this;\n }\n\n async lookup(\n req: HttpRequest,\n res: HttpResponse\n ): Promise {\n const { routes, options } = this;\n let response;\n\n for (let i = 0, len = routes.length; i < len; i += 1) {\n const route = routes[i];\n\n // Early return for performance reason\n if (res.done) {\n debug('routes lookup early exit');\n return res;\n }\n\n if (route.method === 'ANY' || route.method === req.method) {\n let found = false;\n\n if (route.all) {\n found =\n route.path && route.path !== '*'\n ? req.path.includes(route.path as string)\n : route.originalUrl === '*' ||\n req.originalUrl.substr(route.originalUrl.length).length > 1;\n } else if (route.regex && (route.path as RegExp).test(req.path)) {\n found = true;\n } else if (route.path === req.path && route.baseUrl === req.baseUrl) {\n found = true;\n } else if (route.originalUrl === req.originalUrl) {\n found = true;\n }\n\n if (found) {\n if (route.fetch_params && route.param_keys) {\n const exec = (route.path as RegExp).exec(req.path);\n\n req.params = {} as Record;\n for (\n let p = 0, lenp = route.param_keys.length;\n exec && p < lenp;\n p += 1\n ) {\n const key = route.param_keys[p].name;\n const value = exec[p + 1];\n\n req.params[key] = value;\n }\n }\n\n // Prepare url after found\n if (\n options.enableExpressCompatibility &&\n route.baseUrl !== '' &&\n route.baseUrl !== '*' &&\n req.path.indexOf(route.baseUrl) === 0\n ) {\n req.baseUrl = route.baseUrl;\n req.path = req.originalUrl.substr(req.baseUrl.length);\n req.url = req.originalUrl.substr(req.baseUrl.length);\n }\n\n if (route.async || route.legacy) {\n response = await route.handler(req, res);\n } else {\n response = route.handler(req, res);\n }\n\n if (res.streaming || res.done || response === res) {\n debug('routes lookup was done with HttpResponse');\n return res;\n }\n if (!res.streaming && !res.done && response) {\n debug('routes lookup was done with async json result');\n return res.send(response as string | Record);\n }\n\n debug('routes lookup was done without any match');\n } else {\n debug('routes lookup was not found without any match');\n }\n }\n }\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function */\nimport { RecognizedString, WebSocketBehavior } from 'uWebSockets.js';\nimport {\n MiddlewareHandler,\n RequestSchema,\n RequestSchemaWithBody,\n RouteHandler,\n UnpreparedRoute\n} from '../types/find-route';\nimport { HttpMethod, IWebsocketRoute } from '../types/nanoexpress';\nimport App from './app';\nimport { appInstance, routerInstances, wsInstances } from './constants';\nimport { invalid, _gc } from './helpers';\nimport RouteEngine from './route-engine';\n\nexport default class Router {\n protected [appInstance]!: App | Router;\n\n protected _engine?: RouteEngine;\n\n [routerInstances]: UnpreparedRoute[];\n\n [wsInstances]: IWebsocketRoute[];\n\n _basePath: string;\n\n constructor() {\n this[routerInstances] = [];\n this[wsInstances] = [];\n this._basePath = '';\n\n return this;\n }\n\n on(\n method: HttpMethod,\n path: string | RegExp,\n handlers:\n | MiddlewareHandler\n | MiddlewareHandler[]\n | RouteHandler\n | RouteHandler[],\n baseUrl: string,\n originalUrl: string\n ): this {\n const { _engine } = this;\n\n if (_engine) {\n _engine.on(method, path, handlers, baseUrl, originalUrl);\n } else if (Array.isArray(handlers)) {\n handlers.forEach((handler) => {\n this[routerInstances].push({\n method,\n path,\n baseUrl,\n handler,\n originalUrl\n });\n });\n } else {\n this[routerInstances].push({\n method,\n path,\n baseUrl,\n handler: handlers,\n originalUrl\n });\n }\n\n return this;\n }\n\n use(\n path: string | MiddlewareHandler | Router,\n ...middlewares: Array\n ): this {\n if (typeof path === 'function' || path instanceof Router) {\n middlewares.unshift(path);\n path = '*';\n }\n if (Array.isArray(path)) {\n if (\n path.every(\n (routePath) =>\n typeof routePath === 'function' || path instanceof Router\n )\n ) {\n return this.use('*', ...path);\n }\n }\n middlewares.forEach((handler: Router | MiddlewareHandler) => {\n if (handler instanceof Router) {\n const _routers = handler[routerInstances];\n const _ws = handler[wsInstances];\n\n handler[appInstance] = this;\n handler._basePath = path as string;\n\n _routers.forEach(\n ({ method, path: routePath, handler: routeHandler, baseUrl }) => {\n this.on(\n method,\n routePath as string,\n routeHandler,\n path as string,\n (path as string) + baseUrl + (routePath as string)\n );\n }\n );\n this[wsInstances].push(..._ws);\n\n _routers.length = 0;\n _ws.length = 0;\n } else if (Array.isArray(handler)) {\n this.use(path, ...handler);\n } else {\n this.on(\n 'ANY',\n '*',\n handler,\n path as string,\n this._basePath + (path as string)\n );\n }\n });\n\n _gc();\n\n return this;\n }\n\n get(\n path: string | RegExp,\n ...handlers: RouteHandler<'GET', T>[]\n ): this {\n return this.on(\n 'GET',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n post(\n path: string | RegExp,\n ...handlers: RouteHandler<'POST', T>[]\n ): this {\n return this.on(\n 'POST',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n put(\n path: string | RegExp,\n ...handlers: RouteHandler<'PUT', T>[]\n ): this {\n return this.on(\n 'PUT',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n options(\n path: string | RegExp,\n ...handlers: RouteHandler<'OPTIONS', T>[]\n ): this {\n return this.on(\n 'OPTIONS',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n del(\n path: string | RegExp,\n ...handlers: RouteHandler<'DEL', T>[]\n ): this {\n return this.on(\n 'DEL',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n /**\n *\n * @param path\n * @param handlers\n * @alias Router.del\n * @returns Router\n */\n delete(\n path: string | RegExp,\n ...handlers: RouteHandler<'DEL', T>[]\n ): this {\n return this.del(path, ...handlers);\n }\n\n /**\n * @param path The accessible path to be called route handler\n * @param handlers List of middlewares and/or routes\n * @returns Router\n */\n all(\n path: string | RegExp,\n ...handlers: RouteHandler<'ANY', T>[]\n ): this {\n return this.on(\n 'ANY',\n path,\n handlers as RouteHandler[],\n this._basePath,\n ''\n );\n }\n\n ws(path: RecognizedString, options?: WebSocketBehavior): this {\n const normalisedPath =\n this._basePath === '*'\n ? '*'\n : path === '/'\n ? this._basePath\n : `${this._basePath}${path}`;\n\n this[wsInstances].push({\n path: normalisedPath,\n options\n } as IWebsocketRoute);\n\n return this;\n }\n\n /**\n * @deprecated Use `app.publish()` for safety, this method will not work anymore\n * @param topic\n * @param message\n * @param isBinary\n * @param compress\n * @returns Status of publish\n */\n publish(\n topic: RecognizedString,\n message: RecognizedString,\n isBinary?: boolean,\n compress?: boolean\n ): boolean {\n const app = this[appInstance];\n if (app) {\n return app.publish(topic, message, isBinary, compress);\n }\n invalid(\n 'nanoexpress [Router]: Please attach to `Application` before using publish'\n );\n return false;\n }\n}\n","/* eslint-disable max-lines, max-lines-per-function, complexity, max-depth */\nimport { resAbortHandler } from './constants';\nimport uWS, {\n HttpRequest as uWS_HttpRequest,\n HttpResponse as uWS_HttpResponse,\n RecognizedString,\n TemplatedApp,\n us_listen_socket,\n WebSocketBehavior\n} from 'uWebSockets.js';\nimport { HttpHandler, RequestSchema } from '../types/find-route';\nimport {\n HttpMethod,\n INanoexpressOptions,\n IWebsocketRoute\n} from '../types/nanoexpress';\nimport _gc from './helpers/gc';\nimport { debug, warn } from './helpers/loggy';\nimport { unregister } from './hooks/manager';\nimport { HttpRequest, HttpResponse } from './polyfills';\nimport RouteEngine from './route-engine';\nimport RouterTemplate from './router';\nimport noop from './helpers/noop';\n\nclass App extends RouterTemplate {\n get https(): boolean {\n return this._options.https !== undefined;\n }\n\n get _console(): Console {\n return this._options.console || console;\n }\n\n get raw(): TemplatedApp {\n return this._app;\n }\n\n protected _app: TemplatedApp;\n\n protected _options: INanoexpressOptions;\n\n protected _engine: RouteEngine;\n\n protected _ws: IWebsocketRoute[];\n\n protected _requestPools: HttpRequest[];\n\n protected _responsePools: HttpResponse[];\n\n protected _poolsSize: number;\n\n protected time: [number, number];\n\n protected _separateServed: boolean;\n\n protected _ran: boolean;\n\n protected _instance: Record;\n\n protected defaultRoute: HttpHandler | null;\n\n protected errorRoute:\n | ((err: Error, req: HttpRequest, res: HttpResponse) => void)\n | null;\n\n constructor(options: INanoexpressOptions, app: TemplatedApp) {\n super();\n this._options = options;\n this._app = app;\n this._engine = new RouteEngine(options);\n\n this.defaultRoute = (_, res): HttpResponse => {\n return res.status(404).send({ status: 'error', code: 404 });\n };\n this.errorRoute = (err, _, res): HttpResponse => {\n return res.status(500).send({\n status: 'error',\n message: err.message\n });\n };\n\n this._ws = [];\n this._requestPools = [];\n this._responsePools = [];\n this._poolsSize = options.poolSize || 10;\n\n this.time = process.hrtime();\n this._separateServed = false;\n this._ran = false;\n\n this._instance = {};\n return this;\n }\n\n setNotFoundHandler(handler: HttpHandler): this {\n this.defaultRoute = handler;\n\n return this;\n }\n\n setErrorHandler(\n handler: (err: Error, req: HttpRequest, res: HttpResponse) => void\n ): this {\n this.errorRoute = handler;\n\n return this;\n }\n\n handleError(error: Error, req: HttpRequest, res: HttpResponse): this {\n if (res && !res.aborted && !res.done && !res.streaming && this.errorRoute) {\n this.errorRoute(error, req, res);\n }\n\n return this;\n }\n\n ws(path: RecognizedString, options: WebSocketBehavior): this {\n this._app.ws(path, options);\n\n return this;\n }\n\n publish(\n topic: RecognizedString,\n message: RecognizedString,\n isBinary?: boolean,\n compress?: boolean\n ): boolean {\n return this._app.publish(topic, message, isBinary, compress);\n }\n\n run(): this {\n const {\n _app: app,\n _options: options,\n _ws,\n _requestPools,\n _responsePools,\n _poolsSize,\n _engine,\n _ran\n } = this;\n\n if (!_ran) {\n const handler = async (\n rawRes: uWS_HttpResponse,\n rawReq: uWS_HttpRequest\n ): Promise => {\n let req: HttpRequest;\n let res: HttpResponse;\n let response;\n\n if (_requestPools.length > 0) {\n req = _requestPools.shift() as HttpRequest;\n req.setRequest(rawReq, rawRes);\n } else {\n req = new HttpRequest(options);\n req.setRequest(rawReq, rawRes);\n }\n if (_responsePools.length > 0) {\n res = _responsePools.shift() as HttpResponse;\n res.setResponse(rawRes, req);\n } else {\n res = new HttpResponse(options);\n res.setResponse(rawRes, req);\n }\n\n if (\n options.ignoreTrailingSlash &&\n req.path.charAt(req.path.length - 1) !== '/' &&\n (req.path.lastIndexOf('.') === -1 ||\n req.path.lastIndexOf('.') < req.path.length - 4)\n ) {\n if (options.enableExpressCompatibility) {\n debug(\n 'res.redirect called instead of fast quick-fix on route ending without \"/\" for express.js middlewares compatibility'\n );\n res.redirect(`http://${req.headers.host}${req.originalUrl}/`);\n return rawRes;\n }\n }\n\n if (req.method === 'POST' || req.method === 'PUT') {\n res.exposeAborted();\n\n rawRes.onData((arrayChunk: ArrayBuffer, isLast: boolean) => {\n req.stream.push(Buffer.from(arrayChunk.slice(0)));\n\n if (isLast) {\n req.stream.push(null);\n }\n });\n }\n\n if (res.aborted || res.done || req.method === 'OPTIONS') {\n debug('early returned ranning %o', {\n aborted: res.aborted,\n done: res.done,\n method: req.method\n });\n return;\n }\n\n if (_engine.async && _engine.await) {\n res.exposeAborted();\n response = await _engine.lookup(req, res).catch((err) => {\n this.handleError(err, req, res as HttpResponse);\n });\n if (res[resAbortHandler]) {\n res.onAborted(unregister);\n } else {\n unregister();\n }\n if (_requestPools.length < _poolsSize) {\n _requestPools.push(req);\n }\n if (_responsePools.length < _poolsSize) {\n _responsePools.push(res);\n }\n return rawRes;\n }\n\n await _engine.lookup(req, res).catch((err) => {\n this.handleError(err, req, res as HttpResponse);\n });\n if (res[resAbortHandler]) {\n res.onAborted(unregister);\n } else {\n unregister();\n }\n if (_requestPools.length < _poolsSize) {\n _requestPools.push(req);\n }\n if (_responsePools.length < _poolsSize) {\n _responsePools.push(res);\n }\n\n if (\n res &&\n !res.done &&\n !res.streaming &&\n response === undefined &&\n this.defaultRoute !== null\n ) {\n debug('routes lookup was not found any route, fallback to not-found');\n const notFound = await this.defaultRoute(req, res);\n\n if (notFound !== res) {\n res.send(notFound as string | Record);\n }\n }\n return rawRes;\n };\n\n app.any('/*', handler);\n\n _ws.forEach(({ path, options: wsOptions }) => {\n app.ws(path, wsOptions);\n });\n // Cleanup GC\n _ws.length = 0;\n _gc();\n\n this._ran = true;\n }\n\n return this;\n }\n\n listenSocket(\n port: number,\n host = 'localhost',\n is_ssl = false,\n handler: () => void = noop\n ): Promise {\n const { _options: options } = this;\n\n if (\n (port === 80 || port === 443) &&\n this.https &&\n options.https?.separateServer &&\n !this._separateServed\n ) {\n const httpsPort =\n typeof options.https.separateServer === 'number'\n ? options.https.separateServer\n : 443;\n this._separateServed = true;\n return Promise.all([\n this.listenSocket(port, host, false, handler),\n this.listenSocket(httpsPort, host, true, handler)\n ]);\n }\n\n return this._appApplyListen(host, port, is_ssl, handler);\n }\n\n listen(\n ...args: Array void)>\n ): Promise {\n let port = 8000;\n let host = 'localhost';\n let ssl = false;\n let handler: () => void = () => {};\n\n args.forEach((listenArg): void => {\n if (typeof +listenArg === 'number' && !Number.isNaN(+listenArg)) {\n port = +listenArg;\n } else if (typeof listenArg === 'function') {\n handler = listenArg;\n } else if (\n typeof listenArg === 'string' &&\n (listenArg === 'localhost' || listenArg.includes('.'))\n ) {\n host = listenArg;\n } else if (listenArg === true) {\n ssl = true;\n }\n });\n this.run();\n return this.listenSocket(port, host, ssl, handler);\n }\n\n close(port: number, host = 'localhost'): boolean {\n const id = `${host}:${port}`;\n const token = this._instance[id];\n\n this._separateServed = false;\n this.time[0] = 0;\n this.time[1] = 0;\n\n return this._close(token, id);\n }\n\n protected _appApplyListen(\n host: string,\n port: number,\n is_ssl = false,\n handler: () => void = noop\n ): Promise {\n const { _console, _options: options, _app: app } = this;\n const sslString = is_ssl ? 'HTTPS ' : is_ssl === false ? 'HTTP ' : '';\n\n return new Promise((resolve, reject): void => {\n if (port === undefined) {\n const _errorContext = 'error' in _console ? _console : console;\n\n _errorContext.error('[Server]: PORT is required');\n return undefined;\n }\n const id = `${host}:${port}`;\n\n const onListenHandler = (token: us_listen_socket): void => {\n if (token) {\n const _debugContext = 'debug' in _console ? _console : console;\n const end = process.hrtime(this.time);\n\n this._instance[id] = token;\n _debugContext.debug(\n `[${sslString}Server]: started successfully at [${id}] in [${(\n (Number(end[0]) * 1000 + Number(end[1])) /\n 1000000\n ).toFixed(2)}ms] on PID[${process.pid}]`\n );\n _gc();\n handler();\n return resolve(token);\n }\n const _errorContext = 'error' in _console ? _console : console;\n\n const err = new Error(\n this.https &&\n (!options.https ||\n !options.https.cert_file_name ||\n !options.https.key_file_name)\n ? `[${sslString}Server]: SSL certificate was not defined or loaded`\n : `[${sslString}Server]: failed to host at [${id}]`\n );\n _errorContext.error(err.message);\n _gc();\n return reject(err);\n };\n\n if (host && host !== 'localhost') {\n app.listen(host, port, onListenHandler);\n } else {\n app.listen(port, onListenHandler);\n }\n });\n }\n\n _close(token: us_listen_socket | null, id: string): boolean {\n const { _console } = this;\n\n if (token) {\n const _debugContext = 'debug' in _console ? _console : console;\n\n uWS.us_listen_socket_close(token);\n this._instance[id] = null;\n _debugContext.debug('[Server]: stopped successfully');\n _gc();\n\n return true;\n }\n\n const _errorContext = 'error' in _console ? _console : console;\n\n _errorContext.error('[Server]: Error, failed while stopping');\n _gc();\n\n return false;\n }\n\n /**\n * @deprecated There no way to disable these methods as they are not available by default\n */\n disable(tag: string): this {\n warn(\n `[Server]: The tag [${tag}] cannot be disabled as not set, not supported and not available`\n );\n return this;\n }\n\n /**\n * @deprecated Please use configuration at initialization such as `nanoexpress({json_spaces:2})` insteadof `app.set('json_spaces', 2)`\n */\n set(key: keyof INanoexpressOptions, value: string | number): this {\n // @ts-ignore\n this._options[key] = value;\n return this;\n }\n}\n\nexport default App;\n","import EventsEmitter from 'events';\nimport {\n HttpRequest,\n HttpResponse,\n us_socket_context_t,\n WebSocketBehavior\n} from 'uWebSockets.js';\nexport default function exposeWebsocket(\n handler: (req: HttpRequest, res: HttpResponse) => void | Promise,\n options = {}\n): WebSocketBehavior {\n if (typeof (options as WebSocketBehavior).open === 'function') {\n return options;\n }\n\n return {\n ...options,\n open(ws): void {\n ws.emit('connection', ws);\n },\n async upgrade(\n res: HttpResponse,\n req: HttpRequest,\n context: us_socket_context_t\n ): Promise {\n const secWsKey = req.getHeader('sec-websocket-key');\n const secWsProtocol = req.getHeader('sec-websocket-protocol');\n const secWsExtensions = req.getHeader('sec-websocket-extensions');\n\n const events = new EventsEmitter();\n\n res.on = events.on.bind(events);\n res.once = events.once.bind(events);\n res.off = events.off.bind(events);\n res.emit = events.emit.bind(events);\n\n let aborted = false;\n res.onAborted(() => {\n aborted = true;\n events.emit('error', { aborted });\n });\n\n res.emit('upgrade', req, res);\n\n try {\n await handler(req, res);\n } catch (error) {\n aborted = true;\n events.emit('error', error);\n }\n if (!aborted) {\n events.emit('willUpgrade', req);\n res.upgrade(\n { req, ...res },\n secWsKey,\n secWsProtocol,\n secWsExtensions,\n context\n );\n events.emit('upgraded', req);\n }\n },\n message: (ws, message, isBinary): void => {\n ws.emit('message', message, isBinary);\n },\n drain: (ws): void => {\n ws.emit('drain', ws.getBufferedAmount());\n },\n close: (ws, code, message): void => {\n ws.emit('close', code, message);\n }\n };\n}\n","import { Dependencies, register } from './manager';\n\nexport const useCallback = register(false, true);\n\nexport const useEffect = register(true);\nexport const useMemo = register(true, true);\nexport const useState = (initialValue: T): [T, (value: T) => void] => {\n let value = useMemo(() => initialValue, []) as T;\n\n const setValue = (newValue: T): void => {\n value = newValue;\n };\n\n return [value, setValue];\n};\nexport const useRef = (ref: T | null, dependencies: Dependencies): T =>\n useMemo(() => ({ current: ref ?? null }), dependencies);\n","import uWS from 'uWebSockets.js';\nimport { INanoexpressOptions } from '../types/nanoexpress';\nimport App from './app';\nimport { exposeWebsocket } from './exposes/index';\nimport { useCallback, useEffect, useMemo, useRef, useState } from './hooks';\nimport Router from './router';\n\n/**\n * Instance initializer for nanoexpress\n * @param options Instance options\n * @param options.enableExpressCompatibility Sets polyfill status\n * @param options.ignoreTrailingSlash Normalizes trailing slash on routes\n * @returns\n */\nconst nanoexpress = (\n options: INanoexpressOptions = {\n ignoreTrailingSlash: true,\n enableExpressCompatibility: false,\n responseMode: 'cork'\n }\n): App => {\n let app;\n\n if (options.https) {\n app = uWS.SSLApp(options.https);\n } else if (options.http) {\n app = uWS.App(options.http);\n } else {\n app = uWS.App();\n }\n\n return new App(options, app);\n};\n\nnanoexpress.Router = Router;\nnanoexpress.App = App;\n\n// Add exposes\nnanoexpress.exposeWebsocket = exposeWebsocket;\n\nexport {\n nanoexpress as default,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n};\n"],"names":["resRequest","resResponse","RouterTemplate"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index e7df96dc..6aefdaf9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@nanoexpress/ultimate", "type": "module", - "version": "1.5.1", + "version": "1.5.2", "description": "Ultimate solution based on nanoexpress and best-practices", "main": "cjs/nanoexpress.js", "module": "esm/nanoexpress.js", diff --git a/typings/polyfills/http-request.d.ts.map b/typings/polyfills/http-request.d.ts.map index 5571f4a2..9681790e 100644 --- a/typings/polyfills/http-request.d.ts.map +++ b/typings/polyfills/http-request.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"http-request.d.ts","sourceRoot":"","sources":["../../src/polyfills/http-request.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EACL,WAAW,IAAI,eAAe,EAC9B,YAAY,IAAI,gBAAgB,EACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGhF,MAAM,CAAC,OAAO,OAAO,WAAW,CAC9B,WAAW,GAAG,UAAU,EACxB,WAAW,SAAS,qBAAqB,GAAG,aAAa;IAEzD,SAAS,CAAC,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAE3C,SAAS,CAAC,CAAC,SAAS,CAAC,EAAG,YAAY,GAAG,IAAI,CAAC;IAE5C,SAAS,CAAC,CAAC,UAAU,CAAC,EAAG,eAAe,CAAC;IAEzC,SAAS,CAAC,CAAC,cAAc,CAAC,EAAG,gBAAgB,CAAC;IAE9C,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;IAE9B,OAAO,EAAG,MAAM,CAAC;IAEjB,GAAG,EAAG,MAAM,CAAC;IAEb,WAAW,EAAG,MAAM,CAAC;IAErB,IAAI,EAAG,MAAM,CAAC;IAEd,MAAM,EAAG,WAAW,CAAC;IAErB,OAAO,EAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAEjC,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE/B,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE3B,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAQ;IAEnC,MAAM,EAAG,QAAQ,CAAC;IAElB,EAAE,SAAK;gBAEK,OAAO,EAAE,mBAAmB;IAQxC,UAAU,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAgD7D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAQ3D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAetD,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG;CASrC"} \ No newline at end of file +{"version":3,"file":"http-request.d.ts","sourceRoot":"","sources":["../../src/polyfills/http-request.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EACL,WAAW,IAAI,eAAe,EAC9B,YAAY,IAAI,gBAAgB,EACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGhF,MAAM,CAAC,OAAO,OAAO,WAAW,CAC9B,WAAW,GAAG,UAAU,EACxB,WAAW,SAAS,qBAAqB,GAAG,aAAa;IAEzD,SAAS,CAAC,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAE3C,SAAS,CAAC,CAAC,SAAS,CAAC,EAAG,YAAY,GAAG,IAAI,CAAC;IAE5C,SAAS,CAAC,CAAC,UAAU,CAAC,EAAG,eAAe,CAAC;IAEzC,SAAS,CAAC,CAAC,cAAc,CAAC,EAAG,gBAAgB,CAAC;IAE9C,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;IAE9B,OAAO,EAAG,MAAM,CAAC;IAEjB,GAAG,EAAG,MAAM,CAAC;IAEb,WAAW,EAAG,MAAM,CAAC;IAErB,IAAI,EAAG,MAAM,CAAC;IAEd,MAAM,EAAG,WAAW,CAAC;IAErB,OAAO,EAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAEjC,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE/B,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE3B,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAQ;IAEnC,MAAM,EAAG,QAAQ,CAAC;IAElB,EAAE,SAAK;gBAEK,OAAO,EAAE,mBAAmB;IAQxC,UAAU,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,gBAAgB,GAAG,IAAI;IA+C7D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAQ3D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAetD,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG;CASrC"} \ No newline at end of file diff --git a/typings/polyfills/http-response.d.ts.map b/typings/polyfills/http-response.d.ts.map index a0b4d868..78ce6404 100644 --- a/typings/polyfills/http-response.d.ts.map +++ b/typings/polyfills/http-response.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"http-response.d.ts","sourceRoot":"","sources":["../../src/polyfills/http-response.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"http-response.d.ts","sourceRoot":"","sources":["../../src/polyfills/http-response.ts"],"names":[],"mappings":"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"} \ No newline at end of file