@catladder/cli
Version:
Panter cli tool for cloud CI/CD and DevOps
69 lines • 2.72 kB
JavaScript
;
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