UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

86 lines 8.13 kB
"use strict"; 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