UNPKG

@versatiledatakit/shared

Version:

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

97 lines 9.86 kB
/* * Copyright 2023-2025 Broadcom * SPDX-License-Identifier: Apache-2.0 */ import { Directive } from '@angular/core'; import { Subscription } from 'rxjs'; import { CollectionsUtil } from '../../../utils'; import * as i0 from "@angular/core"; /** * ** Base Class for all Angular related Objects. * * - Cleans all rxjs subscriptions on object destroy. */ // eslint-disable-next-line @angular-eslint/directive-class-suffix export class TaurusObject { /** * ** Constructor. */ constructor(className = null) { this.objectUUID = CollectionsUtil.generateObjectUUID(className ?? TaurusObject.CLASS_NAME); this.subscriptions = []; } /** * ** Methods that will dispose Object. * - Clean all Subscriptions. */ dispose() { this.cleanSubscriptions(); } /** * @inheritDoc */ ngOnDestroy() { this.dispose(); } /** * ** Clean all Subscriptions. */ cleanSubscriptions() { // unsubscribe all valid subscriptions this.subscriptions // eslint-disable-next-line @typescript-eslint/unbound-method .filter(CollectionsUtil.isDefined) // eslint-disable-next-line @typescript-eslint/unbound-method .forEach(TaurusObject._unsubscribeFromStream); } /** * ** Remove subscription reference from subscriptions queue providing reference itself. * * - Before remove it would be auto-unsubscribed from stream. * @protected */ removeSubscriptionRef(subscriptionRef) { const subscriptionIndex = this.subscriptions.findIndex((s) => s === subscriptionRef); if (subscriptionIndex === -1) { if (subscriptionRef instanceof Subscription) { TaurusObject._unsubscribeFromStream(subscriptionRef); return true; } return false; } const removedSubscription = this.subscriptions.splice(subscriptionIndex, 1); return TaurusObject._unsubscribeFromStream(removedSubscription[0]); } /** * ** Unsubscribe subscription from stream. * @private */ static _unsubscribeFromStream(s) { try { s.unsubscribe(); return true; } catch (e) { console.error(`Taurus Object failed to unsubscribe from rxjs stream!`, e); return false; } } } /** * ** Class name, identifier for Object class. * * - Format should be PascalCase. */ TaurusObject.CLASS_NAME = 'TaurusObject'; /** * ** Class PUBLIC_NAME, human-readable. * * - Format should be Kebab-Case. */ TaurusObject.PUBLIC_NAME = 'Taurus-Base-Object'; TaurusObject.ɵfac = function TaurusObject_Factory(t) { i0.ɵɵinvalidFactory(); }; TaurusObject.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TaurusObject }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TaurusObject, [{ type: Directive }], function () { return [{ type: undefined }]; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF1cnVzLW9iamVjdC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2NvbW1vbi9vYmplY3QvbW9kZWwvdGF1cnVzLW9iamVjdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUVqRDs7OztHQUlHO0FBRUgsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBTyxZQUFZO0lBK0JyQjs7T0FFRztJQUNILFlBQVksWUFBb0IsSUFBSTtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNQLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxrQkFBa0I7UUFDeEIsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxhQUFhO1lBQ2QsNkRBQTZEO2FBQzVELE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQ2xDLDZEQUE2RDthQUM1RCxPQUFPLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08scUJBQXFCLENBQUMsZUFBNkI7UUFDekQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxDQUFDO1FBRXJGLElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxlQUFlLFlBQVksWUFBWSxFQUFFO2dCQUN6QyxZQUFZLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRXJELE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFNUUsT0FBTyxZQUFZLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQWU7UUFDakQsSUFBSTtZQUNBLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVoQixPQUFPLElBQUksQ0FBQztTQUNmO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTFFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQzs7QUF2R0Q7Ozs7R0FJRztBQUNhLHVCQUFVLEdBQVcsY0FBZSxDQUFBO0FBRXBEOzs7O0dBSUc7QUFDYSx3QkFBVyxHQUFXLG9CQUFxQixDQUFBOzsrREFibEQsWUFBWTt1RkFBWixZQUFZO2NBRnhCLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjMtMjAyNSBCcm9hZGNvbVxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ29sbGVjdGlvbnNVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuXG4vKipcbiAqICoqIEJhc2UgQ2xhc3MgZm9yIGFsbCBBbmd1bGFyIHJlbGF0ZWQgT2JqZWN0cy5cbiAqXG4gKiAgICAgIC0gQ2xlYW5zIGFsbCByeGpzIHN1YnNjcmlwdGlvbnMgb24gb2JqZWN0IGRlc3Ryb3kuXG4gKi9cbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgVGF1cnVzT2JqZWN0IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiAqKiBDbGFzcyBuYW1lLCBpZGVudGlmaWVyIGZvciBPYmplY3QgY2xhc3MuXG4gICAgICpcbiAgICAgKiAgICAgIC0gRm9ybWF0IHNob3VsZCBiZSBQYXNjYWxDYXNlLlxuICAgICAqL1xuICAgIHN0YXRpYyByZWFkb25seSBDTEFTU19OQU1FOiBzdHJpbmcgPSAnVGF1cnVzT2JqZWN0JztcblxuICAgIC8qKlxuICAgICAqICoqIENsYXNzIFBVQkxJQ19OQU1FLCBodW1hbi1yZWFkYWJsZS5cbiAgICAgKlxuICAgICAqICAgICAgLSBGb3JtYXQgc2hvdWxkIGJlIEtlYmFiLUNhc2UuXG4gICAgICovXG4gICAgc3RhdGljIHJlYWRvbmx5IFBVQkxJQ19OQU1FOiBzdHJpbmcgPSAnVGF1cnVzLUJhc2UtT2JqZWN0JztcblxuICAgIC8qKlxuICAgICAqICoqIE9iamVjdCBVVUlEIHRoYXQgbWVhdHMgUkZDNDEyMiBjb21wbGlhbmNlIGFuZCBhbHNvIGhhcyBDbGFzcyBuYW1lIGlkZW50aWZpZXIgaW5zaWRlLlxuICAgICAqXG4gICAgICogPGJyLz5cbiAgICAgKiA8aT5wYXR0ZXJuPC9pPjpcbiAgICAgKiA8cD5cbiAgICAgKiAgICAgPENsYXNzIE5hbWU+PHN0cm9uZz5fPC9zdHJvbmc+PFVVSUQgUkZDNDEyMj5cbiAgICAgKiA8L3A+XG4gICAgICovXG4gICAgcmVhZG9ubHkgb2JqZWN0VVVJRDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogKiogU3RvcmUgZm9yIFN1YnNjcmlwdGlvbnMgcmVmZXJlbmNlcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW107XG5cbiAgICAvKipcbiAgICAgKiAqKiBDb25zdHJ1Y3Rvci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGFzc05hbWU6IHN0cmluZyA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vYmplY3RVVUlEID0gQ29sbGVjdGlvbnNVdGlsLmdlbmVyYXRlT2JqZWN0VVVJRChjbGFzc05hbWUgPz8gVGF1cnVzT2JqZWN0LkNMQVNTX05BTUUpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAqKiBNZXRob2RzIHRoYXQgd2lsbCBkaXNwb3NlIE9iamVjdC5cbiAgICAgKiAgICAgIC0gQ2xlYW4gYWxsIFN1YnNjcmlwdGlvbnMuXG4gICAgICovXG4gICAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhblN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAqKiBDbGVhbiBhbGwgU3Vic2NyaXB0aW9ucy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY2xlYW5TdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyB1bnN1YnNjcmliZSBhbGwgdmFsaWQgc3Vic2NyaXB0aW9uc1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgICAgIC5maWx0ZXIoQ29sbGVjdGlvbnNVdGlsLmlzRGVmaW5lZClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgICAgIC5mb3JFYWNoKFRhdXJ1c09iamVjdC5fdW5zdWJzY3JpYmVGcm9tU3RyZWFtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAqKiBSZW1vdmUgc3Vic2NyaXB0aW9uIHJlZmVyZW5jZSBmcm9tIHN1YnNjcmlwdGlvbnMgcXVldWUgcHJvdmlkaW5nIHJlZmVyZW5jZSBpdHNlbGYuXG4gICAgICpcbiAgICAgKiAgICAgIC0gQmVmb3JlIHJlbW92ZSBpdCB3b3VsZCBiZSBhdXRvLXVuc3Vic2NyaWJlZCBmcm9tIHN0cmVhbS5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbW92ZVN1YnNjcmlwdGlvblJlZihzdWJzY3JpcHRpb25SZWY6IFN1YnNjcmlwdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmRleCA9IHRoaXMuc3Vic2NyaXB0aW9ucy5maW5kSW5kZXgoKHMpID0+IHMgPT09IHN1YnNjcmlwdGlvblJlZik7XG5cbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvblJlZiBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIFRhdXJ1c09iamVjdC5fdW5zdWJzY3JpYmVGcm9tU3RyZWFtKHN1YnNjcmlwdGlvblJlZik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlZFN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2Uoc3Vic2NyaXB0aW9uSW5kZXgsIDEpO1xuXG4gICAgICAgIHJldHVybiBUYXVydXNPYmplY3QuX3Vuc3Vic2NyaWJlRnJvbVN0cmVhbShyZW1vdmVkU3Vic2NyaXB0aW9uWzBdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAqKiBVbnN1YnNjcmliZSBzdWJzY3JpcHRpb24gZnJvbSBzdHJlYW0uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBfdW5zdWJzY3JpYmVGcm9tU3RyZWFtKHM6IFN1YnNjcmlwdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVGF1cnVzIE9iamVjdCBmYWlsZWQgdG8gdW5zdWJzY3JpYmUgZnJvbSByeGpzIHN0cmVhbSFgLCBlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19