@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
JavaScript
/*
* 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