{"version":3,"file":"opra-angular.mjs","sources":["../../src/angular-backend.ts","../../src/angular-client.ts","../../src/constants.ts","../../src/client.module.ts","../../src/public_api.ts","../../src/opra-angular.ts"],"sourcesContent":["import { HttpContext, HttpHeaders, HttpParams } from '@angular/common/http';\nimport * as Angular from '@angular/common/http';\nimport typeIs from '@browsery/type-is';\nimport {\n  HttpBackend,\n  type HttpDownloadProgressEvent,\n  type HttpEvent,\n  HttpEventType,\n  HttpResponse,\n  type HttpResponseEvent,\n  type HttpResponseHeaderEvent,\n  type HttpSentEvent,\n  type HttpUploadProgressEvent,\n} from '@opra/client';\nimport { isBlob } from '@opra/common';\nimport { Observable } from 'rxjs';\nimport { isReadableStreamLike } from 'rxjs/internal/util/isReadableStreamLike';\nimport type { StrictOmit } from 'ts-gems';\n\n/**\n *\n * @class AngularBackend\n */\nexport class AngularBackend extends HttpBackend {\n  defaults: AngularBackend.RequestDefaults;\n\n  constructor(\n    readonly httpClient: Angular.HttpClient,\n    serviceUrl: string,\n    options?: AngularBackend.Options,\n  ) {\n    super(serviceUrl, options);\n    this.defaults = {\n      ...options?.defaults,\n      headers:\n        options?.defaults?.headers instanceof Headers\n          ? options?.defaults?.headers\n          : new Headers(options?.defaults?.headers),\n      params:\n        options?.defaults?.params instanceof URLSearchParams\n          ? options?.defaults?.params\n          : new URLSearchParams(options?.defaults?.params),\n    };\n  }\n\n  handle(init: AngularBackend.RequestInit): Observable<HttpEvent> {\n    const requestInit = this.prepareRequest(init);\n    const request = new Angular.HttpRequest(\n      requestInit.method,\n      requestInit.url.toString(),\n      {\n        ...requestInit,\n        headers: new HttpHeaders(requestInit.headers),\n      },\n    );\n\n    const _this = this;\n    return new Observable<HttpEvent>(subscriber => {\n      // Send request\n      this.send(request).subscribe({\n        next(event) {\n          if (event.type === Angular.HttpEventType.Sent) {\n            // Emit 'Sent' event\n            subscriber.next({\n              type: HttpEventType.Sent,\n              request,\n            } satisfies HttpSentEvent);\n            return;\n          }\n\n          if (event.type === Angular.HttpEventType.ResponseHeader) {\n            // Emit 'ResponseHeader' event\n            const headersResponse = _this.createResponse({\n              url: request.url,\n              headers: requestInit.headers,\n              status: event.status,\n              statusText: event.statusText,\n              hasBody:\n                event.headers.has('Content-Type') ||\n                event.headers.has('Content-Length'),\n            }) as HttpResponse<never>;\n            subscriber.next({\n              request,\n              type: HttpEventType.ResponseHeader,\n              response: headersResponse,\n            } satisfies HttpResponseHeaderEvent);\n            return;\n          }\n\n          if (event.type === Angular.HttpEventType.DownloadProgress) {\n            // Emit 'DownloadProgress' event\n            subscriber.next({\n              request,\n              type: HttpEventType.DownloadProgress,\n              loaded: event.loaded,\n              total: event.total,\n            } satisfies HttpDownloadProgressEvent);\n          }\n\n          if (event.type === Angular.HttpEventType.UploadProgress) {\n            // Emit 'UploadProgress' event\n            subscriber.next({\n              request,\n              type: HttpEventType.UploadProgress,\n              loaded: event.loaded,\n              total: event.total,\n            } satisfies HttpUploadProgressEvent);\n          }\n\n          if (event.type === Angular.HttpEventType.Response) {\n            const headers = new Headers();\n            event.headers\n              .keys()\n              .forEach(k => headers.set(k, event.headers.get(k) || ''));\n            const response = _this.createResponse({\n              url: request.url,\n              headers,\n              status: event.status,\n              statusText: event.statusText,\n              hasBody: !!event.body,\n              body: event.body,\n            });\n            // Emit 'Response' event\n            subscriber.next({\n              type: HttpEventType.Response,\n              request,\n              response,\n            } satisfies HttpResponseEvent);\n          }\n        },\n        error(error) {\n          subscriber.error(error);\n        },\n        complete() {\n          subscriber.complete();\n        },\n      });\n    });\n  }\n\n  protected send(request: Angular.HttpRequest<any>) {\n    return this.httpClient.request(request);\n  }\n\n  protected prepareRequest(\n    init: AngularBackend.RequestInit,\n  ): AngularBackend.RequestInit {\n    const headers = init.headers || new Headers();\n    const requestInit: AngularBackend.RequestInit = {\n      ...init,\n      headers,\n    };\n    this.defaults.headers.forEach((val, key) => {\n      if (!headers.has(key)) headers.set(key, val);\n    });\n    const url = new URL(requestInit.url, this.serviceUrl);\n    if (this.defaults.params.size) {\n      this.defaults.params.forEach((val, key) => {\n        if (!url.searchParams.has(key)) url.searchParams.set(key, val);\n      });\n      requestInit.url = url.toString();\n    }\n    if (requestInit.body) {\n      let body: any;\n      let contentType: string;\n      if (\n        typeof requestInit.body === 'string' ||\n        typeof requestInit.body === 'number' ||\n        typeof requestInit.body === 'boolean'\n      ) {\n        contentType = 'text/plain; charset=UTF-8\"';\n        body = String(requestInit.body);\n        headers.delete('Content-Size');\n      } else if (isReadableStreamLike(requestInit.body)) {\n        contentType = 'application/octet-stream';\n        body = requestInit.body;\n      } else if (Buffer.isBuffer(requestInit.body)) {\n        contentType = 'application/octet-stream';\n        body = requestInit.body;\n        headers.set('Content-Size', String(requestInit.body.length));\n      } else if (isBlob(requestInit.body)) {\n        contentType = requestInit.body.type || 'application/octet-stream';\n        body = requestInit.body;\n        headers.set('Content-Size', String(requestInit.body.size));\n      } else {\n        contentType = 'application/json';\n        body = JSON.stringify(requestInit.body);\n        headers.delete('Content-Size');\n      }\n      if (!headers.has('Content-Type') && contentType)\n        headers.set('Content-Type', contentType);\n      requestInit.body = body;\n    }\n    return requestInit;\n  }\n\n  protected createResponse(init: HttpResponse.Initiator): HttpResponse {\n    return new HttpResponse(init);\n  }\n\n  protected async parseBody(fetchResponse: Response): Promise<any> {\n    let body: any;\n    const contentType = fetchResponse.headers.get('Content-Type') || '';\n    if (typeIs.is(contentType, ['json', 'application/*+json'])) {\n      body = await fetchResponse.json();\n      if (typeof body === 'string') body = JSON.parse(body);\n    } else if (typeIs.is(contentType, ['text']))\n      body = await fetchResponse.text();\n    else if (typeIs.is(contentType, ['multipart']))\n      body = await fetchResponse.formData();\n    else {\n      const buf = await fetchResponse.arrayBuffer();\n      if (buf.byteLength) body = buf;\n    }\n    return body;\n  }\n}\n\n/**\n * @namespace AngularBackend\n */\nexport namespace AngularBackend {\n  export interface Options extends HttpBackend.Options {\n    defaults?: RequestDefaults;\n  }\n\n  export interface RequestInit extends HttpBackend.RequestInit {\n    context?: HttpContext;\n    reportProgress?: boolean;\n    params?: HttpParams;\n    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n    withCredentials?: boolean;\n  }\n\n  export interface RequestOptions\n    extends Pick<\n      RequestInit,\n      'context' | 'reportProgress' | 'withCredentials'\n    > {}\n\n  export type RequestDefaults = StrictOmit<RequestOptions, 'context'> & {\n    headers: Headers;\n    params: URLSearchParams;\n  };\n}\n","/* eslint-disable import-x/extensions */\nimport { HttpClient } from '@angular/common/http';\nimport { HttpClientBase, kBackend } from '@opra/client';\nimport { AngularBackend } from './angular-backend';\n\n/**\n *\n * @class OpraAngularClient\n */\nexport class OpraAngularClient extends HttpClientBase<AngularBackend.RequestOptions> {\n  declare [kBackend]: AngularBackend;\n\n  constructor(\n    httpClient: HttpClient,\n    serviceUrl: string,\n    options?: AngularBackend.Options,\n  ) {\n    super(new AngularBackend(httpClient, serviceUrl, options));\n  }\n\n  get defaults(): AngularBackend.RequestDefaults {\n    return this[kBackend].defaults;\n  }\n}\n","export const OPRA_CLIENT_MODULE_OPTIONS = 'OPRA_CLIENT_MODULE_OPTIONS';\n","/* eslint-disable import-x/extensions */\nimport { HttpClient } from '@angular/common/http';\nimport {\n  type ModuleWithProviders,\n  NgModule,\n  type Provider,\n  Type,\n} from '@angular/core';\nimport { kClient } from '@opra/client';\nimport { OpraAngularClient } from './angular-client';\nimport { OPRA_CLIENT_MODULE_OPTIONS } from './constants';\nimport type {\n  OpraClientModuleAsyncOptions,\n  OpraClientModuleOptions,\n} from './interfaces/module-options.interface';\n\n@NgModule({})\nexport class OpraClientModule {\n  public static registerClient(\n    options: OpraClientModuleOptions,\n  ): ModuleWithProviders<OpraClientModule> {\n    const CLIENT_TOKEN = options.token || OpraAngularClient;\n    return {\n      ngModule: OpraClientModule,\n      providers: [\n        {\n          provide: CLIENT_TOKEN,\n          deps: [HttpClient],\n          useFactory: (httpClient: HttpClient) =>\n            new OpraAngularClient(httpClient, options.serviceUrl, options),\n        },\n      ],\n    };\n  }\n\n  public static registerService<T>(\n    serviceClass: Type<T>,\n    options: OpraClientModuleOptions,\n  ): ModuleWithProviders<OpraClientModule> {\n    const SERVICE_TOKEN = options.token || serviceClass;\n    return {\n      ngModule: OpraClientModule,\n      providers: [\n        {\n          provide: SERVICE_TOKEN,\n          deps: [HttpClient],\n          useFactory: (httpClient: HttpClient) => {\n            const opraAngularClient = new OpraAngularClient(\n              httpClient,\n              options.serviceUrl,\n              options,\n            );\n            const service = new serviceClass(opraAngularClient);\n            service[kClient] = opraAngularClient;\n            return service;\n          },\n        },\n      ],\n    };\n  }\n\n  public static registerClientAsync(\n    options: OpraClientModuleAsyncOptions,\n  ): ModuleWithProviders<OpraClientModule> {\n    const CLIENT_TOKEN = options.token || OpraAngularClient;\n    const asyncProviders = this._createAsyncProviders(options);\n    return {\n      ngModule: OpraClientModule,\n      providers: [\n        ...asyncProviders,\n        {\n          provide: CLIENT_TOKEN,\n          deps: [HttpClient, OPRA_CLIENT_MODULE_OPTIONS],\n          useFactory: (httpClient: HttpClient, opts: OpraClientModuleOptions) =>\n            new OpraAngularClient(httpClient, opts.serviceUrl, opts),\n        },\n      ],\n    };\n  }\n\n  public static registerServiceAsync<T>(\n    serviceClass: Type<T>,\n    options: OpraClientModuleAsyncOptions,\n  ): ModuleWithProviders<OpraClientModule> {\n    const SERVICE_TOKEN = options.token || serviceClass;\n    const asyncProviders = this._createAsyncProviders(options);\n    return {\n      ngModule: OpraClientModule,\n      providers: [\n        ...asyncProviders,\n        {\n          provide: SERVICE_TOKEN,\n          deps: [HttpClient, OPRA_CLIENT_MODULE_OPTIONS],\n          useFactory: (\n            httpClient: HttpClient,\n            opts: OpraClientModuleOptions,\n          ) => {\n            const opraAngularClient = new OpraAngularClient(\n              httpClient,\n              opts.serviceUrl,\n              opts,\n            );\n            const service = new serviceClass(opraAngularClient);\n            service[kClient] = opraAngularClient;\n            return service;\n          },\n        },\n      ],\n    };\n  }\n\n  private static _createAsyncProviders(\n    options: OpraClientModuleAsyncOptions,\n  ): Provider[] {\n    if (options.useExisting || options.useFactory)\n      return [this._createAsyncOptionsProvider(options)];\n\n    if (options.useClass) {\n      return [\n        this._createAsyncOptionsProvider(options),\n        {\n          provide: options.useClass,\n          useClass: options.useClass,\n        },\n      ];\n    }\n\n    throw new Error(\n      'Invalid configuration. Must provide useFactory, useClass or useExisting',\n    );\n  }\n\n  private static _createAsyncOptionsProvider(\n    options: OpraClientModuleAsyncOptions,\n  ): Provider {\n    if (options.useFactory) {\n      return {\n        provide: OPRA_CLIENT_MODULE_OPTIONS,\n        useFactory: options.useFactory,\n        deps: options.deps || [],\n      };\n    }\n    const useClass = options.useClass || options.useExisting;\n    if (useClass) {\n      return {\n        provide: OPRA_CLIENT_MODULE_OPTIONS,\n        useFactory: o => o,\n        deps: [useClass],\n      };\n    }\n    throw new Error(\n      'Invalid configuration. Must provide useFactory, useClass or useExisting',\n    );\n  }\n}\n","/* eslint-disable import-x/extensions */\nexport * from './angular-backend';\nexport * from './client.module';\nexport * from './constants';\nexport * from './interfaces/module-options.interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}