decorio
Version:
First-class ECMAScript decorators for caching, binding, and concurrency patterns
2 lines (1 loc) • 610 B
JavaScript
import{decorate as p,emplace as y}from"../internal/index.js";const i=new WeakMap;v.invalidate=l=>{const t=i.get(l);t&&t.clear()};function v(l,t){let o=1/0;const r=c=>{const e=new Map,f=function(...n){const s=y(e,this,()=>({calls:new Map}));for(const[u,d]of s.calls.entries())if(u.length===n.length&&u.every((h,m)=>h===n[m]))return d;const a=c.apply(this,n);return s.calls.set(n,a),a instanceof Promise&&a.catch(()=>s.calls.delete(n)),o>0&&o!==1/0&&setTimeout(()=>{s.calls.delete(n)},o),a};return i.set(c,e),i.set(f,e),f};return t&&typeof t=="object"?p(l,t,r):(o=Number(l),(c,e)=>p(c,e,r))}export{v as cached};