aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
2 lines (1 loc) • 3.18 kB
JavaScript
;var __createBinding=exports&&exports.__createBinding||(Object.create?(function(o,m,k,k2){k2===void 0&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable))&&(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}):(function(o,m,k,k2){k2===void 0&&(k2=k),o[k2]=m[k]})),__setModuleDefault=exports&&exports.__setModuleDefault||(Object.create?(function(o,v){Object.defineProperty(o,"default",{enumerable:!0,value:v})}):function(o,v){o.default=v}),__importStar=exports&&exports.__importStar||(function(){var ownKeys=function(o){return ownKeys=Object.getOwnPropertyNames||function(o2){var ar=[];for(var k in o2)Object.prototype.hasOwnProperty.call(o2,k)&&(ar[ar.length]=k);return ar},ownKeys(o)};return function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null)for(var k=ownKeys(mod),i=0;i<k.length;i++)k[i]!=="default"&&__createBinding(result,mod,k[i]);return __setModuleDefault(result,mod),result}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.FingerprintDiskCache=void 0;var crypto=()=>{var tmp=__importStar(require("crypto"));return crypto=()=>tmp,tmp},fs=()=>{var tmp=__importStar(require("fs"));return fs=()=>tmp,tmp},os=()=>{var tmp=__importStar(require("os"));return os=()=>tmp,tmp},path=()=>{var tmp=__importStar(require("path"));return path=()=>tmp,tmp};const CACHE_DIR=path().join(os().homedir(),".cdk","cache","fingerprints"),MAX_ENTRIES=1e5,MAX_CACHE_FILES=50;class FingerprintDiskCache{cache;dirty=!1;cacheFile;constructor(directoryPath){const dirHash=crypto().createHash("sha256").update(directoryPath).digest("hex").slice(0,16);this.cacheFile=path().join(CACHE_DIR,`${dirHash}.json`)}obtain(cacheKey,calcFn){const map=this._load(),existing=map.get(cacheKey);if(existing!==void 0)return existing;const value=calcFn();return map.set(cacheKey,value),this.dirty=!0,value}save(){if(!(!this.dirty||!this.cache)){this._evict();try{fs().mkdirSync(CACHE_DIR,{recursive:!0});const entries=Array.from(this.cache.entries());let tempFile=`${this.cacheFile}.${Date.now()}.${Math.random()}`;try{fs().writeFileSync(tempFile,JSON.stringify(entries)),fs().renameSync(tempFile,this.cacheFile),tempFile=void 0,this.dirty=!1,this._evictCacheDir()}finally{tempFile&&fs().rmSync(tempFile,{force:!0})}}catch{}}}_load(){if(this.cache)return this.cache;this.cache=new Map;try{const data=fs().readFileSync(this.cacheFile,"utf-8"),entries=JSON.parse(data);if(Array.isArray(entries))for(const[k,v]of entries)this.cache.set(k,v)}catch{}return this.cache}_evict(){if(!this.cache||this.cache.size<=MAX_ENTRIES)return;const entries=Array.from(this.cache.entries());this.cache=new Map(entries.slice(entries.length-MAX_ENTRIES))}_evictCacheDir(){try{const files=fs().readdirSync(CACHE_DIR).filter(f=>f.endsWith(".json")).map(f=>({name:f,mtime:fs().statSync(path().join(CACHE_DIR,f)).mtimeMs}));if(files.length<=MAX_CACHE_FILES)return;files.sort((a,b)=>a.mtime-b.mtime);const toDelete=files.slice(0,files.length-MAX_CACHE_FILES);for(const f of toDelete)fs().unlinkSync(path().join(CACHE_DIR,f.name))}catch{}}}exports.FingerprintDiskCache=FingerprintDiskCache;