terraform-generator
Version:
Generate Terraform configurations with Node.js.
134 lines (133 loc) • 4.91 kB
JavaScript
"use strict";
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var _Block_instances, _Block_arguments, _Block_innerBlocks, _Block_insideTerraformBlock, _Block_validateIdentifier;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Block = void 0;
const utils_1 = require("../utils");
/**
* @category Block
*/
class Block extends utils_1.TerraformElement {
/**
* Construct block.
*
* @param type type
* @param names names
* @param args arguments
*/
constructor(type, names, args, innerBlocks, insideTerraformBlock = false) {
super();
_Block_instances.add(this);
_Block_arguments.set(this, void 0);
_Block_innerBlocks.set(this, void 0);
_Block_insideTerraformBlock.set(this, void 0);
__classPrivateFieldGet(this, _Block_instances, "m", _Block_validateIdentifier).call(this, type);
names.forEach(name => {
__classPrivateFieldGet(this, _Block_instances, "m", _Block_validateIdentifier).call(this, name);
});
this.blockType = type;
this.blockNames = names;
__classPrivateFieldSet(this, _Block_arguments, args, "f");
__classPrivateFieldSet(this, _Block_innerBlocks, innerBlocks ? innerBlocks : [], "f");
__classPrivateFieldSet(this, _Block_insideTerraformBlock, insideTerraformBlock, "f");
}
/**
* Is this block to be placed inside top-level terraform block.
*/
isInsideTerraformBlock() {
return __classPrivateFieldGet(this, _Block_insideTerraformBlock, "f");
}
/**
* Get arguments.
*/
getArguments() {
return __classPrivateFieldGet(this, _Block_arguments, "f");
}
/**
* Get argument by key.
*
* @param key key
*/
getArgument(key) {
return __classPrivateFieldGet(this, _Block_arguments, "f")[key];
}
/**
* Set argument.
*
* @param key key
* @param value value
*/
setArgument(key, value) {
__classPrivateFieldGet(this, _Block_arguments, "f")[key] = value;
return this;
}
/**
* Set arguments.
*
* @param args arguments
*/
setArguments(args) {
__classPrivateFieldSet(this, _Block_arguments, {
...__classPrivateFieldGet(this, _Block_arguments, "f"),
...args
}, "f");
return this;
}
/**
* Delete argument by key.
*
* @param key key
*/
deleteArgument(key) {
delete __classPrivateFieldGet(this, _Block_arguments, "f")[key];
return this;
}
/**
* Get inner blocks.
*/
getInnerBlocks() {
return __classPrivateFieldGet(this, _Block_innerBlocks, "f");
}
/**
* Set inner blocks.
*/
setInnerBlocks(innerBlocks) {
__classPrivateFieldSet(this, _Block_innerBlocks, innerBlocks ? innerBlocks : [], "f");
return this;
}
toTerraform() {
let str = this.blockType;
this.blockNames.forEach(name => {
str += ` "${name}"`;
});
str += '{\n';
str += utils_1.Util.argumentsToString(__classPrivateFieldGet(this, _Block_arguments, "f"));
__classPrivateFieldGet(this, _Block_innerBlocks, "f").forEach(block => {
str += `${block.toTerraform().trim()}\n`;
});
str += '}\n\n';
return utils_1.Util.escape(str);
}
/**
* Block's id attribute.
*/
get id() {
return this.attr('id');
}
}
exports.Block = Block;
_Block_arguments = new WeakMap(), _Block_innerBlocks = new WeakMap(), _Block_insideTerraformBlock = new WeakMap(), _Block_instances = new WeakSet(), _Block_validateIdentifier = function _Block_validateIdentifier(identifier) {
if (!identifier.match(utils_1.IDENTIFIER_REGEX)) {
throw new Error(`Invalid identifier: ${identifier}`);
}
};