pk-template
Version:
p template engine for kubernetes
159 lines • 11.6 kB
JavaScript
"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const lazy_1 = require("../lazy");
const vm = __importStar(require("vm"));
const _1 = require(".");
const _ = lazy_1.getUnderscore();
const compileCoffee = (data) => {
try {
return lazy_1.getCoffeeScript().compile(data, { bare: true });
}
catch (e) {
console.log('failed to compile coffee script');
throw e;
}
};
const compileLive = (data) => {
try {
const bin = lazy_1.getLiveScript().compile(data, { bare: true, map: 'embedded' });
return bin.code;
}
catch (e) {
console.log('failed to compile live script');
throw e;
}
};
class CustomYamlTag {
constructor(type, src, uri) {
this.type = type;
this.src = src;
this.uri = uri;
this.represent = () => this.src;
this.evaluate = (scope, sandbox, evaluator) => {
throw new Error('Custom Tag must implement evaluate() function');
};
this.isScript = () => false;
}
}
exports.CustomYamlTag = CustomYamlTag;
class CustomYamlScriptTag extends CustomYamlTag {
constructor(tag, src, uri, compiler) {
super(tag, src, uri);
this.evaluate = (scope, sandbox, evaluator) => {
try {
const context = vm.createContext(sandbox);
return this.script.runInContext(context, {
lineOffset: 0,
displayErrors: true,
});
}
catch (e) {
e.source = this;
e.sandbox = sandbox;
throw e;
}
};
this.isScript = () => true;
const compiled = compiler ? compiler(src) : src;
this.script = new vm.Script(compiled);
}
}
exports.CustomYamlScriptTag = CustomYamlScriptTag;
class CustomYamlJsTag extends CustomYamlScriptTag {
constructor(src, uri) {
super('js', src, uri);
}
}
exports.CustomYamlJsTag = CustomYamlJsTag;
class CustomYamlCsTag extends CustomYamlScriptTag {
constructor(src, uri) {
super('cs', src, uri, compileCoffee);
}
}
exports.CustomYamlCsTag = CustomYamlCsTag;
class CustomYamlLsTag extends CustomYamlScriptTag {
constructor(src, uri) {
super('ls', src, uri, compileLive);
}
}
exports.CustomYamlLsTag = CustomYamlLsTag;
class CustomYamlTemplateTag extends CustomYamlTag {
constructor(src, uri) {
super('template', src, uri);
this.evaluate = (scope, sandbox, evaluator) => {
return this.tpl(sandbox);
};
this.tpl = _.template(src);
}
}
exports.CustomYamlTemplateTag = CustomYamlTemplateTag;
class CustomYamlYamlTag extends CustomYamlTag {
constructor(src, uri) {
super('yaml', src, uri);
this.evaluate = (scope, sandbox, evaluator) => {
const text = this.tpl(sandbox);
return _1.parseYaml(text);
};
this.tpl = _.template(src);
}
}
exports.CustomYamlYamlTag = CustomYamlYamlTag;
class CustomYamlFileTag extends CustomYamlTag {
constructor(src, uri) {
super('file', src, uri);
this.evaluate = (scope, sandbox, evaluator) => {
const result = scope.loadText(this.src);
return result.data;
};
}
}
exports.CustomYamlFileTag = CustomYamlFileTag;
class CustomYamlFlattenTag extends CustomYamlTag {
constructor(src, uri) {
super('flatten', src, uri);
this.evaluate = (scope, sandbox, evaluator) => {
const list = [];
const flattenDeep = (o) => {
if (o instanceof CustomYamlTag) {
o = o.evaluate(scope, sandbox, evaluator);
}
if (Array.isArray(o)) {
o.forEach(e => flattenDeep(e));
}
else {
list.push(o);
}
};
flattenDeep(this.src);
return list;
};
}
}
exports.CustomYamlFlattenTag = CustomYamlFlattenTag;
class CustomYamlTagTag extends CustomYamlTag {
constructor(code, src, uri) {
super('tag', src, uri);
}
execute(scope, sandbox, evaluator) { }
convert() {
const [tag, src] = this.src.split(' ', 2);
switch (tag) {
case '!js': return new CustomYamlJsTag(src, this.uri);
case '!ls': return new CustomYamlLsTag(src, this.uri);
case '!cs': return new CustomYamlCsTag(src, this.uri);
case '!template': return new CustomYamlTemplateTag(src, this.uri);
case '!yaml': return new CustomYamlYamlTag(src, this.uri);
case '!file': return new CustomYamlFileTag(src, this.uri);
case '!flatten': return new CustomYamlFlattenTag(src, this.uri);
}
}
}
exports.CustomYamlTagTag = CustomYamlTagTag;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tVGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9way15YW1sL2N1c3RvbVRhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsa0NBQXdFO0FBRXhFLHVDQUF5QjtBQUV6Qix3QkFBNEM7QUFDNUMsTUFBTSxDQUFDLEdBQUcsb0JBQWEsRUFBRSxDQUFDO0FBRTFCLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7SUFDN0MsSUFBSTtRQUNGLE9BQU8sc0JBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUN4RDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxDQUFDO0tBQ1Q7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO0lBQzNDLElBQUk7UUFDRixNQUFNLEdBQUcsR0FBRyxvQkFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDM0UsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0tBRWpCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLENBQUM7S0FDVDtBQUNILENBQUMsQ0FBQTtBQUVELE1BQWEsYUFBYTtJQUN4QixZQUFtQixJQUFZLEVBQVMsR0FBUSxFQUFTLEdBQVc7UUFBakQsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ3BFLGNBQVMsR0FBRyxHQUFHLEVB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