@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 • 49.7 kB
Source Map (JSON)
{"version":3,"file":"rxap-data-source.mjs","sources":["../../../../../packages/angular/data-source/src/lib/data-source-error/data-source-error.component.ts","../../../../../packages/angular/data-source/src/lib/data-source-error/data-source-error.component.html","../../../../../packages/angular/data-source/src/lib/base.data-source.ts","../../../../../packages/angular/data-source/src/lib/data-source-loader.ts","../../../../../packages/angular/data-source/src/lib/data-source-refresh-to-method-adapter-factory.ts","../../../../../packages/angular/data-source/src/lib/error.ts","../../../../../packages/angular/data-source/src/lib/tokens.ts","../../../../../packages/angular/data-source/src/lib/method.data-source.ts","../../../../../packages/angular/data-source/src/lib/observable.data-source.ts","../../../../../packages/angular/data-source/src/lib/pipe.data-source.ts","../../../../../packages/angular/data-source/src/lib/static.data-source.ts","../../../../../packages/angular/data-source/src/index.ts","../../../../../packages/angular/data-source/src/rxap-data-source.ts"],"sourcesContent":["import {\n JsonPipe,\n NgIf,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n signal,\n SimpleChanges,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport {\n Environment,\n IsNotReleaseVersion,\n RXAP_ENVIRONMENT,\n} from '@rxap/environment';\nimport {\n Observable,\n Subscription,\n} from 'rxjs';\n\nexport interface DataSourceLikeForErrorHandling {\n refresh?: () => void;\n retry?: () => void;\n reset?: () => void;\n loading?: Observable<boolean> | boolean;\n loading$?: Observable<boolean>;\n error$?: Observable<unknown>;\n error?: Observable<unknown> | unknown | null;\n}\n\n@Component({\n selector: 'rxap-data-source-error',\n templateUrl: './data-source-error.component.html',\n styleUrls: ['./data-source-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatButtonModule,\n NgIf,\n MatProgressSpinnerModule,\n JsonPipe,\n ]\n})\nexport class DataSourceErrorComponent implements OnChanges, OnInit, OnDestroy {\n\n @Input()\n public error?: unknown | null | Observable<unknown>;\n\n @Input()\n public refresh?: () => void;\n\n @Input()\n public retry?: () => void;\n\n @Input()\n public reset?: () => void;\n\n @Input()\n public set dataSourceLike(value: DataSourceLikeForErrorHandling) {\n this.refresh ??= value.refresh;\n this.retry ??= value.retry;\n this.reset ??= value.reset;\n this.loading ??= value.loading ?? value.loading$;\n this.error ??= value.error ?? value.error$;\n }\n\n @Input()\n public loading?: Observable<boolean> | boolean;\n\n public isNotRelease = false;\n\n public errorMessage = signal('Unknown Error');\n\n public retryInProgress = signal(false);\n public resetInProgress = signal(false);\n\n private _subscription?: Subscription;\n\n constructor(\n @Inject(RXAP_ENVIRONMENT)\n private readonly environment: Environment,\n ) {\n this.isNotRelease = IsNotReleaseVersion(environment);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['error']) {\n this.retryInProgress.set(false);\n this.resetInProgress.set(false);\n }\n if (changes['loading']) {\n if (!changes['loading'].currentValue && typeof changes['loading'].currentValue === 'boolean') {\n this.retryInProgress.set(false);\n this.resetInProgress.set(false);\n }\n }\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n ngOnInit() {\n this._subscription = new Subscription();\n if (this.loading instanceof Observable) {\n this._subscription.add(this.loading.subscribe((loading) => {\n if (!loading) {\n if (this.retryInProgress()) {\n this.retryInProgress.set(false);\n }\n if (this.resetInProgress()) {\n this.resetInProgress.set(false);\n }\n }\n }));\n }\n if (this.error instanceof Observable) {\n this._subscription.add(this.error.subscribe((error) => {\n if (error) {\n this.errorMessage.set(error.message);\n }\n }));\n }\n }\n\n triggerRetry() {\n if (this.retry) {\n this.retryInProgress.set(true);\n this.retry();\n } else if (this.refresh) {\n this.retryInProgress.set(true);\n this.refresh();\n }\n }\n\n triggerReset() {\n if (this.reset) {\n this.resetInProgress.set(true);\n this.reset();\n }\n }\n\n}\n","<div class=\"p-10 w-full\">\n <div class=\"flex flex-col justify-center items-center gap-8\">\n <span i18n>Something has gone wrong!</span>\n <div class=\"flex flex-row justify-center items-center gap-4\">\n <button *ngIf=\"refresh || retry\" type=\"button\" (click)=\"triggerRetry()\" [disabled]=\"retryInProgress() || resetInProgress()\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <span i18n>Retry</span>\n <mat-spinner *ngIf=\"retryInProgress()\" [diameter]=\"15\"></mat-spinner>\n </span>\n </button>\n <button *ngIf=\"reset\" type=\"button\" (click)=\"triggerReset()\" [disabled]=\"resetInProgress() || retryInProgress()\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <span i18n>Reset</span>\n <mat-spinner *ngIf=\"resetInProgress()\" [diameter]=\"15\"></mat-spinner>\n </span>\n </button>\n </div>\n <span *ngIf=\"isNotRelease\" class=\"text-red-700\">{{errorMessage()}}</span>\n </div>\n</div>\n","import {\n Inject,\n Injectable,\n isDevMode,\n Optional,\n Signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n BaseDefinition,\n BaseDefinitionMetadata,\n DefinitionMetadata,\n RXAP_DEFINITION_METADATA,\n} from '@rxap/definition';\nimport {\n CloneObservable,\n ToggleSubject,\n} from '@rxap/rxjs';\nimport {\n clone,\n Constructor,\n deepMerge,\n GenerateRandomString,\n} from '@rxap/utilities';\nimport {\n EMPTY,\n firstValueFrom,\n Observable,\n ReplaySubject,\n Subject,\n TeardownLogic,\n} from 'rxjs';\nimport {\n finalize,\n startWith,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nexport type DataSourceViewerId = string;\n\nexport interface BaseDataSourceViewer<View = any> {\n id?: DataSourceViewerId;\n viewChange?: Observable<View>;\n /**\n * Indicates weather the data source should restore the last value from local storage\n */\n restore?: boolean;\n\n [key: string]: any;\n}\n\nexport interface BaseDataSourceMetadata extends BaseDefinitionMetadata {\n /**\n * Indicates weather the data source should restore the last value from local storage\n */\n restore?: boolean;\n}\n\n@Injectable()\nexport class BaseDataSource<\n Data = any,\n Metadata extends BaseDataSourceMetadata = BaseDataSourceMetadata,\n Viewer extends BaseDataSourceViewer = BaseDataSourceViewer\n> extends BaseDefinition<Metadata> {\n public readonly change$ = new Subject<Data>();\n /**\n * Indicates weather the data source is currently loading new data\n */\n public loading$: Observable<boolean> = EMPTY;\n public readonly hasError$ = new ToggleSubject();\n public readonly error$ = new ReplaySubject<Error>(1);\n public get lastRefreshed(): Date | null {\n return this._lastRefreshed;\n }\n protected _lastRefreshed: Date | null = null;\n protected _connectedViewer = new Map<DataSourceViewerId, Observable<Data>>();\n protected _connectedViewerTeardown = new Map<\n DataSourceViewerId,\n TeardownLogic\n >();\n protected _data$: Observable<Data> = EMPTY;\n /**\n * a map of viewer to view id.\n * Allows to create a view id from the viewer object reference\n * @protected\n */\n protected _viewerIds = new Map<Viewer, string>();\n protected _retry$ = new Subject<void>();\n\n public loading?: Signal<boolean>;\n\n public hasError?: Signal<boolean>;\n\n constructor(\n @Optional()\n @Inject(RXAP_DEFINITION_METADATA)\n metadata: Metadata | null = null,\n ) {\n super(metadata);\n }\n\n protected _data?: Data;\n\n public get data() {\n return clone(this._data);\n }\n\n public get hasConnections(): boolean {\n return this._connectedViewer.size > 0;\n }\n\n public getViewerId(viewer: Viewer): string {\n if (viewer.id) {\n return viewer.id;\n }\n if (!this._viewerIds.has(viewer)) {\n this._viewerIds.set(viewer, GenerateRandomString());\n }\n return this._viewerIds.get(viewer)!;\n }\n\n public connect(viewerOrString: Viewer | DataSourceViewerId): Observable<Data> {\n let viewer: Viewer;\n if (typeof viewerOrString === 'string') {\n viewer = { id: viewerOrString } as Viewer;\n } else {\n viewer = viewerOrString;\n }\n if (!viewer.id) {\n viewer.id = this.getViewerId(viewer);\n }\n if (this.isConnected(viewer)) {\n return this._connectedViewer.get(viewer.id)!;\n }\n if (!viewer.viewChange) {\n viewer.viewChange = EMPTY;\n }\n const _connection = this._connect(viewer);\n let connection: Observable<Data>;\n let teardownLogic: TeardownLogic | null = null;\n if (Array.isArray(_connection)) {\n if (_connection.length !== 2) {\n throw new Error(\n 'if this._connect returns an array. The array should have two items',\n );\n }\n connection = _connection[0];\n teardownLogic = _connection[1];\n } else {\n connection = _connection;\n }\n\n const destroy$ = new Subject<void>();\n\n const cacheKey = [ 'rxap', 'data-source', this.constructor.name, this.id ].join('_');\n const restore = viewer.restore ?? this.metadata.restore ?? false;\n\n connection = connection.pipe(\n tap((data) => {\n this._data = data;\n if (restore) {\n try {\n const cache = JSON.stringify(data);\n localStorage.setItem(cacheKey, cache);\n } catch (e: any) {\n console.warn(\n `Failed to store data source '${ this.id }' data in local storage`,\n );\n }\n }\n }),\n tap((data) => this.change$.next(data)),\n tap(() => this._lastRefreshed = new Date()),\n finalize(() => this.disconnect(viewer)),\n takeUntil(destroy$),\n );\n\n if (restore) {\n const data = localStorage.getItem(cacheKey);\n if (data) {\n this._data = JSON.parse(data) as Data;\n connection = connection.pipe(startWith(this._data));\n }\n }\n\n this._connectedViewer.set(viewer.id, connection);\n\n if (teardownLogic) {\n const tl = teardownLogic;\n teardownLogic = () => {\n destroy$.next();\n if (typeof tl === 'function') {\n tl();\n } else {\n tl.unsubscribe();\n }\n };\n } else {\n teardownLogic = () => {\n destroy$.next();\n };\n }\n\n this._connectedViewerTeardown.set(viewer.id, teardownLogic);\n return connection;\n }\n\n public attach(viewerId: DataSourceViewerId): Observable<Data> {\n if (this.isConnected(viewerId)) {\n return CloneObservable(this._connectedViewer.get(viewerId)!);\n }\n throw new Error(`No active connection with viewer id '${ viewerId }' found`);\n }\n\n public isConnected(viewerOrId: Viewer | DataSourceViewerId): boolean {\n const viewerId =\n typeof viewerOrId === 'string'\n ? viewerOrId\n : viewerOrId.id ?? this.getViewerId(viewerOrId);\n return this._connectedViewer.has(viewerId);\n }\n\n public disconnect(viewerOrId: Viewer | DataSourceViewerId) {\n const viewerId =\n typeof viewerOrId === 'string'\n ? viewerOrId\n : viewerOrId.id ?? this.getViewerId(viewerOrId);\n if (this.isConnected(viewerId)) {\n this._disconnect(viewerId);\n this._connectedViewer.delete(viewerId);\n if (this._connectedViewerTeardown.has(viewerId)) {\n const teardownLogic = this._connectedViewerTeardown.get(viewerId)!;\n if (teardownLogic) {\n if (typeof teardownLogic === 'function') {\n teardownLogic();\n } else {\n teardownLogic.unsubscribe();\n }\n }\n }\n } else {\n console.debug(\n `Connection with viewer id '${ viewerId }' is not connected to the data source '${ this.id }'`,\n );\n }\n // TODO : find better cleanup solution\n if (typeof viewerOrId === 'string') {\n for (const [ viewer, id ] of this._viewerIds.entries()) {\n if (viewerOrId === id) {\n this._viewerIds.delete(viewer);\n }\n }\n } else {\n this._viewerIds.delete(viewerOrId);\n }\n }\n\n /**\n * Creates a connection to tha data source and converts the Observable into a\n * promise and then disconnects the viewer\n */\n public async toPromise(viewer: Viewer): Promise<Data> {\n const result = await firstValueFrom(this.connect(viewer).pipe(take(1)));\n this.disconnect(viewer);\n return result;\n }\n\n public derive(\n id: string,\n metadata: Partial<BaseDataSourceMetadata> = this.metadata,\n ): BaseDataSource<any> {\n return new BaseDataSource<any>({\n ...deepMerge(this.metadata, metadata),\n id,\n });\n }\n\n public toJSON(): object {\n return {\n id: this.id,\n metadata: this.metadata,\n connected: this._connectedViewer.keys(),\n data: this._data,\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public refresh(): any {\n }\n\n public retry(): any {\n this._retry$.next();\n }\n\n public reset(): any {\n for (const viewerId of this._connectedViewer.keys()) {\n this.disconnect(viewerId);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (this.metadata.hasOwnProperty('context')) {\n delete this.metadata['context'];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected _disconnect(viewerId: DataSourceViewerId): void {\n }\n\n protected genericRetryFunction(error: any, retryCount: number): Observable<any> {\n return this._retry$.asObservable().pipe(\n tap(() => this.hasError$.disable()),\n );\n }\n\n protected handelError(error: any) {\n if (isDevMode()) {\n console.log(`DataSource '${ this.id }' has an error:`, error);\n }\n }\n\n protected _connect(\n viewer: BaseDataSourceViewer,\n ): [ Observable<Data>, TeardownLogic ] | Observable<Data> {\n this.init();\n return this._data$;\n }\n}\n\nexport function RxapDataSource<Metadata extends BaseDataSourceMetadata>(\n dataSourceIdOrMetadata: string | Metadata,\n className = 'BaseDataSource',\n packageName = '@rxap/data-source',\n) {\n return function (target: Constructor<BaseDataSource>) {\n DefinitionMetadata(dataSourceIdOrMetadata, className, packageName)(target);\n };\n}\n","import {\n Injectable,\n InjectFlags,\n Injector,\n} from '@angular/core';\nimport {\n BaseDataSource,\n BaseDataSourceMetadata,\n BaseDataSourceViewer,\n} from './base.data-source';\nimport { Observable } from 'rxjs';\nimport {\n DefinitionLoader,\n IdOrInstanceOrToken,\n} from '@rxap/definition';\n\n@Injectable({ providedIn: 'root' })\nexport class DataSourceLoader extends DefinitionLoader {\n\n public connect<Data>(\n dataSourceIdOrInstanceOrToken: IdOrInstanceOrToken<BaseDataSource<Data>>,\n viewer: BaseDataSourceViewer,\n metadata?: Partial<BaseDataSourceMetadata>,\n injector?: Injector,\n notFoundValue?: BaseDataSource<Data>,\n flags?: InjectFlags,\n ): Observable<Data> {\n return this\n .load(\n dataSourceIdOrInstanceOrToken,\n metadata,\n injector,\n notFoundValue,\n flags,\n )\n .connect(viewer);\n }\n\n}\n","import { ToMethod } from '@rxap/pattern';\nimport { BaseDataSource } from './base.data-source';\n\nexport function DataSourceRefreshToMethodAdapterFactory(dataSource: BaseDataSource<unknown>) {\n return ToMethod(() => dataSource.refresh());\n}\n","import { RxapError } from '@rxap/utilities';\n\nexport class RxapDataSourceError extends RxapError {\n\n constructor(message: string, code: string, className?: string) {\n super('@rxap/data-source', message, code, className);\n }\n\n}\n","import { InjectionToken } from '@angular/core';\nimport { Method } from '@rxap/pattern';\n\nexport const RXAP_STATIC_DATA_SOURCE_DATA = new InjectionToken('rxap/data-source/static-data-source-data');\n\nexport const RXAP_DATA_SOURCE_REFRESH = new InjectionToken('rxap/data-source/refresh');\n\nexport const RXAP_OBSERVABLE_DATA_SOURCE = new InjectionToken('rxap/data-source/observable-data-source');\n\nexport const RXAP_DATA_SOURCE_METADATA = new InjectionToken('rxap/data-source/metadata');\n\nexport const RXAP_DATA_SOURCE = new InjectionToken('rxap/data-source/instance');\n\nexport const RXAP_PIPE_DATA_SOURCE_OPERATOR = new InjectionToken('rxap/data-source/pipe-operator');\n\nexport const RXAP_DATA_SOURCE_METHOD = new InjectionToken<Method>('rxap/data-source/method');\n\nexport const RXAP_DATA_SOURCE_METHOD_WITHOUT_PARAMETERS = new InjectionToken<boolean>(\n 'rxap/data-source/method-without-parameters',\n {\n providedIn: 'root',\n factory: () => false,\n },\n);\n","import {\n Inject,\n Injectable,\n OnInit,\n} from '@angular/core';\nimport { Method } from '@rxap/pattern';\nimport { ToggleSubject } from '@rxap/rxjs';\nimport {\n EMPTY,\n firstValueFrom,\n from,\n Observable,\n OperatorFunction,\n ReplaySubject,\n Subject,\n TeardownLogic,\n} from 'rxjs';\nimport {\n startWith,\n switchMap,\n tap,\n} from 'rxjs/operators';\nimport {\n BaseDataSource,\n BaseDataSourceMetadata,\n BaseDataSourceViewer,\n} from './base.data-source';\nimport {\n RXAP_DATA_SOURCE_METHOD,\n RXAP_DATA_SOURCE_METHOD_WITHOUT_PARAMETERS,\n} from './tokens';\n\n@Injectable()\nexport class MethodDataSource<Data, Parameters = any>\n extends BaseDataSource<Data, BaseDataSourceMetadata, (BaseDataSourceViewer & Parameters) | BaseDataSourceViewer<Parameters>>\n implements OnInit {\n\n protected override readonly _data$ = new ReplaySubject<Data>(1);\n\n public override readonly loading$ = new ToggleSubject(false);\n\n private readonly _refresh = new Subject<void>();\n\n constructor(\n @Inject(RXAP_DATA_SOURCE_METHOD)\n protected readonly method: Method<Data, Parameters>,\n @Inject(RXAP_DATA_SOURCE_METHOD_WITHOUT_PARAMETERS)\n protected readonly withoutParameters = false,\n ) {\n super(method.metadata);\n }\n\n public ngOnInit(): void {\n if (this.withoutParameters) {\n this.executeWithoutParameters();\n }\n }\n\n public override refresh(): void {\n this._refresh.next();\n if (this.withoutParameters) {\n this.executeWithoutParameters();\n }\n }\n\n protected override _connect(viewer: (BaseDataSourceViewer & Parameters) | BaseDataSourceViewer<Parameters>): [ Observable<Data>, TeardownLogic ] | Observable<Data> {\n if (this.withoutParameters) {\n return super._connect(viewer);\n } else {\n return this._refresh.pipe(\n tap(() => this.hasError$.disable()),\n startWith(undefined),\n switchMap<void, Observable<Data>>(() => {\n if (viewer.viewChange && viewer.viewChange !== EMPTY) {\n return (\n viewer.viewChange as Observable<Parameters>\n ).pipe(\n tap(() => this.loading$.enable()),\n switchMap((parameters) => from(this.execute(parameters)).pipe(this.handelExecution())),\n );\n } else {\n this.loading$.enable();\n return from(this.execute(viewer as Parameters)).pipe(this.handelExecution());\n }\n }),\n );\n }\n }\n\n protected handelExecution(): OperatorFunction<Data, Data> {\n return tap({\n next: () => {\n this.loading$.disable();\n },\n error: (error: any) => {\n this.loading$.disable();\n this.hasError$.enable();\n this.error$.next(error);\n },\n finalize: () => {\n this.loading$.disable();\n }\n });\n }\n\n protected async execute(parameters?: Parameters): Promise<Data> {\n return this.method.call(parameters);\n }\n\n protected async executeWithoutParameters(): Promise<void> {\n this.hasError$.disable();\n this.loading$.enable();\n await firstValueFrom(from(this.execute()).pipe(\n this.handelExecution(),\n tap({\n next: (data) => this._data$.next(data),\n }),\n ));\n }\n\n}\n","import {\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n BaseDataSource,\n BaseDataSourceMetadata,\n RxapDataSource,\n} from './base.data-source';\nimport { Observable } from 'rxjs';\nimport {\n RXAP_DATA_SOURCE_METADATA,\n RXAP_OBSERVABLE_DATA_SOURCE,\n} from './tokens';\nimport { Constructor } from '@rxap/utilities';\n\nexport interface ObservableDataSourceMetadata<Data> extends BaseDataSourceMetadata {\n data?: Observable<Data>;\n}\n\n@Injectable()\nexport class ObservableDataSource<Data> extends BaseDataSource<Data, ObservableDataSourceMetadata<Data>> {\n\n constructor(\n @Optional() @Inject(RXAP_OBSERVABLE_DATA_SOURCE) observable: Observable<Data> | null,\n @Optional() @Inject(RXAP_DATA_SOURCE_METADATA) metadata: ObservableDataSourceMetadata<Data> | null = null,\n ) {\n super(metadata);\n if (observable) {\n this._data$ = observable;\n } else if (this.metadata.data) {\n this._data$ = this.metadata.data;\n }\n }\n\n}\n\nexport function RxapObservableDataSource<Data>(\n metadata: ObservableDataSourceMetadata<Data>,\n className = 'ObservableDataSource',\n packageName = '@rxap/data-source',\n) {\n return function (target: Constructor<ObservableDataSource<Data>>) {\n RxapDataSource(metadata, className, packageName)(target);\n };\n}\n\nexport function observableDataSource<Data>(\n data: Observable<Data>,\n metadata: ObservableDataSourceMetadata<Data> = { id: 'static' },\n): ObservableDataSource<Data> {\n return new ObservableDataSource(data, metadata);\n}\n","import {\n Inject,\n Injectable,\n OnDestroy,\n Optional,\n} from '@angular/core';\nimport { Constructor } from '@rxap/utilities';\nimport {\n Observable,\n OperatorFunction,\n Subject,\n TeardownLogic,\n} from 'rxjs';\nimport {\n map,\n startWith,\n switchMap,\n} from 'rxjs/operators';\nimport {\n BaseDataSource,\n BaseDataSourceMetadata,\n BaseDataSourceViewer,\n RxapDataSource,\n} from './base.data-source';\nimport { RxapDataSourceError } from './error';\nimport {\n RXAP_DATA_SOURCE,\n RXAP_PIPE_DATA_SOURCE_OPERATOR,\n} from './tokens';\n\nexport interface PipeDataSourceMetadata extends BaseDataSourceMetadata {\n /**\n * If true the parent data source will be refreshed when the pipe data source is refreshed\n * @default false\n */\n refreshParent?: boolean;\n}\n\nexport function RxapPipeDataSource(\n metadata: PipeDataSourceMetadata,\n className = 'PipeDataSource',\n packageName = '@rxap/data-source',\n) {\n return function (target: Constructor<PipeDataSource>) {\n RxapDataSource(metadata, className, packageName)(target);\n };\n}\n\n@Injectable()\nexport class PipeDataSource<Source = any, Target = Source>\n extends BaseDataSource<Target>\n implements OnDestroy {\n\n private readonly _refresh = new Subject<void>();\n\n constructor(\n @Inject(RXAP_DATA_SOURCE) public readonly dataSource: BaseDataSource<Source>,\n @Optional() @Inject(RXAP_PIPE_DATA_SOURCE_OPERATOR) operation: OperatorFunction<Source, any> | null = null,\n ...operations: Array<OperatorFunction<any, any> | PipeDataSourceMetadata>\n ) {\n super(dataSource.metadata);\n this.loading$ = this.dataSource.loading$;\n if (operation) {\n this.setOperations(\n operation,\n ...operations.filter(op => typeof op === 'function') as Array<OperatorFunction<any, any>>,\n );\n if (operations.some(op => typeof op !== 'function')) {\n this.metadata = {\n ...this.metadata,\n ...operations.find(op => typeof op !== 'function'),\n };\n }\n }\n }\n\n private _operations: Array<OperatorFunction<any, any>> = [];\n\n protected get operations(): Array<OperatorFunction<any, any>> {\n return this._operations;\n }\n\n public setOperations(\n operation: OperatorFunction<Source, any>,\n ...operations: Array<OperatorFunction<any, any>>\n ): void {\n if (this._initialised) {\n throw new RxapDataSourceError(\n 'Can not set operations after the data source is initialised',\n '',\n 'PipeDataSource',\n );\n }\n this._operations = [ operation, ...operations ];\n }\n\n public override ngOnDestroy() {\n super.ngOnDestroy();\n this.dataSource.disconnect(this.metadata);\n }\n\n /**\n * @param parent true - call the refresh method of the parent data source\n */\n public override refresh(parent: boolean = this.metadata['refreshParent'] ?? false): any {\n if (parent) {\n this.dataSource.refresh();\n } else {\n this._refresh.next();\n }\n }\n\n public override reset(): any {\n return this.dataSource.reset();\n }\n\n public override toJSON(): object {\n return {\n ...super.toJSON(),\n dataSource: this.dataSource,\n };\n }\n\n protected override _connect(viewer: BaseDataSourceViewer): [ Observable<Target>, TeardownLogic ] | Observable<Target> {\n this.init();\n return [\n this.dataSource.connect(viewer).pipe(\n switchMap(data => this._refresh.pipe(\n startWith(null),\n map(() => data),\n )),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ...this.viewerToOperations(viewer),\n ),\n () => this.dataSource.disconnect(viewer),\n ];\n }\n\n protected viewerToOperations(viewer: BaseDataSourceViewer): Array<OperatorFunction<any, any>> {\n return this.operations;\n }\n\n}\n\nexport function pipeDataSource<Source, Target>(\n dataSource: BaseDataSource<Source>,\n operation: OperatorFunction<Source, any>,\n ...operations: Array<OperatorFunction<any, any> | PipeDataSourceMetadata>\n): PipeDataSource<Source, Target> {\n return new PipeDataSource<Source, Target>(dataSource, operation, ...operations);\n}\n","import {\n clone,\n Constructor,\n isPromise,\n isPromiseLike,\n} from '@rxap/utilities';\nimport {\n isObservable,\n Observable,\n ReplaySubject,\n Subscription,\n} from 'rxjs';\nimport {\n Inject,\n Injectable,\n OnDestroy,\n Optional,\n} from '@angular/core';\nimport {\n RXAP_DATA_SOURCE_METADATA,\n RXAP_STATIC_DATA_SOURCE_DATA,\n} from './tokens';\nimport {\n BaseDataSource,\n BaseDataSourceMetadata,\n RxapDataSource,\n} from './base.data-source';\nimport { RxapDataSourceError } from './error';\nimport { tap } from 'rxjs/operators';\n\nexport type StaticDataSourceData<Data = any> =\n | Data\n | Promise<Data>\n | Observable<Data>\n | (() => Data);\n\nexport interface StaticDataSourceMetadata<Data = any>\n extends BaseDataSourceMetadata {\n data?: StaticDataSourceData<Data>;\n}\n\n@Injectable()\nexport class StaticDataSource<Data = any>\n extends BaseDataSource<Data, StaticDataSourceMetadata<Data>>\n implements OnDestroy {\n protected override _data$ = new ReplaySubject<Data>(1);\n private _dataSubscription?: Subscription;\n\n constructor(\n @Optional()\n @Inject(RXAP_STATIC_DATA_SOURCE_DATA)\n data: any | null,\n @Optional()\n @Inject(RXAP_DATA_SOURCE_METADATA)\n metadata: StaticDataSourceMetadata | null,\n ) {\n super(metadata);\n if ((data === undefined || data === null) && this.metadata.data !== undefined) {\n data = this.metadata.data;\n }\n if (data === undefined) {\n throw new RxapDataSourceError(\n `Can not create static data source '${ this.id }' with undefined as data`,\n '',\n );\n }\n if (isObservable(data)) {\n this._dataSubscription = (\n data as Observable<any>\n ).pipe(\n tap({\n next: data => this._data$.next(data),\n error: error => this.error$.next(error),\n }),\n ).subscribe();\n } else if (isPromiseLike(data)) {\n if (isPromise(data)) {\n data.then(data => this._data$.next(data)).catch((error) => this.error$.next(error));\n } else {\n data.then(data => this._data$.next(data));\n }\n } else if (typeof data === 'function') {\n // TODO : fix typeof function cast\n this._data$.next((this._data = (data as any)()));\n } else {\n this._data$.next((this._data = data));\n }\n }\n\n public override get data(): Data {\n return clone<Data>(this._data!);\n }\n\n public override set data(value: Data) {\n const data = clone(value);\n this._data = data;\n this._data$.next(data);\n }\n\n public override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._dataSubscription?.unsubscribe();\n }\n\n protected override _connect(): Observable<Data> {\n this.init();\n return this._data$.asObservable();\n }\n\n}\n\nexport function RxapStaticDataSource<Data>(\n metadata: StaticDataSourceMetadata<Data>,\n className = 'StaticDataSource',\n packageName = '@rxap/data-source',\n) {\n return function (target: Constructor<StaticDataSource<Data>>) {\n RxapDataSource(metadata, className, packageName)(target);\n };\n}\n\nexport function staticDataSource<Data>(\n data: StaticDataSourceData<Data>,\n metadata: StaticDataSourceMetadata<Data> = { id: 'static' },\n): StaticDataSource<Data> {\n return new StaticDataSource(data, metadata);\n}\n","// region data-source-error\nexport * from './lib/data-source-error/data-source-error.component';\n// endregion\n\n// region \nexport * from './lib/base.data-source';\nexport * from './lib/data-source-loader';\nexport * from './lib/data-source-refresh-to-method-adapter-factory';\nexport * from './lib/error';\nexport * from './lib/method.data-source';\nexport * from './lib/observable.data-source';\nexport * from './lib/pipe.data-source';\nexport * from './lib/static.data-source';\nexport * from './lib/tokens';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}