@opra/angular
Version:
Opra internationalization package
1 lines • 25.8 kB
Source Map (JSON)
{"version":3,"file":"opra-angular.mjs","sources":["../../src/angular-backend.ts","../../src/angular-client.ts","../../src/constants.ts","../../src/client.module.ts","../../src/opra-angular.ts"],"sourcesContent":["// @ts-ignore\n// @ts-ignore\nimport * as Angular from '@angular/common/http';\nimport { HttpContext, HttpHeaders, HttpParams } 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 * Angular specific implementation of {@link HttpBackend} using Angular's HttpClient.\n *\n * @class AngularBackend\n */\nexport class AngularBackend extends HttpBackend {\n /** Default request options */\n defaults: AngularBackend.RequestDefaults;\n\n /**\n * Creates a new instance of AngularBackend.\n *\n * @param httpClient The Angular HttpClient instance.\n * @param serviceUrl The base URL of the service.\n * @param options Configuration options.\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 /**\n * Handles the HTTP request using Angular's HttpClient.\n *\n * @param init The request initialization parameters.\n * @returns An observable of {@link HttpEvent}.\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 /**\n * Sends the actual HTTP request.\n *\n * @param request The Angular HttpRequest instance.\n * @protected\n */\n protected send(request: Angular.HttpRequest<any>) {\n return this.httpClient.request(request);\n }\n\n /**\n * Prepares the request by applying defaults and handling body content.\n *\n * @param init The initial request parameters.\n * @returns The prepared request initialization parameters.\n * @protected\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 /**\n * Creates a {@link HttpResponse} instance.\n *\n * @param init The response initiator parameters.\n * @returns A new HttpResponse instance.\n * @protected\n */\n protected createResponse(init: HttpResponse.Initiator): HttpResponse {\n return new HttpResponse(init);\n }\n\n /**\n * Parses the response body based on Content-Type.\n *\n * @param fetchResponse The response to parse.\n * @returns The parsed body.\n * @protected\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 for {@link AngularBackend} related types and interfaces.\n *\n * @namespace AngularBackend\n */\nexport namespace AngularBackend {\n /** Configuration options for AngularBackend */\n export interface Options extends HttpBackend.Options {\n /** Default request options */\n defaults?: RequestDefaults;\n }\n\n /** Request initialization parameters for AngularBackend */\n export interface RequestInit extends HttpBackend.RequestInit {\n /** Angular HttpContext */\n context?: HttpContext;\n /** Whether to report progress events */\n reportProgress?: boolean;\n /** Angular HttpParams */\n params?: HttpParams;\n /** The expected response type */\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n /** Whether to send credentials with the request */\n withCredentials?: boolean;\n }\n\n /** Request options subset for AngularBackend */\n export interface RequestOptions extends Pick<\n RequestInit,\n 'context' | 'reportProgress' | 'withCredentials'\n > {}\n\n /** Default request options for AngularBackend */\n export type RequestDefaults = StrictOmit<RequestOptions, 'context'> & {\n /** Default headers */\n headers: Headers;\n /** Default URL parameters */\n params: URLSearchParams;\n };\n}\n","// @ts-ignore\nimport { HttpClient } from '@angular/common/http';\nimport { HttpClientBase, kBackend } from '@opra/client';\nimport { AngularBackend } from './angular-backend.js';\n\n/**\n * Angular specific implementation of {@link HttpClientBase}.\n *\n * @class OpraAngularClient\n */\nexport class OpraAngularClient extends HttpClientBase<AngularBackend.RequestOptions> {\n declare [kBackend]: AngularBackend;\n\n /**\n * Creates a new instance of OpraAngularClient.\n *\n * @param httpClient The Angular HttpClient instance.\n * @param serviceUrl The base URL of the service.\n * @param options Configuration options.\n */\n constructor(\n httpClient: HttpClient,\n serviceUrl: string,\n options?: AngularBackend.Options,\n ) {\n super(new AngularBackend(httpClient, serviceUrl, options));\n }\n\n /**\n * Gets the default request options from the backend.\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","import { 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.js';\nimport { OPRA_CLIENT_MODULE_OPTIONS } from './constants.js';\nimport type {\n OpraClientModuleAsyncOptions,\n OpraClientModuleOptions,\n} from './interfaces/module-options.interface.js';\n\n/**\n * Angular module for OPRA client.\n */\n@NgModule({})\nexport class OpraClientModule {\n /**\n * Registers a client provider.\n *\n * @param options Configuration options for the client.\n * @returns A ModuleWithProviders instance.\n */\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 /**\n * Registers a service provider.\n *\n * @param serviceClass The service class to register.\n * @param options Configuration options for the service.\n * @returns A ModuleWithProviders instance.\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 /**\n * Registers a client provider asynchronously.\n *\n * @param options Asynchronous configuration options for the client.\n * @returns A ModuleWithProviders instance.\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 /**\n * Registers a service provider asynchronously.\n *\n * @param serviceClass The service class to register.\n * @param options Asynchronous configuration options for the service.\n * @returns A ModuleWithProviders instance.\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}