UNPKG

@lcgroup.core/api

Version:

Angular HttpClient simplifier

1 lines 19.2 kB
{"version":3,"file":"lcgroup.core-api.mjs","sources":["../../src/lib/api.tokens.ts","../../src/lib/utils/web-api-http-params.ts","../../src/lib/services/api.service.ts","../../src/lib/blob-error-http.interceptor.ts","../../src/lib/api.module.ts","../../src/lcgroup.core-api.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\r\nimport {Serializer} from './models';\r\n\r\nexport const API_ENDPOINT: InjectionToken<string> = new InjectionToken<string>('API_ENDPOINT');\r\n\r\nexport const API_SERIALIZER: InjectionToken<Serializer> = new InjectionToken<Serializer>(\r\n 'API_SERIALIZER',\r\n);\r\n","import {HttpParameterCodec, HttpParams, HttpParamsOptions} from '@angular/common/http';\r\n\r\nexport class ApiQueryStringBuilder {\r\n constructor(private encoder: HttpParameterCodec) {}\r\n\r\n public build(key: string | number, value: any): string {\r\n return value instanceof Object\r\n ? this.buildStringFromObject(key, value)\r\n : this.buildStringFromPrimitive(key, value);\r\n }\r\n\r\n private buildStringFromObject(key: string | number, object: {[key: string]: any}): string {\r\n const keys = Object.keys(object);\r\n const result = [];\r\n\r\n for (const childK in keys) {\r\n if (childK) {\r\n const childKey = keys[childK];\r\n\r\n const buildedKey = this.buildKey(object, key, childKey);\r\n const objectChildKey = this.build(buildedKey, object[childKey]);\r\n\r\n if (objectChildKey !== '') {\r\n result.push(objectChildKey);\r\n }\r\n }\r\n }\r\n return result.join('&');\r\n }\r\n\r\n private buildKey(\r\n value: {[key: string]: any},\r\n key: string | number,\r\n childKey: string | number,\r\n ): string | number {\r\n if (\r\n (value instanceof Array && value[childKey as number] instanceof Object) ||\r\n (value instanceof Array && !(value[childKey as number] instanceof Object))\r\n ) {\r\n return key;\r\n }\r\n\r\n if (value instanceof Object) {\r\n return `${key}[${this.encoder.encodeKey(childKey as string)}]`;\r\n }\r\n\r\n return childKey;\r\n }\r\n\r\n private buildStringFromPrimitive(key: string | number, value: any): string {\r\n return value === undefined ? key.toString() : `${key}=${this.encoder.encodeValue(value)}`;\r\n }\r\n}\r\n\r\nexport const getWebApiHttpParams = (options?: HttpParamsOptions) => {\r\n return new Proxy(new HttpParams(options), {\r\n get(target, property) {\r\n const t: any = target;\r\n\r\n if (property === 'toString') {\r\n t.init();\r\n const queryStringBuilder = new ApiQueryStringBuilder(t.encoder);\r\n return (): string =>\r\n t\r\n .keys()\r\n .map((key: string) => {\r\n const eKey = t.encoder.encodeKey(key);\r\n const mapValue = t.map.get(key);\r\n return queryStringBuilder.build(eKey, mapValue);\r\n })\r\n .join('&');\r\n }\r\n\r\n return t[property];\r\n },\r\n });\r\n};\r\n","import {HttpClient, HttpContext, HttpHeaders, HttpParams} from '@angular/common/http';\r\nimport {Inject, Injectable, Optional} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {API_ENDPOINT, API_SERIALIZER} from '../api.tokens';\r\nimport {Serializer} from '../models';\r\nimport {getWebApiHttpParams} from '../utils/web-api-http-params';\r\n\r\nexport enum ResponseTypeEnum {\r\n json = 'json',\r\n text = 'text',\r\n arraybuffer = 'arraybuffer',\r\n blob = 'blob',\r\n}\r\n\r\nexport interface IApiOptions {\r\n headers?:\r\n | HttpHeaders\r\n | {\r\n [header: string]: string | string[];\r\n };\r\n context?: HttpContext;\r\n observe?: any | 'body';\r\n params?: any;\r\n reportProgress?: boolean;\r\n responseType?: any | ResponseTypeEnum;\r\n withCredentials?: boolean;\r\n}\r\n\r\nexport interface IDeserializeOptions {\r\n /**\r\n * Accepts:\r\n * - constructor: to deserialize to instance of object\r\n * - [constructor] (array with a single element constructor): to deserialize to array of instances\r\n *\r\n * type {({ new(...args): any } | [{ new(...args): any }])}\r\n *\r\n * memberof IDeserializeOptions\r\n */\r\n deserializeTo?: {new (...args: any[]): any} | [{new (...args: any[]): any}];\r\n}\r\n\r\n@Injectable()\r\nexport class Api {\r\n constructor(\r\n private http: HttpClient,\r\n @Optional()\r\n @Inject(API_ENDPOINT)\r\n private apiEndpoint: string | null = null,\r\n @Optional()\r\n @Inject(API_SERIALIZER)\r\n private serializer: Serializer,\r\n ) {}\r\n\r\n public get<T>(url: string, options?: IApiOptions & IDeserializeOptions): Observable<T> {\r\n const opts = this.buildOptions(options);\r\n return this.http\r\n .get<T>(this.buildUrl(url), opts)\r\n .pipe(map(result => this.tryDeserialize<T>(result, opts?.deserializeTo)));\r\n }\r\n\r\n public post<T>(\r\n url: string,\r\n body: any,\r\n options?: IApiOptions & IDeserializeOptions,\r\n ): Observable<T> {\r\n const opts = this.buildOptions(options);\r\n return this.http\r\n .post<T>(this.buildUrl(url), this.trySerialize(body), opts)\r\n .pipe(map(result => this.tryDeserialize<T>(result, opts?.deserializeTo)));\r\n }\r\n\r\n public put<T>(\r\n url: string,\r\n body: any,\r\n options?: IApiOptions & IDeserializeOptions,\r\n ): Observable<T> {\r\n const opts = this.buildOptions(options);\r\n return this.http\r\n .put<T>(this.buildUrl(url), this.trySerialize(body), opts)\r\n .pipe(map(result => this.tryDeserialize<T>(result, opts?.deserializeTo)));\r\n }\r\n\r\n public delete<T>(url: string, options?: IApiOptions & IDeserializeOptions): Observable<T> {\r\n const opts = this.buildOptions(options);\r\n return this.http\r\n .delete<T>(this.buildUrl(url), opts)\r\n .pipe(map(result => this.tryDeserialize<T>(result, opts?.deserializeTo)));\r\n }\r\n\r\n public buildUrl(url: string): string {\r\n if ((url && url.startsWith('http')) || !this.apiEndpoint) {\r\n return url;\r\n }\r\n return this.apiEndpoint.concat(url);\r\n }\r\n\r\n private buildOptions(\r\n options: (IApiOptions & IDeserializeOptions) | undefined,\r\n ): IApiOptions & IDeserializeOptions {\r\n const opts = {responseType: ResponseTypeEnum.json, ...options};\r\n opts.params = this.getHttpParams(opts?.params);\r\n return opts;\r\n }\r\n\r\n private getHttpParams(params: {[key: string]: any} | null = null): HttpParams | undefined {\r\n if (params === null || params === undefined) {\r\n return undefined;\r\n }\r\n const serializedParams = this.trySerialize(params);\r\n return getWebApiHttpParams(\r\n typeof serializedParams === 'object'\r\n ? {fromObject: this.trySerialize(params)}\r\n : {fromString: serializedParams.toString()},\r\n );\r\n }\r\n\r\n private trySerialize(data: any): any {\r\n if (this.serializer) {\r\n return this.serializer.serialize(data);\r\n }\r\n return data;\r\n }\r\n\r\n private tryDeserialize<T>(\r\n data: any,\r\n deserializeTo?: {new (...args: any[]): T} | [{new (...args: any[]): T}],\r\n ) {\r\n if (!deserializeTo || !this.serializer) {\r\n return data;\r\n }\r\n if (deserializeTo instanceof Array && data instanceof Array) {\r\n const type = deserializeTo.length > 0 ? deserializeTo[0] : undefined;\r\n return data.map(d => this.serializer.deserialize(d, type));\r\n }\r\n if (typeof deserializeTo === 'function') {\r\n return this.serializer.deserialize(data, deserializeTo);\r\n }\r\n return data;\r\n }\r\n}\r\n","import {\r\n HttpErrorResponse,\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {Observable, throwError} from 'rxjs';\r\nimport {catchError} from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class BlobErrorHttpInterceptor implements HttpInterceptor {\r\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return next.handle(req).pipe(\r\n catchError(err => {\r\n if (\r\n err instanceof HttpErrorResponse &&\r\n err.error instanceof Blob &&\r\n err.error.type === 'application/json'\r\n ) {\r\n // https://github.com/angular/angular/issues/19888\r\n // When request of type Blob, the error is also in Blob instead of object of the json data\r\n return new Promise<any>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (e: Event) => {\r\n try {\r\n const errmsg = JSON.parse((<any>e.target).result);\r\n reject(\r\n new HttpErrorResponse({\r\n error: errmsg,\r\n headers: err.headers,\r\n status: err.status,\r\n statusText: err.statusText,\r\n url: <string>err.url,\r\n }),\r\n );\r\n } catch (e) {\r\n console.warn(e);\r\n reject(err);\r\n }\r\n };\r\n reader.onerror = e => {\r\n console.warn(e);\r\n reject(err);\r\n };\r\n reader.readAsText(err.error);\r\n });\r\n }\r\n\r\n return throwError(err);\r\n }),\r\n );\r\n }\r\n}\r\n","import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\r\nimport {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport * as ApiTokens from './api.tokens';\r\nimport {BlobErrorHttpInterceptor} from './blob-error-http.interceptor';\r\nimport {ApiModuleOptions, Serializer} from './models';\r\nimport {Api} from './services/api.service';\r\n\r\nexport function nullSerializerFactory(): Serializer {\r\n return {\r\n serialize: data => data,\r\n deserialize: data => data,\r\n };\r\n}\r\n\r\n@NgModule({\r\n imports: [HttpClientModule],\r\n providers: [Api],\r\n})\r\nexport class ApiModule {\r\n static forRoot(options: ApiModuleOptions = {}): ModuleWithProviders<ApiModule> {\r\n return {\r\n ngModule: ApiModule,\r\n providers: [\r\n Api,\r\n options.endpointProvider || {\r\n provide: ApiTokens.API_ENDPOINT,\r\n useValue: options.endpoint || '',\r\n },\r\n options.serializeProvider || {\r\n provide: ApiTokens.API_SERIALIZER,\r\n useFactory: nullSerializerFactory,\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: BlobErrorHttpInterceptor,\r\n multi: true,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ApiTokens.API_ENDPOINT","ApiTokens.API_SERIALIZER"],"mappings":"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"}