UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

44 lines 4.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.contentHashAny = exports.contentHash = void 0; const crypto = require("crypto"); function contentHash(data) { return crypto.createHash('sha256').update(data).digest('hex'); } exports.contentHash = contentHash; /** * 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) } } exports.contentHashAny = contentHashAny; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1oYXNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29udGVudC1oYXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUVqQyxTQUFnQixXQUFXLENBQUMsSUFBZ0M7SUFDMUQsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUZELGtDQUVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYztJQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNmLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6QixTQUFTLE9BQU8sQ0FBQyxDQUFVO1FBQ3pCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZCxPQUFPO1NBQ1I7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNYLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEI7WUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUM5QixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsT0FBTyxDQUFFLENBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzFCO1lBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixPQUFPO1NBQ1I7UUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdEQUFnRDtJQUNqRixDQUFDO0FBQ0gsQ0FBQztBQWxDRCx3Q0FrQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRIYXNoKGRhdGE6IHN0cmluZyB8IEJ1ZmZlciB8IERhdGFWaWV3KSB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGRhdGEpLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKlxuICogQSBzdGFibHkgc29ydGVkIGhhc2ggb2YgYW4gYXJiaXRyYXJ5IEpTIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEhhc2hBbnkodmFsdWU6IHVua25vd24pIHtcbiAgY29uc3QgcmV0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICByZWN1cnNlKHZhbHVlKTtcbiAgcmV0dXJuIHJldC5kaWdlc3QoJ2hleCcpO1xuXG4gIGZ1bmN0aW9uIHJlY3Vyc2UoeDogdW5rbm93bikge1xuICAgIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldC51cGRhdGUoeCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldC51cGRhdGUoJ1snKTtcbiAgICAgIGZvciAoY29uc3QgZSBvZiB4KSB7XG4gICAgICAgIHJlY3Vyc2UoZSk7XG4gICAgICAgIHJldC51cGRhdGUoJ3x8Jyk7XG4gICAgICB9XG4gICAgICByZXQudXBkYXRlKCddJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgICByZXQudXBkYXRlKCd7Jyk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh4KS5zb3J0KCkpIHtcbiAgICAgICAgcmV0LnVwZGF0ZShrZXkpO1xuICAgICAgICByZXQudXBkYXRlKCc6Jyk7XG4gICAgICAgIHJlY3Vyc2UoKHggYXMgYW55KVtrZXldKTtcbiAgICAgIH1cbiAgICAgIHJldC51cGRhdGUoJ30nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXQudXBkYXRlKGAke3h9JHt0eXBlb2YgeH1gKTsgLy8gdHlwZW9mIHRvIG1ha2Ugc3VyZSBoYXNoKCcxMjMnKSAhPT0gaGFzaCgxMjMpXG4gIH1cbn0iXX0=