UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

43 lines 4.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.contentHash = contentHash; exports.contentHashAny = contentHashAny; const crypto = require("crypto"); function contentHash(data) { return crypto.createHash('sha256').update(data).digest('hex'); } /** * A stably sorted hash of an arbitrary JS object */ function contentHashAny(value) { const ret = crypto.createHash('sha256'); recurse(value); return ret.digest('hex'); function recurse(x) { if (typeof x === 'string') { ret.update(x); return; } if (Array.isArray(x)) { ret.update('['); for (const e of x) { recurse(e); ret.update('||'); } ret.update(']'); return; } if (x && typeof x === 'object') { ret.update('{'); for (const key of Object.keys(x).sort()) { ret.update(key); ret.update(':'); recurse(x[key]); } ret.update('}'); return; } ret.update(`${x}${typeof x}`); // typeof to make sure hash('123') !== hash(123) } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1oYXNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29udGVudC1oYXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0NBRUM7QUFLRCx3Q0FrQ0M7QUEzQ0QsaUNBQWlDO0FBRWpDLFNBQWdCLFdBQVcsQ0FBQyxJQUFnQztJQUMxRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYztJQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNmLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6QixTQUFTLE9BQU8sQ0FBQyxDQUFVO1FBQ3pCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNkLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBRSxDQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0RBQWdEO0lBQ2pGLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZW50SGFzaChkYXRhOiBzdHJpbmcgfCBCdWZmZXIgfCBEYXRhVmlldykge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShkYXRhKS5kaWdlc3QoJ2hleCcpO1xufVxuXG4vKipcbiAqIEEgc3RhYmx5IHNvcnRlZCBoYXNoIG9mIGFuIGFyYml0cmFyeSBKUyBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRIYXNoQW55KHZhbHVlOiB1bmtub3duKSB7XG4gIGNvbnN0IHJldCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgcmVjdXJzZSh2YWx1ZSk7XG4gIHJldHVybiByZXQuZGlnZXN0KCdoZXgnKTtcblxuICBmdW5jdGlvbiByZWN1cnNlKHg6IHVua25vd24pIHtcbiAgICBpZiAodHlwZW9mIHggPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXQudXBkYXRlKHgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICByZXQudXBkYXRlKCdbJyk7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgeCkge1xuICAgICAgICByZWN1cnNlKGUpO1xuICAgICAgICByZXQudXBkYXRlKCd8fCcpO1xuICAgICAgfVxuICAgICAgcmV0LnVwZGF0ZSgnXScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0LnVwZGF0ZSgneycpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoeCkuc29ydCgpKSB7XG4gICAgICAgIHJldC51cGRhdGUoa2V5KTtcbiAgICAgICAgcmV0LnVwZGF0ZSgnOicpO1xuICAgICAgICByZWN1cnNlKCh4IGFzIGFueSlba2V5XSk7XG4gICAgICB9XG4gICAgICByZXQudXBkYXRlKCd9Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0LnVwZGF0ZShgJHt4fSR7dHlwZW9mIHh9YCk7IC8vIHR5cGVvZiB0byBtYWtlIHN1cmUgaGFzaCgnMTIzJykgIT09IGhhc2goMTIzKVxuICB9XG59XG4iXX0=