UNPKG

@hashgraph/solo

Version:

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

46 lines 2.01 kB
// SPDX-License-Identifier: Apache-2.0 import fs from 'node:fs/promises'; import { parse, stringify } from 'yaml'; import { PathEx } from '../../../business/utils/path-ex.js'; import { SoloError } from '../../../core/errors/solo-error.js'; export class CacheImageTargetTemplateRenderer { templateResolver; static RENDERED_FILE_NAME = 'solo-cache-images-target.rendered.yaml'; constructor(templateResolver) { this.templateResolver = templateResolver; } async renderToFile(sourceFilePath, outputDirectory) { const raw = await fs.readFile(sourceFilePath, 'utf8'); const parsed = parse(raw); const templates = parsed.templates ?? []; this.validateTemplates(templates); const rendered = { images: (parsed.images ?? []).map((image) => ({ ...image, version: this.resolveVersion(image.version, templates), })), }; await fs.mkdir(outputDirectory, { recursive: true }); const renderedFilePath = PathEx.join(outputDirectory, CacheImageTargetTemplateRenderer.RENDERED_FILE_NAME); await fs.writeFile(renderedFilePath, stringify(rendered), 'utf8'); return renderedFilePath; } validateTemplates(templates) { for (const template of templates) { if (!this.templateResolver.has(template)) { throw new SoloError(`Unknown cache image template declared in YAML: ${template}`); } } } resolveVersion(rawVersion, templates) { if (templates.includes(rawVersion)) { return this.templateResolver.resolve(rawVersion); } const looksLikeTemplateKey = /^[A-Z0-9_]+$/.test(rawVersion); if (looksLikeTemplateKey) { throw new SoloError(`Undeclared cache image template key used in version field: ${rawVersion}. Add it to templates first.`); } return rawVersion; } } //# sourceMappingURL=cache-image-target-template-renderer.js.map