@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
46 lines • 2.01 kB
JavaScript
// 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