UNPKG

@rxap/data-source

Version:

Provides a set of classes and decorators for creating and managing data sources in Angular applications, including base classes, static data sources, observable data sources, and method data sources. It also includes a component for displaying data source

1 lines 23 kB
{"version":3,"file":"rxap-data-source-http.mjs","sources":["../../../../../packages/angular/data-source/http/src/lib/error.ts","../../../../../packages/angular/data-source/http/src/lib/base-http.data-source.ts","../../../../../packages/angular/data-source/http/src/lib/http.data-source.ts","../../../../../packages/angular/data-source/http/src/lib/http-data-source.loader.ts","../../../../../packages/angular/data-source/http/src/index.ts","../../../../../packages/angular/data-source/http/src/rxap-data-source-http.ts"],"sourcesContent":["import { RxapDataSourceError } from '@rxap/data-source';\n\nexport class RxapHttpDataSourceError extends RxapDataSourceError {\n\n constructor(message: string, code: string, className?: string) {\n super(message, code, className);\n this.addSubPackageName('http');\n }\n\n}\n","import {\n BaseDataSource,\n RXAP_DATA_SOURCE_METADATA,\n RXAP_DATA_SOURCE_REFRESH,\n RxapDataSourceError,\n} from '@rxap/data-source';\nimport {\n EMPTY,\n firstValueFrom,\n Observable,\n of,\n ReplaySubject,\n Subject,\n Subscription,\n} from 'rxjs';\nimport { HttpClient, HttpRequest } from '@angular/common/http';\nimport {\n deepMerge,\n hasIndexSignature,\n joinPath,\n} from '@rxap/utilities';\nimport {\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n finalize,\n skip,\n switchMap,\n tap,\n} from 'rxjs/operators';\nimport { HttpDataSourceMetadata } from './http.data-source.metadata';\nimport { HttpDataSourceViewer } from './http.data-source.viewer';\nimport { HttpDataSourceOptions } from './http.data-source.options';\nimport { RxapHttpDataSourceError } from './error';\nimport { RequestInProgressSubject } from '@rxap/rxjs';\n\n@Injectable()\nexport abstract class BaseHttpDataSource<Data = any, PathParams = any, Body = any> extends BaseDataSource<\n Data,\n HttpDataSourceMetadata<PathParams, Body>,\n HttpDataSourceViewer<PathParams, Body>> {\n\n public readonly requestsInProgress$ = new RequestInProgressSubject();\n public readonly refresh$: Subject<HttpDataSourceOptions<PathParams, Body>> = new Subject<HttpDataSourceOptions<PathParams, Body>>();\n public readonly refreshed$ = new Subject<void>();\n\n public timeout = 60 * 1000;\n\n protected _options!: HttpDataSourceOptions<PathParams, Body>;\n\n protected _refreshSubscription: Subscription | null = null;\n protected override _data$!: ReplaySubject<Data>;\n\n constructor(\n @Inject(HttpClient)\n public readonly http: HttpClient,\n @Optional()\n @Inject(RXAP_DATA_SOURCE_METADATA)\n metadata: HttpDataSourceMetadata<PathParams, Body> | null = null,\n @Optional()\n @Inject(RXAP_DATA_SOURCE_REFRESH)\n refresh$: Subject<HttpDataSourceOptions<PathParams, Body>> | null = null,\n ) {\n super(metadata);\n this.timeout = this.metadata.timeout ?? this.timeout;\n this.loading$ = this.requestsInProgress$.loading$();\n if (http === undefined) {\n throw new RxapDataSourceError(\n 'HttpClient is undefined. Ensure that the HttpClient is added to the deps property!',\n '',\n this.constructor.name,\n );\n }\n if (refresh$) {\n this.refresh$ = refresh$;\n }\n }\n\n public abstract override derive(\n id: string,\n metadata: Partial<HttpDataSourceMetadata<PathParams, Body>>,\n ): BaseHttpDataSource<Data>;\n\n public request$(options: HttpDataSourceOptions<PathParams, Body> = this._options, merge = false): Promise<Data> {\n this.init();\n if (merge) {\n // TODO : add deep merge\n options = { ...this._options, ...options };\n }\n // test if options is defined. Can be undefined if the init method is not yet been called\n if (!options) {\n options = this._options;\n }\n return firstValueFrom(this.buildRequest(options));\n }\n\n public override reset(): any {\n this._data = undefined;\n if (this._refreshSubscription) {\n this._refreshSubscription.unsubscribe();\n }\n super.reset();\n this._initialised = false;\n this.init();\n }\n\n public override refresh(\n options: HttpDataSourceOptions<PathParams, Body> = this._options,\n merge = false,\n force = false,\n ) {\n this.init();\n if (force || this._connectedViewer.size !== 0) {\n if (merge) {\n // TODO : add deep merge\n options = { ...this._options, ...options };\n }\n // test if options is defined. Can be undefined if the init method is not yet been called\n if (!options) {\n options = this._options;\n }\n this.refresh$.next(options);\n this.refreshed$.next();\n }\n }\n\n public override init(): void {\n if (this._initialised) {\n return;\n }\n super.init();\n\n if (this._refreshSubscription) {\n throw new RxapHttpDataSourceError('The refresh subscription is already initialised', '');\n }\n\n this._options = {\n params: this.metadata.params,\n pathParams: this.metadata.pathParams,\n body: this.metadata.body,\n headers: this.metadata.headers,\n };\n\n this._data$ = new ReplaySubject<Data>(this.metadata.bufferSize ?? 1);\n\n this._refreshSubscription = this.refresh$.pipe(\n tap(options => this._options = options),\n tap(() => this.requestsInProgress$.increase()),\n switchMap(options => this.buildRequest(options).pipe(\n finalize(() => this.requestsInProgress$.decrease()),\n )),\n ).subscribe(this._data$);\n\n }\n\n protected isEqualToLastOptions(options: HttpDataSourceOptions<PathParams, Body>): boolean {\n const keys: Array<keyof HttpDataSourceOptions<PathParams, Body>> = [\n 'url',\n 'pathParams',\n 'body',\n 'params',\n 'headers',\n ];\n return !!this._options && keys.every(key => this._options[key] === options[key]);\n }\n\n protected override _connect(viewer: HttpDataSourceViewer<PathParams, Body>): [ Observable<Data>, Subscription ] {\n this.init();\n\n if (viewer.url === this.metadata.url) {\n delete viewer.url;\n }\n\n if (viewer.viewChange ===\n EMPTY &&\n (!viewer.lazy || this._data === undefined || !this.isEqualToLastOptions(viewer))) {\n viewer.realtime = this._data !== undefined;\n viewer.viewChange = of(viewer);\n }\n\n return [\n viewer.realtime ? this._data$.pipe(skip(this.metadata.bufferSize ?? 1)) : this._data$,\n viewer.viewChange!.pipe(\n tap(options => this.refresh(options, true, true)),\n ).subscribe(),\n ];\n }\n\n protected getRequestUrl(): string {\n if (typeof this.metadata.url === 'function') {\n return this.metadata.url();\n }\n return this.metadata.url;\n }\n\n protected buildHttpRequest(options: HttpDataSourceOptions<PathParams, Body>): HttpRequest<Body> {\n return new HttpRequest(\n this.metadata.method ?? 'GET',\n this.buildUrlWithParams(\n joinPath(this.getRequestUrl(), options.url ?? null),\n deepMerge(this.metadata.pathParams ?? {}, options.pathParams ?? {}),\n ),\n options.body ?? this.metadata.body ?? null,\n {\n params: options.params ?? this.metadata.params,\n headers: options.headers ?? this.metadata.headers,\n reportProgress: true,\n responseType: this.metadata.responseType ?? 'json',\n withCredentials: this.metadata.withCredentials,\n },\n );\n }\n\n protected buildUrlWithParams(url: string, pathParams: Record<string, string>): string {\n const matches = url.match(/\\{[^}]+\\}/g);\n\n if (matches) {\n\n if (!hasIndexSignature(pathParams)) {\n throw new RxapDataSourceError(\n `Path params for connection '${ this.id }' has not an index signature`,\n '',\n this.constructor.name,\n );\n }\n\n for (const match of matches) {\n const param = match.substr(1, match.length - 2);\n let replace: string | null = null;\n // eslint-disable-next-line no-prototype-builtins\n if (pathParams.hasOwnProperty(param)) {\n replace = encodeURIComponent(pathParams[param]);\n }\n if (replace === null) {\n throw new RxapDataSourceError(\n `Path params for connection '${ this.id }' has not a defined value for '${ param }'`,\n '',\n this.constructor.name,\n );\n }\n url = url.replace(match, replace);\n }\n }\n\n return url;\n }\n\n protected abstract buildRequest(options: HttpDataSourceOptions<PathParams, Body>): Observable<Data>;\n\n}\n","import { HttpErrorResponse, HttpEvent, HttpEventType, HttpHeaderResponse, HttpProgressEvent, HttpResponse, HttpSentEvent } from '@angular/common/http';\nimport {\n Constructor,\n deepMerge,\n} from '@rxap/utilities';\nimport {\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 { Injectable } from '@angular/core';\nimport { HttpDataSourceOptions } from './http.data-source.options';\nimport { RxapDataSource } from '@rxap/data-source';\nimport { HttpDataSourceMetadata } from './http.data-source.metadata';\nimport { BaseHttpDataSource } from './base-http.data-source';\n\n@Injectable()\nexport class HttpDataSource<Data = any, PathParams = any, Body = any>\n extends BaseHttpDataSource<Data, PathParams, Body> {\n\n public readonly onSentEvent$ = new Subject<HttpSentEvent>();\n public readonly onResponse$ = new Subject<HttpResponse<Data>>();\n public readonly onDownloadProgress$ = new Subject<HttpProgressEvent>();\n public readonly onUploadProgress$ = new Subject<HttpProgressEvent>();\n public readonly onResponseHeader$ = new Subject<HttpHeaderResponse>();\n\n public derive<D = Data>(\n id: string,\n metadata: Partial<HttpDataSourceMetadata<PathParams, Body>> = this.metadata,\n isolated = false,\n ): HttpDataSource<D, PathParams, Body> {\n return new HttpDataSource<D, PathParams, Body>(\n this.http,\n {\n ...deepMerge(this.metadata, metadata),\n id,\n },\n isolated ? null : this.refresh$,\n );\n }\n\n public transform(data: any): Data {\n return data;\n }\n\n protected handelHttpEvent(event: HttpEvent<Data>) {\n switch (event.type) {\n\n case HttpEventType.Sent:\n this.onSentEvent$.next(event);\n break;\n\n case HttpEventType.Response:\n this.onResponse$.next(event);\n break;\n\n case HttpEventType.DownloadProgress:\n this.onDownloadProgress$.next(event);\n break;\n\n case HttpEventType.UploadProgress:\n this.onUploadProgress$.next(event);\n break;\n\n case HttpEventType.ResponseHeader:\n this.onResponseHeader$.next(event);\n break;\n\n }\n }\n\n protected buildRequest(options: HttpDataSourceOptions<PathParams, Body>): Observable<Data> {\n return this.http.request<Data>(this.buildHttpRequest(options)).pipe(\n retry(this.metadata.retry ?? 0),\n tap(event => this.handelHttpEvent(event)),\n filter((event: any) => event instanceof HttpResponse),\n tap((response: HttpResponse<Data>) => {\n this.interceptors?.forEach(interceptor => interceptor\n .next({\n response,\n options,\n }),\n );\n }),\n catchError((response: HttpErrorResponse) => {\n this.interceptors?.forEach(interceptor => interceptor\n .next({\n response,\n options,\n }),\n );\n return throwError(response);\n }),\n map((event: HttpResponse<Data>) => event.body),\n map(data => this.transform(data)),\n take(1),\n timeout(this.timeout),\n );\n }\n\n}\n\nexport function RxapHttpDataSource<Data, PathParams = any, Body = any>(\n metadata: HttpDataSourceMetadata<PathParams, Body>,\n className = 'HttpDataSource',\n packageName = '@rxap/data-source/http',\n) {\n return function (target: Constructor<HttpDataSource<Data, PathParams, Body>>) {\n RxapDataSource(metadata, className, packageName)(target);\n };\n}\n","import {\n Inject,\n Injectable,\n InjectFlags,\n Injector,\n} from '@angular/core';\nimport { HttpDataSource } from './http.data-source';\nimport { HttpDataSourceOptions } from './http.data-source.options';\nimport { HttpDataSourceMetadata } from './http.data-source.metadata';\nimport {\n DataSourceLoader,\n RxapDataSourceError,\n} from '@rxap/data-source';\nimport { IdOrInstanceOrToken } from '@rxap/definition';\n\n@Injectable({ providedIn: 'root' })\nexport class HttpDataSourceLoader {\n\n // Instead of extanding the DataSourceLoader class the DataSourceLoader instance\n // will be injected, else there could be multiple instance of DataSourceLoader's.\n constructor(@Inject(DataSourceLoader) private readonly dataSourceLoader: DataSourceLoader) {\n }\n\n public request$<Data>(\n dataSourceIdOrInstanceOrToken: IdOrInstanceOrToken<HttpDataSource<Data>>,\n options?: HttpDataSourceOptions,\n merge = false,\n metadata?: Partial<HttpDataSourceMetadata>,\n injector?: Injector,\n notFoundValue?: HttpDataSource<Data>,\n flags?: InjectFlags,\n ): Promise<Data> {\n const dataSource = this\n .dataSourceLoader\n .load<HttpDataSource<Data>>(\n dataSourceIdOrInstanceOrToken,\n metadata,\n injector,\n notFoundValue,\n flags,\n );\n\n if (!(dataSource instanceof HttpDataSource)) {\n throw new RxapDataSourceError(`The data source is not a HttpDataSource`, '', 'HttpDataSourceLoader');\n }\n\n return dataSource.request$(options, merge);\n }\n\n}\n","// region \nexport * from './lib/base-http.data-source';\nexport * from './lib/error';\nexport * from './lib/http-data-source.loader';\nexport * from './lib/http.data-source.metadata';\nexport * from './lib/http.data-source.options';\nexport * from './lib/http.data-source';\nexport * from './lib/http.data-source.viewer';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}