UNPKG

@hashgraph/solo

Version:

An opinionated CLI tool to deploy and manage private Hedera Networks.

94 lines 3.21 kB
// SPDX-License-Identifier: Apache-2.0 import { StorageOperation } from '../api/storage-operation.js'; import { UnsupportedStorageOperationError } from '../api/unsupported-storage-operation-error.js'; import { StorageBackendError } from '../api/storage-backend-error.js'; import { IllegalArgumentError } from '../../../core/errors/illegal-argument-error.js'; import { Prefix } from '../../key/prefix.js'; import { EnvironmentKeyFormatter } from '../../key/environment-key-formatter.js'; import { StringEx } from '../../../business/utils/string-ex.js'; export class EnvironmentStorageBackend { prefix; constructor(prefix) { this.prefix = prefix; } isSupported(op) { switch (op) { case StorageOperation.List: case StorageOperation.ReadBytes: { return true; } default: { return false; } } } /** * Let prefix = SOLO * Let separator = _ * * Given: * env = SOLO_CACHE_DIR=/tmp * cfg = solo.cache.dir=/tmp * Then: * key = cache.dir * rnode = cache * lnode = dir * ltype = string * value = /tmp * * Given: * env = SOLO_DEPLOYMENTS_0_NAME=deployment1 * cfg = solo.deployments.0.name=deployment1 * Then: * key = deployments.0.name * rnode = deployments * inode = 0 * itype = array<object> * lnode = name * ltype = string * * Given: * env = SOLO_DEPLOYMENTS_0_CLUSTERS_0=e2e-cluster-1 * cfg = solo.deployments.0.clusters.0=e2e-cluster-1 * Then: * key = deployments.0.clusters.0 * rnode = deployments * rtype = array * lnode = clusters * ltype = array<string> */ async list() { let environment = process.env; if (!environment) { environment = {}; } const keys = Object.keys(environment); return keys .filter((value) => Prefix.matcher(value, this.prefix, EnvironmentKeyFormatter.instance())) .map((value) => Prefix.strip(value, this.prefix)); } async readBytes(key) { if (StringEx.isEmpty(key)) { throw new IllegalArgumentError('key must not be null, undefined, or empty'); } const normalizedKey = Prefix.add(key, this.prefix, EnvironmentKeyFormatter.instance()); let environment = process.env; if (!environment) { environment = {}; } const value = environment[normalizedKey]; if (!value) { throw new StorageBackendError(`key not found: ${key}`); } return Buffer.from(value, 'utf8'); } // eslint-disable-next-line @typescript-eslint/no-unused-vars async writeBytes(_key, _data) { throw new UnsupportedStorageOperationError('writeBytes is not supported by the environment storage backend'); } // eslint-disable-next-line @typescript-eslint/no-unused-vars async delete(_key) { throw new UnsupportedStorageOperationError('delete is not supported by the environment storage backend'); } } //# sourceMappingURL=environment-storage-backend.js.map