aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
2 lines (1 loc) • 1.38 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0}),exports.makeUniqueId=makeUniqueId;var encoding_1=()=>{var tmp=require("./encoding");return encoding_1=()=>tmp,tmp},md5_1=()=>{var tmp=require("./md5");return md5_1=()=>tmp,tmp};const HIDDEN_FROM_HUMAN_ID="Resource",HIDDEN_ID="Default",PATH_SEP="/",HASH_LEN=8,MAX_HUMAN_LEN=240,MAX_ID_LEN=255;function makeUniqueId(components){if(components=components.filter(x=>x!==HIDDEN_ID),components.length===0)throw new Error("Unable to calculate a unique id for an empty set of components");const unresolvedTokens=components.filter(c=>(0,encoding_1().unresolved)(c));if(unresolvedTokens.length>0)throw new Error(`ID components may not include unresolved tokens: ${unresolvedTokens.join(",")}`);if(components.length===1){const candidate=removeNonAlphanumeric(components[0]);if(candidate.length<=MAX_ID_LEN)return candidate}const hash=pathHash(components);return removeDupes(components).filter(x=>x!==HIDDEN_FROM_HUMAN_ID).map(removeNonAlphanumeric).join("").slice(0,MAX_HUMAN_LEN)+hash}function pathHash(path){return(0,md5_1().md5hash)(path.join(PATH_SEP)).slice(0,HASH_LEN).toUpperCase()}function removeNonAlphanumeric(s){return s.replace(/[^A-Za-z0-9]/g,"")}function removeDupes(path){const ret=new Array;for(const component of path)(ret.length===0||!ret[ret.length-1].endsWith(component))&&ret.push(component);return ret}
;