{"version":3,"file":"index.cjs","sources":["../../src/interfaces.ts","../../src/http-utils.ts","../../src/file-utils.ts","../../src/request-handlers/file-server.ts","../../../../node_modules/tslib/tslib.es6.js","../../src/http-context.ts","../../src/http-server.ts","../../src/request-handlers/push-state-handler.ts","../../src/server-options.ts","../../src/configuration.ts","../../src/path-utils.ts"],"sourcesContent":["import { DI, LogLevel as $LogLevel } from '@aurelia/kernel';\nimport { IHttpContext } from './http-context';\n\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' | 'none';\nexport interface IHttpServerOptions {\n  readonly root: string;\n  readonly port: number;\n  readonly hostName: string;\n  readonly logLevel: LogLevel;\n  /** @internal */\n  readonly level: $LogLevel;\n  readonly useHttp2: boolean;\n  readonly useHttps: boolean;\n  readonly key?: string;\n  readonly cert?: string;\n  readonly responseCacheControl?: string;\n}\n\nexport class StartOutput {\n  public constructor(\n    public readonly realPort: number,\n  ) {}\n}\n\nexport interface IHttpServer {\n  start(): Promise<StartOutput>;\n  stop(): Promise<void>;\n}\n\nexport interface IRequestHandler {\n  handleRequest(context: IHttpContext): Promise<void>;\n}\n\nexport interface IHttp2FileServer {\n  handleRequest(context: IHttpContext): void;\n}\n\nexport const IHttpServerOptions = DI.createInterface<IHttpServerOptions>('IHttpServerOptions');\nexport const IHttpServer = DI.createInterface<IHttpServer>('IHttpServer');\nexport const IRequestHandler = DI.createInterface<IRequestHandler>('IRequestHandler');\nexport const IHttp2FileServer = DI.createInterface<IHttp2FileServer>('IHttp2FileServer');\n","import { IncomingMessage, IncomingHttpHeaders } from 'http';\nimport { Http2ServerRequest, IncomingHttpHeaders as IncomingHttp2Headers, constants } from 'http2';\n\nexport enum HTTPStatusCode {\n  SwitchingProtocols = 101,\n\n  OK = 200,\n  Accepted = 202,\n  NoContent = 204,\n\n  Found = 302,\n\n  BadRequest = 400,\n  Unauthorized = 401,\n  Forbidden = 403,\n  NotFound = 404,\n  MethodNotAllowed = 405,\n\n  InternalServerError = 500,\n  BadGateway = 502,\n  ServiceUnavailable = 503,\n  GatewayTimeout = 504,\n}\n\nexport type ContentType =\n  /* unknown    */   ''\n  /* json       */ | 'application/json; charset=utf-8'\n  /* javascript */ | 'application/javascript; charset=utf-8'\n  /* plain      */ | 'text/plain; charset=utf-8'\n  /* html       */ | 'text/html; charset=utf-8'\n  /* css        */ | 'text/css; charset=utf-8'\n  ;\n\nexport type ContentEncoding = 'identity' | 'br' | 'gzip' | 'compress';\n  // | 'deflate' // Need to deal with this later. No known fixed file extension for deflate\n\nexport class HTTPError extends Error {\n  public readonly statusCode: number;\n\n  public constructor(statusCode: number, message?: string) {\n    super(message);\n\n    this.statusCode = statusCode;\n  }\n}\n\nexport async function readBuffer(req: IncomingMessage | Http2ServerRequest): Promise<Buffer> {\n  let totalLength: number = 0;\n  const chunks: Buffer[] = [];\n\n  req.on('data', function (chunk: Buffer) {\n    chunks.push(chunk);\n    totalLength += chunk.length;\n  });\n\n  return new Promise(function (resolve, reject) {\n    req.on('end', function () {\n      const buffer = Buffer.concat(chunks, totalLength);\n\n      resolve(buffer);\n    });\n\n    req.on('error', reject);\n  });\n}\n\nexport function getContentType(path: string): ContentType {\n  const i = path.lastIndexOf('.');\n  if (i >= 0) {\n    switch (path.slice(i)) {\n      case '.js': return 'application/javascript; charset=utf-8';\n      case '.css': return 'text/css; charset=utf-8';\n      case '.json': return 'application/json; charset=utf-8';\n      case '.html': return 'text/html; charset=utf-8';\n    }\n  }\n\n  return 'text/plain; charset=utf-8';\n}\n\nexport function getContentEncoding(path: string): ContentEncoding {\n  const i = path.lastIndexOf('.');\n  if (i >= 0) {\n    switch (path.slice(i)) {\n      case '.br': return 'br';\n      case '.gz': return 'gzip';\n      case '.lzw': return 'compress';\n    }\n  }\n\n  return 'identity';\n}\n\nexport type Headers = IncomingHttpHeaders | IncomingHttp2Headers;\n\nconst wildcardHeaderValue = {\n  [constants.HTTP2_HEADER_ACCEPT_ENCODING]: '*',\n  [constants.HTTP2_HEADER_ACCEPT]: '*/*',\n  [constants.HTTP2_HEADER_ACCEPT_CHARSET]: '*',\n  [constants.HTTP2_HEADER_ACCEPT_LANGUAGE]: '*',\n};\n\nexport class QualifiedHeaderValues {\n\n  public readonly headerName: string;\n  public readonly mostPrioritized: { name: string; q: number } | undefined;\n  private readonly parsedMap: Map<string, number>;\n\n  public constructor(\n    headerName: string,\n    headers: Headers\n  ) {\n    this.headerName = headerName.toLowerCase();\n    const rawValue: string = (headers[headerName] ?? headers[this.headerName]) as string;\n    headerName = this.headerName;\n    const parsedMap = this.parsedMap = new Map<string, number>();\n    if (rawValue === void 0) {\n      const wildcardValue = wildcardHeaderValue[headerName];\n      if (wildcardValue !== void 0) {\n        parsedMap.set(wildcardValue, 1);\n      }\n      return;\n    }\n\n    // TODO handle the partial values such as `text/html;q=0.8,text/*;q=0.8,*/*;q=0.8`, `*`, or `*;q=0.8`\n    /**\n     * Example:\n     * Header-Name: value1\n     * Header-Name: value1, value2, value3\n     * Header-Name: value1, value2;q=[0-1], value3;q=[0-1]\n     */\n\n    for (const item of rawValue.split(',')) {\n      // TODO validate the `value` against a set of acceptable values.\n      const [value, ...rest] = item.trim().split(';');\n      let qValue = 1;\n      const q = rest.find((x) => x.startsWith('q='));\n      if (q !== void 0) {\n        const rawQValue = q.substring(2);\n        qValue = Number(rawQValue);\n        if (Number.isNaN(qValue) || qValue < 0 || qValue > 1) {\n          throw new Error(`Invalid qValue ${rawQValue} for ${value} in ${headerName} header; raw values: ${rawValue}`);\n        }\n      }\n      parsedMap.set(value, qValue);\n      if (this.mostPrioritized === void 0 || this.mostPrioritized.q < qValue) {\n        this.mostPrioritized = { name: value, q: qValue };\n      }\n    }\n  }\n\n  public isAccepted(value: string) {\n    const qValue = this.parsedMap.get(value);\n    if (qValue !== void 0) {\n      return qValue !== 0;\n    }\n    return this.parsedMap.has(wildcardHeaderValue[this.headerName]);\n  }\n\n  public getQValueFor(value: string) {\n    const qValue = this.parsedMap.get(value);\n    return qValue ?? 0;\n  }\n}\n","import {\n  readFile as $readFile,\n  constants,\n  access,\n  exists as $exists,\n  mkdir as $mkdir,\n  lstat,\n  readdir as $readdir,\n  Stats,\n  rmdir as $rmdir,\n  unlink as $unlink\n} from \"fs\";\nimport { join } from 'path';\n\nexport async function readFile(path: string): Promise<Buffer>;\nexport async function readFile(path: string, options: string): Promise<string>;\nexport async function readFile(path: string, options: { encoding: BufferEncoding }): Promise<string>;\nexport async function readFile(path: string, options: { encoding?: null }): Promise<Buffer>;\nexport async function readFile(path: string, options?: string | { encoding?: null | BufferEncoding; flag?: string } | null) {\n\n  return new Promise<string | Buffer>(function (resolve, reject) {\n    $readFile(path, options as Exclude<typeof options, string>, function (err, data) {\n      if (err !== null) {\n        reject(err);\n      } else {\n        resolve(data);\n      }\n    });\n  });\n\n}\n\nexport async function isReadable(path: string): Promise<boolean> {\n  return new Promise(function (resolve) {\n    access(path, constants.F_OK, (err) => {\n      resolve(err === null);\n    });\n  });\n}\n\nexport async function ensureDir(path: string): Promise<void> {\n\n  if (await exists(path)) { return; }\n\n  return mkdir(path);\n}\n\nexport async function exists(path: string) {\n  return new Promise<boolean>(res => { $exists(path, res); });\n}\n\nexport async function mkdir(path: string): Promise<void> {\n  return new Promise<void>(function (resolve, reject) {\n    $mkdir(path, { recursive: true }, function (err) {\n      if (err !== null) {\n        reject(err);\n      } else {\n        resolve();\n      }\n    });\n  });\n}\n\nexport async function rimraf(path: string): Promise<void> {\n  const stats = await getStats(path);\n\n  if (stats.isDirectory()) {\n    await Promise.all((await readdir(path)).map(async x => rimraf(join(path, x))));\n    await rmdir(path);\n  } else if (stats.isFile() || stats.isSymbolicLink()) {\n    await unlink(path);\n  }\n}\n\nexport async function getStats(path: string): Promise<Stats> {\n  return new Promise<Stats>(function (resolve, reject) {\n    lstat(path, function (err, $stats) {\n      if (err !== null) {\n        reject(err);\n      } else {\n        resolve($stats);\n      }\n    });\n  });\n}\n\nexport async function readdir(path: string): Promise<string[]> {\n  return new Promise<string[]>(function (resolve, reject) {\n    $readdir(path, function (err, files) {\n      if (err !== null) {\n        reject(err);\n      } else {\n        resolve(files);\n      }\n    });\n  });\n}\n\nexport async function rmdir(path: string) {\n  return new Promise<void>(function (resolve, reject) {\n    $rmdir(path, function (err) {\n      if (err !== null) {\n        reject(err);\n      } else {\n        resolve();\n      }\n    });\n  });\n}\n\nexport async function unlink(path: string) {\n  return new Promise<void>(function (resolve, reject) {\n    $unlink(path, function (err) {\n      if (err !== null) {\n        reject(err);\n      } else {\n        resolve();\n      }\n    });\n  });\n}\n","import { statSync, openSync, readdirSync } from 'fs';\nimport { IncomingMessage, ServerResponse } from 'http';\nimport { ServerHttp2Stream, constants, Http2ServerRequest, Http2ServerResponse, OutgoingHttpHeaders } from 'http2';\nimport { join, resolve, relative, extname } from 'path';\nimport { ILogger, resolve as diResolve } from '@aurelia/kernel';\nimport { IRequestHandler, IHttpServerOptions, IHttp2FileServer } from '../interfaces';\nimport { IHttpContext } from '../http-context';\nimport { getContentType, HTTPStatusCode, getContentEncoding, ContentEncoding } from '../http-utils';\nimport { readFile, isReadable, exists } from '../file-utils';\n\nconst {\n  HTTP2_HEADER_PATH,\n  HTTP2_HEADER_CONTENT_LENGTH,\n  HTTP2_HEADER_LAST_MODIFIED,\n  HTTP2_HEADER_CONTENT_TYPE,\n  HTTP2_HEADER_ACCEPT_ENCODING,\n  HTTP2_HEADER_CONTENT_ENCODING,\n  HTTP2_HEADER_CACHE_CONTROL\n} = constants;\n\nconst contentEncodingExtensionMap = {\n  br: '.br',\n  gzip: '.gz',\n  compress: '.lzw'\n};\nconst compressedFileExtensions: Set<string> = new Set(Object.values(contentEncodingExtensionMap));\n\nexport class FileServer implements IRequestHandler {\n  private readonly root: string;\n  private readonly cacheControlDirective: string;\n\n  private readonly opts: IHttpServerOptions = diResolve(IHttpServerOptions);\n  private readonly logger: ILogger = diResolve(ILogger).root.scopeTo('FileServer');\n\n  public constructor() {\n    this.cacheControlDirective = this.opts.responseCacheControl ?? 'max-age=3600';\n    this.root = resolve(this.opts.root);\n\n    this.logger.debug(`Now serving files from: \"${this.root}\"`);\n  }\n\n  public async handleRequest(context: IHttpContext): Promise<void> {\n    const request = context.request;\n    const response = context.response;\n\n    if (!(request instanceof IncomingMessage && response instanceof ServerResponse)) { return; }\n    const parsedUrl = context.requestUrl;\n    const path = join(this.root, parsedUrl.path!);\n\n    if (await isReadable(path)) {\n      this.logger.debug(`Serving file \"${path}\"`);\n\n      const contentType = getContentType(path);\n      const clientEncoding = determineContentEncoding(context);\n\n      let contentEncoding: ContentEncoding = (void 0)!;\n      let content: any = (void 0)!;\n      if (\n        clientEncoding === 'br'\n        || clientEncoding === 'gzip'\n        || clientEncoding === 'compress'\n      ) {\n        const compressedFile = `${path}${contentEncodingExtensionMap[clientEncoding]}`;\n        if (await exists(compressedFile)) {\n          content = await readFile(compressedFile);\n          contentEncoding = getContentEncoding(compressedFile);\n        }\n      }\n      // handles 'identity' and 'deflate' (as no specific extension is known, and on-the-fly compression might be expensive)\n      if (contentEncoding === void 0 || content === void 0) {\n        content = await readFile(path);\n        contentEncoding = getContentEncoding(path);\n      }\n\n      response.writeHead(HTTPStatusCode.OK, {\n        'Content-Type': contentType,\n        'Content-Encoding': contentEncoding,\n        'Cache-Control': this.cacheControlDirective\n      });\n\n      await new Promise<void>(function (resolve) {\n        response.end(content, resolve);\n      });\n\n    } else {\n      this.logger.debug(`File \"${path}\" could not be found`);\n\n      response.writeHead(HTTPStatusCode.NotFound);\n\n      await new Promise(function (resolve) {\n        response.end(resolve);\n      });\n    }\n\n    context.state = 'end';\n  }\n\n}\n\n/**\n * File server with HTTP/2 push support\n */\nexport class Http2FileServer implements IHttp2FileServer {\n\n  private readonly cacheControlDirective: string;\n  private readonly root: string;\n  private readonly filePushMap: Map<string, PushInfo> = new Map<string, PushInfo>();\n\n  private readonly opts: IHttpServerOptions = diResolve(IHttpServerOptions);\n  private readonly logger: ILogger = diResolve(ILogger).root.scopeTo('Http2FileServer');\n\n  public constructor() {\n    this.cacheControlDirective = this.opts.responseCacheControl ?? 'max-age=3600';\n    this.root = resolve(this.opts.root);\n    this.prepare();\n    this.logger.debug(`Now serving files from: \"${this.root}\"`);\n  }\n\n  public handleRequest(context: IHttpContext): void {\n    const request = context.request;\n    const response = context.response;\n\n    if (!(request instanceof Http2ServerRequest && response instanceof Http2ServerResponse)) { return; }\n    const parsedUrl = context.requestUrl;\n    const parsedPath = parsedUrl.path!;\n    const path = join(this.root, parsedPath);\n\n    const contentEncoding = determineContentEncoding(context);\n    const file = this.getPushInfo(parsedPath, contentEncoding);\n\n    if (file !== void 0) {\n      this.logger.debug(`Serving file \"${path}\"`);\n\n      const stream = response.stream;\n      // TODO make this configurable\n      if (parsedPath === '/index.html') {\n        this.pushAll(stream, contentEncoding);\n      }\n\n      stream.respondWithFD(file.fd, file.headers);\n\n    } else {\n      this.logger.debug(`File \"${path}\" could not be found`);\n      response.writeHead(HTTPStatusCode.NotFound);\n      response.end();\n    }\n\n    context.state = 'end';\n  }\n\n  private pushAll(stream: ServerHttp2Stream, contentEncoding: string) {\n    for (const path of this.filePushMap.keys()) {\n      if (!path.endsWith('index.html') && !compressedFileExtensions.has(extname(path))) {\n        this.push(stream, path, this.getPushInfo(path, contentEncoding)!);\n      }\n    }\n  }\n\n  private push(stream: ServerHttp2Stream, filePath: string, { fd, headers }: PushInfo) {\n    const pushHeaders = { [HTTP2_HEADER_PATH]: filePath };\n\n    stream.pushStream(pushHeaders, (_err, pushStream) => {\n      // TODO handle error\n      this.logger.debug(`pushing ${filePath}`);\n      pushStream.respondWithFD(fd, headers);\n    });\n  }\n\n  private prepare(root = this.opts.root) {\n    const cacheControlDirective = this.cacheControlDirective;\n    for (const item of readdirSync(root)) {\n      const path = join(root, item);\n      const stats = statSync(path);\n      if (stats.isFile()) {\n        this.filePushMap.set(`/${relative(this.root, path)}`, PushInfo.create(path, cacheControlDirective));\n      } else {\n        this.prepare(path);\n      }\n    }\n  }\n\n  private getPushInfo(path: string, contentEncoding: string) {\n    if (\n      contentEncoding === 'br'\n      || contentEncoding === 'gzip'\n      || contentEncoding === 'compress'\n    ) {\n      const info = this.filePushMap.get(`${path}${contentEncodingExtensionMap[contentEncoding]}`);\n      if (info !== void 0) { return info; }\n    }\n    // handles 'identity' and 'deflate' (as no specific extension is known, and on-the-fly compression might be expensive)\n    return this.filePushMap.get(path);\n  }\n}\n\nclass PushInfo {\n  public static create(path: string, cacheControlDirective: string) {\n    const stat = statSync(path);\n    return new PushInfo(\n      openSync(path, 'r'),\n      {\n        [HTTP2_HEADER_CONTENT_LENGTH]: stat.size,\n        [HTTP2_HEADER_LAST_MODIFIED]: stat.mtime.toUTCString(),\n        [HTTP2_HEADER_CONTENT_TYPE]: getContentType(path),\n        [HTTP2_HEADER_CONTENT_ENCODING]: getContentEncoding(path),\n        [HTTP2_HEADER_CACHE_CONTROL]: cacheControlDirective\n      }\n    );\n  }\n  public constructor(\n    public fd: number,\n    public headers: OutgoingHttpHeaders,\n  ) { }\n}\n\nfunction determineContentEncoding(context: IHttpContext) {\n  const clientEncoding = context.getQualifiedRequestHeaderFor(HTTP2_HEADER_ACCEPT_ENCODING);\n\n  // if brotli compression is supported return `br`\n  if (clientEncoding.isAccepted('br')) {\n    return 'br';\n  }\n  // else return the highest prioritized content\n  return clientEncoding.mostPrioritized?.name ?? 'identity';\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n    ownKeys = Object.getOwnPropertyNames || function (o) {\r\n        var ar = [];\r\n        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n        return ar;\r\n    };\r\n    return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose, inner;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n            if (async) inner = dispose;\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    var r, s = 0;\r\n    function next() {\r\n        while (r = env.stack.pop()) {\r\n            try {\r\n                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n                if (r.dispose) {\r\n                    var result = r.dispose.call(r.value);\r\n                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n                }\r\n                else s |= 1;\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n    if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n        return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n            return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n        });\r\n    }\r\n    return path;\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __esDecorate: __esDecorate,\r\n    __runInitializers: __runInitializers,\r\n    __propKey: __propKey,\r\n    __setFunctionName: __setFunctionName,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { IContainer } from '@aurelia/kernel';\nimport { IncomingMessage, ServerResponse } from 'http';\nimport { Http2ServerRequest, Http2ServerResponse } from 'http2';\nimport * as $url from 'url';\nimport { QualifiedHeaderValues } from './http-utils';\n\nexport type HttpContextState = 'head' | 'body' | 'end';\n\nexport interface IHttpContext extends HttpContext { }\n\nexport class HttpContext implements IHttpContext {\n  public readonly container: IContainer;\n  public state: HttpContextState = 'head';\n  private readonly parsedHeaders: Record<string, QualifiedHeaderValues> = Object.create(null);\n  private readonly _requestUrl: $url.UrlWithStringQuery;\n  private rewrittenUrl: $url.UrlWithStringQuery | null = null;\n\n  public constructor(\n    container: IContainer,\n    public readonly request: IncomingMessage | Http2ServerRequest,\n    public readonly response: ServerResponse | Http2ServerResponse,\n    public readonly requestBuffer: Buffer,\n  ) {\n    this.container = container.createChild();\n    this._requestUrl = $url.parse(request.url!);\n  }\n\n  public getQualifiedRequestHeaderFor(headerName: string): QualifiedHeaderValues {\n    return this.parsedHeaders[headerName]\n      ?? (this.parsedHeaders[headerName] = new QualifiedHeaderValues(headerName, this.request.headers));\n  }\n\n  public rewriteRequestUrl(url: string) {\n    this.rewrittenUrl = $url.parse(url);\n  }\n\n  public get requestUrl(): $url.UrlWithStringQuery {\n    return this.rewrittenUrl ?? this._requestUrl;\n  }\n}\n","import { readFileSync } from 'fs';\nimport { Server, createServer, IncomingMessage, ServerResponse, RequestListener } from 'http';\nimport * as https from 'https';\nimport { Http2Server as $Http2Server, createSecureServer, Http2ServerRequest, Http2ServerResponse } from 'http2';\n\nimport { ILogger, bound, all, IContainer, resolve } from '@aurelia/kernel';\nimport { IHttpServer, IHttpServerOptions, IRequestHandler, StartOutput, IHttp2FileServer } from './interfaces';\nimport { AddressInfo } from 'net';\nimport { HTTPStatusCode, readBuffer } from './http-utils';\nimport { HttpContext } from './http-context';\n\nexport class HttpServer implements IHttpServer {\n  private server: Server | null = null;\n\n  private readonly logger: ILogger = resolve(ILogger).root.scopeTo('HttpServer');\n  private readonly opts: IHttpServerOptions = resolve(IHttpServerOptions);\n  private readonly container: IContainer = resolve(IContainer);\n  private readonly handlers: readonly IRequestHandler[] = resolve(all(IRequestHandler));\n\n  public async start(): Promise<StartOutput> {\n    this.logger.debug(`start()`);\n\n    const { hostName, port, useHttps, key, cert } = this.opts;\n\n    const server = this.server = (\n      useHttps\n        ? https.createServer({ key: readFileSync(key!), cert: readFileSync(cert!) }, this.handleRequest as RequestListener)\n        : createServer(this.handleRequest as RequestListener)\n    ).listen(port, hostName);\n    await new Promise(resolve => server.on('listening', resolve));\n\n    const { address, port: realPort } = this.server.address() as AddressInfo;\n    this.logger.info(`Now listening on ${address}:${realPort} (configured: ${hostName}:${port})`);\n\n    return new StartOutput(realPort);\n  }\n\n  public async stop(): Promise<void> {\n    this.logger.debug(`stop()`);\n\n    await new Promise(resolve => this.server!.close(resolve));\n  }\n\n  @bound\n  private async handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    this.logger.debug(`handleRequest(url=${req.url})`);\n\n    try {\n      const buffer = await readBuffer(req);\n      const context = new HttpContext(this.container, req, res, buffer);\n      for (const handler of this.handlers) {\n        // TODO: we need to identify here if the request is handled, if yes then break. Contextually, if the request is not handled by any handlers, we should panic, throw error and cause mayhem.\n        // eslint-disable-next-line no-await-in-loop\n        await handler.handleRequest(context);\n      }\n    } catch (err) {\n      this.logger.error(`handleRequest Error: ${(err as Error).message}\\n${(err as Error).stack}`);\n\n      res.statusCode = HTTPStatusCode.InternalServerError;\n      res.end();\n    }\n  }\n}\n\nexport class Http2Server implements IHttpServer {\n  private server: $Http2Server | null = null;\n\n  private readonly logger: ILogger = resolve(ILogger).root.scopeTo('Http2Server');\n  private readonly opts: IHttpServerOptions = resolve(IHttpServerOptions);\n  private readonly container: IContainer = resolve(IContainer);\n  private readonly http2FileServer: IHttp2FileServer = resolve(IHttp2FileServer);\n\n  public async start(): Promise<StartOutput> {\n    this.logger.debug(`start()`);\n\n    const { hostName, port, cert, key } = this.opts;\n\n    const server = this.server = createSecureServer(\n      {\n        key: readFileSync(key!),\n        cert: readFileSync(cert!)\n      },\n      this.handleRequest // Do we need this at all?\n    ).listen(port, hostName);\n    await new Promise(resolve => server.on('listening', resolve));\n\n    const { address, port: realPort } = server.address() as AddressInfo;\n    this.logger.info(`Now listening on ${address}:${realPort} (configured: ${hostName}:${port})`);\n\n    return new StartOutput(realPort);\n  }\n\n  public async stop(): Promise<void> {\n    this.logger.debug(`stop()`);\n\n    await new Promise(resolve => this.server!.close(resolve));\n  }\n\n  @bound\n  private handleRequest(req: Http2ServerRequest, res: Http2ServerResponse): void {\n    this.logger.info(`handleRequest(url=${req.url})`);\n\n    try {\n      // const buffer = await readBuffer(req); // TODO handle this later\n      const context = new HttpContext(this.container, req, res, null!);\n      this.http2FileServer.handleRequest(context);\n    } catch (err) {\n      this.logger.error(`handleRequest Error: ${(err as Error).message}\\n${(err as Error).stack}`);\n\n      res.statusCode = HTTPStatusCode.InternalServerError;\n      res.end();\n    }\n  }\n}\n","import { constants } from 'http2';\nimport { IHttpContext } from '../http-context';\nimport { IRequestHandler } from '../interfaces';\n\nexport class PushStateHandler implements IRequestHandler {\n  public async handleRequest(context: IHttpContext): Promise<void> {\n    const request = context.request;\n    const url = context.requestUrl.href;\n\n    /**\n     * Ignore the request if one of the following is condition holds:\n     * 1. Not a GET request.\n     * 2. Client does not accept html.\n     * 3. The path has a dot (.) in the last fragment; dot rule.\n     */\n    if (\n      request.method !== 'GET'\n      || !context.getQualifiedRequestHeaderFor(constants.HTTP2_HEADER_ACCEPT).isAccepted('text/html')\n      || url.lastIndexOf('.') > url.lastIndexOf('/')\n    ) {\n      return;\n    }\n\n    context.rewriteRequestUrl('/index.html');\n  }\n}\n","import { LogLevel as $LogLevel } from '@aurelia/kernel';\nimport { EOL } from 'os';\nimport { resolve } from 'path';\nimport { IHttpServerOptions, LogLevel } from './interfaces';\n\nconst space = ' ';\n\nexport class HttpServerOptions implements IHttpServerOptions {\n  public constructor(\n    public root: string = './public/',\n    public hostName: string = '0.0.0.0',\n    public port: number = 8080,\n    public useHttp2: boolean = false,\n    public useHttps: boolean = false,\n    public key: string | undefined = undefined,\n    public cert: string | undefined = undefined,\n    public logLevel: LogLevel = 'info',\n    public responseCacheControl: string | undefined = 'max-age=3600',\n  ) { }\n\n  public applyConfig(config: Partial<IHttpServerOptions>) {\n    // non-nested object-tree is expected.\n    for (const [key, value] of Object.entries(config)) {\n      (this as any)[key] = value;\n    }\n  }\n\n  /** @internal */\n  public validate(): void {\n    const useHttp2 = this.useHttp2;\n    const useHttps = this.useHttps;\n    const key = this.key;\n    const cert = this.cert;\n    if ((useHttp2 || useHttps) && !(key && cert)) { // boolean coercion is needed\n      throw new Error(`key and cert are required for a HTTP/2 server`);\n    }\n  }\n\n  public toString(indent = '') {\n    const l2Indent = `${indent}${space.repeat(2)}`;\n    return `${indent}root${EOL}`\n      + `${l2Indent}Description: The HTTP or HTTP/2 server serves the files from this directory${EOL}`\n      + `${l2Indent}Value: ${this.root}${EOL}`\n      + `${indent}hostName${EOL}`\n      + `${l2Indent}Description: The host-name to be used${EOL}`\n      + `${l2Indent}Value: ${this.hostName}${EOL}`\n      + `${indent}port${EOL}`\n      + `${l2Indent}Description: The port to be used${EOL}`\n      + `${l2Indent}Value: ${this.port}${EOL}`\n      + `${indent}useHttp2${EOL}`\n      + `${l2Indent}Description: Whether to use HTTP/2 or not${EOL}`\n      + `${l2Indent}Value: ${this.useHttp2}${EOL}`\n      + `${indent}useHttps${EOL}`\n      + `${l2Indent}Description: Whether to use SSL or not${EOL}`\n      + `${l2Indent}Value: ${this.useHttps}${EOL}`\n      + `${indent}key${EOL}`\n      + `${l2Indent}Description: Optional path to the key file; required for https:// and HTTP/2${EOL}`\n      + `${l2Indent}Value: ${this.key}${EOL}`\n      + `${indent}cert${EOL}`\n      + `${l2Indent}Description: Optional path to the certificate file; required for https:// and HTTP/2${EOL}`\n      + `${l2Indent}Value: ${this.cert}${EOL}`\n      + `${indent}logLevel${EOL}`\n      + `${l2Indent}Description: Log level used by the HTTP server${EOL}`\n      + `${l2Indent}Value: ${this.logLevel}${EOL}`\n      ;\n  }\n\n  public get level(): $LogLevel {\n    const logLevel = this.logLevel;\n    if (typeof logLevel === 'number') { return logLevel; }\n    switch (logLevel) {\n      case 'trace': return $LogLevel.trace;\n      case 'debug': return $LogLevel.debug;\n      case 'info': return $LogLevel.info;\n      case 'warn': return $LogLevel.warn;\n      case 'error': return $LogLevel.error;\n      case 'fatal': return $LogLevel.fatal;\n      case 'none': return $LogLevel.none;\n    }\n  }\n\n  public applyOptionsFromCli(cwd: string, args: string[], argPrefix = '') {\n    const unconsumedArgs: string[] = [];\n    while (args.length > 0) {\n      const key = args[0].trim().replace(/-/g, '');\n      const value = args[1];\n      switch (key) {\n        case `${argPrefix}root`:\n          this.root = resolve(cwd, value);\n          break;\n        case `${argPrefix}hostName`:\n          this.hostName = value;\n          break;\n        case `${argPrefix}port`:\n          this.port = Number(value);\n          break;\n        case `${argPrefix}key`:\n          this.key = resolve(cwd, value);\n          break;\n        case `${argPrefix}cert`:\n          this.cert = resolve(cwd, value);\n          break;\n        case `${argPrefix}useHttp2`:\n          this.useHttp2 = value === 'true';\n          break;\n        case `${argPrefix}logLevel`:\n          this.logLevel = value as unknown as LogLevel;\n          break;\n        case `${argPrefix}responseCacheControl`:\n          this.responseCacheControl = value;\n          break;\n        default:\n          unconsumedArgs.push(key, value);\n          break;\n      }\n      args.splice(0, 2);\n    }\n\n    if (unconsumedArgs.length > 0) {\n      console.warn(`Following arguments are not consumed ${unconsumedArgs.join(',')}`);\n    }\n  }\n}\n","import { ConsoleSink, IContainer, IPlatform, LoggerConfiguration, Registration } from '@aurelia/kernel';\nimport { Platform } from '@aurelia/platform';\nimport { Http2Server, HttpServer } from './http-server';\nimport { IHttp2FileServer, IHttpServer, IHttpServerOptions, IRequestHandler } from './interfaces';\nimport { FileServer, Http2FileServer } from './request-handlers/file-server';\nimport { PushStateHandler } from './request-handlers/push-state-handler';\nimport { HttpServerOptions } from './server-options';\n\nconst opts: HttpServerOptions = new HttpServerOptions();\n\nexport const HttpServerConfiguration = {\n  create(customization: Partial<IHttpServerOptions>) {\n    opts.applyConfig(customization);\n    opts.validate();\n    return {\n      register(container: IContainer): IContainer {\n        container.register(\n          Registration.instance(IHttpServerOptions, opts),\n          Registration.singleton(IRequestHandler, PushStateHandler),\n          Registration.singleton(IRequestHandler, FileServer),\n          Registration.singleton(IHttp2FileServer, Http2FileServer),\n          LoggerConfiguration.create({ sinks: [ConsoleSink], level: opts.level, colorOptions: 'colors' }),\n          Registration.instance(IPlatform, new Platform(globalThis)),\n        );\n\n        if (opts.useHttp2) {\n          container.register(Registration.singleton(IHttpServer, Http2Server));\n        } else {\n          container.register(Registration.singleton(IHttpServer, HttpServer));\n        }\n\n        return container;\n      },\n    };\n  }\n};\n","import { join, resolve } from 'path';\n\nexport const normalizePath = (function () {\n  const cache: Record<string, string | undefined> = Object.create(null);\n  const regex = /\\\\/g;\n  return function (path: string) {\n    let normalized = cache[path];\n    if (normalized === void 0) {\n      normalized = cache[path] = path.replace(regex, '/');\n    }\n    return normalized;\n  };\n})();\n\nexport function joinPath(...paths: string[]): string {\n  return normalizePath(join(...paths));\n}\n\nexport function resolvePath(...paths: string[]): string {\n  return normalizePath(resolve(...paths));\n}\n"],"names":["DI","HTTPStatusCode","constants","$readFile","access","$exists","diResolve","ILogger","resolve","IncomingMessage","ServerResponse","path","join","Http2ServerRequest","Http2ServerResponse","extname","readdirSync","statSync","relative","openSync","$url","IContainer","all","https","readFileSync","createServer","bound","createSecureServer","EOL","$LogLevel","Registration","LoggerConfiguration","ConsoleSink","IPlatform","Platform"],"mappings":"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","x_google_ignoreList":[4]}