@catladder/cli
Version:
Panter cli tool for cloud CI/CD and DevOps
71 lines • 2.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.writeBashYamlToFileScript = exports.yamlBashString = void 0;
const yaml_1 = require("yaml");
const BashExpression_1 = require("./BashExpression");
const VariableValueContainingReferences_1 = require("../variables/VariableValueContainingReferences");
const bashExpressionType = {
tag: "",
resolve: (str) => {
// not really needed,but let's make typescript happy
return new BashExpression_1.BashExpression(str);
},
stringify(node, ctx) {
// we create a BLOCK_LITERAL
// but because bash will interpret the value, it may resolve to a multiline string
// so we need to indent every line using sed
return ("|-\n" +
ctx.indent +
indentNewlinesInBashExpression(node.value, ctx.indent));
},
identify: (v) => v instanceof BashExpression_1.BashExpression,
};
const indentNewlinesInBashExpression = (expression, indent) => {
return expression.transformWithCommand(`sed '1!s/^/${indent}/'`);
};
const variableContainingReferences = {
tag: "",
resolve: (str) => {
// not really needed,but let's make typescript happy
return new VariableValueContainingReferences_1.VariableValueContainingReferences(str);
},
stringify(node, ctx) {
const value = node.value;
const stringified = value.parts
.map((part) => part instanceof BashExpression_1.BashExpression
? indentNewlinesInBashExpression(part, ctx.indent)
: // indent every new line
part.toString().replace(/\n/g, `\n${ctx.indent}`))
.join("");
return "|-\n" + ctx.indent + stringified;
},
identify: (v) => v instanceof VariableValueContainingReferences_1.VariableValueContainingReferences,
};
/***
* creates a yaml string that can be used in bash scripts
* it handles BashExpressions correctly so that they can be evaluated in bash
*/
const yamlBashString = (value) => {
return (0, yaml_1.stringify)(value, {
defaultStringType: "BLOCK_LITERAL",
defaultKeyType: "PLAIN",
customTags: [bashExpressionType, variableContainingReferences],
aliasDuplicateObjects: false,
lineWidth: 0,
});
};
exports.yamlBashString = yamlBashString;
/**
* creates a bash script that writes a yaml string to a file
* @param value the yaml value to write, it supports BashExpressions
*/
const writeBashYamlToFileScript = (value, filename) => {
return [
`cat > ${filename} <<EOF
${(0, exports.yamlBashString)(value)}
EOF
`,
];
};
exports.writeBashYamlToFileScript = writeBashYamlToFileScript;
//# sourceMappingURL=bashYaml.js.map