UNPKG

cdk-nag

Version:

Check CDK v2 applications for best practices using a combination on available rule packs.

47 lines 7.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.flattenCfnReference = void 0; /** * Turns a CloudFormation reference object into a flat string for easy suppression * @param node The reference object * @returns Flattened string */ exports.flattenCfnReference = (reference) => { const visit = (node) => { if (typeof node === 'undefined') { return ''; } if (typeof node === 'string') { // Replace the template syntax that Fn::Sub uses with round brackets for easier suppression return node.replace(/\${/g, '<').replace(/}/g, '>'); } if (isCfnFnJoin(node)) { const [delimiter, items] = node['Fn::Join']; return items.map(visit).join(delimiter); } if (isCfnFnSub(node)) { return visit(node['Fn::Sub']); } if (isCfnFnGetAtt(node)) { const [resource, attribute] = node['Fn::GetAtt']; return `<${visit(resource)}.${visit(attribute)}>`; } if (isCfnFnImportValue(node)) { return visit(node['Fn::ImportValue']); } if (isCfnRef(node)) { return `<${visit(node.Ref)}>`; } // fallback return JSON.stringify(node); }; return visit(reference); }; // Checks if an object is a certain type by testing for the existence of a field const checkType = (field) => (node) => !!node[field]; const isCfnFnJoin = checkType('Fn::Join'); const isCfnFnSub = checkType('Fn::Sub'); const isCfnFnGetAtt = checkType('Fn::GetAtt'); const isCfnFnImportValue = checkType('Fn::ImportValue'); const isCfnRef = checkType('Ref'); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbi1jZm4tcmVmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ZsYXR0ZW4tY2ZuLXJlZmVyZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1Q0E7Ozs7R0FJRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxTQUFrQixFQUFVLEVBQUU7SUFDaEUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFhLEVBQVUsRUFBRTtRQUN0QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUMvQixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUIsMkZBQTJGO1lBQzNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUMvQjtRQUVELElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pELE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7U0FDbkQ7UUFFRCxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1NBQy9CO1FBRUQsV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQixDQUFDLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYsTUFBTSxTQUFTLEdBQ2IsQ0FBSSxLQUFjLEVBQUUsRUFBRSxDQUN0QixDQUFDLElBQWEsRUFBYSxFQUFFLENBQzNCLENBQUMsQ0FBRSxJQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekIsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFZLFVBQVUsQ0FBQyxDQUFDO0FBQ3JELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBVyxTQUFTLENBQUMsQ0FBQztBQUNsRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQWMsWUFBWSxDQUFDLENBQUM7QUFDM0QsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQW1CLGlCQUFpQixDQUFDLENBQUM7QUFDMUUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFXLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiovXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvaW50cmluc2ljLWZ1bmN0aW9uLXJlZmVyZW5jZS1qb2luLmh0bWxcbiAqL1xuaW50ZXJmYWNlIENmbkZuSm9pbiB7XG4gICdGbjo6Sm9pbic6IFtzdHJpbmcsIHVua25vd25bXV07XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9pbnRyaW5zaWMtZnVuY3Rpb24tcmVmZXJlbmNlLXN1Yi5odG1sXG4gKi9cbmludGVyZmFjZSBDZm5GblN1YiB7XG4gICdGbjo6U3ViJzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2ludHJpbnNpYy1mdW5jdGlvbi1yZWZlcmVuY2UtZ2V0YXR0Lmh0bWxcbiAqL1xuaW50ZXJmYWNlIENmbkZuR2V0QXR0IHtcbiAgJ0ZuOjpHZXRBdHQnOiBbdW5rbm93biwgdW5rbm93bl07XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9pbnRyaW5zaWMtZnVuY3Rpb24tcmVmZXJlbmNlLWltcG9ydHZhbHVlLmh0bWxcbiAqL1xuaW50ZXJmYWNlIENmbkZuSW1wb3J0VmFsdWUge1xuICAnRm46OkltcG9ydFZhbHVlJzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2ludHJpbnNpYy1mdW5jdGlvbi1yZWZlcmVuY2UtcmVmLmh0bWxcbiAqL1xuaW50ZXJmYWNlIENmbkZuUmVmIHtcbiAgUmVmOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFR1cm5zIGEgQ2xvdWRGb3JtYXRpb24gcmVmZXJlbmNlIG9iamVjdCBpbnRvIGEgZmxhdCBzdHJpbmcgZm9yIGVhc3kgc3VwcHJlc3Npb25cbiAqIEBwYXJhbSBub2RlIFRoZSByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcmV0dXJucyBGbGF0dGVuZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBmbGF0dGVuQ2ZuUmVmZXJlbmNlID0gKHJlZmVyZW5jZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHZpc2l0ID0gKG5vZGU6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gUmVwbGFjZSB0aGUgdGVtcGxhdGUgc3ludGF4IHRoYXQgRm46OlN1YiB1c2VzIHdpdGggcm91bmQgYnJhY2tldHMgZm9yIGVhc2llciBzdXBwcmVzc2lvblxuICAgICAgcmV0dXJuIG5vZGUucmVwbGFjZSgvXFwkey9nLCAnPCcpLnJlcGxhY2UoL30vZywgJz4nKTtcbiAgICB9XG4gICAgaWYgKGlzQ2ZuRm5Kb2luKG5vZGUpKSB7XG4gICAgICBjb25zdCBbZGVsaW1pdGVyLCBpdGVtc10gPSBub2RlWydGbjo6Sm9pbiddO1xuICAgICAgcmV0dXJuIGl0ZW1zLm1hcCh2aXNpdCkuam9pbihkZWxpbWl0ZXIpO1xuICAgIH1cblxuICAgIGlmIChpc0NmbkZuU3ViKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdmlzaXQobm9kZVsnRm46OlN1YiddKTtcbiAgICB9XG5cbiAgICBpZiAoaXNDZm5GbkdldEF0dChub2RlKSkge1xuICAgICAgY29uc3QgW3Jlc291cmNlLCBhdHRyaWJ1dGVdID0gbm9kZVsnRm46OkdldEF0dCddO1xuICAgICAgcmV0dXJuIGA8JHt2aXNpdChyZXNvdXJjZSl9LiR7dmlzaXQoYXR0cmlidXRlKX0+YDtcbiAgICB9XG5cbiAgICBpZiAoaXNDZm5GbkltcG9ydFZhbHVlKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdmlzaXQobm9kZVsnRm46OkltcG9ydFZhbHVlJ10pO1xuICAgIH1cblxuICAgIGlmIChpc0NmblJlZihub2RlKSkge1xuICAgICAgcmV0dXJuIGA8JHt2aXNpdChub2RlLlJlZil9PmA7XG4gICAgfVxuXG4gICAgLy8gZmFsbGJhY2tcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobm9kZSk7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KHJlZmVyZW5jZSk7XG59O1xuXG4vLyBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGEgY2VydGFpbiB0eXBlIGJ5IHRlc3RpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBmaWVsZFxuY29uc3QgY2hlY2tUeXBlID1cbiAgPFQ+KGZpZWxkOiBrZXlvZiBUKSA9PlxuICAobm9kZTogdW5rbm93bik6IG5vZGUgaXMgVCA9PlxuICAgICEhKG5vZGUgYXMgVClbZmllbGRdO1xuXG5jb25zdCBpc0NmbkZuSm9pbiA9IGNoZWNrVHlwZTxDZm5GbkpvaW4+KCdGbjo6Sm9pbicpO1xuY29uc3QgaXNDZm5GblN1YiA9IGNoZWNrVHlwZTxDZm5GblN1Yj4oJ0ZuOjpTdWInKTtcbmNvbnN0IGlzQ2ZuRm5HZXRBdHQgPSBjaGVja1R5cGU8Q2ZuRm5HZXRBdHQ+KCdGbjo6R2V0QXR0Jyk7XG5jb25zdCBpc0NmbkZuSW1wb3J0VmFsdWUgPSBjaGVja1R5cGU8Q2ZuRm5JbXBvcnRWYWx1ZT4oJ0ZuOjpJbXBvcnRWYWx1ZScpO1xuY29uc3QgaXNDZm5SZWYgPSBjaGVja1R5cGU8Q2ZuRm5SZWY+KCdSZWYnKTtcbiJdfQ==