{"version":3,"file":"angular-extensions-services.mjs","sources":["../../../projects/angular-extensions/services/src/api.service.ts","../../../projects/angular-extensions/services/src/date-conversion.interceptor.ts","../../../projects/angular-extensions/services/src/ngx-services.module.ts","../../../projects/angular-extensions/services/src/angular-extensions-services.ts"],"sourcesContent":["import { castArray, merge } from \"lodash-es\";\r\nimport { Inject, Injectable, InjectionToken, Optional } from \"@angular/core\";\r\nimport { HttpClient, HttpHeaders as AngularHttpHeaders, HttpParams as AngularHttpParams, HttpParameterCodec } from \"@angular/common/http\";\r\n\r\nimport { patchAngularHttpParams } from \"angular-extensions/core\";\r\n\r\ntype HttpHeaders = AngularHttpHeaders | { [header: string]: string | string[] };\r\ntype HttpParams = AngularHttpParams | { [param: string]: any };\r\n\r\ninterface DefaultHttpClientOptions {\r\n  headers?: HttpHeaders;\r\n  observe: \"body\";\r\n  params?: HttpParams;\r\n  reportProgress?: boolean;\r\n  responseType: \"json\" | \"blob\";\r\n  withCredentials?: boolean;\r\n}\r\n\r\ninterface JsonHttpClientOptions extends DefaultHttpClientOptions {\r\n  responseType: \"json\";\r\n}\r\n\r\ninterface BlobHttpClientOptions extends DefaultHttpClientOptions {\r\n  responseType: \"blob\";\r\n}\r\n\r\n\r\nexport interface ApiConfig {\r\n  apiUrl: string;\r\n\r\n  dateConversionExcludePaths: RegExp[];\r\n\r\n  encoder?: HttpParameterCodec,\r\n}\r\n\r\nexport const API_CONFIG = new InjectionToken<ApiConfig>(\"ApiConfig\");\r\n\r\nexport type HttpClientOptions = Partial<JsonHttpClientOptions>;\r\n\r\npatchAngularHttpParams();\r\n\r\n/**\r\n * Provides simplified api to make REST requests to API\r\n */\r\n@Injectable()\r\nexport class ApiService {\r\n\r\n  private httpOptions: DefaultHttpClientOptions;\r\n\r\n  public apiUrl: string;\r\n\r\n  constructor(\r\n    private http: HttpClient,\r\n    @Optional() @Inject(API_CONFIG) private config: ApiConfig,\r\n  ) {\r\n    this.apiUrl = config?.apiUrl;\r\n\r\n    this.httpOptions = {\r\n      headers: {\r\n        \"X-Requested-With\": \"XMLHttpRequest\"\r\n      },\r\n      observe: \"body\",\r\n      responseType: \"json\"\r\n    };\r\n  }\r\n\r\n  public get<T>(url: string, params?: HttpParams, httpOptions?: HttpClientOptions) {\r\n    return this.http.get<T>(this.getUrl(url), this.getHttpOptions(params, httpOptions));\r\n  }\r\n\r\n  public getBlob(url: string, params?: HttpParams, httpOptions?: BlobHttpClientOptions) {\r\n    httpOptions = Object.assign({ responseType: \"blob\" }, httpOptions);\r\n\r\n    return this.http.get(this.getUrl(url), this.getHttpOptions(params, httpOptions));\r\n  }\r\n\r\n  public post<T>(url: string, body?: FormData | any, params?: HttpParams, httpOptions?: HttpClientOptions) {\r\n    return this.http.post<T>(this.getUrl(url), this.getRequestBody(body), this.getHttpOptions(params, httpOptions, body));\r\n  }\r\n\r\n  public postBlob(url: string, body?: FormData | any, params?: HttpParams, httpOptions?: BlobHttpClientOptions) {\r\n    httpOptions = Object.assign({ responseType: \"blob\" }, httpOptions);\r\n\r\n    return this.http.post(this.getUrl(url), this.getRequestBody(body), this.getHttpOptions(params, httpOptions, body));\r\n  }\r\n\r\n  public put<T>(url: string, body?: FormData | any, params?: HttpParams, httpOptions?: HttpClientOptions) {\r\n    return this.http.put<T>(this.getUrl(url), this.getRequestBody(body), this.getHttpOptions(params, httpOptions, body));\r\n  }\r\n\r\n  public putBlob(url: string, body?: FormData | any, params?: HttpParams, httpOptions?: BlobHttpClientOptions) {\r\n    httpOptions = Object.assign({ responseType: \"blob\" }, httpOptions);\r\n\r\n    return this.http.put(this.getUrl(url), this.getRequestBody(body), this.getHttpOptions(params, httpOptions, body));\r\n  }\r\n\r\n  public patch<T>(url: string, body?: FormData | any, params?: HttpParams, httpOptions?: HttpClientOptions) {\r\n    return this.http.patch<T>(this.getUrl(url), this.getRequestBody(body), this.getHttpOptions(params, httpOptions, body));\r\n  }\r\n\r\n  public delete<T>(url: string, params?: HttpParams, httpOptions?: HttpClientOptions) {\r\n    return this.http.delete<T>(this.getUrl(url), this.getHttpOptions(params, httpOptions));\r\n  }\r\n\r\n  private getUrl(url: string) {\r\n    if (!url.startsWith(\"http\") && this.apiUrl) {\r\n      return `${this.apiUrl}/${url}`;\r\n    }\r\n\r\n    return url;\r\n  }\r\n\r\n  private sanitizeQueryParams(params?: HttpParams) {\r\n    if (params != undefined && !(params instanceof AngularHttpParams)) {\r\n      let objectParams = params;\r\n\r\n      Object.keys(objectParams)\r\n        .forEach(key => {\r\n          if (objectParams[key] == null || objectParams[key] === \"\") {\r\n            delete objectParams[key];\r\n          }\r\n          else if (objectParams[key] instanceof Date) {\r\n            objectParams[key] = objectParams[key].toJSON();\r\n          }\r\n        });\r\n\r\n      params = new AngularHttpParams({ fromObject: objectParams, encoder: this.config.encoder });\r\n    }\r\n\r\n    return params;\r\n  }\r\n\r\n  private getHttpOptions<TOptions extends DefaultHttpClientOptions>(\r\n    queryParams?: HttpParams,\r\n    httpOptions?: Partial<TOptions>,\r\n    body?: FormData | any): TOptions {\r\n    if (!httpOptions) {\r\n      httpOptions = {};\r\n    }\r\n\r\n    httpOptions.params = this.sanitizeQueryParams(queryParams);\r\n\r\n    let result = merge(\r\n      {},\r\n      this.httpOptions, {\r\n        headers: {\r\n          ...(body instanceof FormData ? {} : { \"Content-Type\": \"application/json\" }),\r\n        },\r\n      } as Partial<DefaultHttpClientOptions>,\r\n      httpOptions) as TOptions;\r\n\r\n    return result;\r\n  }\r\n\r\n  private getRequestBody(body: FormData | any) {\r\n    return body instanceof FormData\r\n      ? body\r\n      : JSON.stringify(body);\r\n  }\r\n}\r\n","import { tap } from \"rxjs/operators\";\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from \"@angular/common/http\";\r\n\r\nimport { parseDateProperty, parseDates } from \"angular-extensions/core\";\r\nimport { API_CONFIG, ApiConfig } from \"./api.service\";\r\n\r\n/**\r\n * Parses all date-like strings into actual Date objects\r\n */\r\n@Injectable()\r\nexport class DateConversionInterceptor implements HttpInterceptor {\r\n\r\n  constructor(\r\n    @Optional() @Inject(API_CONFIG) private config: ApiConfig,\r\n  ) {\r\n  }\r\n\r\n  public intercept(request: HttpRequest<any>, next: HttpHandler) {\r\n    return next\r\n      .handle(request)\r\n      .pipe(tap(event => {\r\n        if (event instanceof HttpResponse) {\r\n          if (typeof event.body == \"string\") {\r\n            parseDateProperty(event, \"body\");\r\n          }\r\n          else if (typeof event.body == \"object\") {\r\n            parseDates(event.body, this.config.dateConversionExcludePaths);\r\n          }\r\n        }\r\n      }));\r\n  }\r\n}\r\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { HTTP_INTERCEPTORS } from \"@angular/common/http\";\r\n\r\nimport \"angular-extensions/core\";\r\n\r\nimport { ApiConfig, ApiService, API_CONFIG } from \"./api.service\";\r\nimport { DateConversionInterceptor } from \"./date-conversion.interceptor\";\r\n\r\nconst apiConfigDefaults: ApiConfig = {\r\n  apiUrl: null,\r\n  dateConversionExcludePaths: [],\r\n};\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n  ],\r\n  exports: [\r\n  ],\r\n  providers: [\r\n    ApiService,\r\n    {\r\n      provide: HTTP_INTERCEPTORS,\r\n      useClass: DateConversionInterceptor,\r\n      multi: true,\r\n    },\r\n    {\r\n      provide: API_CONFIG,\r\n      useValue: apiConfigDefaults,\r\n    },\r\n  ]\r\n})\r\nexport class NgxServicesModule {\r\n\r\n  public static configure(config: Partial<ApiConfig>): ModuleWithProviders<NgxServicesModule> {\r\n    let apiConfig = Object.assign<ApiConfig, Partial<ApiConfig>>(apiConfigDefaults, config);\r\n\r\n    return {\r\n      ngModule: NgxServicesModule,\r\n      providers: [\r\n        {\r\n          provide: HTTP_INTERCEPTORS,\r\n          useClass: DateConversionInterceptor,\r\n          multi: true,\r\n        },\r\n        {\r\n          provide: API_CONFIG,\r\n          useValue: apiConfig,\r\n        },\r\n      ]\r\n    };\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["AngularHttpParams"],"mappings":"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"}