{"version":3,"sources":["../../../src/frameworks/body-parser/base-body-parser.framework.ts","../../../src/frameworks/body-parser/json-body-parser.framework.ts","../../../src/frameworks/body-parser/raw-body-parser.framework.ts","../../../src/frameworks/body-parser/text-body-parser.framework.ts","../../../src/frameworks/body-parser/urlencoded-body-parser.framework.ts"],"sourcesContent":["//#region Imports\n\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport type { NextHandleFunction } from 'connect';\nimport type { HttpError } from 'http-errors';\nimport type { FrameworkContract } from '../../contracts';\nimport { getDefaultIfUndefined } from '../../core';\n\n//#endregion\n\n/**\n * The options for {@link BaseBodyParserFramework}\n *\n * @breadcrumb Frameworks / BodyParserFramework\n * @public\n */\nexport type BodyParserOptions = {\n  /**\n   * Implements a custom way of handling error.\n   *\n   * @defaultValue {@link BaseBodyParserFramework.defaultHandleOnError}\n   *\n   * @example\n   * ```typescript\n   * customErrorHandler: (req: IncomingMessage, response: ServerResponse, error: HttpError<any>) => {\n   *   response.setHeader('content-type', 'text/plain');\n   *   response.statusCode = error.statusCode;\n   *   // always call end to return the error\n   *   response.end(error.message);\n   * }\n   * ```\n   *\n   * @param request - The referecene for request\n   * @param response - The reference for response\n   * @param error - The error throwed by body-parser\n   */\n  customErrorHandler?: (\n    request: IncomingMessage,\n    response: ServerResponse,\n    error: HttpError<any>,\n  ) => void;\n};\n\n/**\n * The base class used by other body-parser functions to parse a specific content-type\n *\n * @breadcrumb Frameworks / BodyParserFramework\n * @public\n */\nexport class BaseBodyParserFramework<TApp> implements FrameworkContract<TApp> {\n  //#region Constructor\n\n  /**\n   * Default Constructor\n   */\n  protected constructor(\n    protected readonly framework: FrameworkContract<TApp>,\n    protected readonly middleware: NextHandleFunction,\n    protected readonly options?: BodyParserOptions,\n  ) {\n    this.errorHandler = getDefaultIfUndefined(\n      this.options?.customErrorHandler,\n      this.defaultHandleOnError.bind(this),\n    );\n  }\n\n  //#endregion\n\n  //#region Protected Properties\n\n  /**\n   * The selected error handler\n   */\n  protected readonly errorHandler: NonNullable<\n    BodyParserOptions['customErrorHandler']\n  >;\n\n  //#endregion\n\n  //#region Public Methods\n\n  /**\n   * {@inheritDoc}\n   */\n  public sendRequest(\n    app: TApp,\n    request: IncomingMessage,\n    response: ServerResponse,\n  ): void {\n    this.middleware(\n      request,\n      response,\n      this.onBodyParserFinished(app, request, response),\n    );\n  }\n\n  //#endregion\n\n  //#region Protected Methods\n\n  /**\n   * Handle next execution called by the cors package\n   */\n  protected onBodyParserFinished(\n    app: TApp,\n    request: IncomingMessage,\n    response: ServerResponse,\n  ): () => void {\n    return (err?: any) => {\n      if (err) return this.errorHandler(request, response, err);\n\n      this.framework.sendRequest(app, request, response);\n    };\n  }\n\n  /**\n   * The default function to handle errors\n   *\n   * @param _request - The referecene for request\n   * @param response - The reference for response\n   * @param error - The error throwed by body-parser\n   */\n  protected defaultHandleOnError(\n    _request: IncomingMessage,\n    response: ServerResponse,\n    error: HttpError<any>,\n  ): void {\n    response.setHeader('content-type', 'text/plain');\n    response.statusCode = error.statusCode;\n    response.end(error.message);\n  }\n\n  //#endregion\n}\n","//#region Imports\n\nimport { type OptionsJson, json } from 'body-parser';\nimport { type FrameworkContract } from '../../contracts';\nimport {\n  BaseBodyParserFramework,\n  type BodyParserOptions,\n} from './base-body-parser.framework';\n\n//#endregion\n\n/**\n * The body-parser options for application/json\n *\n * @remarks {@link https://github.com/expressjs/body-parser#bodyparserjsonoptions}\n *\n * @breadcrumb Frameworks / BodyParserFramework / JsonBodyParserFramework\n * @public\n */\nexport type JsonBodyParserFrameworkOptions = OptionsJson & BodyParserOptions;\n\n/**\n * The body-parser class used to parse application/json.\n *\n * @breadcrumb Frameworks / BodyParserFramework / JsonBodyParserFramework\n * @public\n */\nexport class JsonBodyParserFramework<TApp>\n  extends BaseBodyParserFramework<TApp>\n  implements FrameworkContract<TApp>\n{\n  //#region Constructor\n\n  /**\n   * Default Constructor\n   */\n  constructor(\n    framework: FrameworkContract<TApp>,\n    options?: JsonBodyParserFrameworkOptions,\n  ) {\n    super(framework, json(options), options);\n  }\n\n  //#endregion\n}\n","//#region Imports\n\nimport { type Options, raw } from 'body-parser';\nimport type { FrameworkContract } from '../../contracts';\nimport {\n  BaseBodyParserFramework,\n  type BodyParserOptions,\n} from './base-body-parser.framework';\n\n//#endregion\n\n/**\n * The body-parser options for application/octet-stream\n *\n * @remarks {@link https://github.com/expressjs/body-parser#bodyparserrawoptions}\n *\n * @breadcrumb Frameworks / BodyParserFramework / RawBodyParserFramework\n * @public\n */\nexport type RawBodyParserFrameworkOptions = Options & BodyParserOptions;\n\n/**\n * The body-parser class used to parse application/octet-stream.\n *\n * @breadcrumb Frameworks / BodyParserFramework / RawBodyParserFramework\n * @public\n */\nexport class RawBodyParserFramework<TApp>\n  extends BaseBodyParserFramework<TApp>\n  implements FrameworkContract<TApp>\n{\n  //#region Constructor\n\n  /**\n   * Default Constructor\n   */\n  constructor(\n    framework: FrameworkContract<TApp>,\n    options?: RawBodyParserFrameworkOptions,\n  ) {\n    super(framework, raw(options), options);\n  }\n\n  //#endregion\n}\n","//#region Imports\n\nimport { type OptionsText, text } from 'body-parser';\nimport type { FrameworkContract } from '../../contracts';\nimport {\n  BaseBodyParserFramework,\n  type BodyParserOptions,\n} from './base-body-parser.framework';\n\n//#endregion\n\n/**\n * The body-parser options for text/plain\n *\n * @remarks {@link https://github.com/expressjs/body-parser#bodyparsertextoptions}\n *\n * @breadcrumb Frameworks / BodyParserFramework / TextBodyParserFramework\n * @public\n */\nexport type TextBodyParserFrameworkOptions = OptionsText & BodyParserOptions;\n\n/**\n * The body-parser class used to parse text/plain.\n *\n * @breadcrumb Frameworks / BodyParserFramework / TextBodyParserFramework\n * @public\n */\nexport class TextBodyParserFramework<TApp>\n  extends BaseBodyParserFramework<TApp>\n  implements FrameworkContract<TApp>\n{\n  //#region Constructor\n\n  /**\n   * Default Constructor\n   */\n  constructor(\n    framework: FrameworkContract<TApp>,\n    options?: TextBodyParserFrameworkOptions,\n  ) {\n    super(framework, text(options), options);\n  }\n\n  //#endregion\n}\n","//#region Imports\n\nimport { type OptionsUrlencoded, urlencoded } from 'body-parser';\nimport { type FrameworkContract } from '../../contracts';\nimport {\n  BaseBodyParserFramework,\n  type BodyParserOptions,\n} from './base-body-parser.framework';\n\n//#endregion\n\n/**\n * The body parser options for application/x-www-form-urlencoded\n *\n * @remarks {@link https://github.com/expressjs/body-parser#bodyparserurlencodedoptions}\n *\n * @breadcrumb Frameworks / BodyParserFramework / UrlencodedBodyParserFramework\n * @public\n */\nexport type UrlencodedBodyParserFrameworkOptions = OptionsUrlencoded &\n  BodyParserOptions;\n\n/**\n * The body-parser class used to parse application/x-www-form-urlencoded.\n *\n * @breadcrumb Frameworks / BodyParserFramework / UrlencodedBodyParserFramework\n * @public\n */\nexport class UrlencodedBodyParserFramework<TApp>\n  extends BaseBodyParserFramework<TApp>\n  implements FrameworkContract<TApp>\n{\n  //#region Constructor\n\n  /**\n   * Default Constructor\n   */\n  constructor(\n    framework: FrameworkContract<TApp>,\n    options?: UrlencodedBodyParserFrameworkOptions,\n  ) {\n    super(framework, urlencoded(options), options);\n  }\n\n  //#endregion\n}\n"],"mappings":"2HAiDO,IAAMA,EAAN,KAAuE,CAMlE,YACWC,EACAC,EACAC,EACnB,CAHmB,eAAAF,EACA,gBAAAC,EACA,aAAAC,EAEnB,KAAK,aAAeC,EAClB,KAAK,SAAS,mBACd,KAAK,qBAAqB,KAAK,IAAI,CACrC,CACF,CAhEF,MAiD8E,CAAAC,EAAA,gCAwBzD,aAWZ,YACLC,EACAC,EACAC,EACM,CACN,KAAK,WACHD,EACAC,EACA,KAAK,qBAAqBF,EAAKC,EAASC,CAAQ,CAClD,CACF,CASU,qBACRF,EACAC,EACAC,EACY,CACZ,OAAQC,GAAc,CACpB,GAAIA,EAAK,OAAO,KAAK,aAAaF,EAASC,EAAUC,CAAG,EAExD,KAAK,UAAU,YAAYH,EAAKC,EAASC,CAAQ,CACnD,CACF,CASU,qBACRE,EACAF,EACAG,EACM,CACNH,EAAS,UAAU,eAAgB,YAAY,EAC/CA,EAAS,WAAaG,EAAM,WAC5BH,EAAS,IAAIG,EAAM,OAAO,CAC5B,CAGF,ECnIA,OAA2B,QAAAC,MAAY,cAyBhC,IAAMC,EAAN,cACGC,CAEV,CA9BA,MA8BA,CAAAC,EAAA,gCAME,YACEC,EACAC,EACA,CACA,MAAMD,EAAWE,EAAKD,CAAO,EAAGA,CAAO,CACzC,CAGF,EC1CA,OAAuB,OAAAE,MAAW,cAyB3B,IAAMC,EAAN,cACGC,CAEV,CA9BA,MA8BA,CAAAC,EAAA,+BAME,YACEC,EACAC,EACA,CACA,MAAMD,EAAWE,EAAID,CAAO,EAAGA,CAAO,CACxC,CAGF,EC1CA,OAA2B,QAAAE,MAAY,cAyBhC,IAAMC,EAAN,cACGC,CAEV,CA9BA,MA8BA,CAAAC,EAAA,gCAME,YACEC,EACAC,EACA,CACA,MAAMD,EAAWE,EAAKD,CAAO,EAAGA,CAAO,CACzC,CAGF,EC1CA,OAAiC,cAAAE,MAAkB,cA0B5C,IAAMC,EAAN,cACGC,CAEV,CA/BA,MA+BA,CAAAC,EAAA,sCAME,YACEC,EACAC,EACA,CACA,MAAMD,EAAWE,EAAWD,CAAO,EAAGA,CAAO,CAC/C,CAGF","names":["BaseBodyParserFramework","framework","middleware","options","getDefaultIfUndefined","__name","app","request","response","err","_request","error","json","JsonBodyParserFramework","BaseBodyParserFramework","__name","framework","options","json","raw","RawBodyParserFramework","BaseBodyParserFramework","__name","framework","options","raw","text","TextBodyParserFramework","BaseBodyParserFramework","__name","framework","options","text","urlencoded","UrlencodedBodyParserFramework","BaseBodyParserFramework","__name","framework","options","urlencoded"]}