aws-cdk
Version:
CDK Toolkit, the command line tool for CDK apps
86 lines • 8.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toYAML = toYAML;
exports.deserializeStructure = deserializeStructure;
exports.serializeStructure = serializeStructure;
exports.loadStructuredFile = loadStructuredFile;
exports.obscureTemplate = obscureTemplate;
exports.replacerBufferWithInfo = replacerBufferWithInfo;
const fs = require("fs-extra");
const bytes_1 = require("./util/bytes");
const yaml_cfn = require("./util/yaml-cfn");
/**
* Stringify to YAML
*/
function toYAML(obj) {
return yaml_cfn.serialize(obj);
}
/**
* Parse either YAML or JSON
*/
function deserializeStructure(str) {
return yaml_cfn.deserialize(str);
}
/**
* Serialize to either YAML or JSON
*/
function serializeStructure(object, json) {
if (json) {
return JSON.stringify(object, undefined, 2);
}
else {
return toYAML(object);
}
}
/**
* Load a YAML or JSON file from disk
*/
async function loadStructuredFile(fileName) {
const contents = await fs.readFile(fileName, { encoding: 'utf-8' });
return deserializeStructure(contents);
}
/**
* Remove any template elements that we don't want to show users.
*/
function obscureTemplate(template = {}) {
if (template.Rules) {
// see https://github.com/aws/aws-cdk/issues/17942
if (template.Rules.CheckBootstrapVersion) {
if (Object.keys(template.Rules).length > 1) {
delete template.Rules.CheckBootstrapVersion;
}
else {
delete template.Rules;
}
}
}
return template;
}
/**
* Detects a buffer that has been converted to a JSON-like object
* In Node, `Buffer`s have `toJSON()` method that converts the buffer
* into a JS object that can be JSON stringified.
* Unfortunately this conversion happens before the replacer is called,
* so normal means of detecting a `Buffer` objet don't work anymore.
* @see https://github.com/nodejs/node-v0.x-archive/issues/5110
*/
function isJsonBuffer(value) {
return typeof value === 'object'
&& 'type' in value
&& value.type === 'Buffer'
&& 'data' in value
&& Array.isArray(value.data);
}
/**
* A JSON.stringify() replacer that converts Buffers into a string with information
* Use this if you plan to print out JSON stringified objects that may contain a Buffer.
* Without this, large buffers (think: Megabytes) will completely fill up the output
* and even crash the system.
*/
function replacerBufferWithInfo(_key, value) {
if (isJsonBuffer(value)) {
return `<Buffer: ${(0, bytes_1.formatBytes)(value.data.length)}>`;
}
return value;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VyaWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esd0JBRUM7QUFLRCxvREFFQztBQUtELGdEQU1DO0FBS0QsZ0RBR0M7QUFLRCwwQ0FhQztBQTJCRCx3REFLQztBQXJGRCwrQkFBK0I7QUFDL0Isd0NBQTJDO0FBQzNDLDRDQUE0QztBQUU1Qzs7R0FFRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxHQUFRO0lBQzdCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxHQUFXO0lBQzlDLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxNQUFXLEVBQUUsSUFBYTtJQUMzRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGtCQUFrQixDQUFDLFFBQWdCO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwRSxPQUFPLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxXQUFnQixFQUFFO0lBQ2hELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLGtEQUFrRDtRQUNsRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN6QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDO1lBQzlDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFVO0lBSTlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUTtXQUMzQixNQUFNLElBQUksS0FBSztXQUNmLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtXQUN2QixNQUFNLElBQUksS0FBSztXQUNmLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLElBQVMsRUFBRSxLQUFVO0lBQzFELElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxZQUFZLElBQUEsbUJBQVcsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDdkQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGZvcm1hdEJ5dGVzIH0gZnJvbSAnLi91dGlsL2J5dGVzJztcbmltcG9ydCAqIGFzIHlhbWxfY2ZuIGZyb20gJy4vdXRpbC95YW1sLWNmbic7XG5cbi8qKlxuICogU3RyaW5naWZ5IHRvIFlBTUxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvWUFNTChvYmo6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiB5YW1sX2Nmbi5zZXJpYWxpemUob2JqKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBlaXRoZXIgWUFNTCBvciBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVN0cnVjdHVyZShzdHI6IHN0cmluZyk6IGFueSB7XG4gIHJldHVybiB5YW1sX2Nmbi5kZXNlcmlhbGl6ZShzdHIpO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSB0byBlaXRoZXIgWUFNTCBvciBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVTdHJ1Y3R1cmUob2JqZWN0OiBhbnksIGpzb246IGJvb2xlYW4pIHtcbiAgaWYgKGpzb24pIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCB1bmRlZmluZWQsIDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0b1lBTUwob2JqZWN0KTtcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgYSBZQU1MIG9yIEpTT04gZmlsZSBmcm9tIGRpc2tcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTdHJ1Y3R1cmVkRmlsZShmaWxlTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZU5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gIHJldHVybiBkZXNlcmlhbGl6ZVN0cnVjdHVyZShjb250ZW50cyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGFueSB0ZW1wbGF0ZSBlbGVtZW50cyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gc2hvdyB1c2Vycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2N1cmVUZW1wbGF0ZSh0ZW1wbGF0ZTogYW55ID0ge30pIHtcbiAgaWYgKHRlbXBsYXRlLlJ1bGVzKSB7XG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTc5NDJcbiAgICBpZiAodGVtcGxhdGUuUnVsZXMuQ2hlY2tCb290c3RyYXBWZXJzaW9uKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXModGVtcGxhdGUuUnVsZXMpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZGVsZXRlIHRlbXBsYXRlLlJ1bGVzLkNoZWNrQm9vdHN0cmFwVmVyc2lvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0ZW1wbGF0ZS5SdWxlcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVtcGxhdGU7XG59XG5cbi8qKlxuICogRGV0ZWN0cyBhIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIEpTT04tbGlrZSBvYmplY3RcbiAqIEluIE5vZGUsIGBCdWZmZXJgcyBoYXZlIGB0b0pTT04oKWAgbWV0aG9kIHRoYXQgY29udmVydHMgdGhlIGJ1ZmZlclxuICogaW50byBhIEpTIG9iamVjdCB0aGF0IGNhbiBiZSBKU09OIHN0cmluZ2lmaWVkLlxuICogVW5mb3J0dW5hdGVseSB0aGlzIGNvbnZlcnNpb24gaGFwcGVucyBiZWZvcmUgdGhlIHJlcGxhY2VyIGlzIGNhbGxlZCxcbiAqIHNvIG5vcm1hbCBtZWFucyBvZiBkZXRlY3RpbmcgYSBgQnVmZmVyYCBvYmpldCBkb24ndCB3b3JrIGFueW1vcmUuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS12MC54LWFyY2hpdmUvaXNzdWVzLzUxMTBcbiAqL1xuZnVuY3Rpb24gaXNKc29uQnVmZmVyKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyB7XG4gIHR5cGU6ICdCdWZmZXInO1xuICBkYXRhOiBudW1iZXJbXTtcbn0ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmICd0eXBlJyBpbiB2YWx1ZVxuICAgICYmIHZhbHVlLnR5cGUgPT09ICdCdWZmZXInXG4gICAgJiYgJ2RhdGEnIGluIHZhbHVlXG4gICAgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhKTtcbn1cblxuLyoqXG4gKiBBIEpTT04uc3RyaW5naWZ5KCkgcmVwbGFjZXIgdGhhdCBjb252ZXJ0cyBCdWZmZXJzIGludG8gYSBzdHJpbmcgd2l0aCBpbmZvcm1hdGlvblxuICogVXNlIHRoaXMgaWYgeW91IHBsYW4gdG8gcHJpbnQgb3V0IEpTT04gc3RyaW5naWZpZWQgb2JqZWN0cyB0aGF0IG1heSBjb250YWluIGEgQnVmZmVyLlxuICogV2l0aG91dCB0aGlzLCBsYXJnZSBidWZmZXJzICh0aGluazogTWVnYWJ5dGVzKSB3aWxsIGNvbXBsZXRlbHkgZmlsbCB1cCB0aGUgb3V0cHV0XG4gKiBhbmQgZXZlbiBjcmFzaCB0aGUgc3lzdGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZXJCdWZmZXJXaXRoSW5mbyhfa2V5OiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuICBpZiAoaXNKc29uQnVmZmVyKHZhbHVlKSkge1xuICAgIHJldHVybiBgPEJ1ZmZlcjogJHtmb3JtYXRCeXRlcyh2YWx1ZS5kYXRhLmxlbmd0aCl9PmA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuIl19