@ngcompass/cache 0.1.1-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +336 -0
- package/dist/index.d.ts +336 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ngcompass
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var mt=require('crypto'),ht=require('xxhash-wasm'),module$1=require('module'),common=require('@ngcompass/common'),y=require('path'),lruCache=require('lru-cache'),S=require('cacache'),q=require('v8'),x=require('fs/promises'),St=require('write-file-atomic');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var mt__default=/*#__PURE__*/_interopDefault(mt);var ht__default=/*#__PURE__*/_interopDefault(ht);var y__default=/*#__PURE__*/_interopDefault(y);var S__default=/*#__PURE__*/_interopDefault(S);var q__default=/*#__PURE__*/_interopDefault(q);var x__default=/*#__PURE__*/_interopDefault(x);var St__default=/*#__PURE__*/_interopDefault(St);var W="1.0.0",jt=1,B="v1.0.0-s1";var M,ft=async()=>{if(M)return;let{h64:t}=await ht__default.default();M=a=>t(a).toString(16).padStart(16,"0");},J=t=>{if(M)return M(t);let a=mt__default.default.createHash("sha256");return a.update(t),a.digest("hex")};var g=class extends Error{path;constructor(a,e){super(a),this.path=e,this.name="SerializationError";}};function k(t,a=[],e=new WeakSet){if(t===null)return "null";if(t===void 0)throw new g("undefined is not a valid hash input",a);switch(typeof t){case "boolean":return t?"true":"false";case "number":if(!Number.isFinite(t))throw new g(`Non-finite number (${String(t)}) is not a valid hash input`,a);return String(t);case "string":return JSON.stringify(t);case "function":throw new g("Functions are not valid hash inputs",a)}if(t instanceof Date)return JSON.stringify(t.toISOString());if(t instanceof RegExp)return JSON.stringify(t.toString());if(typeof t=="object"){let o;if(e.has(t))throw new g(`Circular reference detected at path: ${a.join(".")||"(root)"}`,a);if(e.add(t),Array.isArray(t))o="["+t.map((n,r)=>k(n,[...a,String(r)],e)).join(",")+"]";else {let n=Object.keys(t).sort(),r=[];for(let s of n){let i=t[s];i!==void 0&&r.push(JSON.stringify(s)+":"+k(i,[...a,s],e));}o="{"+r.join(",")+"}";}return e.delete(t),o}return JSON.stringify(t)}function Pt(t){return Object.freeze({toolVersion:common.PACKAGE_VERSION,schemaVersion:common.CACHE_VERSION,ruleRegistryHash:J(k([...t].sort())),parserVersion:(function(){try{let a=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))("oxc-parser/package.json");return String(a.version??"unknown")}catch{return "unknown"}})(),platform:process.platform})}function Rt(t){return [t.toolVersion,t.schemaVersion,t.parserVersion,t.ruleRegistryHash,t.platform].join("::")}var A=(t={})=>{let a=new lruCache.LRUCache({max:t.maxItems??500,maxSize:t.maxSize??52428800,sizeCalculation:e=>{try{return JSON.stringify(e).length}catch{return 1e3}},ttl:t.ttl});return {get:e=>a.get(e),set:(e,o)=>{a.set(e,o);},has:e=>a.has(e),delete:e=>{a.delete(e);},clear:()=>a.clear(),getStats:()=>({entries:a.size,size:a.calculatedSize})}};async function F(t){let a=0,e=0;try{await x__default.default.access(t);}catch{return {entries:0,size:0}}async function o(n){for(let r of await x__default.default.readdir(n,{withFileTypes:true})){let s=y__default.default.join(n,r.name);if(r.isDirectory())await o(s);else {a++;let i=await x__default.default.stat(s);e+=i.size;}}}try{await o(t);}catch{}return {entries:a,size:e}}var v=t=>{let a=t.path;return {get:async e=>{try{let o=performance.now(),n=await S__default.default.get(a,e),r=performance.now(),s=performance.now(),i=q__default.default.deserialize(n.data),l=performance.now();return process.env.DEBUG_CACHE&&process.stdout.write(`[disk-driver] read: ${(r-o).toFixed(2)}ms, deser: ${(l-s).toFixed(2)}ms, size: ${(n.data.length/1024).toFixed(1)}KB
|
|
2
|
+
`),i}catch(o){if((typeof o=="object"&&o!==null&&"code"in o?o.code:void 0)==="ENOENT")return;try{await S__default.default.rm.entry(a,e);}catch{}return}},set:async(e,o)=>{let n=q__default.default.serialize(o);await S__default.default.put(a,e,n);},has:async e=>{try{return !!await S__default.default.get.info(a,e)}catch{return false}},delete:async e=>{await S__default.default.rm.entry(a,e);},clear:async()=>{await S__default.default.rm.all(a);},prune:async()=>{await S__default.default.verify(a);},getStats:async()=>F(a)}};var U=t=>{let a=t.path+".pack",e=new Map,o=false,n=async()=>{if(!o){o=true;try{let s=await x__default.default.readFile(a);for(let[i,l]of q__default.default.deserialize(s))e.set(i,l);}catch{}}},r=async()=>{let s=y__default.default.dirname(a);await x__default.default.mkdir(s,{recursive:true});let i=q__default.default.serialize(e),l=a+".tmp";await x__default.default.writeFile(l,i),await x__default.default.rename(l,a);};return {get:async s=>(await n(),e.get(s)),set:async(s,i)=>{await n(),e.set(s,i),await r();},has:async s=>(await n(),e.has(s)),delete:async s=>{await n(),e.delete(s),await r();},clear:async()=>{e.clear(),o=true;try{await x__default.default.unlink(a);}catch{}try{await x__default.default.unlink(a+".tmp");}catch{}},getStats:async()=>{await n();let s=0;try{s=(await x__default.default.stat(a)).size;}catch{}return {entries:e.size,size:s}},bulkSet:async s=>{for(let[i,l]of(await n(),s))e.set(i,l);await r();}}};var X=t=>{let a=t.path,e=null,o=null,n=0,r=m=>y__default.default.join(a,`${m}.json`),s=async()=>{try{await x__default.default.mkdir(a,{recursive:!0});}catch{}},i=m=>m.endsWith(".json"),l=m=>m.slice(0,-5),c=async m=>{try{return await x__default.default.readdir(m)}catch{return []}},h=async m=>{try{return await x__default.default.readFile(m,"utf-8")}catch{return}},f=async m=>{try{await x__default.default.unlink(m);}catch{}},u=async m=>{try{await x__default.default.rm(m,{recursive:!0,force:!0});}catch{}},w=m=>{e&&e.delete(m);},j=async()=>{o&&await o;},D=async()=>{if(!e){if(!o){let m=n;o=(async()=>{try{await s();let d=(await c(a)).filter(i).map(l);n===m&&(e=new Set(d));}finally{o=null,e||(e=new Set);}})();}await o;}},$=async m=>{await j(),e&&e.add(m);},I=async m=>{await j(),e&&e.delete(m);};return {get:async m=>{if(e&&!e.has(m))return;let d=r(m),p=await h(d);if(p===void 0)return void w(m);try{return JSON.parse(p)}catch{w(m);return}},set:async(m,d)=>{await s();let p=r(m);await St__default.default(p,JSON.stringify(d),{encoding:"utf-8"}),(e||o)&&await $(m);},has:async m=>(await D(),e.has(m)),delete:async m=>{await f(r(m)),(e||o)&&await I(m);},clear:async()=>{await u(a),await s(),n+=1,e=new Set;},getStats:async()=>F(a)}};var Y=t=>{let a=y__default.default.join(t.path,"meta.json"),e=null,o=null,n=null,r=null,s=async()=>{if(!e)return o||(o=(async()=>{try{await x__default.default.mkdir(t.path,{recursive:!0});let c=await x__default.default.readFile(a,"utf-8"),h=JSON.parse(c);e=h&&typeof h=="object"?new Map(Object.entries(h)):new Map;}catch{e=new Map;}finally{o=null;}})())},i=async()=>{n&&(clearTimeout(n),n=null),e&&(r&&await r,r=(async()=>{try{await x__default.default.mkdir(t.path,{recursive:!0});let c=Object.fromEntries(e);await St__default.default(a,JSON.stringify(c));}catch(c){let h=c instanceof Error?c.message:String(c);common.debug("cache",`Failed to flush metadata cache to ${a}: ${h}`);}finally{r=null;}})(),await r);},l=()=>{n||(n=setTimeout(()=>{n=null,i();},2e3)).unref();};return {get:async c=>(await s(),e.get(c)),set:async(c,h)=>{await s(),e.set(c,h),l();},has:async c=>(await s(),e.has(c)),delete:async c=>{await s(),e.delete(c)&&l();},clear:async()=>{n&&(clearTimeout(n),n=null),e=new Map;try{await x__default.default.unlink(a);}catch{}},getStats:async()=>(await s(),{entries:e.size,size:0}),flush:i}};var Q=t=>({get:a=>t.get(a),set:(a,e)=>t.set(a,e),has:a=>t.has(a)});var Z=(t,a)=>({get:async e=>{let o=t.get(e);if(o)return o;try{let n=await a.get(e);if(n)return t.set(e,n),n}catch(n){common.debug("cache",`Failed to read AST from L2 for ${e}: ${n instanceof Error?n.message:String(n)}`);}},set:async(e,o)=>{t.set(e,o),await a.set(e,o);},invalidate:async e=>{t.delete(e),await a.delete(e);}});var V=t=>{let a=r=>`${r}.meta`,e=async r=>{let s=a(r),i=await t.get(s);if(i)return i;let l={taskId:r,timestamp:Date.now(),hits:0,lastAccess:Date.now()};return await t.set(s,l),l},o=async r=>{let s=await e(r),i={...s,hits:s.hits+1,lastAccess:Date.now()};await t.set(a(r),i);},n=new Map;return {get:async r=>{if(n.has(r))return n.get(r);let s=await t.get(r);return s!==void 0&&o(r).catch(i=>{common.debug("cache",`incrementHits failed for ${r}: ${i instanceof Error?i.message:String(i)}`);}),s},set:async(r,s)=>{await t.set(r,s),await e(r);},has:async r=>!!n.has(r)||t.has(r),delete:async r=>{n.delete(r),await t.delete(r);try{await t.delete(a(r));}catch(s){common.debug("cache",`Failed to delete metadata for ${r}: ${s instanceof Error?s.message:String(s)}`);}},getMany:async r=>{if(r.length===0)return new Map;let s=new Map;for(let i=0;i<r.length;i+=200){let l=r.slice(i,i+200);await Promise.all(l.map(async c=>{if(n.has(c))return void s.set(c,n.get(c));let h=await t.get(c);h!==void 0&&(s.set(c,h),o(c).catch(f=>{common.debug("cache",`incrementHits failed for ${c}: ${f instanceof Error?f.message:String(f)}`);}));}));}return s},setMany:async r=>{if(r.length!==0){for(let[s,i]of r)n.set(s,i);common.debug("cache",`Buffered ${r.length} results (total pending: ${n.size})`);}},hasMany:async r=>{if(r.length===0)return new Set;if(!r.some(i=>n.has(i)))try{if((await t.getStats()).entries===0)return new Set}catch{return new Set}let s=new Set;for(let i=0;i<r.length;i+=200){let l=r.slice(i,i+200);await Promise.all(l.map(async c=>{(n.has(c)||await t.has(c))&&s.add(c);}));}return s},getWithMetadata:async r=>{let s=n.has(r)?n.get(r):await t.get(r);if(s===void 0)return;let i=await e(r);return await o(r),{result:s,metadata:i}},getManyWithMetadata:async r=>{if(r.length===0)return new Map;let s=new Map,i=[];for(let l=0;l<r.length;l+=200){let c=r.slice(l,l+200);await Promise.all(c.map(async h=>{let f=n.has(h)?n.get(h):await t.get(h);if(f!==void 0){let u=await e(h),w={...u,hits:u.hits+1,lastAccess:Date.now()};s.set(h,{result:f,metadata:w}),i.push([h,w]);}}));}if(i.length>0)for(let l=0;l<i.length;l+=200){let c=i.slice(l,l+200);await Promise.all(c.map(async([h,f])=>{await t.set(a(h),f);}));}return s},updateMetadata:async(r,s)=>{let i={...await t.get(a(r))??await e(r),...s};await t.set(a(r),i);},flush:async()=>{if(n.size===0)return;let r=[...n.entries()];n.clear();let s=Date.now();if(t.bulkSet){let i=[];for(let[l,c]of r)i.push([l,c]),i.push([a(l),{taskId:l,timestamp:s,hits:0,lastAccess:s}]);await t.bulkSet(i);}else for(let i=0;i<r.length;i+=200){let l=r.slice(i,i+200);await Promise.all(l.map(([c,h])=>t.set(c,h))),await Promise.all(l.map(([c])=>t.set(a(c),{taskId:c,timestamp:s,hits:0,lastAccess:s})));}common.debug("cache",`Flushed ${r.length} buffered results to disk`);}}};var tt=t=>({get:async a=>t.get(a),set:async(a,e)=>{await t.set(a,e);}});var et=t=>({get:a=>t.get(a),set:(a,e)=>t.set(a,e),delete:a=>t.delete(a),flush:async()=>{typeof t.flush=="function"&&await t.flush();}});var at=t=>({get:a=>t.get(a),set:(a,e)=>t.set(a,e),delete:a=>t.delete(a)});var rt=t=>({get:a=>t.get(a),set:(a,e)=>t.set(a,{files:e,timestamp:Date.now()})});var st=(t,a=B)=>{let e=mt__default.default.createHash("sha256");return e.update(t),a&&e.update(a),e.digest("hex")};var C=(t,a)=>{let e=A({maxItems:t,ttl:a});return {get:async o=>e.get(o),set:async(o,n)=>{e.set(o,n);},has:async o=>e.has(o),delete:async o=>{e.delete(o);},clear:async()=>{e.clear();},getStats:async()=>e.getStats()}},T=(t={})=>{let a=process.cwd(),e=y__default.default.resolve(a,"node_modules",".cache","ngcompass"),o=!t.disk?.path,n=t.disk?.path??"[memory]",r=A({maxItems:t.memory?.maxItems}),s=A({maxItems:200}),i=o?C(t.memory?.maxItems,t.memory?.ttl):v({path:y__default.default.join(t.disk?.path??e,"ast"),ttl:t.disk?.ttl}),l=o?C(t.memory?.maxItems,t.memory?.ttl):U({path:y__default.default.join(t.disk?.path??e,"results")}),c=o?C(t.memory?.maxItems,t.memory?.ttl):X({path:y__default.default.join(t.disk?.path??e,"config")}),h=o?C(t.memory?.maxItems,t.memory?.ttl):Y({path:y__default.default.join(t.disk?.path??e,"meta")}),f=o?C(t.memory?.maxItems,t.memory?.ttl):v({path:y__default.default.join(t.disk?.path??e,"plans"),ttl:t.disk?.ttl}),u=o?C(t.memory?.maxItems,t.memory?.ttl):v({path:y__default.default.join(t.disk?.path??e,"files"),ttl:t.disk?.ttl}),w=Q(r),j=Z(s,i),D=V(l),$=tt(c),I=et(h),m=at(f),d=rt(u),p=o?C(t.memory?.maxItems,t.memory?.ttl):v({path:y__default.default.join(t.disk?.path??e,"analysis"),ttl:t.disk?.ttl}),K=V(p),G=async()=>{r.clear(),s.clear(),await i.clear(),await l.clear(),await c.clear(),await h.clear(),await f.clear(),await u.clear(),await p.clear();};return {sources:w,asts:j,results:D,configs:$,metas:I,plans:m,files:d,analysis:K,computeHash:st,prune:async()=>{"prune"in i&&typeof i.prune=="function"&&await i.prune();},clear:G,clearType:async z=>{switch(z){case "ast":s.clear(),await i.clear();break;case "config":await c.clear();break;case "results":await l.clear(),await p.clear();break;case "all":await G();}},flush:async()=>{await Promise.all([D.flush(),K.flush(),I.flush()]);},getCachePath:()=>n,getInfo:async()=>{let z=s.getStats(),[N,P,R,it,nt,ot,ct]=await Promise.all([i.getStats(),c.getStats(),l.getStats(),h.getStats(),f.getStats(),u.getStats(),p.getStats()]),lt=z.size+N.size+P.size+R.size+it.size+nt.size+ot.size+ct.size;return {ast:{l1:{entries:z.entries,maxEntries:200,size:z.size},l2:{entries:N.entries,size:N.size}},config:{entries:P.entries,size:P.size},results:{entries:R.entries,size:R.size},totalSize:lt,location:n,version:W}}}},O=null,Ne=t=>(O||(O=T(t)),O),Pe=()=>{O=null;};function Ve(t,a,e={}){if(!t.cache.enabled&&!e.allowDisabled)return;let o=y__default.default.resolve(a,t.cache.location);return T({memory:t.cache.strategy==="memory"?{ttl:t.cache.ttl}:void 0,disk:t.cache.strategy==="memory"?void 0:{path:o,ttl:t.cache.ttl}})}exports.CACHE_KEY_PREFIX=B;exports.CACHE_VERSION=W;exports.SCHEMA_VERSION=jt;exports.SerializationError=g;exports.buildCacheKeyContext=Pt;exports.computeHash=J;exports.createCacheContext=T;exports.createRuntimeCache=Ve;exports.getCacheContext=Ne;exports.initHasher=ft;exports.resetGlobalCache=Pe;exports.serializeCacheKeyContext=Rt;exports.stableSerialize=k;//# sourceMappingURL=index.cjs.map
|
|
3
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/hashing.ts","../src/utils/stable-serialize.ts","../src/key-context.ts","../src/drivers/memory.ts","../src/utils/fs.ts","../src/drivers/disk.ts","../src/drivers/packed.ts","../src/drivers/atomic.ts","../src/drivers/json-file.ts","../src/services/source-cache.ts","../src/services/ast-cache.ts","../src/services/result-cache.ts","../src/services/config-cache.ts","../src/services/meta-cache.ts","../src/services/plan-cache.ts","../src/services/file-cache.ts","../src/services/hashing.ts","../src/context.ts","../src/runtime-cache.ts"],"names":["CACHE_VERSION","SCHEMA_VERSION","CACHE_KEY_PREFIX","h64","initHasher","hasher","xxhash","input","toString","padStart","computeHash","content","crypto","createHash","update","digest","SerializationError","Error","message","path","name","stableSerialize","value","_path","_seen","WeakSet","undefined","Number","isFinite","String","JSON","stringify","Date","toISOString","RegExp","result","has","join","add","Array","isArray","map","v","i","sortedKeys","Object","keys","sort","pairs","k","push","delete","buildCacheKeyContext","ruleNames","freeze","toolVersion","PACKAGE_VERSION","schemaVersion","ruleRegistryHash","parserVersion","pkg","createRequire","version","platform","process","serializeCacheKeyContext","ctx","createMemoryDriver","config","cache","LRUCache","max","maxItems","maxSize","sizeCalculation","length","ttl","get","key","set","clear","getStats","entries","size","calculatedSize","getDirectoryStats","dirPath","fs","access","traverse","currentPath","file","readdir","withFileTypes","fullPath","isDirectory","stats","stat","createDiskDriver","cachePath","tReadStart","performance","now","cacache","tReadEnd","tDeserStart","deserialized","v8","deserialize","data","tDeserEnd","env","DEBUG_CACHE","stdout","write","toFixed","err","code","rm","entry","buffer","serialize","put","info","all","prune","verify","createPackedFileDriver","filePath","Map","loaded","ensureLoaded","buf","readFile","save","dir","dirname","mkdir","recursive","tmp","writeFile","rename","unlink","bulkSet","createAtomicDriver","cacheDir","catalog","catalogPromise","catalogGeneration","getFilePath","ensureDir","isJsonFile","fileName","endsWith","stripJsonExtension","slice","safeReadDir","tryReadJsonFile","tryUnlink","tryRemoveDir","force","markMissingInCatalog","awaitCatalogInitIfInFlight","ensureCatalog","localGeneration","filter","Set","syncCatalogAfterSet","syncCatalogAfterDelete","parse","writeFileAtomic","encoding","createJsonFileDriver","loadPromise","saveTimeout","savePromise","load","flush","clearTimeout","fromEntries","msg","debug","scheduleSave","setTimeout","unref","createSourceCache","driver","hash","createAstCache","l1","l2","hot","cold","error","invalidate","createResultCache","getMetadataKey","getOrCreateMetadata","metaKey","existing","newMeta","taskId","timestamp","hits","lastAccess","incrementHits","meta","updated","pendingWrites","catch","getMany","hashes","results","batch","Promise","setMany","hasMany","some","h","getWithMetadata","metadata","getManyWithMetadata","metadataUpdates","updateMetadata","updates","createConfigCache","report","createMetaCache","createPlanCache","plan","createFileCache","files","computeCompositeHash","salt","createAsyncMemoryDriver","createCacheContext","cwd","defaultBaseDir","resolve","useMemoryOnly","disk","cacheLocation","sourceDriver","memory","astL1","astL2","resultDriver","configDriver","metaDriver","planDriver","fileDriver","sources","asts","configs","metas","plans","analysisDriver","analysis","clearAllDrivers","clearType","type","getCachePath","getInfo","astL1Stats","astL2Stats","configStats","resultStats","metaStats","planStats","fileStats","analysisStats","totalSize","ast","maxEntries","location","globalCache","getCacheContext","resetGlobalCache","createRuntimeCache","options","enabled","allowDisabled","strategy"],"mappings":"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","file":"index.cjs","sourcesContent":["export const CACHE_VERSION = '1.0.0';\nexport const SCHEMA_VERSION = 1;\nexport const CACHE_KEY_PREFIX = \"v1.0.0-s1\";\n","let h64;\nimport t from 'node:crypto';\nimport r from 'xxhash-wasm';\nexport const initHasher = async ()=>{\n if (h64) return;\n let { h64: t } = await r();\n h64 = (r)=>t(r).toString(16).padStart(16, '0');\n};\nexport const computeHash = (r)=>{\n if (h64) return h64(r);\n let e = t.createHash('sha256');\n return e.update(r), e.digest('hex');\n};\n","export class SerializationError extends Error {\n path;\n constructor(r, i){\n super(r), this.path = i, this.name = 'SerializationError';\n }\n}\nexport function stableSerialize(r, i = [], e = new WeakSet()) {\n if (null === r) return 'null';\n if (void 0 === r) throw new SerializationError('undefined is not a valid hash input', i);\n switch(typeof r){\n case 'boolean':\n return r ? 'true' : 'false';\n case 'number':\n if (!Number.isFinite(r)) throw new SerializationError(`Non-finite number (${String(r)}) is not a valid hash input`, i);\n return String(r);\n case 'string':\n return JSON.stringify(r);\n case 'function':\n throw new SerializationError('Functions are not valid hash inputs', i);\n }\n if (r instanceof Date) return JSON.stringify(r.toISOString());\n if (r instanceof RegExp) return JSON.stringify(r.toString());\n if ('object' == typeof r) {\n let t;\n if (e.has(r)) throw new SerializationError(`Circular reference detected at path: ${i.join('.') || '(root)'}`, i);\n if (e.add(r), Array.isArray(r)) t = '[' + r.map((r, t)=>stableSerialize(r, [\n ...i,\n String(t)\n ], e)).join(',') + ']';\n else {\n let n = Object.keys(r).sort(), a = [];\n for (let t of n){\n let n = r[t];\n void 0 !== n && a.push(JSON.stringify(t) + ':' + stableSerialize(n, [\n ...i,\n t\n ], e));\n }\n t = '{' + a.join(',') + '}';\n }\n return e.delete(r), t;\n }\n return JSON.stringify(r);\n}\n","import { createRequire as r } from 'node:module';\nimport { PACKAGE_VERSION as e, CACHE_VERSION as o } from '@ngcompass/common';\nimport { computeHash as t } from './hashing.js';\nimport { stableSerialize as n } from './utils/stable-serialize.js';\nexport function buildCacheKeyContext(s) {\n return Object.freeze({\n toolVersion: e,\n schemaVersion: o,\n ruleRegistryHash: t(n([\n ...s\n ].sort())),\n parserVersion: function() {\n try {\n let e = r(import.meta.url)('oxc-parser/package.json');\n return String(e.version ?? 'unknown');\n } catch {\n return 'unknown';\n }\n }(),\n platform: process.platform\n });\n}\nexport function serializeCacheKeyContext(r) {\n return [\n r.toolVersion,\n r.schemaVersion,\n r.parserVersion,\n r.ruleRegistryHash,\n r.platform\n ].join('::');\n}\n","import { LRUCache as e } from 'lru-cache';\nexport const createMemoryDriver = (t = {})=>{\n let r = new e({\n max: t.maxItems ?? 500,\n maxSize: t.maxSize ?? 52428800,\n sizeCalculation: (e)=>{\n try {\n return JSON.stringify(e).length;\n } catch {\n return 1000;\n }\n },\n ttl: t.ttl\n });\n return {\n get: (e)=>r.get(e),\n set: (e, t)=>{\n r.set(e, t);\n },\n has: (e)=>r.has(e),\n delete: (e)=>{\n r.delete(e);\n },\n clear: ()=>r.clear(),\n getStats: ()=>({\n entries: r.size,\n size: r.calculatedSize\n })\n };\n};\n","import t from 'node:fs/promises';\nimport e from 'node:path';\nexport async function getDirectoryStats(i) {\n let a = 0, r = 0;\n try {\n await t.access(i);\n } catch {\n return {\n entries: 0,\n size: 0\n };\n }\n async function o(i) {\n for (let s of (await t.readdir(i, {\n withFileTypes: !0\n }))){\n let n = e.join(i, s.name);\n if (s.isDirectory()) await o(n);\n else {\n a++;\n let e = await t.stat(n);\n r += e.size;\n }\n }\n }\n try {\n await o(i);\n } catch {}\n return {\n entries: a,\n size: r\n };\n}\n","import e from 'cacache';\nimport r from 'node:v8';\nimport { getDirectoryStats as t } from '../utils/fs.js';\nexport const createDiskDriver = (a)=>{\n let n = a.path;\n return {\n get: async (t)=>{\n try {\n let a = performance.now(), i = await e.get(n, t), o = performance.now(), c = performance.now(), s = r.deserialize(i.data), d = performance.now();\n return process.env.DEBUG_CACHE && process.stdout.write(`[disk-driver] read: ${(o - a).toFixed(2)}ms, deser: ${(d - c).toFixed(2)}ms, size: ${(i.data.length / 1024).toFixed(1)}KB\\n`), s;\n } catch (r) {\n if ('ENOENT' === ('object' == typeof r && null !== r && 'code' in r ? r.code : void 0)) return;\n try {\n await e.rm.entry(n, t);\n } catch {}\n return;\n }\n },\n set: async (t, a)=>{\n let i = r.serialize(a);\n await e.put(n, t, i);\n },\n has: async (r)=>{\n try {\n return !!await e.get.info(n, r);\n } catch {\n return !1;\n }\n },\n delete: async (r)=>{\n await e.rm.entry(n, r);\n },\n clear: async ()=>{\n await e.rm.all(n);\n },\n prune: async ()=>{\n await e.verify(n);\n },\n getStats: async ()=>t(n)\n };\n};\n","import a from 'node:fs/promises';\nimport t from 'node:v8';\nimport e from 'node:path';\nexport const createPackedFileDriver = (i)=>{\n let r = i.path + '.pack', s = new Map(), c = !1, n = async ()=>{\n if (!c) {\n c = !0;\n try {\n let e = await a.readFile(r);\n for (let [a, i] of t.deserialize(e))s.set(a, i);\n } catch {}\n }\n }, l = async ()=>{\n let i = e.dirname(r);\n await a.mkdir(i, {\n recursive: !0\n });\n let c = t.serialize(s), n = r + '.tmp';\n await a.writeFile(n, c), await a.rename(n, r);\n };\n return {\n get: async (a)=>(await n(), s.get(a)),\n set: async (a, t)=>{\n await n(), s.set(a, t), await l();\n },\n has: async (a)=>(await n(), s.has(a)),\n delete: async (a)=>{\n await n(), s.delete(a), await l();\n },\n clear: async ()=>{\n s.clear(), c = !0;\n try {\n await a.unlink(r);\n } catch {}\n try {\n await a.unlink(r + '.tmp');\n } catch {}\n },\n getStats: async ()=>{\n await n();\n let t = 0;\n try {\n t = (await a.stat(r)).size;\n } catch {}\n return {\n entries: s.size,\n size: t\n };\n },\n bulkSet: async (a)=>{\n for (let [t, e] of (await n(), a))s.set(t, e);\n await l();\n }\n };\n};\n","import a from 'write-file-atomic';\nimport t from 'node:fs/promises';\nimport e from 'node:path';\nimport { getDirectoryStats as r } from '../utils/fs.js';\nexport const createAtomicDriver = (i)=>{\n let n = i.path, c = null, s = null, y = 0, w = (a)=>e.join(n, `${a}.json`), l = async ()=>{\n try {\n await t.mkdir(n, {\n recursive: !0\n });\n } catch {}\n }, o = (a)=>a.endsWith('.json'), u = (a)=>a.slice(0, -5), f = async (a)=>{\n try {\n return await t.readdir(a);\n } catch {\n return [];\n }\n }, d = async (a)=>{\n try {\n return await t.readFile(a, 'utf-8');\n } catch {\n return;\n }\n }, m = async (a)=>{\n try {\n await t.unlink(a);\n } catch {}\n }, h = async (a)=>{\n try {\n await t.rm(a, {\n recursive: !0,\n force: !0\n });\n } catch {}\n }, p = (a)=>{\n c && c.delete(a);\n }, S = async ()=>{\n s && await s;\n }, v = async ()=>{\n if (!c) {\n if (!s) {\n let a = y;\n s = (async ()=>{\n try {\n await l();\n let t = (await f(n)).filter(o).map(u);\n y === a && (c = new Set(t));\n } finally{\n s = null, c || (c = new Set());\n }\n })();\n }\n await s;\n }\n }, g = async (a)=>{\n await S(), c && c.add(a);\n }, j = async (a)=>{\n await S(), c && c.delete(a);\n };\n return {\n get: async (a)=>{\n if (c && !c.has(a)) return;\n let t = w(a), e = await d(t);\n if (void 0 === e) return void p(a);\n try {\n return JSON.parse(e);\n } catch {\n p(a);\n return;\n }\n },\n set: async (t, e)=>{\n await l();\n let r = w(t);\n await a(r, JSON.stringify(e), {\n encoding: 'utf-8'\n }), (c || s) && await g(t);\n },\n has: async (a)=>(await v(), c.has(a)),\n delete: async (a)=>{\n await m(w(a)), (c || s) && await j(a);\n },\n clear: async ()=>{\n await h(n), await l(), y += 1, c = new Set();\n },\n getStats: async ()=>r(n)\n };\n};\n","import a from 'node:fs/promises';\nimport e from 'node:path';\nimport t from 'write-file-atomic';\nimport { debug as i } from '@ngcompass/common';\nexport const createJsonFileDriver = (n)=>{\n let r = e.join(n.path, 'meta.json'), l = null, s = null, c = null, o = null, m = async ()=>{\n if (!l) return s || (s = (async ()=>{\n try {\n await a.mkdir(n.path, {\n recursive: !0\n });\n let e = await a.readFile(r, 'utf-8'), t = JSON.parse(e);\n l = t && 'object' == typeof t ? new Map(Object.entries(t)) : new Map();\n } catch {\n l = new Map();\n } finally{\n s = null;\n }\n })());\n }, u = async ()=>{\n c && (clearTimeout(c), c = null), l && (o && await o, o = (async ()=>{\n try {\n await a.mkdir(n.path, {\n recursive: !0\n });\n let e = Object.fromEntries(l);\n await t(r, JSON.stringify(e));\n } catch (e) {\n let a = e instanceof Error ? e.message : String(e);\n i('cache', `Failed to flush metadata cache to ${r}: ${a}`);\n } finally{\n o = null;\n }\n })(), await o);\n }, p = ()=>{\n c || (c = setTimeout(()=>{\n c = null, u();\n }, 2000)).unref();\n };\n return {\n get: async (a)=>(await m(), l.get(a)),\n set: async (a, e)=>{\n await m(), l.set(a, e), p();\n },\n has: async (a)=>(await m(), l.has(a)),\n delete: async (a)=>{\n await m(), l.delete(a) && p();\n },\n clear: async ()=>{\n c && (clearTimeout(c), c = null), l = new Map();\n try {\n await a.unlink(r);\n } catch {}\n },\n getStats: async ()=>(await m(), {\n entries: l.size,\n size: 0\n }),\n flush: u\n };\n};\n","export const createSourceCache = (e)=>({\n get: (t)=>e.get(t),\n set: (t, s)=>e.set(t, s),\n has: (t)=>e.has(t)\n });\n","import { debug as e } from '@ngcompass/common';\nexport const createAstCache = (t, a)=>({\n get: async (r)=>{\n let s = t.get(r);\n if (s) return s;\n try {\n let e = await a.get(r);\n if (e) return t.set(r, e), e;\n } catch (t) {\n e('cache', `Failed to read AST from L2 for ${r}: ${t instanceof Error ? t.message : String(t)}`);\n }\n },\n set: async (e, r)=>{\n t.set(e, r), await a.set(e, r);\n },\n invalidate: async (e)=>{\n t.delete(e), await a.delete(e);\n }\n });\n","import { debug as t } from '@ngcompass/common';\nexport const createResultCache = (e)=>{\n let a = (t)=>`${t}.meta`, s = async (t)=>{\n let s = a(t), i = await e.get(s);\n if (i) return i;\n let n = {\n taskId: t,\n timestamp: Date.now(),\n hits: 0,\n lastAccess: Date.now()\n };\n return await e.set(s, n), n;\n }, i = async (t)=>{\n let i = await s(t), n = {\n ...i,\n hits: i.hits + 1,\n lastAccess: Date.now()\n };\n await e.set(a(t), n);\n }, n = new Map();\n return {\n get: async (a)=>{\n if (n.has(a)) return n.get(a);\n let s = await e.get(a);\n return void 0 !== s && i(a).catch((e)=>{\n t('cache', `incrementHits failed for ${a}: ${e instanceof Error ? e.message : String(e)}`);\n }), s;\n },\n set: async (t, a)=>{\n await e.set(t, a), await s(t);\n },\n has: async (t)=>!!n.has(t) || e.has(t),\n delete: async (s)=>{\n n.delete(s), await e.delete(s);\n try {\n await e.delete(a(s));\n } catch (e) {\n t('cache', `Failed to delete metadata for ${s}: ${e instanceof Error ? e.message : String(e)}`);\n }\n },\n getMany: async (a)=>{\n if (0 === a.length) return new Map();\n let s = new Map();\n for(let l = 0; l < a.length; l += 200){\n let r = a.slice(l, l + 200);\n await Promise.all(r.map(async (a)=>{\n if (n.has(a)) return void s.set(a, n.get(a));\n let l = await e.get(a);\n void 0 !== l && (s.set(a, l), i(a).catch((e)=>{\n t('cache', `incrementHits failed for ${a}: ${e instanceof Error ? e.message : String(e)}`);\n }));\n }));\n }\n return s;\n },\n setMany: async (e)=>{\n if (0 !== e.length) {\n for (let [t, a] of e)n.set(t, a);\n t('cache', `Buffered ${e.length} results (total pending: ${n.size})`);\n }\n },\n hasMany: async (t)=>{\n if (0 === t.length) return new Set();\n if (!t.some((t)=>n.has(t))) try {\n let t = await e.getStats();\n if (0 === t.entries) return new Set();\n } catch {\n return new Set();\n }\n let a = new Set();\n for(let s = 0; s < t.length; s += 200){\n let i = t.slice(s, s + 200);\n await Promise.all(i.map(async (t)=>{\n n.has(t) ? a.add(t) : await e.has(t) && a.add(t);\n }));\n }\n return a;\n },\n getWithMetadata: async (t)=>{\n let a = n.has(t) ? n.get(t) : await e.get(t);\n if (void 0 === a) return;\n let l = await s(t);\n return await i(t), {\n result: a,\n metadata: l\n };\n },\n getManyWithMetadata: async (t)=>{\n if (0 === t.length) return new Map();\n let i = new Map(), l = [];\n for(let a = 0; a < t.length; a += 200){\n let r = t.slice(a, a + 200);\n await Promise.all(r.map(async (t)=>{\n let a = n.has(t) ? n.get(t) : await e.get(t);\n if (void 0 !== a) {\n let e = await s(t), n = {\n ...e,\n hits: e.hits + 1,\n lastAccess: Date.now()\n };\n i.set(t, {\n result: a,\n metadata: n\n }), l.push([\n t,\n n\n ]);\n }\n }));\n }\n if (l.length > 0) for(let t = 0; t < l.length; t += 200){\n let s = l.slice(t, t + 200);\n await Promise.all(s.map(async ([t, s])=>{\n await e.set(a(t), s);\n }));\n }\n return i;\n },\n updateMetadata: async (t, i)=>{\n let n = {\n ...await e.get(a(t)) ?? await s(t),\n ...i\n };\n await e.set(a(t), n);\n },\n flush: async ()=>{\n if (0 === n.size) return;\n let s = [\n ...n.entries()\n ];\n n.clear();\n let i = Date.now();\n if (e.bulkSet) {\n let t = [];\n for (let [e, n] of s)t.push([\n e,\n n\n ]), t.push([\n a(e),\n {\n taskId: e,\n timestamp: i,\n hits: 0,\n lastAccess: i\n }\n ]);\n await e.bulkSet(t);\n } else for(let t = 0; t < s.length; t += 200){\n let n = s.slice(t, t + 200);\n await Promise.all(n.map(([t, a])=>e.set(t, a))), await Promise.all(n.map(([t])=>e.set(a(t), {\n taskId: t,\n timestamp: i,\n hits: 0,\n lastAccess: i\n })));\n }\n t('cache', `Flushed ${s.length} buffered results to disk`);\n }\n };\n};\n","export const createConfigCache = (e)=>({\n get: async (t)=>e.get(t),\n set: async (t, a)=>{\n await e.set(t, a);\n }\n });\n","export const createMetaCache = (e)=>({\n get: (t)=>e.get(t),\n set: (t, s)=>e.set(t, s),\n delete: (t)=>e.delete(t),\n flush: async ()=>{\n 'function' == typeof e.flush && await e.flush();\n }\n });\n","export const createPlanCache = (e)=>({\n get: (t)=>e.get(t),\n set: (t, a)=>e.set(t, a),\n delete: (t)=>e.delete(t)\n });\n","export const createFileCache = (e)=>({\n get: (t)=>e.get(t),\n set: (t, a)=>e.set(t, {\n files: a,\n timestamp: Date.now()\n })\n });\n","import t from 'node:crypto';\nimport { CACHE_KEY_PREFIX as e } from '../constants.js';\nexport const computeCompositeHash = (o, r = e)=>{\n let s = t.createHash('sha256');\n return s.update(o), r && s.update(r), s.digest('hex');\n};\n","import e from 'path';\nimport { createMemoryDriver as t } from './drivers/memory.js';\nimport { createDiskDriver as a } from './drivers/disk.js';\nimport { createPackedFileDriver as s } from './drivers/packed.js';\nimport { createAtomicDriver as r } from './drivers/atomic.js';\nimport { createJsonFileDriver as i } from './drivers/json-file.js';\nimport { createSourceCache as c } from './services/source-cache.js';\nimport { createAstCache as m } from './services/ast-cache.js';\nimport { createResultCache as o } from './services/result-cache.js';\nimport { createConfigCache as l } from './services/config-cache.js';\nimport { createMetaCache as n } from './services/meta-cache.js';\nimport { createPlanCache as p } from './services/plan-cache.js';\nimport { createFileCache as y } from './services/file-cache.js';\nimport { computeCompositeHash as h } from './services/hashing.js';\nimport { CACHE_VERSION as f } from './constants.js';\nlet createAsyncMemoryDriver = (e, a)=>{\n let s = t({\n maxItems: e,\n ttl: a\n });\n return {\n get: async (e)=>s.get(e),\n set: async (e, t)=>{\n s.set(e, t);\n },\n has: async (e)=>s.has(e),\n delete: async (e)=>{\n s.delete(e);\n },\n clear: async ()=>{\n s.clear();\n },\n getStats: async ()=>s.getStats()\n };\n};\nexport const createCacheContext = (g = {})=>{\n let d = process.cwd(), v = e.resolve(d, 'node_modules', '.cache', 'ngcompass'), j = !g.disk?.path, u = g.disk?.path ?? '[memory]', k = t({\n maxItems: g.memory?.maxItems\n }), w = t({\n maxItems: 200\n }), x = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : a({\n path: e.join(g.disk?.path ?? v, 'ast'),\n ttl: g.disk?.ttl\n }), z = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : s({\n path: e.join(g.disk?.path ?? v, 'results')\n }), C = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : r({\n path: e.join(g.disk?.path ?? v, 'config')\n }), I = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : i({\n path: e.join(g.disk?.path ?? v, 'meta')\n }), S = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : a({\n path: e.join(g.disk?.path ?? v, 'plans'),\n ttl: g.disk?.ttl\n }), b = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : a({\n path: e.join(g.disk?.path ?? v, 'files'),\n ttl: g.disk?.ttl\n }), A = c(k), D = m(w, x), M = o(z), P = l(C), E = n(I), G = p(S), H = y(b), T = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : a({\n path: e.join(g.disk?.path ?? v, 'analysis'),\n ttl: g.disk?.ttl\n }), _ = o(T), q = async ()=>{\n k.clear(), w.clear(), await x.clear(), await z.clear(), await C.clear(), await I.clear(), await S.clear(), await b.clear(), await T.clear();\n };\n return {\n sources: A,\n asts: D,\n results: M,\n configs: P,\n metas: E,\n plans: G,\n files: H,\n analysis: _,\n computeHash: h,\n prune: async ()=>{\n 'prune' in x && 'function' == typeof x.prune && await x.prune();\n },\n clear: q,\n clearType: async (e)=>{\n switch(e){\n case 'ast':\n w.clear(), await x.clear();\n break;\n case 'config':\n await C.clear();\n break;\n case 'results':\n await z.clear(), await T.clear();\n break;\n case 'all':\n await q();\n }\n },\n flush: async ()=>{\n await Promise.all([\n M.flush(),\n _.flush(),\n E.flush()\n ]);\n },\n getCachePath: ()=>u,\n getInfo: async ()=>{\n let e = w.getStats(), [t, a, s, r, i, c, m] = await Promise.all([\n x.getStats(),\n C.getStats(),\n z.getStats(),\n I.getStats(),\n S.getStats(),\n b.getStats(),\n T.getStats()\n ]), o = e.size + t.size + a.size + s.size + r.size + i.size + c.size + m.size;\n return {\n ast: {\n l1: {\n entries: e.entries,\n maxEntries: 200,\n size: e.size\n },\n l2: {\n entries: t.entries,\n size: t.size\n }\n },\n config: {\n entries: a.entries,\n size: a.size\n },\n results: {\n entries: s.entries,\n size: s.size\n },\n totalSize: o,\n location: u,\n version: f\n };\n }\n };\n};\nlet globalCache = null;\nexport const getCacheContext = (e)=>(globalCache || (globalCache = createCacheContext(e)), globalCache);\nexport const resetGlobalCache = ()=>{\n globalCache = null;\n};\n","import e from 'node:path';\nimport { createCacheContext as t } from './context.js';\nexport function createRuntimeCache(c, o, a = {}) {\n if (!c.cache.enabled && !a.allowDisabled) return;\n let r = e.resolve(o, c.cache.location);\n return t({\n memory: 'memory' === c.cache.strategy ? {\n ttl: c.cache.ttl\n } : void 0,\n disk: 'memory' === c.cache.strategy ? void 0 : {\n path: r,\n ttl: c.cache.ttl\n }\n });\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { ConfigValidationResult, NormalizedAnalyzerConfig } from '@ngcompass/common';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for the memory driver.
|
|
5
|
+
*/
|
|
6
|
+
interface MemoryDriverConfig {
|
|
7
|
+
maxItems?: number;
|
|
8
|
+
maxSize?: number;
|
|
9
|
+
ttl?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for the disk driver.
|
|
13
|
+
*/
|
|
14
|
+
interface DiskDriverConfig {
|
|
15
|
+
path: string;
|
|
16
|
+
ttl?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Global cache configuration.
|
|
20
|
+
*/
|
|
21
|
+
interface CacheConfig {
|
|
22
|
+
memory?: MemoryDriverConfig;
|
|
23
|
+
disk?: Partial<DiskDriverConfig>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface SourceEntry {
|
|
27
|
+
content: string;
|
|
28
|
+
filePath: string;
|
|
29
|
+
}
|
|
30
|
+
interface SourceCache {
|
|
31
|
+
get: (hash: string) => SourceEntry | undefined;
|
|
32
|
+
set: (hash: string, entry: SourceEntry) => void;
|
|
33
|
+
has: (hash: string) => boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface AstEntry {
|
|
37
|
+
filePath: string;
|
|
38
|
+
ast: unknown;
|
|
39
|
+
}
|
|
40
|
+
interface AstCache {
|
|
41
|
+
get: (hash: string) => Promise<AstEntry | undefined>;
|
|
42
|
+
set: (hash: string, entry: AstEntry) => Promise<void>;
|
|
43
|
+
invalidate: (hash: string) => Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Cache metadata for tracking usage and freshness
|
|
48
|
+
*/
|
|
49
|
+
interface CacheMetadata {
|
|
50
|
+
/** Task ID (content hash) */
|
|
51
|
+
readonly taskId: string;
|
|
52
|
+
/** When result was cached */
|
|
53
|
+
readonly timestamp: number;
|
|
54
|
+
/** Number of cache hits */
|
|
55
|
+
readonly hits: number;
|
|
56
|
+
/** Last access time (for LRU) */
|
|
57
|
+
readonly lastAccess: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Cache entry with metadata
|
|
61
|
+
*/
|
|
62
|
+
interface CacheEntry<T> {
|
|
63
|
+
/** The cached result */
|
|
64
|
+
readonly result: T;
|
|
65
|
+
/** Cache metadata */
|
|
66
|
+
readonly metadata: CacheMetadata;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Result Cache interface with bulk operations for Phase 2.0
|
|
70
|
+
*/
|
|
71
|
+
interface ResultCache {
|
|
72
|
+
get: <T>(hash: string) => Promise<T | undefined>;
|
|
73
|
+
set: <T>(hash: string, result: T) => Promise<void>;
|
|
74
|
+
has: (hash: string) => Promise<boolean>;
|
|
75
|
+
delete: (hash: string) => Promise<void>;
|
|
76
|
+
getMany: <T>(hashes: ReadonlyArray<string>) => Promise<ReadonlyMap<string, T>>;
|
|
77
|
+
setMany: <T>(entries: ReadonlyArray<readonly [string, T]>) => Promise<void>;
|
|
78
|
+
hasMany: (hashes: ReadonlyArray<string>) => Promise<ReadonlySet<string>>;
|
|
79
|
+
getWithMetadata: <T>(hash: string) => Promise<CacheEntry<T> | undefined>;
|
|
80
|
+
getManyWithMetadata: <T>(hashes: ReadonlyArray<string>) => Promise<ReadonlyMap<string, CacheEntry<T>>>;
|
|
81
|
+
updateMetadata: (hash: string, updates: Partial<CacheMetadata>) => Promise<void>;
|
|
82
|
+
flush: () => Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface ConfigCache {
|
|
86
|
+
get: (hash: string) => Promise<ConfigValidationResult | undefined>;
|
|
87
|
+
set: (hash: string, report: ConfigValidationResult) => Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
interface FileMeta {
|
|
91
|
+
readonly mtime: number;
|
|
92
|
+
readonly size: number;
|
|
93
|
+
readonly hash: string;
|
|
94
|
+
}
|
|
95
|
+
interface MetaCache {
|
|
96
|
+
get: (filePath: string) => Promise<FileMeta | undefined>;
|
|
97
|
+
set: (filePath: string, meta: FileMeta) => Promise<void>;
|
|
98
|
+
delete: (filePath: string) => Promise<void>;
|
|
99
|
+
flush: () => Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
interface PlanCache {
|
|
103
|
+
get: (key: string) => Promise<unknown>;
|
|
104
|
+
set: (key: string, plan: unknown) => Promise<void>;
|
|
105
|
+
delete: (key: string) => Promise<void>;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
interface FileCacheEntry {
|
|
109
|
+
files: string[];
|
|
110
|
+
timestamp: number;
|
|
111
|
+
}
|
|
112
|
+
interface FileCache {
|
|
113
|
+
get: (key: string) => Promise<FileCacheEntry | undefined>;
|
|
114
|
+
set: (key: string, files: string[]) => Promise<void>;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface CacheInfo {
|
|
118
|
+
ast: {
|
|
119
|
+
l1: {
|
|
120
|
+
entries: number;
|
|
121
|
+
maxEntries: number;
|
|
122
|
+
size: number;
|
|
123
|
+
};
|
|
124
|
+
l2: {
|
|
125
|
+
entries: number;
|
|
126
|
+
size: number;
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
config: {
|
|
130
|
+
entries: number;
|
|
131
|
+
size: number;
|
|
132
|
+
};
|
|
133
|
+
results: {
|
|
134
|
+
entries: number;
|
|
135
|
+
size: number;
|
|
136
|
+
};
|
|
137
|
+
totalSize: number;
|
|
138
|
+
location: string;
|
|
139
|
+
version: string;
|
|
140
|
+
}
|
|
141
|
+
interface CacheContext {
|
|
142
|
+
sources: SourceCache;
|
|
143
|
+
asts: AstCache;
|
|
144
|
+
results: ResultCache;
|
|
145
|
+
configs: ConfigCache;
|
|
146
|
+
metas: MetaCache;
|
|
147
|
+
plans: PlanCache;
|
|
148
|
+
files: FileCache;
|
|
149
|
+
/**
|
|
150
|
+
* Stores full analysis results keyed by global hash (for warm run short-circuiting)
|
|
151
|
+
*/
|
|
152
|
+
analysis: ResultCache;
|
|
153
|
+
/**
|
|
154
|
+
* Computes a hash suitable for caching keys
|
|
155
|
+
*/
|
|
156
|
+
computeHash: (content: string, salt?: string) => string;
|
|
157
|
+
/**
|
|
158
|
+
* Clears old disk cache entries
|
|
159
|
+
*/
|
|
160
|
+
prune: () => Promise<void>;
|
|
161
|
+
/**
|
|
162
|
+
* Clears all caches
|
|
163
|
+
*/
|
|
164
|
+
clear: () => Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Clear specific cache type
|
|
167
|
+
*/
|
|
168
|
+
clearType: (type: 'ast' | 'config' | 'results' | 'all') => Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* Get cache statistics and info
|
|
171
|
+
*/
|
|
172
|
+
getInfo: () => Promise<CacheInfo>;
|
|
173
|
+
/**
|
|
174
|
+
* Get absolute path to cache directory
|
|
175
|
+
*/
|
|
176
|
+
getCachePath: () => string;
|
|
177
|
+
/**
|
|
178
|
+
* Flushes all pending writes to disk.
|
|
179
|
+
* Call this before process exit to prevent data loss.
|
|
180
|
+
*/
|
|
181
|
+
flush: () => Promise<void>;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
declare const CACHE_VERSION = "1.0.0";
|
|
185
|
+
declare const SCHEMA_VERSION = 1;
|
|
186
|
+
/**
|
|
187
|
+
* Prefix for cache keys to ensure versioning.
|
|
188
|
+
* Format: v{CACHE_VERSION}-s{SCHEMA_VERSION}
|
|
189
|
+
*/
|
|
190
|
+
declare const CACHE_KEY_PREFIX = "v1.0.0-s1";
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Content Hashing — Core utility
|
|
194
|
+
*
|
|
195
|
+
* Deterministic hashing for cache invalidation.
|
|
196
|
+
* Uses xxhash-wasm (fast) with SHA-256 fallback before initialization.
|
|
197
|
+
* The full planner/hashing.ts (file-level helpers) will import computeHash from here.
|
|
198
|
+
*/
|
|
199
|
+
/**
|
|
200
|
+
* Initializes the xxhash hasher (call once at startup).
|
|
201
|
+
*/
|
|
202
|
+
declare const initHasher: () => Promise<void>;
|
|
203
|
+
/**
|
|
204
|
+
* Computes a hash using xxhash if initialized, SHA-256 otherwise.
|
|
205
|
+
*
|
|
206
|
+
* @param content - Data to hash
|
|
207
|
+
* @returns Hex-encoded hash string
|
|
208
|
+
*/
|
|
209
|
+
declare const computeHash: (content: string | Uint8Array) => string;
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Stable Serialization Utility
|
|
213
|
+
*
|
|
214
|
+
* Produces a deterministic JSON string suitable for use in cache keys and hashes.
|
|
215
|
+
*
|
|
216
|
+
* Guarantees:
|
|
217
|
+
* - Objects: keys sorted alphabetically at every depth level
|
|
218
|
+
* - Arrays: elements preserved in insertion order (NOT sorted)
|
|
219
|
+
* - undefined values in objects: omitted (same as JSON.stringify)
|
|
220
|
+
* - Date: serialized as ISO 8601 string
|
|
221
|
+
* - RegExp: serialized as its string representation (e.g. "/abc/gi")
|
|
222
|
+
* - Circular references: throws SerializationError (never silently sanitizes)
|
|
223
|
+
* - Functions: throws SerializationError
|
|
224
|
+
* - NaN / Infinity: throws SerializationError
|
|
225
|
+
*
|
|
226
|
+
* This replaces bare JSON.stringify() wherever the insertion order of object
|
|
227
|
+
* keys must not affect the resulting string (e.g. batch keys, cache keys).
|
|
228
|
+
*/
|
|
229
|
+
declare class SerializationError extends Error {
|
|
230
|
+
readonly path: string[];
|
|
231
|
+
constructor(message: string, path: string[]);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Produces a deterministic JSON string by sorting object keys recursively.
|
|
235
|
+
*
|
|
236
|
+
* @param value - The value to serialize
|
|
237
|
+
* @param _path - Internal: tracks key path for error messages
|
|
238
|
+
* @param _seen - Internal: tracks visited objects for circular detection
|
|
239
|
+
* @returns A stable, deterministic JSON string
|
|
240
|
+
* @throws {SerializationError} on circular references, functions, or non-finite numbers
|
|
241
|
+
*/
|
|
242
|
+
declare function stableSerialize(value: unknown, _path?: string[], _seen?: WeakSet<object>): string;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Cache Key Context
|
|
246
|
+
*
|
|
247
|
+
* Encapsulates all version-related inputs that affect cache validity.
|
|
248
|
+
* Must be included in EVERY cache key so that stale entries from a previous
|
|
249
|
+
* version of the tool, parser, or rule set are never reused.
|
|
250
|
+
*
|
|
251
|
+
* This resolves the critical result-cache staleness bug where upgrading the
|
|
252
|
+
* tool changes the globalHash (plan cache miss) but NOT the individual taskIds,
|
|
253
|
+
* allowing old per-task results from the previous engine version to be served.
|
|
254
|
+
*
|
|
255
|
+
* Exact key formulas:
|
|
256
|
+
*
|
|
257
|
+
* Config key:
|
|
258
|
+
* SHA-256(contentHash + "::" + profile + "::" + serializeCacheKeyContext(ctx))
|
|
259
|
+
*
|
|
260
|
+
* Global hash (plan + analysis cache key):
|
|
261
|
+
* hash(sortedFilePairs + "||" + rulesHash + "||||" + serializeCacheKeyContext(ctx))
|
|
262
|
+
*
|
|
263
|
+
* Task ID (result cache key):
|
|
264
|
+
* hash(ctx.toolVersion + "::" + ctx.ruleRegistryHash + "::" + ruleName + "::" + inputs...)
|
|
265
|
+
*/
|
|
266
|
+
interface CacheKeyContext {
|
|
267
|
+
/**
|
|
268
|
+
* The ngcompass package version (e.g. "1.2.3").
|
|
269
|
+
* Bumped on every release → invalidates all caches on upgrade.
|
|
270
|
+
*/
|
|
271
|
+
readonly toolVersion: string;
|
|
272
|
+
/**
|
|
273
|
+
* The cache schema version (CACHE_VERSION constant).
|
|
274
|
+
* Bumped when the serialization format of cached values changes.
|
|
275
|
+
*/
|
|
276
|
+
readonly schemaVersion: string;
|
|
277
|
+
/**
|
|
278
|
+
* A hash of all registered rule names + versions.
|
|
279
|
+
* Changes when a rule is added, removed, or its plugin is updated.
|
|
280
|
+
*/
|
|
281
|
+
readonly ruleRegistryHash: string;
|
|
282
|
+
/**
|
|
283
|
+
* The oxc-parser version, if detectable; "unknown" otherwise.
|
|
284
|
+
* Changes when the parser is upgraded, ensuring AST-dependent caches
|
|
285
|
+
* are invalidated even if tool version is unchanged.
|
|
286
|
+
*/
|
|
287
|
+
readonly parserVersion: string;
|
|
288
|
+
/**
|
|
289
|
+
* The OS platform string (e.g. "linux", "darwin", "win32").
|
|
290
|
+
* Prevents cross-platform cache sharing where path separators or
|
|
291
|
+
* binary outputs differ.
|
|
292
|
+
*/
|
|
293
|
+
readonly platform: string;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Builds a CacheKeyContext from the current runtime environment and
|
|
297
|
+
* the registered rule names.
|
|
298
|
+
*
|
|
299
|
+
* Call this ONCE per process, after all plugins are loaded and all rules
|
|
300
|
+
* are registered. Pass the resulting context to buildExecutionPlan() and
|
|
301
|
+
* resolveConfig().
|
|
302
|
+
*
|
|
303
|
+
* @param ruleNames - All registered rule names (from RuleRegistry)
|
|
304
|
+
*/
|
|
305
|
+
declare function buildCacheKeyContext(ruleNames: ReadonlyArray<string>): CacheKeyContext;
|
|
306
|
+
/**
|
|
307
|
+
* Serializes the context to a stable string for embedding in cache keys.
|
|
308
|
+
*
|
|
309
|
+
* Format: "toolVersion::schemaVersion::parserVersion::ruleRegistryHash::platform"
|
|
310
|
+
*
|
|
311
|
+
* All components are separated by "::" which cannot appear in the individual
|
|
312
|
+
* values (version strings and hashes use only alphanumeric characters, dots,
|
|
313
|
+
* and hyphens).
|
|
314
|
+
*/
|
|
315
|
+
declare function serializeCacheKeyContext(ctx: CacheKeyContext): string;
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Initializes the caching system.
|
|
319
|
+
*/
|
|
320
|
+
declare const createCacheContext: (config?: CacheConfig) => CacheContext;
|
|
321
|
+
/**
|
|
322
|
+
* Returns a globally shared cache context.
|
|
323
|
+
* Useful for CLI and long-running processes to avoid redundant initializations.
|
|
324
|
+
*/
|
|
325
|
+
declare const getCacheContext: (config?: CacheConfig) => CacheContext;
|
|
326
|
+
/**
|
|
327
|
+
* Resets the global cache singleton to null.
|
|
328
|
+
* Call this in tests between runs to get a clean slate without restarting the process.
|
|
329
|
+
*/
|
|
330
|
+
declare const resetGlobalCache: () => void;
|
|
331
|
+
|
|
332
|
+
declare function createRuntimeCache(config: NormalizedAnalyzerConfig, cwd: string, options?: {
|
|
333
|
+
allowDisabled?: boolean;
|
|
334
|
+
}): CacheContext | undefined;
|
|
335
|
+
|
|
336
|
+
export { type AstCache, CACHE_KEY_PREFIX, CACHE_VERSION, type CacheConfig, type CacheContext, type CacheInfo, type CacheKeyContext, type ConfigCache, type FileCache, type FileMeta, type MetaCache, type PlanCache, type ResultCache, SCHEMA_VERSION, SerializationError, type SourceCache, buildCacheKeyContext, computeHash, createCacheContext, createRuntimeCache, getCacheContext, initHasher, resetGlobalCache, serializeCacheKeyContext, stableSerialize };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { ConfigValidationResult, NormalizedAnalyzerConfig } from '@ngcompass/common';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for the memory driver.
|
|
5
|
+
*/
|
|
6
|
+
interface MemoryDriverConfig {
|
|
7
|
+
maxItems?: number;
|
|
8
|
+
maxSize?: number;
|
|
9
|
+
ttl?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for the disk driver.
|
|
13
|
+
*/
|
|
14
|
+
interface DiskDriverConfig {
|
|
15
|
+
path: string;
|
|
16
|
+
ttl?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Global cache configuration.
|
|
20
|
+
*/
|
|
21
|
+
interface CacheConfig {
|
|
22
|
+
memory?: MemoryDriverConfig;
|
|
23
|
+
disk?: Partial<DiskDriverConfig>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface SourceEntry {
|
|
27
|
+
content: string;
|
|
28
|
+
filePath: string;
|
|
29
|
+
}
|
|
30
|
+
interface SourceCache {
|
|
31
|
+
get: (hash: string) => SourceEntry | undefined;
|
|
32
|
+
set: (hash: string, entry: SourceEntry) => void;
|
|
33
|
+
has: (hash: string) => boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface AstEntry {
|
|
37
|
+
filePath: string;
|
|
38
|
+
ast: unknown;
|
|
39
|
+
}
|
|
40
|
+
interface AstCache {
|
|
41
|
+
get: (hash: string) => Promise<AstEntry | undefined>;
|
|
42
|
+
set: (hash: string, entry: AstEntry) => Promise<void>;
|
|
43
|
+
invalidate: (hash: string) => Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Cache metadata for tracking usage and freshness
|
|
48
|
+
*/
|
|
49
|
+
interface CacheMetadata {
|
|
50
|
+
/** Task ID (content hash) */
|
|
51
|
+
readonly taskId: string;
|
|
52
|
+
/** When result was cached */
|
|
53
|
+
readonly timestamp: number;
|
|
54
|
+
/** Number of cache hits */
|
|
55
|
+
readonly hits: number;
|
|
56
|
+
/** Last access time (for LRU) */
|
|
57
|
+
readonly lastAccess: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Cache entry with metadata
|
|
61
|
+
*/
|
|
62
|
+
interface CacheEntry<T> {
|
|
63
|
+
/** The cached result */
|
|
64
|
+
readonly result: T;
|
|
65
|
+
/** Cache metadata */
|
|
66
|
+
readonly metadata: CacheMetadata;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Result Cache interface with bulk operations for Phase 2.0
|
|
70
|
+
*/
|
|
71
|
+
interface ResultCache {
|
|
72
|
+
get: <T>(hash: string) => Promise<T | undefined>;
|
|
73
|
+
set: <T>(hash: string, result: T) => Promise<void>;
|
|
74
|
+
has: (hash: string) => Promise<boolean>;
|
|
75
|
+
delete: (hash: string) => Promise<void>;
|
|
76
|
+
getMany: <T>(hashes: ReadonlyArray<string>) => Promise<ReadonlyMap<string, T>>;
|
|
77
|
+
setMany: <T>(entries: ReadonlyArray<readonly [string, T]>) => Promise<void>;
|
|
78
|
+
hasMany: (hashes: ReadonlyArray<string>) => Promise<ReadonlySet<string>>;
|
|
79
|
+
getWithMetadata: <T>(hash: string) => Promise<CacheEntry<T> | undefined>;
|
|
80
|
+
getManyWithMetadata: <T>(hashes: ReadonlyArray<string>) => Promise<ReadonlyMap<string, CacheEntry<T>>>;
|
|
81
|
+
updateMetadata: (hash: string, updates: Partial<CacheMetadata>) => Promise<void>;
|
|
82
|
+
flush: () => Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface ConfigCache {
|
|
86
|
+
get: (hash: string) => Promise<ConfigValidationResult | undefined>;
|
|
87
|
+
set: (hash: string, report: ConfigValidationResult) => Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
interface FileMeta {
|
|
91
|
+
readonly mtime: number;
|
|
92
|
+
readonly size: number;
|
|
93
|
+
readonly hash: string;
|
|
94
|
+
}
|
|
95
|
+
interface MetaCache {
|
|
96
|
+
get: (filePath: string) => Promise<FileMeta | undefined>;
|
|
97
|
+
set: (filePath: string, meta: FileMeta) => Promise<void>;
|
|
98
|
+
delete: (filePath: string) => Promise<void>;
|
|
99
|
+
flush: () => Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
interface PlanCache {
|
|
103
|
+
get: (key: string) => Promise<unknown>;
|
|
104
|
+
set: (key: string, plan: unknown) => Promise<void>;
|
|
105
|
+
delete: (key: string) => Promise<void>;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
interface FileCacheEntry {
|
|
109
|
+
files: string[];
|
|
110
|
+
timestamp: number;
|
|
111
|
+
}
|
|
112
|
+
interface FileCache {
|
|
113
|
+
get: (key: string) => Promise<FileCacheEntry | undefined>;
|
|
114
|
+
set: (key: string, files: string[]) => Promise<void>;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface CacheInfo {
|
|
118
|
+
ast: {
|
|
119
|
+
l1: {
|
|
120
|
+
entries: number;
|
|
121
|
+
maxEntries: number;
|
|
122
|
+
size: number;
|
|
123
|
+
};
|
|
124
|
+
l2: {
|
|
125
|
+
entries: number;
|
|
126
|
+
size: number;
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
config: {
|
|
130
|
+
entries: number;
|
|
131
|
+
size: number;
|
|
132
|
+
};
|
|
133
|
+
results: {
|
|
134
|
+
entries: number;
|
|
135
|
+
size: number;
|
|
136
|
+
};
|
|
137
|
+
totalSize: number;
|
|
138
|
+
location: string;
|
|
139
|
+
version: string;
|
|
140
|
+
}
|
|
141
|
+
interface CacheContext {
|
|
142
|
+
sources: SourceCache;
|
|
143
|
+
asts: AstCache;
|
|
144
|
+
results: ResultCache;
|
|
145
|
+
configs: ConfigCache;
|
|
146
|
+
metas: MetaCache;
|
|
147
|
+
plans: PlanCache;
|
|
148
|
+
files: FileCache;
|
|
149
|
+
/**
|
|
150
|
+
* Stores full analysis results keyed by global hash (for warm run short-circuiting)
|
|
151
|
+
*/
|
|
152
|
+
analysis: ResultCache;
|
|
153
|
+
/**
|
|
154
|
+
* Computes a hash suitable for caching keys
|
|
155
|
+
*/
|
|
156
|
+
computeHash: (content: string, salt?: string) => string;
|
|
157
|
+
/**
|
|
158
|
+
* Clears old disk cache entries
|
|
159
|
+
*/
|
|
160
|
+
prune: () => Promise<void>;
|
|
161
|
+
/**
|
|
162
|
+
* Clears all caches
|
|
163
|
+
*/
|
|
164
|
+
clear: () => Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Clear specific cache type
|
|
167
|
+
*/
|
|
168
|
+
clearType: (type: 'ast' | 'config' | 'results' | 'all') => Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* Get cache statistics and info
|
|
171
|
+
*/
|
|
172
|
+
getInfo: () => Promise<CacheInfo>;
|
|
173
|
+
/**
|
|
174
|
+
* Get absolute path to cache directory
|
|
175
|
+
*/
|
|
176
|
+
getCachePath: () => string;
|
|
177
|
+
/**
|
|
178
|
+
* Flushes all pending writes to disk.
|
|
179
|
+
* Call this before process exit to prevent data loss.
|
|
180
|
+
*/
|
|
181
|
+
flush: () => Promise<void>;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
declare const CACHE_VERSION = "1.0.0";
|
|
185
|
+
declare const SCHEMA_VERSION = 1;
|
|
186
|
+
/**
|
|
187
|
+
* Prefix for cache keys to ensure versioning.
|
|
188
|
+
* Format: v{CACHE_VERSION}-s{SCHEMA_VERSION}
|
|
189
|
+
*/
|
|
190
|
+
declare const CACHE_KEY_PREFIX = "v1.0.0-s1";
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Content Hashing — Core utility
|
|
194
|
+
*
|
|
195
|
+
* Deterministic hashing for cache invalidation.
|
|
196
|
+
* Uses xxhash-wasm (fast) with SHA-256 fallback before initialization.
|
|
197
|
+
* The full planner/hashing.ts (file-level helpers) will import computeHash from here.
|
|
198
|
+
*/
|
|
199
|
+
/**
|
|
200
|
+
* Initializes the xxhash hasher (call once at startup).
|
|
201
|
+
*/
|
|
202
|
+
declare const initHasher: () => Promise<void>;
|
|
203
|
+
/**
|
|
204
|
+
* Computes a hash using xxhash if initialized, SHA-256 otherwise.
|
|
205
|
+
*
|
|
206
|
+
* @param content - Data to hash
|
|
207
|
+
* @returns Hex-encoded hash string
|
|
208
|
+
*/
|
|
209
|
+
declare const computeHash: (content: string | Uint8Array) => string;
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Stable Serialization Utility
|
|
213
|
+
*
|
|
214
|
+
* Produces a deterministic JSON string suitable for use in cache keys and hashes.
|
|
215
|
+
*
|
|
216
|
+
* Guarantees:
|
|
217
|
+
* - Objects: keys sorted alphabetically at every depth level
|
|
218
|
+
* - Arrays: elements preserved in insertion order (NOT sorted)
|
|
219
|
+
* - undefined values in objects: omitted (same as JSON.stringify)
|
|
220
|
+
* - Date: serialized as ISO 8601 string
|
|
221
|
+
* - RegExp: serialized as its string representation (e.g. "/abc/gi")
|
|
222
|
+
* - Circular references: throws SerializationError (never silently sanitizes)
|
|
223
|
+
* - Functions: throws SerializationError
|
|
224
|
+
* - NaN / Infinity: throws SerializationError
|
|
225
|
+
*
|
|
226
|
+
* This replaces bare JSON.stringify() wherever the insertion order of object
|
|
227
|
+
* keys must not affect the resulting string (e.g. batch keys, cache keys).
|
|
228
|
+
*/
|
|
229
|
+
declare class SerializationError extends Error {
|
|
230
|
+
readonly path: string[];
|
|
231
|
+
constructor(message: string, path: string[]);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Produces a deterministic JSON string by sorting object keys recursively.
|
|
235
|
+
*
|
|
236
|
+
* @param value - The value to serialize
|
|
237
|
+
* @param _path - Internal: tracks key path for error messages
|
|
238
|
+
* @param _seen - Internal: tracks visited objects for circular detection
|
|
239
|
+
* @returns A stable, deterministic JSON string
|
|
240
|
+
* @throws {SerializationError} on circular references, functions, or non-finite numbers
|
|
241
|
+
*/
|
|
242
|
+
declare function stableSerialize(value: unknown, _path?: string[], _seen?: WeakSet<object>): string;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Cache Key Context
|
|
246
|
+
*
|
|
247
|
+
* Encapsulates all version-related inputs that affect cache validity.
|
|
248
|
+
* Must be included in EVERY cache key so that stale entries from a previous
|
|
249
|
+
* version of the tool, parser, or rule set are never reused.
|
|
250
|
+
*
|
|
251
|
+
* This resolves the critical result-cache staleness bug where upgrading the
|
|
252
|
+
* tool changes the globalHash (plan cache miss) but NOT the individual taskIds,
|
|
253
|
+
* allowing old per-task results from the previous engine version to be served.
|
|
254
|
+
*
|
|
255
|
+
* Exact key formulas:
|
|
256
|
+
*
|
|
257
|
+
* Config key:
|
|
258
|
+
* SHA-256(contentHash + "::" + profile + "::" + serializeCacheKeyContext(ctx))
|
|
259
|
+
*
|
|
260
|
+
* Global hash (plan + analysis cache key):
|
|
261
|
+
* hash(sortedFilePairs + "||" + rulesHash + "||||" + serializeCacheKeyContext(ctx))
|
|
262
|
+
*
|
|
263
|
+
* Task ID (result cache key):
|
|
264
|
+
* hash(ctx.toolVersion + "::" + ctx.ruleRegistryHash + "::" + ruleName + "::" + inputs...)
|
|
265
|
+
*/
|
|
266
|
+
interface CacheKeyContext {
|
|
267
|
+
/**
|
|
268
|
+
* The ngcompass package version (e.g. "1.2.3").
|
|
269
|
+
* Bumped on every release → invalidates all caches on upgrade.
|
|
270
|
+
*/
|
|
271
|
+
readonly toolVersion: string;
|
|
272
|
+
/**
|
|
273
|
+
* The cache schema version (CACHE_VERSION constant).
|
|
274
|
+
* Bumped when the serialization format of cached values changes.
|
|
275
|
+
*/
|
|
276
|
+
readonly schemaVersion: string;
|
|
277
|
+
/**
|
|
278
|
+
* A hash of all registered rule names + versions.
|
|
279
|
+
* Changes when a rule is added, removed, or its plugin is updated.
|
|
280
|
+
*/
|
|
281
|
+
readonly ruleRegistryHash: string;
|
|
282
|
+
/**
|
|
283
|
+
* The oxc-parser version, if detectable; "unknown" otherwise.
|
|
284
|
+
* Changes when the parser is upgraded, ensuring AST-dependent caches
|
|
285
|
+
* are invalidated even if tool version is unchanged.
|
|
286
|
+
*/
|
|
287
|
+
readonly parserVersion: string;
|
|
288
|
+
/**
|
|
289
|
+
* The OS platform string (e.g. "linux", "darwin", "win32").
|
|
290
|
+
* Prevents cross-platform cache sharing where path separators or
|
|
291
|
+
* binary outputs differ.
|
|
292
|
+
*/
|
|
293
|
+
readonly platform: string;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Builds a CacheKeyContext from the current runtime environment and
|
|
297
|
+
* the registered rule names.
|
|
298
|
+
*
|
|
299
|
+
* Call this ONCE per process, after all plugins are loaded and all rules
|
|
300
|
+
* are registered. Pass the resulting context to buildExecutionPlan() and
|
|
301
|
+
* resolveConfig().
|
|
302
|
+
*
|
|
303
|
+
* @param ruleNames - All registered rule names (from RuleRegistry)
|
|
304
|
+
*/
|
|
305
|
+
declare function buildCacheKeyContext(ruleNames: ReadonlyArray<string>): CacheKeyContext;
|
|
306
|
+
/**
|
|
307
|
+
* Serializes the context to a stable string for embedding in cache keys.
|
|
308
|
+
*
|
|
309
|
+
* Format: "toolVersion::schemaVersion::parserVersion::ruleRegistryHash::platform"
|
|
310
|
+
*
|
|
311
|
+
* All components are separated by "::" which cannot appear in the individual
|
|
312
|
+
* values (version strings and hashes use only alphanumeric characters, dots,
|
|
313
|
+
* and hyphens).
|
|
314
|
+
*/
|
|
315
|
+
declare function serializeCacheKeyContext(ctx: CacheKeyContext): string;
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Initializes the caching system.
|
|
319
|
+
*/
|
|
320
|
+
declare const createCacheContext: (config?: CacheConfig) => CacheContext;
|
|
321
|
+
/**
|
|
322
|
+
* Returns a globally shared cache context.
|
|
323
|
+
* Useful for CLI and long-running processes to avoid redundant initializations.
|
|
324
|
+
*/
|
|
325
|
+
declare const getCacheContext: (config?: CacheConfig) => CacheContext;
|
|
326
|
+
/**
|
|
327
|
+
* Resets the global cache singleton to null.
|
|
328
|
+
* Call this in tests between runs to get a clean slate without restarting the process.
|
|
329
|
+
*/
|
|
330
|
+
declare const resetGlobalCache: () => void;
|
|
331
|
+
|
|
332
|
+
declare function createRuntimeCache(config: NormalizedAnalyzerConfig, cwd: string, options?: {
|
|
333
|
+
allowDisabled?: boolean;
|
|
334
|
+
}): CacheContext | undefined;
|
|
335
|
+
|
|
336
|
+
export { type AstCache, CACHE_KEY_PREFIX, CACHE_VERSION, type CacheConfig, type CacheContext, type CacheInfo, type CacheKeyContext, type ConfigCache, type FileCache, type FileMeta, type MetaCache, type PlanCache, type ResultCache, SCHEMA_VERSION, SerializationError, type SourceCache, buildCacheKeyContext, computeHash, createCacheContext, createRuntimeCache, getCacheContext, initHasher, resetGlobalCache, serializeCacheKeyContext, stableSerialize };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import mt from'crypto';import ht from'xxhash-wasm';import {createRequire}from'module';import {CACHE_VERSION,PACKAGE_VERSION,debug}from'@ngcompass/common';import y from'path';import {LRUCache}from'lru-cache';import S from'cacache';import q from'v8';import x from'fs/promises';import St from'write-file-atomic';var W="1.0.0",jt=1,B="v1.0.0-s1";var M,ft=async()=>{if(M)return;let{h64:t}=await ht();M=a=>t(a).toString(16).padStart(16,"0");},J=t=>{if(M)return M(t);let a=mt.createHash("sha256");return a.update(t),a.digest("hex")};var g=class extends Error{path;constructor(a,e){super(a),this.path=e,this.name="SerializationError";}};function k(t,a=[],e=new WeakSet){if(t===null)return "null";if(t===void 0)throw new g("undefined is not a valid hash input",a);switch(typeof t){case "boolean":return t?"true":"false";case "number":if(!Number.isFinite(t))throw new g(`Non-finite number (${String(t)}) is not a valid hash input`,a);return String(t);case "string":return JSON.stringify(t);case "function":throw new g("Functions are not valid hash inputs",a)}if(t instanceof Date)return JSON.stringify(t.toISOString());if(t instanceof RegExp)return JSON.stringify(t.toString());if(typeof t=="object"){let o;if(e.has(t))throw new g(`Circular reference detected at path: ${a.join(".")||"(root)"}`,a);if(e.add(t),Array.isArray(t))o="["+t.map((n,r)=>k(n,[...a,String(r)],e)).join(",")+"]";else {let n=Object.keys(t).sort(),r=[];for(let s of n){let i=t[s];i!==void 0&&r.push(JSON.stringify(s)+":"+k(i,[...a,s],e));}o="{"+r.join(",")+"}";}return e.delete(t),o}return JSON.stringify(t)}function Pt(t){return Object.freeze({toolVersion:PACKAGE_VERSION,schemaVersion:CACHE_VERSION,ruleRegistryHash:J(k([...t].sort())),parserVersion:(function(){try{let a=createRequire(import.meta.url)("oxc-parser/package.json");return String(a.version??"unknown")}catch{return "unknown"}})(),platform:process.platform})}function Rt(t){return [t.toolVersion,t.schemaVersion,t.parserVersion,t.ruleRegistryHash,t.platform].join("::")}var A=(t={})=>{let a=new LRUCache({max:t.maxItems??500,maxSize:t.maxSize??52428800,sizeCalculation:e=>{try{return JSON.stringify(e).length}catch{return 1e3}},ttl:t.ttl});return {get:e=>a.get(e),set:(e,o)=>{a.set(e,o);},has:e=>a.has(e),delete:e=>{a.delete(e);},clear:()=>a.clear(),getStats:()=>({entries:a.size,size:a.calculatedSize})}};async function F(t){let a=0,e=0;try{await x.access(t);}catch{return {entries:0,size:0}}async function o(n){for(let r of await x.readdir(n,{withFileTypes:true})){let s=y.join(n,r.name);if(r.isDirectory())await o(s);else {a++;let i=await x.stat(s);e+=i.size;}}}try{await o(t);}catch{}return {entries:a,size:e}}var v=t=>{let a=t.path;return {get:async e=>{try{let o=performance.now(),n=await S.get(a,e),r=performance.now(),s=performance.now(),i=q.deserialize(n.data),l=performance.now();return process.env.DEBUG_CACHE&&process.stdout.write(`[disk-driver] read: ${(r-o).toFixed(2)}ms, deser: ${(l-s).toFixed(2)}ms, size: ${(n.data.length/1024).toFixed(1)}KB
|
|
2
|
+
`),i}catch(o){if((typeof o=="object"&&o!==null&&"code"in o?o.code:void 0)==="ENOENT")return;try{await S.rm.entry(a,e);}catch{}return}},set:async(e,o)=>{let n=q.serialize(o);await S.put(a,e,n);},has:async e=>{try{return !!await S.get.info(a,e)}catch{return false}},delete:async e=>{await S.rm.entry(a,e);},clear:async()=>{await S.rm.all(a);},prune:async()=>{await S.verify(a);},getStats:async()=>F(a)}};var U=t=>{let a=t.path+".pack",e=new Map,o=false,n=async()=>{if(!o){o=true;try{let s=await x.readFile(a);for(let[i,l]of q.deserialize(s))e.set(i,l);}catch{}}},r=async()=>{let s=y.dirname(a);await x.mkdir(s,{recursive:true});let i=q.serialize(e),l=a+".tmp";await x.writeFile(l,i),await x.rename(l,a);};return {get:async s=>(await n(),e.get(s)),set:async(s,i)=>{await n(),e.set(s,i),await r();},has:async s=>(await n(),e.has(s)),delete:async s=>{await n(),e.delete(s),await r();},clear:async()=>{e.clear(),o=true;try{await x.unlink(a);}catch{}try{await x.unlink(a+".tmp");}catch{}},getStats:async()=>{await n();let s=0;try{s=(await x.stat(a)).size;}catch{}return {entries:e.size,size:s}},bulkSet:async s=>{for(let[i,l]of(await n(),s))e.set(i,l);await r();}}};var X=t=>{let a=t.path,e=null,o=null,n=0,r=m=>y.join(a,`${m}.json`),s=async()=>{try{await x.mkdir(a,{recursive:!0});}catch{}},i=m=>m.endsWith(".json"),l=m=>m.slice(0,-5),c=async m=>{try{return await x.readdir(m)}catch{return []}},h=async m=>{try{return await x.readFile(m,"utf-8")}catch{return}},f=async m=>{try{await x.unlink(m);}catch{}},u=async m=>{try{await x.rm(m,{recursive:!0,force:!0});}catch{}},w=m=>{e&&e.delete(m);},j=async()=>{o&&await o;},D=async()=>{if(!e){if(!o){let m=n;o=(async()=>{try{await s();let d=(await c(a)).filter(i).map(l);n===m&&(e=new Set(d));}finally{o=null,e||(e=new Set);}})();}await o;}},$=async m=>{await j(),e&&e.add(m);},I=async m=>{await j(),e&&e.delete(m);};return {get:async m=>{if(e&&!e.has(m))return;let d=r(m),p=await h(d);if(p===void 0)return void w(m);try{return JSON.parse(p)}catch{w(m);return}},set:async(m,d)=>{await s();let p=r(m);await St(p,JSON.stringify(d),{encoding:"utf-8"}),(e||o)&&await $(m);},has:async m=>(await D(),e.has(m)),delete:async m=>{await f(r(m)),(e||o)&&await I(m);},clear:async()=>{await u(a),await s(),n+=1,e=new Set;},getStats:async()=>F(a)}};var Y=t=>{let a=y.join(t.path,"meta.json"),e=null,o=null,n=null,r=null,s=async()=>{if(!e)return o||(o=(async()=>{try{await x.mkdir(t.path,{recursive:!0});let c=await x.readFile(a,"utf-8"),h=JSON.parse(c);e=h&&typeof h=="object"?new Map(Object.entries(h)):new Map;}catch{e=new Map;}finally{o=null;}})())},i=async()=>{n&&(clearTimeout(n),n=null),e&&(r&&await r,r=(async()=>{try{await x.mkdir(t.path,{recursive:!0});let c=Object.fromEntries(e);await St(a,JSON.stringify(c));}catch(c){let h=c instanceof Error?c.message:String(c);debug("cache",`Failed to flush metadata cache to ${a}: ${h}`);}finally{r=null;}})(),await r);},l=()=>{n||(n=setTimeout(()=>{n=null,i();},2e3)).unref();};return {get:async c=>(await s(),e.get(c)),set:async(c,h)=>{await s(),e.set(c,h),l();},has:async c=>(await s(),e.has(c)),delete:async c=>{await s(),e.delete(c)&&l();},clear:async()=>{n&&(clearTimeout(n),n=null),e=new Map;try{await x.unlink(a);}catch{}},getStats:async()=>(await s(),{entries:e.size,size:0}),flush:i}};var Q=t=>({get:a=>t.get(a),set:(a,e)=>t.set(a,e),has:a=>t.has(a)});var Z=(t,a)=>({get:async e=>{let o=t.get(e);if(o)return o;try{let n=await a.get(e);if(n)return t.set(e,n),n}catch(n){debug("cache",`Failed to read AST from L2 for ${e}: ${n instanceof Error?n.message:String(n)}`);}},set:async(e,o)=>{t.set(e,o),await a.set(e,o);},invalidate:async e=>{t.delete(e),await a.delete(e);}});var V=t=>{let a=r=>`${r}.meta`,e=async r=>{let s=a(r),i=await t.get(s);if(i)return i;let l={taskId:r,timestamp:Date.now(),hits:0,lastAccess:Date.now()};return await t.set(s,l),l},o=async r=>{let s=await e(r),i={...s,hits:s.hits+1,lastAccess:Date.now()};await t.set(a(r),i);},n=new Map;return {get:async r=>{if(n.has(r))return n.get(r);let s=await t.get(r);return s!==void 0&&o(r).catch(i=>{debug("cache",`incrementHits failed for ${r}: ${i instanceof Error?i.message:String(i)}`);}),s},set:async(r,s)=>{await t.set(r,s),await e(r);},has:async r=>!!n.has(r)||t.has(r),delete:async r=>{n.delete(r),await t.delete(r);try{await t.delete(a(r));}catch(s){debug("cache",`Failed to delete metadata for ${r}: ${s instanceof Error?s.message:String(s)}`);}},getMany:async r=>{if(r.length===0)return new Map;let s=new Map;for(let i=0;i<r.length;i+=200){let l=r.slice(i,i+200);await Promise.all(l.map(async c=>{if(n.has(c))return void s.set(c,n.get(c));let h=await t.get(c);h!==void 0&&(s.set(c,h),o(c).catch(f=>{debug("cache",`incrementHits failed for ${c}: ${f instanceof Error?f.message:String(f)}`);}));}));}return s},setMany:async r=>{if(r.length!==0){for(let[s,i]of r)n.set(s,i);debug("cache",`Buffered ${r.length} results (total pending: ${n.size})`);}},hasMany:async r=>{if(r.length===0)return new Set;if(!r.some(i=>n.has(i)))try{if((await t.getStats()).entries===0)return new Set}catch{return new Set}let s=new Set;for(let i=0;i<r.length;i+=200){let l=r.slice(i,i+200);await Promise.all(l.map(async c=>{(n.has(c)||await t.has(c))&&s.add(c);}));}return s},getWithMetadata:async r=>{let s=n.has(r)?n.get(r):await t.get(r);if(s===void 0)return;let i=await e(r);return await o(r),{result:s,metadata:i}},getManyWithMetadata:async r=>{if(r.length===0)return new Map;let s=new Map,i=[];for(let l=0;l<r.length;l+=200){let c=r.slice(l,l+200);await Promise.all(c.map(async h=>{let f=n.has(h)?n.get(h):await t.get(h);if(f!==void 0){let u=await e(h),w={...u,hits:u.hits+1,lastAccess:Date.now()};s.set(h,{result:f,metadata:w}),i.push([h,w]);}}));}if(i.length>0)for(let l=0;l<i.length;l+=200){let c=i.slice(l,l+200);await Promise.all(c.map(async([h,f])=>{await t.set(a(h),f);}));}return s},updateMetadata:async(r,s)=>{let i={...await t.get(a(r))??await e(r),...s};await t.set(a(r),i);},flush:async()=>{if(n.size===0)return;let r=[...n.entries()];n.clear();let s=Date.now();if(t.bulkSet){let i=[];for(let[l,c]of r)i.push([l,c]),i.push([a(l),{taskId:l,timestamp:s,hits:0,lastAccess:s}]);await t.bulkSet(i);}else for(let i=0;i<r.length;i+=200){let l=r.slice(i,i+200);await Promise.all(l.map(([c,h])=>t.set(c,h))),await Promise.all(l.map(([c])=>t.set(a(c),{taskId:c,timestamp:s,hits:0,lastAccess:s})));}debug("cache",`Flushed ${r.length} buffered results to disk`);}}};var tt=t=>({get:async a=>t.get(a),set:async(a,e)=>{await t.set(a,e);}});var et=t=>({get:a=>t.get(a),set:(a,e)=>t.set(a,e),delete:a=>t.delete(a),flush:async()=>{typeof t.flush=="function"&&await t.flush();}});var at=t=>({get:a=>t.get(a),set:(a,e)=>t.set(a,e),delete:a=>t.delete(a)});var rt=t=>({get:a=>t.get(a),set:(a,e)=>t.set(a,{files:e,timestamp:Date.now()})});var st=(t,a=B)=>{let e=mt.createHash("sha256");return e.update(t),a&&e.update(a),e.digest("hex")};var C=(t,a)=>{let e=A({maxItems:t,ttl:a});return {get:async o=>e.get(o),set:async(o,n)=>{e.set(o,n);},has:async o=>e.has(o),delete:async o=>{e.delete(o);},clear:async()=>{e.clear();},getStats:async()=>e.getStats()}},T=(t={})=>{let a=process.cwd(),e=y.resolve(a,"node_modules",".cache","ngcompass"),o=!t.disk?.path,n=t.disk?.path??"[memory]",r=A({maxItems:t.memory?.maxItems}),s=A({maxItems:200}),i=o?C(t.memory?.maxItems,t.memory?.ttl):v({path:y.join(t.disk?.path??e,"ast"),ttl:t.disk?.ttl}),l=o?C(t.memory?.maxItems,t.memory?.ttl):U({path:y.join(t.disk?.path??e,"results")}),c=o?C(t.memory?.maxItems,t.memory?.ttl):X({path:y.join(t.disk?.path??e,"config")}),h=o?C(t.memory?.maxItems,t.memory?.ttl):Y({path:y.join(t.disk?.path??e,"meta")}),f=o?C(t.memory?.maxItems,t.memory?.ttl):v({path:y.join(t.disk?.path??e,"plans"),ttl:t.disk?.ttl}),u=o?C(t.memory?.maxItems,t.memory?.ttl):v({path:y.join(t.disk?.path??e,"files"),ttl:t.disk?.ttl}),w=Q(r),j=Z(s,i),D=V(l),$=tt(c),I=et(h),m=at(f),d=rt(u),p=o?C(t.memory?.maxItems,t.memory?.ttl):v({path:y.join(t.disk?.path??e,"analysis"),ttl:t.disk?.ttl}),K=V(p),G=async()=>{r.clear(),s.clear(),await i.clear(),await l.clear(),await c.clear(),await h.clear(),await f.clear(),await u.clear(),await p.clear();};return {sources:w,asts:j,results:D,configs:$,metas:I,plans:m,files:d,analysis:K,computeHash:st,prune:async()=>{"prune"in i&&typeof i.prune=="function"&&await i.prune();},clear:G,clearType:async z=>{switch(z){case "ast":s.clear(),await i.clear();break;case "config":await c.clear();break;case "results":await l.clear(),await p.clear();break;case "all":await G();}},flush:async()=>{await Promise.all([D.flush(),K.flush(),I.flush()]);},getCachePath:()=>n,getInfo:async()=>{let z=s.getStats(),[N,P,R,it,nt,ot,ct]=await Promise.all([i.getStats(),c.getStats(),l.getStats(),h.getStats(),f.getStats(),u.getStats(),p.getStats()]),lt=z.size+N.size+P.size+R.size+it.size+nt.size+ot.size+ct.size;return {ast:{l1:{entries:z.entries,maxEntries:200,size:z.size},l2:{entries:N.entries,size:N.size}},config:{entries:P.entries,size:P.size},results:{entries:R.entries,size:R.size},totalSize:lt,location:n,version:W}}}},O=null,Ne=t=>(O||(O=T(t)),O),Pe=()=>{O=null;};function Ve(t,a,e={}){if(!t.cache.enabled&&!e.allowDisabled)return;let o=y.resolve(a,t.cache.location);return T({memory:t.cache.strategy==="memory"?{ttl:t.cache.ttl}:void 0,disk:t.cache.strategy==="memory"?void 0:{path:o,ttl:t.cache.ttl}})}export{B as CACHE_KEY_PREFIX,W as CACHE_VERSION,jt as SCHEMA_VERSION,g as SerializationError,Pt as buildCacheKeyContext,J as computeHash,T as createCacheContext,Ve as createRuntimeCache,Ne as getCacheContext,ft as initHasher,Pe as resetGlobalCache,Rt as serializeCacheKeyContext,k as stableSerialize};//# sourceMappingURL=index.js.map
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/hashing.ts","../src/utils/stable-serialize.ts","../src/key-context.ts","../src/drivers/memory.ts","../src/utils/fs.ts","../src/drivers/disk.ts","../src/drivers/packed.ts","../src/drivers/atomic.ts","../src/drivers/json-file.ts","../src/services/source-cache.ts","../src/services/ast-cache.ts","../src/services/result-cache.ts","../src/services/config-cache.ts","../src/services/meta-cache.ts","../src/services/plan-cache.ts","../src/services/file-cache.ts","../src/services/hashing.ts","../src/context.ts","../src/runtime-cache.ts"],"names":["CACHE_VERSION","SCHEMA_VERSION","CACHE_KEY_PREFIX","h64","initHasher","hasher","xxhash","input","toString","padStart","computeHash","content","crypto","createHash","update","digest","SerializationError","Error","message","path","name","stableSerialize","value","_path","_seen","WeakSet","undefined","Number","isFinite","String","JSON","stringify","Date","toISOString","RegExp","result","has","join","add","Array","isArray","map","v","i","sortedKeys","Object","keys","sort","pairs","k","push","delete","buildCacheKeyContext","ruleNames","freeze","toolVersion","PACKAGE_VERSION","schemaVersion","ruleRegistryHash","parserVersion","pkg","createRequire","url","version","platform","process","serializeCacheKeyContext","ctx","createMemoryDriver","config","cache","LRUCache","max","maxItems","maxSize","sizeCalculation","length","ttl","get","key","set","clear","getStats","entries","size","calculatedSize","getDirectoryStats","dirPath","fs","access","traverse","currentPath","file","readdir","withFileTypes","fullPath","isDirectory","stats","stat","createDiskDriver","cachePath","tReadStart","performance","now","cacache","tReadEnd","tDeserStart","deserialized","v8","deserialize","data","tDeserEnd","env","DEBUG_CACHE","stdout","write","toFixed","err","code","rm","entry","buffer","serialize","put","info","all","prune","verify","createPackedFileDriver","filePath","Map","loaded","ensureLoaded","buf","readFile","save","dir","dirname","mkdir","recursive","tmp","writeFile","rename","unlink","bulkSet","createAtomicDriver","cacheDir","catalog","catalogPromise","catalogGeneration","getFilePath","ensureDir","isJsonFile","fileName","endsWith","stripJsonExtension","slice","safeReadDir","tryReadJsonFile","tryUnlink","tryRemoveDir","force","markMissingInCatalog","awaitCatalogInitIfInFlight","ensureCatalog","localGeneration","filter","Set","syncCatalogAfterSet","syncCatalogAfterDelete","parse","writeFileAtomic","encoding","createJsonFileDriver","loadPromise","saveTimeout","savePromise","load","flush","clearTimeout","fromEntries","msg","debug","scheduleSave","setTimeout","unref","createSourceCache","driver","hash","createAstCache","l1","l2","hot","cold","error","invalidate","createResultCache","getMetadataKey","getOrCreateMetadata","metaKey","existing","newMeta","taskId","timestamp","hits","lastAccess","incrementHits","meta","updated","pendingWrites","catch","getMany","hashes","results","batch","Promise","setMany","hasMany","some","h","getWithMetadata","metadata","getManyWithMetadata","metadataUpdates","updateMetadata","updates","createConfigCache","report","createMetaCache","createPlanCache","plan","createFileCache","files","computeCompositeHash","salt","createAsyncMemoryDriver","createCacheContext","cwd","defaultBaseDir","resolve","useMemoryOnly","disk","cacheLocation","sourceDriver","memory","astL1","astL2","resultDriver","configDriver","metaDriver","planDriver","fileDriver","sources","asts","configs","metas","plans","analysisDriver","analysis","clearAllDrivers","clearType","type","getCachePath","getInfo","astL1Stats","astL2Stats","configStats","resultStats","metaStats","planStats","fileStats","analysisStats","totalSize","ast","maxEntries","location","globalCache","getCacheContext","resetGlobalCache","createRuntimeCache","options","enabled","allowDisabled","strategy"],"mappings":"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","file":"index.js","sourcesContent":["export const CACHE_VERSION = '1.0.0';\nexport const SCHEMA_VERSION = 1;\nexport const CACHE_KEY_PREFIX = \"v1.0.0-s1\";\n","let h64;\nimport t from 'node:crypto';\nimport r from 'xxhash-wasm';\nexport const initHasher = async ()=>{\n if (h64) return;\n let { h64: t } = await r();\n h64 = (r)=>t(r).toString(16).padStart(16, '0');\n};\nexport const computeHash = (r)=>{\n if (h64) return h64(r);\n let e = t.createHash('sha256');\n return e.update(r), e.digest('hex');\n};\n","export class SerializationError extends Error {\n path;\n constructor(r, i){\n super(r), this.path = i, this.name = 'SerializationError';\n }\n}\nexport function stableSerialize(r, i = [], e = new WeakSet()) {\n if (null === r) return 'null';\n if (void 0 === r) throw new SerializationError('undefined is not a valid hash input', i);\n switch(typeof r){\n case 'boolean':\n return r ? 'true' : 'false';\n case 'number':\n if (!Number.isFinite(r)) throw new SerializationError(`Non-finite number (${String(r)}) is not a valid hash input`, i);\n return String(r);\n case 'string':\n return JSON.stringify(r);\n case 'function':\n throw new SerializationError('Functions are not valid hash inputs', i);\n }\n if (r instanceof Date) return JSON.stringify(r.toISOString());\n if (r instanceof RegExp) return JSON.stringify(r.toString());\n if ('object' == typeof r) {\n let t;\n if (e.has(r)) throw new SerializationError(`Circular reference detected at path: ${i.join('.') || '(root)'}`, i);\n if (e.add(r), Array.isArray(r)) t = '[' + r.map((r, t)=>stableSerialize(r, [\n ...i,\n String(t)\n ], e)).join(',') + ']';\n else {\n let n = Object.keys(r).sort(), a = [];\n for (let t of n){\n let n = r[t];\n void 0 !== n && a.push(JSON.stringify(t) + ':' + stableSerialize(n, [\n ...i,\n t\n ], e));\n }\n t = '{' + a.join(',') + '}';\n }\n return e.delete(r), t;\n }\n return JSON.stringify(r);\n}\n","import { createRequire as r } from 'node:module';\nimport { PACKAGE_VERSION as e, CACHE_VERSION as o } from '@ngcompass/common';\nimport { computeHash as t } from './hashing.js';\nimport { stableSerialize as n } from './utils/stable-serialize.js';\nexport function buildCacheKeyContext(s) {\n return Object.freeze({\n toolVersion: e,\n schemaVersion: o,\n ruleRegistryHash: t(n([\n ...s\n ].sort())),\n parserVersion: function() {\n try {\n let e = r(import.meta.url)('oxc-parser/package.json');\n return String(e.version ?? 'unknown');\n } catch {\n return 'unknown';\n }\n }(),\n platform: process.platform\n });\n}\nexport function serializeCacheKeyContext(r) {\n return [\n r.toolVersion,\n r.schemaVersion,\n r.parserVersion,\n r.ruleRegistryHash,\n r.platform\n ].join('::');\n}\n","import { LRUCache as e } from 'lru-cache';\nexport const createMemoryDriver = (t = {})=>{\n let r = new e({\n max: t.maxItems ?? 500,\n maxSize: t.maxSize ?? 52428800,\n sizeCalculation: (e)=>{\n try {\n return JSON.stringify(e).length;\n } catch {\n return 1000;\n }\n },\n ttl: t.ttl\n });\n return {\n get: (e)=>r.get(e),\n set: (e, t)=>{\n r.set(e, t);\n },\n has: (e)=>r.has(e),\n delete: (e)=>{\n r.delete(e);\n },\n clear: ()=>r.clear(),\n getStats: ()=>({\n entries: r.size,\n size: r.calculatedSize\n })\n };\n};\n","import t from 'node:fs/promises';\nimport e from 'node:path';\nexport async function getDirectoryStats(i) {\n let a = 0, r = 0;\n try {\n await t.access(i);\n } catch {\n return {\n entries: 0,\n size: 0\n };\n }\n async function o(i) {\n for (let s of (await t.readdir(i, {\n withFileTypes: !0\n }))){\n let n = e.join(i, s.name);\n if (s.isDirectory()) await o(n);\n else {\n a++;\n let e = await t.stat(n);\n r += e.size;\n }\n }\n }\n try {\n await o(i);\n } catch {}\n return {\n entries: a,\n size: r\n };\n}\n","import e from 'cacache';\nimport r from 'node:v8';\nimport { getDirectoryStats as t } from '../utils/fs.js';\nexport const createDiskDriver = (a)=>{\n let n = a.path;\n return {\n get: async (t)=>{\n try {\n let a = performance.now(), i = await e.get(n, t), o = performance.now(), c = performance.now(), s = r.deserialize(i.data), d = performance.now();\n return process.env.DEBUG_CACHE && process.stdout.write(`[disk-driver] read: ${(o - a).toFixed(2)}ms, deser: ${(d - c).toFixed(2)}ms, size: ${(i.data.length / 1024).toFixed(1)}KB\\n`), s;\n } catch (r) {\n if ('ENOENT' === ('object' == typeof r && null !== r && 'code' in r ? r.code : void 0)) return;\n try {\n await e.rm.entry(n, t);\n } catch {}\n return;\n }\n },\n set: async (t, a)=>{\n let i = r.serialize(a);\n await e.put(n, t, i);\n },\n has: async (r)=>{\n try {\n return !!await e.get.info(n, r);\n } catch {\n return !1;\n }\n },\n delete: async (r)=>{\n await e.rm.entry(n, r);\n },\n clear: async ()=>{\n await e.rm.all(n);\n },\n prune: async ()=>{\n await e.verify(n);\n },\n getStats: async ()=>t(n)\n };\n};\n","import a from 'node:fs/promises';\nimport t from 'node:v8';\nimport e from 'node:path';\nexport const createPackedFileDriver = (i)=>{\n let r = i.path + '.pack', s = new Map(), c = !1, n = async ()=>{\n if (!c) {\n c = !0;\n try {\n let e = await a.readFile(r);\n for (let [a, i] of t.deserialize(e))s.set(a, i);\n } catch {}\n }\n }, l = async ()=>{\n let i = e.dirname(r);\n await a.mkdir(i, {\n recursive: !0\n });\n let c = t.serialize(s), n = r + '.tmp';\n await a.writeFile(n, c), await a.rename(n, r);\n };\n return {\n get: async (a)=>(await n(), s.get(a)),\n set: async (a, t)=>{\n await n(), s.set(a, t), await l();\n },\n has: async (a)=>(await n(), s.has(a)),\n delete: async (a)=>{\n await n(), s.delete(a), await l();\n },\n clear: async ()=>{\n s.clear(), c = !0;\n try {\n await a.unlink(r);\n } catch {}\n try {\n await a.unlink(r + '.tmp');\n } catch {}\n },\n getStats: async ()=>{\n await n();\n let t = 0;\n try {\n t = (await a.stat(r)).size;\n } catch {}\n return {\n entries: s.size,\n size: t\n };\n },\n bulkSet: async (a)=>{\n for (let [t, e] of (await n(), a))s.set(t, e);\n await l();\n }\n };\n};\n","import a from 'write-file-atomic';\nimport t from 'node:fs/promises';\nimport e from 'node:path';\nimport { getDirectoryStats as r } from '../utils/fs.js';\nexport const createAtomicDriver = (i)=>{\n let n = i.path, c = null, s = null, y = 0, w = (a)=>e.join(n, `${a}.json`), l = async ()=>{\n try {\n await t.mkdir(n, {\n recursive: !0\n });\n } catch {}\n }, o = (a)=>a.endsWith('.json'), u = (a)=>a.slice(0, -5), f = async (a)=>{\n try {\n return await t.readdir(a);\n } catch {\n return [];\n }\n }, d = async (a)=>{\n try {\n return await t.readFile(a, 'utf-8');\n } catch {\n return;\n }\n }, m = async (a)=>{\n try {\n await t.unlink(a);\n } catch {}\n }, h = async (a)=>{\n try {\n await t.rm(a, {\n recursive: !0,\n force: !0\n });\n } catch {}\n }, p = (a)=>{\n c && c.delete(a);\n }, S = async ()=>{\n s && await s;\n }, v = async ()=>{\n if (!c) {\n if (!s) {\n let a = y;\n s = (async ()=>{\n try {\n await l();\n let t = (await f(n)).filter(o).map(u);\n y === a && (c = new Set(t));\n } finally{\n s = null, c || (c = new Set());\n }\n })();\n }\n await s;\n }\n }, g = async (a)=>{\n await S(), c && c.add(a);\n }, j = async (a)=>{\n await S(), c && c.delete(a);\n };\n return {\n get: async (a)=>{\n if (c && !c.has(a)) return;\n let t = w(a), e = await d(t);\n if (void 0 === e) return void p(a);\n try {\n return JSON.parse(e);\n } catch {\n p(a);\n return;\n }\n },\n set: async (t, e)=>{\n await l();\n let r = w(t);\n await a(r, JSON.stringify(e), {\n encoding: 'utf-8'\n }), (c || s) && await g(t);\n },\n has: async (a)=>(await v(), c.has(a)),\n delete: async (a)=>{\n await m(w(a)), (c || s) && await j(a);\n },\n clear: async ()=>{\n await h(n), await l(), y += 1, c = new Set();\n },\n getStats: async ()=>r(n)\n };\n};\n","import a from 'node:fs/promises';\nimport e from 'node:path';\nimport t from 'write-file-atomic';\nimport { debug as i } from '@ngcompass/common';\nexport const createJsonFileDriver = (n)=>{\n let r = e.join(n.path, 'meta.json'), l = null, s = null, c = null, o = null, m = async ()=>{\n if (!l) return s || (s = (async ()=>{\n try {\n await a.mkdir(n.path, {\n recursive: !0\n });\n let e = await a.readFile(r, 'utf-8'), t = JSON.parse(e);\n l = t && 'object' == typeof t ? new Map(Object.entries(t)) : new Map();\n } catch {\n l = new Map();\n } finally{\n s = null;\n }\n })());\n }, u = async ()=>{\n c && (clearTimeout(c), c = null), l && (o && await o, o = (async ()=>{\n try {\n await a.mkdir(n.path, {\n recursive: !0\n });\n let e = Object.fromEntries(l);\n await t(r, JSON.stringify(e));\n } catch (e) {\n let a = e instanceof Error ? e.message : String(e);\n i('cache', `Failed to flush metadata cache to ${r}: ${a}`);\n } finally{\n o = null;\n }\n })(), await o);\n }, p = ()=>{\n c || (c = setTimeout(()=>{\n c = null, u();\n }, 2000)).unref();\n };\n return {\n get: async (a)=>(await m(), l.get(a)),\n set: async (a, e)=>{\n await m(), l.set(a, e), p();\n },\n has: async (a)=>(await m(), l.has(a)),\n delete: async (a)=>{\n await m(), l.delete(a) && p();\n },\n clear: async ()=>{\n c && (clearTimeout(c), c = null), l = new Map();\n try {\n await a.unlink(r);\n } catch {}\n },\n getStats: async ()=>(await m(), {\n entries: l.size,\n size: 0\n }),\n flush: u\n };\n};\n","export const createSourceCache = (e)=>({\n get: (t)=>e.get(t),\n set: (t, s)=>e.set(t, s),\n has: (t)=>e.has(t)\n });\n","import { debug as e } from '@ngcompass/common';\nexport const createAstCache = (t, a)=>({\n get: async (r)=>{\n let s = t.get(r);\n if (s) return s;\n try {\n let e = await a.get(r);\n if (e) return t.set(r, e), e;\n } catch (t) {\n e('cache', `Failed to read AST from L2 for ${r}: ${t instanceof Error ? t.message : String(t)}`);\n }\n },\n set: async (e, r)=>{\n t.set(e, r), await a.set(e, r);\n },\n invalidate: async (e)=>{\n t.delete(e), await a.delete(e);\n }\n });\n","import { debug as t } from '@ngcompass/common';\nexport const createResultCache = (e)=>{\n let a = (t)=>`${t}.meta`, s = async (t)=>{\n let s = a(t), i = await e.get(s);\n if (i) return i;\n let n = {\n taskId: t,\n timestamp: Date.now(),\n hits: 0,\n lastAccess: Date.now()\n };\n return await e.set(s, n), n;\n }, i = async (t)=>{\n let i = await s(t), n = {\n ...i,\n hits: i.hits + 1,\n lastAccess: Date.now()\n };\n await e.set(a(t), n);\n }, n = new Map();\n return {\n get: async (a)=>{\n if (n.has(a)) return n.get(a);\n let s = await e.get(a);\n return void 0 !== s && i(a).catch((e)=>{\n t('cache', `incrementHits failed for ${a}: ${e instanceof Error ? e.message : String(e)}`);\n }), s;\n },\n set: async (t, a)=>{\n await e.set(t, a), await s(t);\n },\n has: async (t)=>!!n.has(t) || e.has(t),\n delete: async (s)=>{\n n.delete(s), await e.delete(s);\n try {\n await e.delete(a(s));\n } catch (e) {\n t('cache', `Failed to delete metadata for ${s}: ${e instanceof Error ? e.message : String(e)}`);\n }\n },\n getMany: async (a)=>{\n if (0 === a.length) return new Map();\n let s = new Map();\n for(let l = 0; l < a.length; l += 200){\n let r = a.slice(l, l + 200);\n await Promise.all(r.map(async (a)=>{\n if (n.has(a)) return void s.set(a, n.get(a));\n let l = await e.get(a);\n void 0 !== l && (s.set(a, l), i(a).catch((e)=>{\n t('cache', `incrementHits failed for ${a}: ${e instanceof Error ? e.message : String(e)}`);\n }));\n }));\n }\n return s;\n },\n setMany: async (e)=>{\n if (0 !== e.length) {\n for (let [t, a] of e)n.set(t, a);\n t('cache', `Buffered ${e.length} results (total pending: ${n.size})`);\n }\n },\n hasMany: async (t)=>{\n if (0 === t.length) return new Set();\n if (!t.some((t)=>n.has(t))) try {\n let t = await e.getStats();\n if (0 === t.entries) return new Set();\n } catch {\n return new Set();\n }\n let a = new Set();\n for(let s = 0; s < t.length; s += 200){\n let i = t.slice(s, s + 200);\n await Promise.all(i.map(async (t)=>{\n n.has(t) ? a.add(t) : await e.has(t) && a.add(t);\n }));\n }\n return a;\n },\n getWithMetadata: async (t)=>{\n let a = n.has(t) ? n.get(t) : await e.get(t);\n if (void 0 === a) return;\n let l = await s(t);\n return await i(t), {\n result: a,\n metadata: l\n };\n },\n getManyWithMetadata: async (t)=>{\n if (0 === t.length) return new Map();\n let i = new Map(), l = [];\n for(let a = 0; a < t.length; a += 200){\n let r = t.slice(a, a + 200);\n await Promise.all(r.map(async (t)=>{\n let a = n.has(t) ? n.get(t) : await e.get(t);\n if (void 0 !== a) {\n let e = await s(t), n = {\n ...e,\n hits: e.hits + 1,\n lastAccess: Date.now()\n };\n i.set(t, {\n result: a,\n metadata: n\n }), l.push([\n t,\n n\n ]);\n }\n }));\n }\n if (l.length > 0) for(let t = 0; t < l.length; t += 200){\n let s = l.slice(t, t + 200);\n await Promise.all(s.map(async ([t, s])=>{\n await e.set(a(t), s);\n }));\n }\n return i;\n },\n updateMetadata: async (t, i)=>{\n let n = {\n ...await e.get(a(t)) ?? await s(t),\n ...i\n };\n await e.set(a(t), n);\n },\n flush: async ()=>{\n if (0 === n.size) return;\n let s = [\n ...n.entries()\n ];\n n.clear();\n let i = Date.now();\n if (e.bulkSet) {\n let t = [];\n for (let [e, n] of s)t.push([\n e,\n n\n ]), t.push([\n a(e),\n {\n taskId: e,\n timestamp: i,\n hits: 0,\n lastAccess: i\n }\n ]);\n await e.bulkSet(t);\n } else for(let t = 0; t < s.length; t += 200){\n let n = s.slice(t, t + 200);\n await Promise.all(n.map(([t, a])=>e.set(t, a))), await Promise.all(n.map(([t])=>e.set(a(t), {\n taskId: t,\n timestamp: i,\n hits: 0,\n lastAccess: i\n })));\n }\n t('cache', `Flushed ${s.length} buffered results to disk`);\n }\n };\n};\n","export const createConfigCache = (e)=>({\n get: async (t)=>e.get(t),\n set: async (t, a)=>{\n await e.set(t, a);\n }\n });\n","export const createMetaCache = (e)=>({\n get: (t)=>e.get(t),\n set: (t, s)=>e.set(t, s),\n delete: (t)=>e.delete(t),\n flush: async ()=>{\n 'function' == typeof e.flush && await e.flush();\n }\n });\n","export const createPlanCache = (e)=>({\n get: (t)=>e.get(t),\n set: (t, a)=>e.set(t, a),\n delete: (t)=>e.delete(t)\n });\n","export const createFileCache = (e)=>({\n get: (t)=>e.get(t),\n set: (t, a)=>e.set(t, {\n files: a,\n timestamp: Date.now()\n })\n });\n","import t from 'node:crypto';\nimport { CACHE_KEY_PREFIX as e } from '../constants.js';\nexport const computeCompositeHash = (o, r = e)=>{\n let s = t.createHash('sha256');\n return s.update(o), r && s.update(r), s.digest('hex');\n};\n","import e from 'path';\nimport { createMemoryDriver as t } from './drivers/memory.js';\nimport { createDiskDriver as a } from './drivers/disk.js';\nimport { createPackedFileDriver as s } from './drivers/packed.js';\nimport { createAtomicDriver as r } from './drivers/atomic.js';\nimport { createJsonFileDriver as i } from './drivers/json-file.js';\nimport { createSourceCache as c } from './services/source-cache.js';\nimport { createAstCache as m } from './services/ast-cache.js';\nimport { createResultCache as o } from './services/result-cache.js';\nimport { createConfigCache as l } from './services/config-cache.js';\nimport { createMetaCache as n } from './services/meta-cache.js';\nimport { createPlanCache as p } from './services/plan-cache.js';\nimport { createFileCache as y } from './services/file-cache.js';\nimport { computeCompositeHash as h } from './services/hashing.js';\nimport { CACHE_VERSION as f } from './constants.js';\nlet createAsyncMemoryDriver = (e, a)=>{\n let s = t({\n maxItems: e,\n ttl: a\n });\n return {\n get: async (e)=>s.get(e),\n set: async (e, t)=>{\n s.set(e, t);\n },\n has: async (e)=>s.has(e),\n delete: async (e)=>{\n s.delete(e);\n },\n clear: async ()=>{\n s.clear();\n },\n getStats: async ()=>s.getStats()\n };\n};\nexport const createCacheContext = (g = {})=>{\n let d = process.cwd(), v = e.resolve(d, 'node_modules', '.cache', 'ngcompass'), j = !g.disk?.path, u = g.disk?.path ?? '[memory]', k = t({\n maxItems: g.memory?.maxItems\n }), w = t({\n maxItems: 200\n }), x = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : a({\n path: e.join(g.disk?.path ?? v, 'ast'),\n ttl: g.disk?.ttl\n }), z = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : s({\n path: e.join(g.disk?.path ?? v, 'results')\n }), C = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : r({\n path: e.join(g.disk?.path ?? v, 'config')\n }), I = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : i({\n path: e.join(g.disk?.path ?? v, 'meta')\n }), S = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : a({\n path: e.join(g.disk?.path ?? v, 'plans'),\n ttl: g.disk?.ttl\n }), b = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : a({\n path: e.join(g.disk?.path ?? v, 'files'),\n ttl: g.disk?.ttl\n }), A = c(k), D = m(w, x), M = o(z), P = l(C), E = n(I), G = p(S), H = y(b), T = j ? createAsyncMemoryDriver(g.memory?.maxItems, g.memory?.ttl) : a({\n path: e.join(g.disk?.path ?? v, 'analysis'),\n ttl: g.disk?.ttl\n }), _ = o(T), q = async ()=>{\n k.clear(), w.clear(), await x.clear(), await z.clear(), await C.clear(), await I.clear(), await S.clear(), await b.clear(), await T.clear();\n };\n return {\n sources: A,\n asts: D,\n results: M,\n configs: P,\n metas: E,\n plans: G,\n files: H,\n analysis: _,\n computeHash: h,\n prune: async ()=>{\n 'prune' in x && 'function' == typeof x.prune && await x.prune();\n },\n clear: q,\n clearType: async (e)=>{\n switch(e){\n case 'ast':\n w.clear(), await x.clear();\n break;\n case 'config':\n await C.clear();\n break;\n case 'results':\n await z.clear(), await T.clear();\n break;\n case 'all':\n await q();\n }\n },\n flush: async ()=>{\n await Promise.all([\n M.flush(),\n _.flush(),\n E.flush()\n ]);\n },\n getCachePath: ()=>u,\n getInfo: async ()=>{\n let e = w.getStats(), [t, a, s, r, i, c, m] = await Promise.all([\n x.getStats(),\n C.getStats(),\n z.getStats(),\n I.getStats(),\n S.getStats(),\n b.getStats(),\n T.getStats()\n ]), o = e.size + t.size + a.size + s.size + r.size + i.size + c.size + m.size;\n return {\n ast: {\n l1: {\n entries: e.entries,\n maxEntries: 200,\n size: e.size\n },\n l2: {\n entries: t.entries,\n size: t.size\n }\n },\n config: {\n entries: a.entries,\n size: a.size\n },\n results: {\n entries: s.entries,\n size: s.size\n },\n totalSize: o,\n location: u,\n version: f\n };\n }\n };\n};\nlet globalCache = null;\nexport const getCacheContext = (e)=>(globalCache || (globalCache = createCacheContext(e)), globalCache);\nexport const resetGlobalCache = ()=>{\n globalCache = null;\n};\n","import e from 'node:path';\nimport { createCacheContext as t } from './context.js';\nexport function createRuntimeCache(c, o, a = {}) {\n if (!c.cache.enabled && !a.allowDisabled) return;\n let r = e.resolve(o, c.cache.location);\n return t({\n memory: 'memory' === c.cache.strategy ? {\n ttl: c.cache.ttl\n } : void 0,\n disk: 'memory' === c.cache.strategy ? void 0 : {\n path: r,\n ttl: c.cache.ttl\n }\n });\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ngcompass/cache",
|
|
3
|
+
"version": "0.1.1-beta",
|
|
4
|
+
"description": "Caching layer for ngcompass",
|
|
5
|
+
"sideEffects": false,
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
12
|
+
},
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"require": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"cacache": "^20.0.3",
|
|
25
|
+
"lru-cache": "^11.2.5",
|
|
26
|
+
"write-file-atomic": "^7.0.0",
|
|
27
|
+
"xxhash-wasm": "^1.1.0",
|
|
28
|
+
"@ngcompass/common": "0.1.1-beta"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"typescript": "5.9.3"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/cacache": "^20.0.0",
|
|
35
|
+
"@types/node": "^25.1.0",
|
|
36
|
+
"@types/write-file-atomic": "^4.0.3"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"angular",
|
|
40
|
+
"cache",
|
|
41
|
+
"ngcompass"
|
|
42
|
+
],
|
|
43
|
+
"author": "ngcompass",
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"build": "tsup",
|
|
50
|
+
"build:prod": "tsup --minify",
|
|
51
|
+
"dev": "tsup --watch",
|
|
52
|
+
"test": "vitest run ",
|
|
53
|
+
"test:watch": "vitest",
|
|
54
|
+
"typecheck": "tsc --noEmit",
|
|
55
|
+
"clean": "rimraf dist .turbo"
|
|
56
|
+
}
|
|
57
|
+
}
|