{"version":3,"file":"rxap-open-api-data-source.mjs","sources":["../../../../../packages/angular/open-api/data-source/src/lib/error.ts","../../../../../packages/angular/open-api/data-source/src/lib/open-api.data-source.ts","../../../../../packages/angular/open-api/data-source/src/lib/open-api-data-source.loader.ts","../../../../../packages/angular/open-api/data-source/src/index.ts","../../../../../packages/angular/open-api/data-source/src/rxap-open-api-data-source.ts"],"sourcesContent":["import { RxapOpenApiError } from '@rxap/open-api';\n\nexport class RxapOpenApiDataSourceError extends RxapOpenApiError {\n\n  constructor(message: string, code?: string, scope?: string) {\n    super(message, code, scope);\n    this.addSubPackageName('data-source');\n  }\n\n}\n","import {\n  Inject,\n  Injectable,\n  Optional,\n} from '@angular/core';\nimport {\n  DEFAULT_OPEN_API_DATA_SOURCE_META_DATA,\n  DISABLE_SCHEMA_VALIDATION,\n  DISABLE_VALIDATION,\n  OpenApiConfigService,\n  OperationObjectWithMetadata,\n  RXAP_OPEN_API_STRICT_VALIDATOR,\n  SchemaValidationMixin,\n} from '@rxap/open-api';\nimport { HttpClient, HttpErrorResponse, HttpEventType, HttpResponse } from '@angular/common/http';\nimport {\n  deepMerge,\n  KeyValue,\n} from '@rxap/utilities';\nimport {\n  BaseHttpDataSource,\n  HttpDataSourceMetadata,\n  HttpDataSourceOptions,\n  HttpDataSourceViewer,\n} from '@rxap/data-source/http';\nimport {\n  RXAP_DATA_SOURCE_REFRESH,\n  RxapDataSource,\n} from '@rxap/data-source';\nimport {\n  EMPTY,\n  Observable,\n  Subject,\n  throwError,\n} from 'rxjs';\nimport {\n  catchError,\n  filter,\n  map,\n  retry,\n  take,\n  tap,\n  timeout,\n} from 'rxjs/operators';\nimport { Mixin } from '@rxap/mixin';\nimport { isDefined } from '@rxap/rxjs';\n\nexport interface OpenApiDataSourceMetadata<PathParams = KeyValue, Body = any | null>\n  extends Partial<HttpDataSourceMetadata<PathParams, Body>> {\n\n  /**\n   * The operation object with path and method\n   */\n  operation?: OperationObjectWithMetadata;\n\n  /**\n   * The index of the server object in the servers array in the open api config\n   */\n  serverIndex?: number;\n\n  /**\n   * The operation id\n   */\n  id: string;\n\n  strict?: boolean;\n\n}\n\nexport interface OpenApiDataSourceViewer<Parameters = any>\n  extends HttpDataSourceViewer<any, any> {\n  parameters?: Parameters;\n}\n\nexport function RxapOpenApiDataSource(operationIdOrMetadata: string | OpenApiDataSourceMetadata, serverIndex = 0) {\n  const metadata = typeof operationIdOrMetadata === 'string' ?\n    {\n      id: operationIdOrMetadata,\n      serverIndex,\n    } :\n    operationIdOrMetadata;\n  return function (target: any) {\n    RxapDataSource(metadata)(target);\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface OpenApiDataSource<Response = any, Parameters extends Record<string, any> | void = any>\n  extends SchemaValidationMixin<Response, Parameters> {}\n\n@Mixin(SchemaValidationMixin)\n@Injectable()\nexport class OpenApiDataSource<Response = any, Parameters extends Record<string, any> | void = any>\n  extends BaseHttpDataSource<Response> {\n\n  protected readonly strict: boolean = false;\n  protected readonly disableSchemaValidation: boolean = false;\n  protected readonly disableValidation: boolean = false;\n\n  constructor(\n    @Inject(HttpClient)\n      http: HttpClient,\n    @Inject(OpenApiConfigService)\n    private readonly openApiConfigService: OpenApiConfigService,\n    @Optional()\n    @Inject(DEFAULT_OPEN_API_DATA_SOURCE_META_DATA)\n      metadata: OpenApiDataSourceMetadata | null = null,\n    @Optional()\n    @Inject(RXAP_DATA_SOURCE_REFRESH)\n      refresh$: Subject<HttpDataSourceOptions> | null = null,\n    @Optional()\n    @Inject(RXAP_OPEN_API_STRICT_VALIDATOR)\n      strict: boolean | null = null,\n    @Optional()\n    @Inject(DISABLE_SCHEMA_VALIDATION)\n      disableSchemaValidation: boolean | null = null,\n    @Optional()\n    @Inject(DISABLE_VALIDATION)\n      disableValidation: boolean | null = null,\n  ) {\n    super(http, metadata as any);\n    let operation: OperationObjectWithMetadata;\n    if (!this.metadata['operation']) {\n      this.metadata['operation'] = operation = openApiConfigService.getOperation(this.metadata.id);\n    } else {\n      operation = this.metadata['operation'];\n    }\n\n    if (operation.method !== 'GET') {\n      throw new Error('OpenApi DataSource only supports GET Operations!');\n    }\n\n    this.applyMetadata({\n      id: operation.operationId,\n      url: () => openApiConfigService.getBaseUrl(this.metadata['serverIndex']) + operation.path,\n      method: 'GET',\n    });\n\n    this.strict = strict || this.metadata['strict'] || false;\n    this.disableSchemaValidation = disableSchemaValidation || this.metadata['disableSchemaValidation'] || false;\n    this.disableValidation = disableValidation || this.metadata['disableValidation'] || false;\n\n  }\n\n  public get operation(): OperationObjectWithMetadata {\n    return this.metadata['operation'];\n  }\n\n  public override derive<D = Response>(\n    id: string,\n    metadata: Partial<OpenApiDataSourceMetadata> = this.metadata,\n    isolated = false,\n  ): OpenApiDataSource<D, Parameters> {\n    return new OpenApiDataSource<D, Parameters>(\n      this.http,\n      this.openApiConfigService,\n      {\n        ...deepMerge(this.metadata, metadata),\n        id,\n      },\n      isolated ? null : this.refresh$,\n    );\n  }\n\n  public override connect(viewer: OpenApiDataSourceViewer<Parameters>): Observable<Response> {\n\n\n    if (viewer.parameters) {\n      if (!this.disableValidation) {\n        this.validateParameters(this.operation, viewer.parameters as any, this.strict);\n      }\n    } else {\n      if (viewer.viewChange === EMPTY || viewer.viewChange === undefined) {\n        // set the viewer parameters to an empty parameter and test if that\n        // is valid.\n        viewer.parameters = {} as any;\n        if (!this.disableValidation) {\n          this.validateParameters(this.operation, viewer.parameters as any, this.strict);\n        }\n      }\n    }\n\n    return super.connect({\n      ...viewer,\n      ...this.buildHttpOptions(this.operation, viewer.parameters),\n      // if the view change is an empty observable. Then dont apply the pipe logic\n      // else the http request is never triggered\n      viewChange: viewer.viewChange === EMPTY ? viewer.viewChange : viewer.viewChange?.pipe(\n        tap(parameters => {\n          if (!this.disableValidation) {\n            this.validateParameters(this.operation, parameters as any, this.strict);\n          }\n        }),\n        map(parameters => this.buildHttpOptions(this.operation, parameters as any)),\n      ),\n    });\n\n  }\n\n  protected override buildRequest(options: HttpDataSourceOptions): Observable<Response> {\n    return this.http.request<Response>(this.buildHttpRequest(options)).pipe(\n      retry(this.metadata.retry ?? 0),\n      catchError((response: HttpErrorResponse) => {\n        this.interceptors?.forEach(interceptor => interceptor\n          .next({\n            response,\n            options,\n          }),\n        );\n        return throwError(response);\n      }),\n      filter((event: any) => event.type === HttpEventType.Response),\n      tap((response: HttpResponse<Response>) => {\n        if (!this.disableValidation) {\n          this.validateResponse(this.operation, response, this.strict);\n        }\n      }),\n      tap((response: HttpResponse<Response>) => {\n        this.interceptors?.forEach(interceptor => interceptor\n          .next({\n            response,\n            options,\n          }),\n        );\n      }),\n      map((event: HttpResponse<Response>) => event.body),\n      isDefined(),\n      take(1),\n      timeout(this.timeout),\n    );\n  }\n\n}\n","import {\n  Inject,\n  Injectable,\n} from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { OpenApiDataSource } from './open-api.data-source';\nimport { OpenApiConfigService } from '@rxap/open-api';\n\n@Injectable({ providedIn: 'root' })\nexport class OpenApiDataSourceLoader {\n\n  constructor(\n    @Inject(OpenApiConfigService) public readonly openApiConfig: OpenApiConfigService,\n    @Inject(HttpClient) public readonly http: HttpClient,\n  ) {}\n\n  public load(definitionId: string): OpenApiDataSource | null {\n\n    const operation = this.openApiConfig.getOperation(definitionId);\n\n    if (operation) {\n      return new OpenApiDataSource(\n        this.http,\n        this.openApiConfig,\n        {\n          id: definitionId,\n          operation,\n        },\n      );\n    }\n\n    return null;\n  }\n\n}\n","// region \nexport * from './lib/error';\nexport * from './lib/open-api-data-source.loader';\nexport * from './lib/open-api.data-source';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}