{"version":3,"file":"ContentApiSpecificCache.cjs","sources":["../../../../../packages/engine-http/src/content/ContentApiSpecificCache.ts"],"sourcesContent":["import { clearTimeout } from 'node:timers'\n\ntype Entry<V> = {\n\ttimer?: ReturnType<typeof setTimeout>\n\tvalue: V\n}\n\nexport class ContentApiSpecificCache<ObjectKey extends object, Value> {\n\tprivate cache = new WeakMap<ObjectKey, Map<string, Entry<Value>>>()\n\n\tconstructor(\n\t\tprivate options: {\n\t\t\tttlSeconds?: number\n\t\t},\n\t) {\n\t}\n\n\tpublic fetch(objectKey: ObjectKey, scalarKey: string, createValue: () => Value): Value {\n\t\tlet cacheMap = this.cache.get(objectKey)\n\n\t\tif (!cacheMap) {\n\t\t\tcacheMap = new Map()\n\t\t\tthis.cache.set(objectKey, cacheMap)\n\t\t}\n\n\t\tconst cacheValue = cacheMap.get(scalarKey)\n\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined = undefined\n\t\tif (this.options.ttlSeconds) {\n\t\t\t// wrap to WeakRef so the Map can be garbage-collected, when ObjectKey is garbage collected\n\t\t\tconst cacheMapRef = new WeakRef(cacheMap)\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tcacheMapRef.deref()?.delete(scalarKey)\n\t\t\t}, this.options.ttlSeconds * 1000)\n\t\t}\n\n\t\tif (cacheValue) {\n\t\t\tclearTimeout(cacheValue.timer)\n\t\t\tcacheValue.timer = timer\n\t\t\treturn cacheValue.value\n\t\t}\n\n\t\tconst value = createValue()\n\t\tcacheMap.set(scalarKey, {\n\t\t\ttimer,\n\t\t\tvalue,\n\t\t})\n\n\t\treturn value\n\t}\n}\n"],"names":["clearTimeout"],"mappings":";;;;;;AAOO,MAAM,wBAAyD;AAAA,EAGrE,YACS,SAGP;AAHO,SAAA,UAAA;AAHD,kBAAA,MAAA,6BAAY,QAA8C,CAAA;AAAA,EAAA;AAAA,EAS3D,MAAM,WAAsB,WAAmB,aAAiC;AACtF,QAAI,WAAW,KAAK,MAAM,IAAI,SAAS;AAEvC,QAAI,CAAC,UAAU;AACd,qCAAe,IAAI;AACd,WAAA,MAAM,IAAI,WAAW,QAAQ;AAAA,IAAA;AAG7B,UAAA,aAAa,SAAS,IAAI,SAAS;AAEzC,QAAI,QAAmD;AACnD,QAAA,KAAK,QAAQ,YAAY;AAEtB,YAAA,cAAc,IAAI,QAAQ,QAAQ;AACxC,cAAQ,WAAW,MAAM;AACZ,oBAAA,MAAA,GAAS,OAAO,SAAS;AAAA,MACnC,GAAA,KAAK,QAAQ,aAAa,GAAI;AAAA,IAAA;AAGlC,QAAI,YAAY;AACfA,kBAAA,aAAa,WAAW,KAAK;AAC7B,iBAAW,QAAQ;AACnB,aAAO,WAAW;AAAA,IAAA;AAGnB,UAAM,QAAQ,YAAY;AAC1B,aAAS,IAAI,WAAW;AAAA,MACvB;AAAA,MACA;AAAA,IAAA,CACA;AAEM,WAAA;AAAA,EAAA;AAET;;"}