@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
60 lines • 2.14 kB
JavaScript
/**
* SPDX-License-Identifier: Apache-2.0
*/
import { ComponentType } from '../enumerations.js';
import { SoloError } from '../../../errors.js';
/**
* Represents the base structure and common functionality for all components within the system.
* This class provides validation, comparison, and serialization functionality for components.
*/
export class BaseComponent {
type;
name;
cluster;
namespace;
/**
* @param type - type for identifying.
* @param name - the name to distinguish components.
* @param cluster - the cluster in which the component is deployed.
* @param namespace - the namespace associated with the component.
*/
constructor(type, name, cluster, namespace) {
this.type = type;
this.name = name;
this.cluster = cluster;
this.namespace = namespace;
}
/* -------- Utilities -------- */
/**
* Compares two BaseComponent instances for equality.
*
* @param x - The first component to compare
* @param y - The second component to compare
* @returns boolean - true if the components are equal
*/
static compare(x, y) {
return x.name === y.name && x.type === y.type && x.cluster === y.cluster && x.namespace === y.namespace;
}
validate() {
if (!this.name || typeof this.name !== 'string') {
throw new SoloError(`Invalid name: ${this.name}`);
}
if (!this.cluster || typeof this.cluster !== 'string') {
throw new SoloError(`Invalid cluster: ${this.cluster}`);
}
if (!this.namespace || typeof this.namespace !== 'string') {
throw new SoloError(`Invalid namespace: ${this.namespace}, is typeof 'string': ${typeof this.namespace !== 'string'}`);
}
if (!Object.values(ComponentType).includes(this.type)) {
throw new SoloError(`Invalid component type: ${this.type}`);
}
}
toObject() {
return {
name: this.name,
cluster: this.cluster,
namespace: this.namespace,
};
}
}
//# sourceMappingURL=base_component.js.map