{"version":3,"file":"rxap-open-api.mjs","sources":["../../../../../packages/angular/open-api/src/lib/error.ts","../../../../../packages/angular/open-api/src/lib/tokens.ts","../../../../../packages/angular/open-api/src/lib/utilities.ts","../../../../../packages/angular/open-api/src/lib/open-api-config.service.ts","../../../../../packages/angular/open-api/src/lib/open-api-http-response.error.ts","../../../../../packages/angular/open-api/src/lib/open-api-init.ts","../../../../../packages/angular/open-api/src/lib/schema-validation.mixin.ts","../../../../../packages/angular/open-api/src/index.ts","../../../../../packages/angular/open-api/src/rxap-open-api.ts"],"sourcesContent":["import { RxapError } from '@rxap/utilities';\n\nexport class RxapOpenApiError extends RxapError {\n\n  constructor(message: string, code?: string, scope?: string) {\n    super('@rxap/open-api', message, code ?? '', scope);\n  }\n\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const RXAP_OPEN_API_CONFIG = new InjectionToken('rxap/open-api/config');\nexport const RXAP_OPEN_API_STRICT_VALIDATOR = new InjectionToken('rxap/open-api/strict-validator');\nexport const DEFAULT_OPEN_API_REMOTE_METHOD_META_DATA = new InjectionToken(\n  'rxap/open-api/default-remote-method-meta-data');\nexport const DEFAULT_OPEN_API_DATA_SOURCE_META_DATA = new InjectionToken('rxap/open-api/default-data-source-meta-data');\nexport const DISABLE_SCHEMA_VALIDATION = new InjectionToken<boolean>('rxap/open-api/disable-schema-validation', {\n  providedIn: 'root',\n  factory: () => true,\n});\nexport const DISABLE_VALIDATION = new InjectionToken<boolean>('rxap/open-api/disable-validation', {\n  providedIn: 'root',\n  factory: () => true,\n});\n","import { OpenAPIV3 } from 'openapi-types';\nimport { RxapOpenApiError } from './error';\n\nexport function IsReferenceObject(obj?: any): obj is OpenAPIV3.ReferenceObject {\n  return !!obj && obj.hasOwnProperty('$ref');\n}\n\nexport function NotContainsReferenceObjects<T>(array?: Array<OpenAPIV3.ReferenceObject | T | undefined>): array is T[] {\n  return !!array && array.every(item => !IsReferenceObject(item) && !!item);\n}\n\nexport function IsOpenApiV3(obj?: any): obj is OpenAPIV3.Document {\n  return !!obj && obj.hasOwnProperty('openapi') && obj.openapi.match(/^3\\./);\n}\n\nexport function AssertOpenApiV3(obj?: any): asserts obj is OpenAPIV3.Document {\n\n  if (!IsOpenApiV3(obj)) {\n    throw new RxapOpenApiError('Only openapi version 3.x.x is supported');\n  }\n\n}\n","import {\n  Inject,\n  Injectable,\n  isDevMode,\n  Optional,\n} from '@angular/core';\nimport {\n  OpenAPI,\n  OpenAPIV3,\n} from 'openapi-types';\nimport { OperationObjectWithMetadata } from './open-api';\nimport { RXAP_OPEN_API_CONFIG } from './tokens';\nimport { AssertOpenApiV3 } from './utilities';\n\nexport type OperationMap = Map<string, OperationObjectWithMetadata>;\n\n@Injectable({ providedIn: 'root' })\nexport class OpenApiConfigService {\n  public static Config: OpenAPIV3.Document | null = null;\n\n  public static DefaultServerIndex = 0;\n\n  private static _operations: OperationMap | null = null;\n  public defaultServerIndex: number = OpenApiConfigService.DefaultServerIndex;\n  private _operations: OperationMap | null = null;\n  private static serverConfigMap = new Map<string | undefined, OpenAPIV3.ServerObject[]>();\n\n  private get serverConfigMap(): Map<string | undefined, OpenAPIV3.ServerObject[]> {\n    return OpenApiConfigService.serverConfigMap;\n  }\n\n  get serverIds(): string[] {\n    return Object.keys(this.serverConfigMap);\n  }\n\n  constructor(\n    @Optional()\n    @Inject(RXAP_OPEN_API_CONFIG)\n      config: OpenAPIV3.Document | null = null,\n  ) {\n    config = config ?? OpenApiConfigService.Config;\n    if (config) {\n      this._config = config;\n      this._operations = OpenApiConfigService.LoadOperations(config);\n    }\n    OpenApiConfigService.Config ??= config;\n  }\n\n  private _config: OpenAPIV3.Document | null = null;\n\n  public get config(): OpenAPIV3.Document {\n    if (!this._config) {\n      throw new Error('Could not load open api config');\n    }\n    return this._config;\n  }\n\n  /**\n   * Used to load the app open api config from a remote resource.\n   *\n   * Promise.all([ OpenApiDataSourceLoader.Load() ])\n   * .then(() => platformBrowserDynamic().bootstrapModule(AppModule))\n   * .catch(err => console.error(err))\n   *\n   */\n  public static async Load(openApiUrl = 'openapi.json'): Promise<void> {\n    if (!openApiUrl) {\n      throw new Error('The open api url is not defined!');\n    }\n\n    let config: OpenAPIV3.Document | null = null;\n    try {\n      const response = await fetch(openApiUrl);\n      config = await response.json();\n    } catch (error: any) {\n      console.debug(\n        `Could not load the open api config from '${ openApiUrl }'!`,\n        error,\n      );\n      console.error(\n        `Could not load the open api config from '${ openApiUrl }'!`,\n        error.message,\n      );\n    }\n\n    if (config) {\n      const expandedConfig = await this.ExpandOpenApi(config);\n\n      AssertOpenApiV3(expandedConfig);\n\n      this.Config = expandedConfig;\n    } else {\n      this.Config = null;\n    }\n  }\n\n  public static GetOperation(operationId: string): OperationObjectWithMetadata {\n    if (!this.Config) {\n      throw new Error('Could not load open api config');\n    }\n\n    if (!this._operations) {\n      this._operations = this.LoadOperations(this.Config);\n    }\n    if (!this._operations!.has(operationId)) {\n      throw new Error(\n        `The operation '${ operationId }' is not defined in the openapi-json`,\n      );\n    }\n    return this._operations!.get(operationId)!;\n  }\n\n  private static LoadOperations(config: OpenAPIV3.Document): OperationMap {\n    const operations = new Map<string, OperationObjectWithMetadata>();\n\n    Object.entries(config.paths)\n          .filter(\n            (item): item is [ string, OpenAPIV3.PathItemObject ] =>\n              item[0] !== undefined,\n          )\n          .filter(\n            ([ _, methods ]: [ string, OpenAPIV3.PathItemObject ]) =>\n              methods &&\n              Object.keys(methods).some((method) =>\n                [ 'get', 'put', 'post', 'delete', 'patch' ].includes(method),\n              ),\n          )\n          .forEach(([ path, methods ]: [ string, OpenAPIV3.PathItemObject ]) =>\n            Object.entries(methods)\n                  .filter(\n                    (item): item is [ string, OpenAPIV3.OperationObject ] =>\n                      item[0] !== undefined,\n                  )\n                  .forEach(\n                    ([ method, operation ]: [ string, OpenAPIV3.OperationObject ]) => {\n                      if (!operation.operationId) {\n                        throw new Error('The OpenApu OperationId is not defined');\n                      }\n\n                      if (operations!.has(operation.operationId)) {\n                        throw new Error(\n                          `The OpenApi Operation '${ operation.operationId }' is already defined.`,\n                        );\n                      }\n\n                      operations!.set(operation.operationId, {\n                        ...operation,\n                        path: path,\n                        method: method.toUpperCase(),\n                      });\n                    },\n                  ),\n          );\n\n    return operations;\n  }\n\n  private static GetBaseUrl(\n    config: OpenAPIV3.Document,\n    serverIndex: number = this.DefaultServerIndex,\n  ): string {\n    const server = config.servers ? config.servers[serverIndex] : null;\n\n    if (!server) {\n      console.debug(\n        `Could not extract the server config with the index '${ serverIndex }' from the open api config`,\n        config,\n      );\n      throw new Error(\n        `Could not extract the server config with the index '${ serverIndex }' from the open api config`,\n      );\n    }\n\n    return server.url;\n  }\n\n  /**\n   * Replaces all $ref with the concrete definition\n   *\n   * @param config\n   * @private\n   */\n  private static ExpandOpenApi(\n    config: OpenAPI.Document,\n  ): Promise<OpenAPI.Document> {\n    return Promise.resolve(config);\n  }\n\n  public getOperation(operationId: string): OperationObjectWithMetadata {\n    if (!this._operations) {\n      if (!this._config) {\n        throw new Error('The operations map is not loaded and the config object is not loaded');\n      }\n      this._operations = OpenApiConfigService.LoadOperations(this._config);\n    }\n    if (!this._operations.has(operationId)) {\n      console.error(\n        `The operation '${ operationId }' is not defined in the openapi-json`,\n        isDevMode() ? this.config : undefined,\n      );\n      throw new Error(\n        `The operation '${ operationId }' is not defined in the openapi-json`,\n      );\n    }\n    return this._operations.get(operationId)!;\n  }\n\n  public getBaseUrl(serverIndex: number = this.defaultServerIndex, serverId?: string): string {\n    let serverConfig: OpenAPIV3.ServerObject | undefined;\n    const servers = this._config?.servers ?? [];\n    if (!serverId && servers) {\n      serverConfig = servers[serverIndex];\n    }\n    if (this.serverConfigMap.has(serverId)) {\n      serverConfig = this.serverConfigMap.get(serverId)![serverIndex];\n    }\n    if (!serverConfig) {\n      console.error(\n        `Could not determine the base url with the index '${ serverIndex }' and the serverId '${ serverId }'`,\n        isDevMode() ? servers : undefined,\n      );\n      throw new Error(`Could not determine the base url with the index '${ serverIndex }' and the serverId '${ serverId }'`);\n    }\n    return serverConfig.url;\n  }\n\n  public static InsertServer(\n    serverConfig: OpenAPIV3.ServerObject,\n    index: number,\n    serverId?: string,\n    config: OpenAPIV3.Document = this.Config!,\n  ): void {\n    if (!serverId && config) {\n      if (!config.servers) {\n        config.servers = [];\n      }\n      config.servers.splice(index, 1, serverConfig);\n    }\n    if (!this.serverConfigMap.has(serverId)) {\n      this.serverConfigMap.set(serverId, []);\n    }\n    const list = this.serverConfigMap.get(serverId)!;\n    list[index] = serverConfig;\n    this.serverConfigMap.set(serverId, list);\n  }\n\n  public insertServer(\n    serverConfig: OpenAPIV3.ServerObject,\n    index: number = this.defaultServerIndex,\n    serverId?: string,\n  ): void {\n    OpenApiConfigService.InsertServer(serverConfig, index, serverId, this.config);\n  }\n\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { OpenApiMetaData } from './open-api.meta-data';\n\nexport class OpenApiHttpResponseError extends HttpErrorResponse {\n\n  constructor(\n    public readonly httpErrorResponse: HttpErrorResponse,\n    public readonly metadata: OpenApiMetaData,\n  ) {\n    super({\n      error: httpErrorResponse.error,\n      headers: httpErrorResponse.headers,\n      status: httpErrorResponse.status,\n      statusText: httpErrorResponse.statusText,\n      url: httpErrorResponse.url ?? undefined,\n    });\n    if ((Error as any)['captureStackTrace']) {\n      (Error as any)['captureStackTrace'](this, OpenApiHttpResponseError);\n    }\n    Reflect.set(this, 'name', 'OpenApiHttpResponseError');\n  }\n\n  get operationId() {\n    return this.metadata.id;\n  }\n\n  get serverId() {\n    return this.metadata.serverId;\n  }\n\n}\n","import { ConfigService } from '@rxap/config';\nimport { Environment } from '@rxap/environment';\nimport { JoinPath } from '@rxap/utilities';\nimport { OpenApiConfigService } from './open-api-config.service';\n\nexport interface OpenApiInitOptions {\n  /**\n   * true - load the open api config file from the default url\n   * default url: openapi.json\n   */\n  load?: {\n    openApiUrl?: string;\n  } | boolean;\n  /**\n   * The location origin prefix for the open api base urls if the base url is not absolute. defaults to location.origin\n   */\n  origin?: string;\n}\n\nexport function OpenApiInit(environment: Environment, options: OpenApiInitOptions = {}) {\n  const api = ConfigService.Get<Record<string, { baseUrl?: string }> & { baseUrl: string }>(\n    'api',\n    {} as any,\n    ConfigService.Config,\n  );\n  options.origin ??= environment.origin ?? location.origin;\n  options.load ??= environment.openApi?.load ?? false;\n  if (api.baseUrl) {\n    OpenApiConfigService.InsertServer({\n      url: api.baseUrl.match(/^https?:\\/\\//) ? api.baseUrl : JoinPath(options.origin, api.baseUrl),\n    }, OpenApiConfigService.DefaultServerIndex);\n  }\n  for (const [ serverId, config ] of Object.entries(api)) {\n    if (config && typeof config === 'object') {\n      const baseUrl = config.baseUrl;\n      if (baseUrl) {\n        const url = baseUrl.match(/^https?:\\/\\//) ? baseUrl : JoinPath(options.origin, baseUrl);\n        console.debug(`Add server '${ serverId }' with url '${ url }'`);\n        OpenApiConfigService.InsertServer(\n          { url },\n          OpenApiConfigService.DefaultServerIndex,\n          serverId,\n        );\n      }\n    }\n  }\n  if (options.load) {\n    return OpenApiConfigService.Load(typeof options.load === 'object' ? options.load.openApiUrl : undefined);\n  }\n  return undefined;\n}\n","import {\n  HttpHeaders,\n  HttpParams,\n} from '@angular/common/http';\nimport { isDevMode } from '@angular/core';\nimport { HttpRemoteMethodParameter } from '@rxap/remote-method/http';\nimport {\n  assertsObject,\n  coerceArray,\n  isPromiseLike,\n  IsRecord,\n} from '@rxap/utilities';\nimport Ajv from 'ajv';\nimport { OpenAPIV3 } from 'openapi-types';\nimport { RxapOpenApiError } from './error';\nimport { OperationObjectWithMetadata } from './open-api';\nimport {\n  IsReferenceObject,\n  NotContainsReferenceObjects,\n} from './utilities';\n\nexport interface SchemaValidationResponse<Data> {\n  headers: HttpHeaders;\n  status: number;\n  body?: Data | null;\n  data?: Data;\n}\n\n\n\nexport class SchemaValidationMixin<Response = any, Parameters extends Record<string, any> | void = any, RequestBody = any> {\n\n  public static STRICT = false;\n\n  protected disableSchemaValidation?: boolean;\n\n  /**\n   * Validates the parameters against the schema specified in the operation object\n   *\n   * @param operation\n   * @param parameters\n   * @param strict\n   * @protected\n   */\n  public validateParameters(operation: OperationObjectWithMetadata, parameters?: Parameters, strict = false): void {\n\n    const operationParameters = coerceArray(operation.parameters);\n\n    if (!NotContainsReferenceObjects<OpenAPIV3.ParameterObject>(operationParameters)) {\n      throw new RxapOpenApiError('The operation parameters contains ReferenceObject!');\n    }\n\n    if (parameters === undefined) {\n      // TODO : find concept to definition witch parameter should not be checked if required\n      // header parameters are never required if changes the semantic release manager breaks\n      const requiredParameters = operationParameters.filter(parameter => parameter.required &&\n        parameter.in !==\n        'header');\n      if (requiredParameters.length) {\n        if (isDevMode()) {\n          console.debug('Some operation parameters are required!', requiredParameters.map(p => p.name));\n        }\n        this.validationError('Some operation parameters are required!', strict);\n      }\n\n    } else if (IsRecord(parameters)) {\n\n      for (const parameter of operationParameters) {\n\n        if (parameter.required) {\n          // header parameters are never required if changes the semantic release manager breaks\n          if (parameter.in !== 'header') {\n            if (!parameters.hasOwnProperty(parameter.name)) {\n              this.validationError(`The operation parameter '${ parameter.name }' is required!`, strict);\n            }\n          }\n        }\n\n\n        if (parameter.schema) {\n          if (parameters.hasOwnProperty(parameter.name)) {\n\n            const value = parameters[parameter.name];\n\n            if (!this.validate(parameter.schema, value)) {\n              this.validationError(\n                `The parameter '${ parameter.name }' is not valid against the schema!`,\n                strict,\n                parameter.schema,\n                value,\n              );\n            }\n\n          }\n        }\n\n      }\n\n    } else {\n      if (operationParameters.length === 0 || operationParameters.every(op => !op.required)) {\n        if (isDevMode()) {\n          console.warn(\n            `The operation ${ operation.operationId } does not expect any parameters. But a parameter is provided.`,\n            parameters,\n          );\n        }\n      } else {\n        throw new Error('The parameters object is not a record');\n      }\n    }\n\n  }\n\n  /**\n   * Validates the http response against the schema specified in the operation object\n   *\n   * @param operation\n   * @param response\n   * @param strict\n   * @protected\n   */\n  public validateResponse(\n    operation: OperationObjectWithMetadata,\n    response: SchemaValidationResponse<Response>,\n    strict = false,\n  ): void {\n\n    // region only validate the response if the content type is undefined or application/json\n\n    const contentType = response.headers.get('Content-Type');\n\n    if (contentType && contentType !== 'application/json') {\n      if (isDevMode()) {\n        console.warn('Response validation is only supported for content type application/json');\n      }\n      return;\n    }\n\n    // endregion\n\n    if (operation.responses) {\n\n      const status = response.status;\n\n      // region extract the response object based on the response status\n      let responseObject: OpenAPIV3.ResponseObject | OpenAPIV3.ReferenceObject | undefined;\n\n      if (operation.responses[status]) {\n        responseObject = operation.responses[status];\n      } else {\n        // use the default response object if no matching was found.\n        responseObject = operation.responses['default'];\n      }\n      // endregion\n\n      if (responseObject) {\n\n        if (IsReferenceObject(responseObject)) {\n          throw new RxapOpenApiError('Found a reference object. The operation config is not expand!');\n        }\n\n        // region validate the response against the schema if defined\n\n        // TODO : create schema that validates all parameters at once\n\n        if (responseObject.content &&\n          responseObject.content['application/json'] &&\n          responseObject.content['application/json'].schema) {\n\n          const schema = responseObject.content['application/json'].schema;\n\n          const data = response.body ?? response.data;\n\n          if (!this.validate(schema, data)) {\n            this.validationError('The response is not valid ageist the operation schema!', strict, schema, data);\n          }\n\n        }\n\n        // endregion\n\n      }\n\n\n    }\n\n  }\n\n  public validateRequestBody(operation: OperationObjectWithMetadata, body?: RequestBody, strict = false): void {\n\n    // only validate body if type of object\n    if (typeof body !== 'object') {\n      return;\n    }\n\n    if (operation.requestBody) {\n\n      if (IsReferenceObject(operation.requestBody)) {\n        throw new RxapOpenApiError('Found a reference object. The operation config is not expand!');\n      }\n\n      if (body === undefined && operation.requestBody.required) {\n        this.validationError('The request body is required!', strict);\n      }\n\n      if (operation.requestBody.content && operation.requestBody.content['application/json']) {\n\n        const schema = operation.requestBody.content['application/json'].schema;\n\n        if (schema) {\n          if (!this.validate(schema, body)) {\n            this.validationError('The request body is not valid!', strict, schema, body);\n          }\n        }\n\n      }\n\n    }\n\n  }\n\n  public validationError(\n    message: string,\n    strict: boolean,\n    schema?: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject,\n    value?: any,\n  ) {\n    if (isDevMode() && schema !== undefined) {\n      console.debug(\n        message,\n        {\n          schema,\n          value,\n        },\n      );\n    }\n    if (strict || SchemaValidationMixin.STRICT) {\n      throw new RxapOpenApiError(message, '', 'SchemaValidationMixin');\n    } else {\n      console.warn(message);\n    }\n  }\n\n  public buildHttpParams(\n    operationParameters: OpenAPIV3.ParameterObject[],\n    parameters?: Parameters,\n    ignoreUndefined = true,\n  ): HttpParams {\n\n    let params = new HttpParams();\n\n    if (IsRecord(parameters)) {\n\n      for (const parameter of operationParameters.filter(p => p.in === 'query')) {\n        const parameterName = parameter.name;\n\n        if (parameters.hasOwnProperty(parameter.name)) {\n\n          const value = parameters[parameter.name];\n\n          if (value === undefined && ignoreUndefined) {\n            continue;\n          }\n\n          if (Array.isArray(value)) {\n\n            if (value.length) {\n\n              const first = value.shift();\n\n              params = params.set(parameterName, typeof first === 'object' ? JSON.stringify(first) : first);\n\n              for (const item of value) {\n                params = params.append(parameterName, typeof item === 'object' ? JSON.stringify(item) : item);\n              }\n\n            }\n\n          } else {\n            params = params.set(parameter.name, typeof value === 'object' ? JSON.stringify(value) : value);\n          }\n\n        }\n\n      }\n\n    }\n\n    return params;\n\n  }\n\n  public buildHttpHeaders(operationParameters: OpenAPIV3.ParameterObject[], parameters?: Parameters): HttpHeaders {\n\n    let headers = new HttpHeaders();\n\n    if (IsRecord(parameters)) {\n\n      for (const parameter of operationParameters.filter(p => p.in === 'header')) {\n\n        if (parameters.hasOwnProperty(parameter.name)) {\n\n          const value = parameters[parameter.name];\n\n          if (Array.isArray(value)) {\n\n            if (value.length) {\n\n              const first = value.shift();\n\n              headers = headers.set(parameters['name'], typeof first === 'object' ? JSON.stringify(first) : first);\n\n              for (const item of value) {\n                headers = headers.append(parameters['name'], typeof item === 'object' ? JSON.stringify(item) : item);\n              }\n\n            }\n\n          } else {\n            headers = headers.set(parameter.name, typeof value === 'object' ? JSON.stringify(value) : value);\n          }\n\n        }\n\n      }\n\n    }\n\n    return headers;\n\n  }\n\n  public buildHttpPathParams(\n    operationParameters: OpenAPIV3.ParameterObject[],\n    parameters?: Parameters,\n  ): Record<string, string> {\n\n    const pathParams: Record<string, any> = {};\n\n    if (IsRecord(parameters)) {\n\n      for (const parameter of operationParameters.filter(p => p.in === 'path')) {\n\n        if (parameters.hasOwnProperty(parameter.name)) {\n          pathParams[parameter.name] = encodeURIComponent(typeof parameters[parameter.name] === 'object' ?\n            JSON.stringify(parameters[parameter.name]) :\n            parameters[parameter.name]);\n        }\n\n      }\n\n    }\n\n    return pathParams;\n\n  }\n\n  /**\n   * Converts open api parameters into the corresponding http options to\n   * create a http request. The transformation is guided by the openapi definition\n   *\n   * @param operation\n   * @param parameters\n   * @param requestBody\n   * @param ignoreUndefined\n   */\n  public buildHttpOptions(\n    operation: OperationObjectWithMetadata,\n    parameters?: Parameters,\n    requestBody?: RequestBody,\n    ignoreUndefined = true,\n  ): HttpRemoteMethodParameter {\n\n    const options: HttpRemoteMethodParameter = {};\n\n    const operationParameters = coerceArray(operation.parameters);\n\n    if (!NotContainsReferenceObjects<OpenAPIV3.ParameterObject>(operationParameters)) {\n      throw new RxapOpenApiError('The operation parameters contains ReferenceObject!');\n    }\n\n    const params = this.buildHttpParams(operationParameters, parameters, ignoreUndefined);\n    const headers = this.buildHttpHeaders(operationParameters, parameters);\n    const pathParams: Record<string, any> = this.buildHttpPathParams(operationParameters, parameters);\n\n    if (params.keys().length) {\n      options.params = params;\n    }\n\n    if (headers.keys().length) {\n      options.headers = headers;\n    }\n\n    if (Object.keys(pathParams).length) {\n      options.pathParams = pathParams;\n    }\n\n    if (requestBody !== undefined) {\n      const [ body, contentType ] = this.buildBody(operation, requestBody);\n      if (body !== undefined) {\n        options.body = body;\n        if (contentType !== undefined) {\n          options.headers ??= new HttpHeaders();\n          options.headers.set('Content-Type', contentType);\n        }\n      }\n    }\n\n    return options;\n\n  }\n\n  private buildBody(operation: OperationObjectWithMetadata, requestBody: RequestBody): [ any, string | undefined ] {\n    const accept: string[] = [];\n    if (operation.requestBody && !IsReferenceObject(operation.requestBody)) {\n      if (operation.requestBody.content) {\n        for (const contentType of Object.keys(operation.requestBody.content)) {\n          accept.push(contentType);\n        }\n      }\n    }\n    if (!accept.length) {\n      console.warn('No content type found for the request body! Omitting the body!');\n      return [ undefined, undefined ];\n    }\n    if (accept.length > 1) {\n      console.warn('Multiple content types found for the request body! Using the first one!');\n    }\n    const contentType = accept[0];\n    switch (contentType) {\n\n      case 'application/json':\n        assertsObject(requestBody);\n        return [ requestBody, contentType ];\n\n      case 'application/x-www-form-urlencoded':\n        assertsObject(requestBody);\n        // eslint-disable-next-line no-case-declarations\n        let params = new HttpParams();\n        for (const [ key, value ] of Object.entries(requestBody)) {\n          params = params.set(key, value);\n        }\n        return [ params.toString(), contentType ];\n\n      case 'multipart/form-data':\n        assertsObject(requestBody);\n        // eslint-disable-next-line no-case-declarations\n        const formData = new FormData();\n\n        // Iterate through the JSON object and append each field to FormData\n        for (const [ key, value ] of Object.entries(requestBody)) {\n          formData.append(key, value);\n        }\n        return [ formData, contentType ];\n\n      default:\n        return [ requestBody, contentType ];\n\n    }\n\n  }\n\n  private validate(schema: string | boolean | object, value: any): boolean {\n\n    if (this.disableSchemaValidation) {\n      return true;\n    }\n\n    if (typeof schema !== 'object') {\n      throw new Error('The schema must be an object!');\n    }\n\n    if (!schema) {\n      throw new Error('The schema must not be null or undefined!');\n    }\n\n    let result: boolean | PromiseLike<any>;\n\n    const ajv = new Ajv();\n    const validate = ajv.compile(schema);\n\n    try {\n      result = validate(value);\n    } catch (e: any) {\n      console.error(e.message);\n      return false;\n    }\n\n    if (isPromiseLike(result)) {\n      throw new Error(\n        'Async schema validation is not yet supported. Ensure the all refs in the openapi schema are internal!');\n    }\n\n    return result;\n  }\n\n}\n","// region \nexport * from './lib/error';\nexport * from './lib/open-api-config.service';\nexport * from './lib/open-api-http-response.error';\nexport * from './lib/open-api-init';\nexport * from './lib/open-api.meta-data';\nexport * from './lib/open-api';\nexport * from './lib/schema-validation.mixin';\nexport * from './lib/tokens';\nexport * from './lib/utilities';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}