terraform-generator
Version:
Generate Terraform configurations with Node.js.
116 lines (115 loc) • 4.09 kB
JavaScript
;
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _a, _Util_escapeChars;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Util = void 0;
const blocks_1 = require("../blocks");
const _1 = require(".");
class Util {
static escape(str) {
__classPrivateFieldGet(this, _a, "f", _Util_escapeChars).forEach(char => {
str = str.replaceAll(char[0], char[1]);
});
return str;
}
static unescape(str) {
__classPrivateFieldGet(this, _a, "f", _Util_escapeChars).slice().reverse().forEach(char => {
str = str.replaceAll(char[1], char[0]);
});
return str;
}
static argumentsToString(args) {
let str = '';
for (const key in args) {
str += this.argumentToString(key, args[key]);
}
return str;
}
static isObjectArgument(value) {
if (['string', 'number', 'boolean'].indexOf(typeof value) >= 0 || value instanceof _1.TerraformElement) {
return false;
}
if (typeof value === 'object') {
return true;
}
throw new Error(`Invalid value: ${value}`);
}
static argumentToString(key, value) {
try {
if (value == null) {
return '';
}
if (!key.match(_1.IDENTIFIER_REGEX)) {
key = `"${key}"`;
}
let operator = ' = ';
let isObjectArray = false;
if (Array.isArray(value)) {
if (value.length === 0 || this.isObjectArgument(value[0])) {
value = value.filter(element => element != null);
operator = ' ';
isObjectArray = true;
}
}
else if (this.isObjectArgument(value)) {
operator = ' ';
}
if (isObjectArray) {
let str = '';
if (Array.isArray(value)) {
value.forEach(element => {
str += `${key}${operator}${this.argumentValueToString(element)}\n`;
});
}
return str;
}
return `${key}${operator}${this.argumentValueToString(value)}\n`;
}
catch (err) {
throw new Error(`Invalid value: ${key} = ${value}`);
}
}
static argumentValueToString(value) {
if (value == null) {
return null;
}
if (value instanceof blocks_1.Block) {
return value.asArgument().toTerraform();
}
if (value instanceof _1.TerraformElement) {
return value.toTerraform();
}
if (['string', 'number', 'boolean'].indexOf(typeof value) >= 0) {
return JSON.stringify(value);
}
if (typeof value === 'object') {
if (Array.isArray(value)) {
let str = '[\n';
value.forEach((element, i) => {
str += `${this.argumentValueToString(element)}${i < value.length - 1 ? ',' : ''}\n`;
});
str += ']';
return str;
}
let str = '{\n';
for (const key in value) {
str += this.argumentToString(key, value[key]);
}
str += '}';
return str;
}
throw new Error(`Invalid value: ${value}`);
}
static inaccessibleMethod() {
return new Error('Inaccessible method.');
}
}
exports.Util = Util;
_a = Util;
_Util_escapeChars = { value: [
['"', '&tfgquot;']
] };