UNPKG

@rxap/remote-method

Version:

This package provides abstractions for defining and executing remote methods in Angular applications. It includes features such as automatic refreshing, proxying, and error handling. It offers a structured way to manage remote calls and their dependencies

1 lines 10.1 kB
{"version":3,"file":"rxap-remote-method.mjs","sources":["../../../../../packages/angular/remote-method/src/lib/tokens.ts","../../../../../packages/angular/remote-method/src/lib/error.ts","../../../../../packages/angular/remote-method/src/lib/base.remote-method.ts","../../../../../packages/angular/remote-method/src/lib/proxy.remote-method.ts","../../../../../packages/angular/remote-method/src/lib/remote-method-loader.ts","../../../../../packages/angular/remote-method/src/index.ts","../../../../../packages/angular/remote-method/src/rxap-remote-method.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const REMOTE_METHOD_META_DATA = new InjectionToken('rxap/remote-method/REMOTE_METHOD_META_DATA');\nexport const RXAP_PROXY_REMOTE_METHOD_TARGET = new InjectionToken('rxap/remote-method/proxy/target');\n","import { RxapError } from '@rxap/utilities';\n\nexport class RxapRemoteMethodError extends RxapError {\n\n constructor(message: string, code: string, className?: string) {\n super('@rxap/remote-method', message, code, className);\n }\n\n}\n\n","import {\n AbstractType,\n Inject,\n Injectable,\n InjectFlags,\n InjectionToken,\n Injector,\n INJECTOR,\n Optional,\n Type,\n} from '@angular/core';\nimport { REMOTE_METHOD_META_DATA } from './tokens';\nimport {\n BaseDefinition,\n BaseDefinitionMetadata,\n DefinitionMetadata,\n} from '@rxap/definition';\nimport { Subject } from 'rxjs';\nimport { RxapRemoteMethodError } from './error';\nimport { Refreshable } from '@rxap/utilities';\nimport { CounterSubject } from '@rxap/rxjs';\n\nexport interface BaseRemoteMethodMetadata extends BaseDefinitionMetadata {\n refresh?: Array<Type<Refreshable> | InjectionToken<Refreshable> | AbstractType<Refreshable>>;\n}\n\nexport function RxapRemoteMethod<MetaData extends BaseDefinitionMetadata = BaseDefinitionMetadata>(\n metadataOrId: MetaData | string,\n className = 'BaseRemoteMethod',\n packageName = '@rxap/remote-method',\n) {\n return function (target: any) {\n DefinitionMetadata(metadataOrId, className, packageName)(target);\n };\n}\n\n@Injectable()\nexport abstract class BaseRemoteMethod<ReturnType = any,\n Parameter = any,\n Metadata extends BaseRemoteMethodMetadata = BaseRemoteMethodMetadata> extends BaseDefinition<Metadata> {\n\n public executed$: Subject<ReturnType> = new Subject<ReturnType>();\n\n public executionsInProgress$: CounterSubject = new CounterSubject();\n\n public readonly injector: Injector;\n\n private _pauseRefresh = false;\n\n constructor(\n @Optional()\n @Inject(INJECTOR)\n injector: Injector | null = null,\n @Optional()\n @Inject(REMOTE_METHOD_META_DATA)\n metaData: any | null = null,\n ) {\n super(metaData);\n if (injector === undefined) {\n throw new RxapRemoteMethodError(\n 'Injector is undefined. Ensure that the Injector is added to the deps property!',\n '',\n this.constructor.name,\n );\n }\n this.injector = injector ?? Injector.NULL;\n if (typeof this.injector.get !== 'function') {\n throw new RxapRemoteMethodError(\n 'The property injector is not Injector like. Check the deps property!',\n '',\n this.constructor.name,\n );\n }\n }\n\n public async call(parameters?: Parameter): Promise<ReturnType> {\n this.init();\n this.executionsInProgress$.increase();\n const result = await this._call(parameters);\n this.executionsInProgress$.decrease();\n this.executed$.next(result);\n this.executed(result);\n return result;\n }\n\n public executed(result: ReturnType): void {\n if (!this._pauseRefresh) {\n this.refresh();\n }\n }\n\n public pauseRefresh(): void {\n this._pauseRefresh = true;\n }\n\n public resumeRefresh(): void {\n this._pauseRefresh = false;\n }\n\n public refresh(): void {\n if (this.metadata.refresh) {\n for (const refresh of this.metadata.refresh) {\n const canRefresh = this.injector.get(refresh, null, InjectFlags.Optional);\n if (canRefresh) {\n canRefresh.refresh();\n }\n }\n }\n }\n\n protected abstract _call(parameters?: Parameter): Promise<ReturnType> | ReturnType;\n\n}\n\n\n","import {\n Inject,\n Injectable,\n INJECTOR,\n Injector,\n} from '@angular/core';\nimport {\n BaseRemoteMethod,\n BaseRemoteMethodMetadata,\n} from './base.remote-method';\nimport {\n REMOTE_METHOD_META_DATA,\n RXAP_PROXY_REMOTE_METHOD_TARGET,\n} from './tokens';\n\n@Injectable()\nexport abstract class ProxyRemoteMethod<ReturnType = any, SourceParameter = any, TargetParameter = SourceParameter>\n extends BaseRemoteMethod<ReturnType, SourceParameter> {\n\n constructor(\n @Inject(RXAP_PROXY_REMOTE_METHOD_TARGET)\n private readonly remoteMethod: BaseRemoteMethod,\n @Inject(INJECTOR)\n injector: Injector | null = null,\n @Inject(REMOTE_METHOD_META_DATA)\n metadata: BaseRemoteMethodMetadata = remoteMethod.metadata,\n ) {\n super(injector, metadata);\n }\n\n public abstract transformParameters(parameters?: SourceParameter): TargetParameter | Promise<TargetParameter>;\n\n protected async _call(parameters?: SourceParameter): Promise<any> {\n return this.remoteMethod.call(await this.transformParameters(parameters));\n }\n\n}\n","import {\n Injectable,\n InjectFlags,\n Injector,\n} from '@angular/core';\nimport {\n BaseRemoteMethod,\n BaseRemoteMethodMetadata,\n} from './base.remote-method';\nimport {\n DefinitionLoader,\n IdOrInstanceOrToken,\n} from '@rxap/definition';\n\n@Injectable({ providedIn: 'root' })\nexport class RemoteMethodLoader extends DefinitionLoader {\n\n public async call$<ReturnType = any, Parameters = any, Metadata extends BaseRemoteMethodMetadata = BaseRemoteMethodMetadata>(\n remoteMethodIdOrInstanceOrToken: IdOrInstanceOrToken<BaseRemoteMethod<ReturnType, Parameters, Metadata>>,\n parameters: Parameters,\n metadata?: Partial<BaseRemoteMethodMetadata>,\n injector?: Injector,\n notFoundValue?: BaseRemoteMethod<ReturnType, Parameters, Metadata>,\n flags?: InjectFlags,\n ): Promise<ReturnType> {\n return this\n .load(\n remoteMethodIdOrInstanceOrToken,\n metadata,\n injector,\n notFoundValue,\n flags,\n )\n .call(parameters);\n }\n\n}\n","// region \nexport * from './lib/base.remote-method';\nexport * from './lib/error';\nexport * from './lib/proxy.remote-method';\nexport * from './lib/remote-method-loader';\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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"}