UNPKG

@catladder/cli

Version:

Panter cli tool for cloud CI/CD and DevOps

69 lines 2.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createVariableValueContainingReferencesFromString = exports.VariableValueContainingReferences = exports.VariableReference = exports.UnresolvableReference = void 0; const BashExpression_1 = require("../bash/BashExpression"); const bashEscape_1 = require("../bash/bashEscape"); class UnresolvableReference { constructor(reference) { this.reference = reference; } toString() { return `Unresolvable reference: ${this.reference.toString()}`; } } exports.UnresolvableReference = UnresolvableReference; class VariableReference { constructor(componentName, variableName) { this.componentName = componentName; this.variableName = variableName; } toString() { return `\${${this.componentName}:${this.variableName}}`; } } exports.VariableReference = VariableReference; class VariableValueContainingReferences { constructor(parts) { this.parts = (Array.isArray(parts) ? parts : [parts]).flatMap((part) => part instanceof VariableValueContainingReferences ? part.parts : part === "" ? [] : [part]); } toString(options = { quotes: false, }) { return this.parts .map((part) => { if (typeof part === "string") { return (0, bashEscape_1.escapeString)(part, options); } else if (part instanceof BashExpression_1.BashExpression) { return (0, bashEscape_1.escapeBashExpression)(part, options); } else { return part.toString(); } }) .join(""); } } exports.VariableValueContainingReferences = VariableValueContainingReferences; // regex to resolve references in catladder variables // those expressions have the pattern ${componentName:variableName} const REGEX = /\$\{(([^:}]+):)?([^}]+)}/gm; const createVariableValueContainingReferencesFromString = (value, options) => { const parts = []; let match; let lastIndex = 0; while ((match = REGEX.exec(value)) !== null) { const [fullMatch, _, otherComponentName, variableName] = match; parts.push(value.slice(lastIndex, match.index)); parts.push(new VariableReference(otherComponentName || options.componentName, variableName)); lastIndex = REGEX.lastIndex; } parts.push(value.slice(lastIndex)); return new VariableValueContainingReferences(parts); }; exports.createVariableValueContainingReferencesFromString = createVariableValueContainingReferencesFromString; //# sourceMappingURL=VariableValueContainingReferences.js.map