UNPKG

@versatiledatakit/shared

Version:

Versatile Data Kit Shared library enables reusability of shared features like: NgRx Redux, Error Handlers, Utils, Generic Components, etc.

77 lines 10.8 kB
/* * Copyright 2023-2025 Broadcom * SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/naming-convention */ import { Directive } from '@angular/core'; import { CollectionsUtil } from '../../../utils'; import { TaurusObject } from '../../object'; import { generateSupportedHttpErrorCodes } from '../../error/utils'; import * as i0 from "@angular/core"; /** * ** Base Class for Angular Service related classes. * * - Add abstraction for TaurusBaseApiService subclasses to auto-register their methods' error codes in relationship one method to many error codes for auto-supported scenarios. * - There could be added additional error codes from subclasses. */ export class TaurusBaseApiService extends TaurusObject { /** * ** Constructor. */ constructor(className = null) { super(className ?? TaurusBaseApiService.CLASS_NAME); /** * ** Class error codes Mapping. * * - There are auto-generated error codes for every method name in runtime, where method name is the key, and the multiple values where each value is bound to unique error code. * - Subclasses could override in definition time or in runtime to add additional error codes. */ this.errorCodes = {}; } /** * ** Register error codes for service. * * - Exclude system methods. * - Exclude private methods which names start with underscore (e.g. _methodName(): void;) * @protected */ registerErrorCodes(service) { /* eslint-disable @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */ try { Object.getOwnPropertyNames(service.prototype) .filter((method) => method !== 'constructor' && method !== 'dispose' && method !== 'ngOnDestroy' && method !== 'cleanSubscriptions' && method !== 'removeSubscriptionRef' && method !== 'registerErrorCodes' && !/^_/.test(method) && CollectionsUtil.isFunction(service.prototype[method])) .forEach((method) => { this.errorCodes[method] = generateSupportedHttpErrorCodes(service.CLASS_NAME, service.PUBLIC_NAME, method); }); } catch (e) { console.error(`Cannot register Service Error Codes!`); } /* eslint-enable @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */ } } /** * @inheritDoc */ TaurusBaseApiService.CLASS_NAME = 'TaurusBaseApiService'; /** * @inheritDoc */ TaurusBaseApiService.PUBLIC_NAME = 'Taurus-Api-Service'; TaurusBaseApiService.ɵfac = function TaurusBaseApiService_Factory(t) { i0.ɵɵinvalidFactory(); }; TaurusBaseApiService.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TaurusBaseApiService, features: [i0.ɵɵInheritDefinitionFeature] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TaurusBaseApiService, [{ type: Directive }], function () { return [{ type: undefined }]; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF1cnVzLWJhc2UtYXBpLXNlcnZpY2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21tb24vc2VydmljZS9tb2RlbC90YXVydXMtYmFzZS1hcGktc2VydmljZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCw0RkFBNEY7QUFFNUYsT0FBTyxFQUFFLFNBQVMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZUFBZSxFQUFpQixNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHNUMsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBcUJwRTs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBK0QsU0FBUSxZQUFZO0lBbUI1Rjs7T0FFRztJQUNILFlBQXNCLFlBQW9CLElBQUk7UUFDMUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVp4RDs7Ozs7V0FLRztRQUNNLGVBQVUsR0FBc0IsRUFBdUIsQ0FBQztJQU9qRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sa0JBQWtCLENBQUMsT0FBb0I7UUFDN0M7O3VFQUUrRDtRQUUvRCxJQUFJO1lBQ0EsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7aUJBQ3hDLE1BQU0sQ0FDSCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1AsTUFBTSxLQUFLLGFBQWE7Z0JBQ3hCLE1BQU0sS0FBSyxTQUFTO2dCQUNwQixNQUFNLEtBQUssYUFBYTtnQkFDeEIsTUFBTSxLQUFLLG9CQUFvQjtnQkFDL0IsTUFBTSxLQUFLLHVCQUF1QjtnQkFDbEMsTUFBTSxLQUFLLG9CQUFvQjtnQkFDL0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDbEIsZUFBZSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzVEO2lCQUNBLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLCtCQUErQixDQUNwRCxPQUFlLENBQUMsVUFBVSxFQUMxQixPQUFlLENBQUMsV0FBVyxFQUM1QixNQUFNLENBQ1QsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1NBQ1Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztTQUN6RDtRQUNEOztzRUFFOEQ7SUFDbEUsQ0FBQzs7QUEvREQ7O0dBRUc7QUFDc0IsK0JBQVUsR0FBVyxzQkFBdUIsQ0FBQTtBQUVyRTs7R0FFRztBQUNzQixnQ0FBVyxHQUFXLG9CQUFxQixDQUFBOzt1RUFUM0Qsb0JBQW9CO3VGQUFwQixvQkFBb0I7Y0FEaEMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMy0yMDI1IEJyb2FkY29tXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbmltcG9ydCB7IERpcmVjdGl2ZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb2xsZWN0aW9uc1V0aWwsIEZpbHRlck1ldGhvZHMgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbmltcG9ydCB7IFRhdXJ1c09iamVjdCB9IGZyb20gJy4uLy4uL29iamVjdCc7XG5cbmltcG9ydCB7IFNlcnZpY2VIdHRwRXJyb3JDb2RlcyB9IGZyb20gJy4uLy4uL2Vycm9yJztcbmltcG9ydCB7IGdlbmVyYXRlU3VwcG9ydGVkSHR0cEVycm9yQ29kZXMgfSBmcm9tICcuLi8uLi9lcnJvci91dGlscyc7XG5cbi8qKlxuICogKiogU3RvcmUgdHlwZSBmb3IgYXV0by1nZW5lcmF0ZWQgY29kZXMgZm9yIGV2ZXJ5IG1ldGhvZCwgd2hlcmUga2V5IGlzIHRoZSBtZXRob2QgbmFtZSBhbmQgdmFsdWUgaXMgZGlmZmVyZW50IGVycm9yIGNvZGVzIGZvciBhdXRvLXN1cHBvcnRlZCBzY2VuYXJpb3MuXG4gKi9cbmV4cG9ydCB0eXBlIEVycm9yQ29kZXM8Q1R5cGUsIEtFeGNsdWRlIGV4dGVuZHMga2V5b2YgYW55ID0gRXhjbHVkZWRNZXRob2RzPiA9IFJlYWRvbmx5PFxuICAgIFJlY29yZDxrZXlvZiBGaWx0ZXJNZXRob2RzPENUeXBlLCBLRXhjbHVkZT4sIFJlYWRvbmx5PFJlY29yZDxrZXlvZiBTZXJ2aWNlSHR0cEVycm9yQ29kZXMsIHN0cmluZz4+PlxuPjtcblxuLyoqXG4gKiAqKiBFeGNsdWRlZCBtZXRob2RzIGZyb20gYXV0by1nZW5lcmF0ZWQgZXJyb3IgY29kZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEV4Y2x1ZGVkTWV0aG9kcyA9XG4gICAgfCAnY29uc3RydWN0b3InXG4gICAgfCAnZXJyb3JDb2RlcydcbiAgICB8ICdkaXNwb3NlJ1xuICAgIHwgJ25nT25EZXN0cm95J1xuICAgIHwgJ2NsZWFuU3Vic2NyaXB0aW9ucydcbiAgICB8ICdyZW1vdmVTdWJzY3JpcHRpb25SZWYnXG4gICAgfCAncmVnaXN0ZXJFcnJvckNvZGVzJztcblxuLyoqXG4gKiAqKiBCYXNlIENsYXNzIGZvciBBbmd1bGFyIFNlcnZpY2UgcmVsYXRlZCBjbGFzc2VzLlxuICpcbiAqICAgICAgLSBBZGQgYWJzdHJhY3Rpb24gZm9yIFRhdXJ1c0Jhc2VBcGlTZXJ2aWNlIHN1YmNsYXNzZXMgdG8gYXV0by1yZWdpc3RlciB0aGVpciBtZXRob2RzJyBlcnJvciBjb2RlcyBpbiByZWxhdGlvbnNoaXAgb25lIG1ldGhvZCB0byBtYW55IGVycm9yIGNvZGVzIGZvciBhdXRvLXN1cHBvcnRlZCBzY2VuYXJpb3MuXG4gKiAgICAgIC0gVGhlcmUgY291bGQgYmUgYWRkZWQgYWRkaXRpb25hbCBlcnJvciBjb2RlcyBmcm9tIHN1YmNsYXNzZXMuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIFRhdXJ1c0Jhc2VBcGlTZXJ2aWNlPENUeXBlIGV4dGVuZHMgVGF1cnVzQmFzZUFwaVNlcnZpY2UgPSBhbnk+IGV4dGVuZHMgVGF1cnVzT2JqZWN0IHtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBDTEFTU19OQU1FOiBzdHJpbmcgPSAnVGF1cnVzQmFzZUFwaVNlcnZpY2UnO1xuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgUFVCTElDX05BTUU6IHN0cmluZyA9ICdUYXVydXMtQXBpLVNlcnZpY2UnO1xuXG4gICAgLyoqXG4gICAgICogKiogQ2xhc3MgZXJyb3IgY29kZXMgTWFwcGluZy5cbiAgICAgKlxuICAgICAqICAgICAgLSBUaGVyZSBhcmUgYXV0by1nZW5lcmF0ZWQgZXJyb3IgY29kZXMgZm9yIGV2ZXJ5IG1ldGhvZCBuYW1lIGluIHJ1bnRpbWUsIHdoZXJlIG1ldGhvZCBuYW1lIGlzIHRoZSBrZXksIGFuZCB0aGUgbXVsdGlwbGUgdmFsdWVzIHdoZXJlIGVhY2ggdmFsdWUgaXMgYm91bmQgdG8gdW5pcXVlIGVycm9yIGNvZGUuXG4gICAgICogICAgICAtIFN1YmNsYXNzZXMgY291bGQgb3ZlcnJpZGUgaW4gZGVmaW5pdGlvbiB0aW1lIG9yIGluIHJ1bnRpbWUgdG8gYWRkIGFkZGl0aW9uYWwgZXJyb3IgY29kZXMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXJyb3JDb2RlczogRXJyb3JDb2RlczxDVHlwZT4gPSB7fSBhcyBFcnJvckNvZGVzPENUeXBlPjtcblxuICAgIC8qKlxuICAgICAqICoqIENvbnN0cnVjdG9yLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihjbGFzc05hbWU6IHN0cmluZyA9IG51bGwpIHtcbiAgICAgICAgc3VwZXIoY2xhc3NOYW1lID8/IFRhdXJ1c0Jhc2VBcGlTZXJ2aWNlLkNMQVNTX05BTUUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICoqIFJlZ2lzdGVyIGVycm9yIGNvZGVzIGZvciBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogICAgICAtIEV4Y2x1ZGUgc3lzdGVtIG1ldGhvZHMuXG4gICAgICogICAgICAtIEV4Y2x1ZGUgcHJpdmF0ZSBtZXRob2RzIHdoaWNoIG5hbWVzIHN0YXJ0IHdpdGggdW5kZXJzY29yZSAoZS5nLiBfbWV0aG9kTmFtZSgpOiB2b2lkOylcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyRXJyb3JDb2RlcyhzZXJ2aWNlOiBUeXBlPENUeXBlPik6IHZvaWQge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZXJ2aWNlLnByb3RvdHlwZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAobWV0aG9kKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kICE9PSAnY29uc3RydWN0b3InICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgIT09ICdkaXNwb3NlJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kICE9PSAnbmdPbkRlc3Ryb3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgIT09ICdjbGVhblN1YnNjcmlwdGlvbnMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgIT09ICdyZW1vdmVTdWJzY3JpcHRpb25SZWYnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgIT09ICdyZWdpc3RlckVycm9yQ29kZXMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhL15fLy50ZXN0KG1ldGhvZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbGxlY3Rpb25zVXRpbC5pc0Z1bmN0aW9uKHNlcnZpY2UucHJvdG90eXBlW21ldGhvZF0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckNvZGVzW21ldGhvZF0gPSBnZW5lcmF0ZVN1cHBvcnRlZEh0dHBFcnJvckNvZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlcnZpY2UgYXMgYW55KS5DTEFTU19OQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlcnZpY2UgYXMgYW55KS5QVUJMSUNfTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgcmVnaXN0ZXIgU2VydmljZSBFcnJvciBDb2RlcyFgKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuICAgIH1cbn1cbiJdfQ==