UNPKG

cdk-pretty-diff

Version:

Formatting tool for CDK Diff output. Inspired by Terraform prettyplan (https://github.com/chrislewisdev/prettyplan)

54 lines 9.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.diffValidator = exports.guardResourceDiff = exports.nicerStackDiffValidator = exports.nicerStackDiffGuard = exports.nicerDiffGuard = exports.cdkDiffCategories = void 0; exports.cdkDiffCategories = ['iamChanges', 'securityGroup', 'resources', 'parameters', 'metadata', 'mappings', 'conditions', 'outputs', 'unknown', 'description']; const nicerDiffGuard = (thing) => typeof thing === 'object' && typeof thing.label === 'string' && typeof thing.cdkDiffRaw === 'string' && ['undefined', 'object'].includes(typeof thing.nicerDiff); exports.nicerDiffGuard = nicerDiffGuard; const nicerStackDiffGuard = (thing) => { if (typeof thing === 'object') { if (typeof thing.raw === 'string' && typeof thing.stackName === 'string') { if (!!thing.diff) { if (thing.diff.filter(exports.nicerDiffGuard).length === thing.diff.length) { return true; } } return true; } } return false; }; exports.nicerStackDiffGuard = nicerStackDiffGuard; const nicerStackDiffValidator = (thing) => { if (typeof thing === 'object') { if (thing.filter(exports.nicerStackDiffGuard).length === thing.length) { return thing; } } throw new Error(`input is not a NicerStackDiff[]: ${JSON.stringify(thing, null, 2)}`); }; exports.nicerStackDiffValidator = nicerStackDiffValidator; const guardResourceDiff = (thing) => typeof thing === 'object' && typeof thing.forEachDifference === 'function'; exports.guardResourceDiff = guardResourceDiff; const diffValidator = (thing) => { if (typeof thing === 'object') { if (thing.length === 2) { const [diffKey, diff] = thing; if (!exports.cdkDiffCategories.includes(diffKey)) { throw new Error(`unexpected diff category: ${diffKey}`); } if (diffKey === 'description') { return { diffKey, diff }; } else if (typeof diff === 'object' && diff.hasOwnProperty('diffs')) { return { diffCollectionKey: diffKey, diffCollection: diff }; } } } throw new Error(`invalid diff: ${JSON.stringify(thing, null, 2)}`); }; exports.diffValidator = diffValidator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR2EsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBVSxDQUFDO0FBMEJ6SyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQVUsRUFBc0IsRUFBRSxDQUMvRCxPQUFPLEtBQUssS0FBSyxRQUFRO0lBQ3pCLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRO0lBQy9CLE9BQU8sS0FBSyxDQUFDLFVBQVUsS0FBSyxRQUFRO0lBQ3BDLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUo5QyxRQUFBLGNBQWMsa0JBSWdDO0FBUXBELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFVLEVBQTJCLEVBQUU7SUFDekUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDeEUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDaEIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBYyxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNsRSxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1lBRUQsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUE7QUFkWSxRQUFBLG1CQUFtQix1QkFjL0I7QUFFTSxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBVSxFQUFvQixFQUFFO0lBQ3RFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQywyQkFBbUIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzdELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7S0FDRjtJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFBO0FBUlksUUFBQSx1QkFBdUIsMkJBUW5DO0FBRU0sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQVUsRUFBdUMsRUFBRSxDQUNuRixPQUFPLEtBQUssS0FBSyxRQUFRO0lBQ3pCLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixLQUFLLFVBQVUsQ0FBQztBQUZuQyxRQUFBLGlCQUFpQixxQkFFa0I7QUFFekMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFVLEVBQW9MLEVBQUU7SUFDNU4sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUU5QixJQUFJLENBQUMseUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO1lBRUQsSUFBSSxPQUFPLEtBQUssYUFBYSxFQUFFO2dCQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2FBQzFCO2lCQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO2FBQzdEO1NBQ0Y7S0FDRjtJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckUsQ0FBQyxDQUFBO0FBbEJZLFFBQUEsYUFBYSxpQkFrQnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2ZuRGlmZiBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IENka1Rvb2xraXRQcm9wcyB9IGZyb20gJ2F3cy1jZGsvbGliL2NsaS9jZGstdG9vbGtpdCc7XG5cbmV4cG9ydCBjb25zdCBjZGtEaWZmQ2F0ZWdvcmllcyA9IFsnaWFtQ2hhbmdlcycsICdzZWN1cml0eUdyb3VwJywgJ3Jlc291cmNlcycsICdwYXJhbWV0ZXJzJywgJ21ldGFkYXRhJywgJ21hcHBpbmdzJywgJ2NvbmRpdGlvbnMnLCAnb3V0cHV0cycsICd1bmtub3duJywgJ2Rlc2NyaXB0aW9uJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBDZGtEaWZmQ2F0ZWdvcmllcyA9IHR5cGVvZiBjZGtEaWZmQ2F0ZWdvcmllcztcbmV4cG9ydCB0eXBlIENka0RpZmZDYXRlZ29yeSA9IENka0RpZmZDYXRlZ29yaWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBTdGFja1Jhd0RpZmYgPSB7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICByYXdEaWZmOiBjZm5EaWZmLlRlbXBsYXRlRGlmZixcbiAgbG9naWNhbFRvUGF0aE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxufTtcblxuZXhwb3J0IHR5cGUgTmljZXJEaWZmQ2hhbmdlID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBmcm9tPzogYW55O1xuICB0bzogYW55O1xuICBhY3Rpb246ICdBRERJVElPTicgfCAnVVBEQVRFJyB8ICdSRU1PVkFMJztcbn1cbmV4cG9ydCB0eXBlIE5pY2VyRGlmZiA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgY2RrRGlmZlJhdzogc3RyaW5nO1xuICBuaWNlckRpZmY/OiB7XG4gICAgY2RrRGlmZkNhdGVnb3J5OiBDZGtEaWZmQ2F0ZWdvcnk7XG4gICAgcmVzb3VyY2VBY3Rpb246ICdBRERJVElPTicgfCAnVVBEQVRFJyB8ICdSRU1PVkFMJztcbiAgICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgICByZXNvdXJjZUxhYmVsOiBzdHJpbmc7XG4gICAgY2hhbmdlczogTmljZXJEaWZmQ2hhbmdlW107XG4gIH1cbn1cbmV4cG9ydCBjb25zdCBuaWNlckRpZmZHdWFyZCA9ICh0aGluZzogYW55KTogdGhpbmcgaXMgTmljZXJEaWZmID0+XG4gIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCcgJiZcbiAgdHlwZW9mIHRoaW5nLmxhYmVsID09PSAnc3RyaW5nJyAmJlxuICB0eXBlb2YgdGhpbmcuY2RrRGlmZlJhdyA9PT0gJ3N0cmluZycgJiZcbiAgWyd1bmRlZmluZWQnLCAnb2JqZWN0J10uaW5jbHVkZXModHlwZW9mIHRoaW5nLm5pY2VyRGlmZik7XG5cbmV4cG9ydCB0eXBlIE5pY2VyU3RhY2tEaWZmID0ge1xuICBkaWZmPzogTmljZXJEaWZmW107XG4gIHJhdzogc3RyaW5nO1xuICBzdGFja05hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IG5pY2VyU3RhY2tEaWZmR3VhcmQgPSAodGhpbmc6IGFueSk6IHRoaW5nIGlzIE5pY2VyU3RhY2tEaWZmID0+IHtcbiAgaWYgKHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAodHlwZW9mIHRoaW5nLnJhdyA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHRoaW5nLnN0YWNrTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghIXRoaW5nLmRpZmYpIHtcbiAgICAgICAgaWYgKHRoaW5nLmRpZmYuZmlsdGVyKG5pY2VyRGlmZkd1YXJkKS5sZW5ndGggPT09IHRoaW5nLmRpZmYubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY29uc3QgbmljZXJTdGFja0RpZmZWYWxpZGF0b3IgPSAodGhpbmc6IGFueSk6IE5pY2VyU3RhY2tEaWZmW10gPT4ge1xuICBpZiAodHlwZW9mIHRoaW5nID09PSAnb2JqZWN0Jykge1xuICAgIGlmICh0aGluZy5maWx0ZXIobmljZXJTdGFja0RpZmZHdWFyZCkubGVuZ3RoID09PSB0aGluZy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGluZztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0IGlzIG5vdCBhIE5pY2VyU3RhY2tEaWZmW106ICR7SlNPTi5zdHJpbmdpZnkodGhpbmcsIG51bGwsIDIpfWApO1xufVxuXG5leHBvcnQgY29uc3QgZ3VhcmRSZXNvdXJjZURpZmYgPSAodGhpbmc6IGFueSk6IHRoaW5nIGlzIGNmbkRpZmYuUmVzb3VyY2VEaWZmZXJlbmNlID0+XG4gIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCcgJiZcbiAgdHlwZW9mIHRoaW5nLmZvckVhY2hEaWZmZXJlbmNlID09PSAnZnVuY3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZGlmZlZhbGlkYXRvciA9ICh0aGluZzogYW55KTogeyBkaWZmQ29sbGVjdGlvbktleTogQ2RrRGlmZkNhdGVnb3J5OyBkaWZmQ29sbGVjdGlvbjogY2ZuRGlmZi5EaWZmZXJlbmNlQ29sbGVjdGlvbjxhbnksIGNmbkRpZmYuRGlmZmVyZW5jZTxhbnk+PiB9IHwgeyBkaWZmS2V5OiBDZGtEaWZmQ2F0ZWdvcnk7IGRpZmY6IGNmbkRpZmYuRGlmZmVyZW5jZTxhbnk+IH0gPT4ge1xuICBpZiAodHlwZW9mIHRoaW5nID09PSAnb2JqZWN0Jykge1xuICAgIGlmICh0aGluZy5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IFtkaWZmS2V5LCBkaWZmXSA9IHRoaW5nO1xuXG4gICAgICBpZiAoIWNka0RpZmZDYXRlZ29yaWVzLmluY2x1ZGVzKGRpZmZLZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBkaWZmIGNhdGVnb3J5OiAke2RpZmZLZXl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWZmS2V5ID09PSAnZGVzY3JpcHRpb24nKSB7XG4gICAgICAgIHJldHVybiB7IGRpZmZLZXksIGRpZmYgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRpZmYgPT09ICdvYmplY3QnICYmIGRpZmYuaGFzT3duUHJvcGVydHkoJ2RpZmZzJykpIHtcbiAgICAgICAgcmV0dXJuIHsgZGlmZkNvbGxlY3Rpb25LZXk6IGRpZmZLZXksIGRpZmZDb2xsZWN0aW9uOiBkaWZmIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZmY6ICR7SlNPTi5zdHJpbmdpZnkodGhpbmcsIG51bGwsIDIpfWApO1xufVxuXG5leHBvcnQgdHlwZSBDZGtUb29sa2l0RGVwbG95bWVudHNQcm9wID0gJ2Nsb3VkRm9ybWF0aW9uJyB8ICdkZXBsb3ltZW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZk9wdGlvbnMge1xuICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcHJvZmlsZT86IHN0cmluZztcbn1cbiJdfQ==