UNPKG

@hashgraph/solo

Version:

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

48 lines (39 loc) 1.64 kB
// SPDX-License-Identifier: Apache-2.0 import {type ObjectStorageBackend} from '../api/object-storage-backend.js'; import {FileStorageBackend} from './file-storage-backend.js'; import {StorageBackendError} from '../api/storage-backend-error.js'; import yaml from 'yaml'; import {IllegalArgumentError} from '../../../core/errors/illegal-argument-error.js'; import {PathEx} from '../../../business/utils/path-ex.js'; export class YamlFileStorageBackend extends FileStorageBackend implements ObjectStorageBackend { public constructor(basePath: string) { super(basePath); } public async readObject(key: string): Promise<object> { const data: Buffer = await this.readBytes(key); const filePath: string = PathEx.joinWithRealPath(this.basePath, key); if (!data) { throw new StorageBackendError(`failed to read file: ${filePath}`); } if (data.length === 0) { throw new StorageBackendError(`file is empty: ${filePath}`); } try { return yaml.parse(data.toString('utf8')); } catch (error) { throw new StorageBackendError(`error parsing yaml file: ${filePath}`, error); } } public async writeObject(key: string, data: object): Promise<void> { if (!data) { throw new IllegalArgumentError('data must not be null or undefined'); } const filePath: string = PathEx.join(this.basePath, key); try { const yamlData: string = yaml.stringify(data, {sortMapEntries: true}); await this.writeBytes(key, Buffer.from(yamlData, 'utf8')); } catch (error) { throw new StorageBackendError(`error writing yaml file: ${filePath}`, error); } } }