UNPKG

@httpx/lru

Version:

LruCache implementations with O(1) complexity

2 lines 3.98 kB
'use strict';var i=class{key;prev=null;next=null;constructor(e){this.key=e;}};var l=class{#n;#l;#r;#t;#e=null;#a=null;constructor(e){let{maxSize:t,touchOnHas:a=false,onEviction:s}=e;if(!Number.isSafeInteger(t)||t<1)throw new TypeError("Invalid maxSize");this.#l=a,this.#r=s,this.#n=t,this.#t=new Map;}get params(){return {maxSize:this.#n}}get size(){return this.#t.size}clear(){let e=this.#t.size;return this.#t.clear(),this.#e=this.#a=null,e}has(e,t){let a=this.#t.has(e);return a&&(t?.touch??this.#l)&&this.#s(this.#t.get(e).node),a}set(e,t){if(this.#t.has(e)){let r=this.#t.get(e);return r.value=t,this.#s(r.node),false}let a=new i(e),s={value:t,node:a};return this.#t.set(e,s),this.#s(a),this.#t.size>this.#n&&this.#u(),true}get(e){let t=this.#t.get(e);if(t!==void 0)return this.#s(t.node),t.value}getOrSet(e,t){let a=this.get(e);if(a===void 0){let s=typeof t=="function"?t():t;return this.set(e,s),s}return a}peek(e){return this.#t.get(e)?.value}delete(e){let t=this.#t.get(e)?.node;return t===void 0?false:(this.#i(t),this.#t.delete(e))}*[Symbol.iterator](){let e=this.#a;for(;e;){let t=this.#t.get(e.key);yield [e.key,t.value],e=e.prev;}}#s(e){e!==this.#e&&(this.#i(e),e.next=this.#e,e.prev=null,this.#e&&(this.#e.prev=e),this.#e=e,this.#a??=e);}#i(e){e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e===this.#e&&(this.#e=e.next),e===this.#a&&(this.#a=e.prev);}#u(){if(this.#a===null)return;let e=this.#a.key;this.#i(this.#a),this.#r&&this.#r(e,this.#t.get(e).value),this.#t.delete(e);}};var o=class{constructor(e){}size=0;params={maxSize:0};clear(){return 0}has(e,t){return false}set(e,t){return false}get(e){}getOrSet(e,t){return typeof t=="function"?t():t}peek(e){}delete(e){return false}*[Symbol.iterator](){}};var h=class{constructor(e){}size=0;params={maxSize:0,defaultTTL:0};clear(){return 0}has(e,t){return false}set(e,t,a){return false}get(e){}getOrSet(e,t,a){return typeof t=="function"?t():t}peek(e){}delete(e){return false}*[Symbol.iterator](){}};var T=class{#n;#l;#r;#t;#e;#a=null;#s=null;constructor(e){let{maxSize:t,touchOnHas:a=false,onEviction:s,defaultTTL:r}=e;if(!Number.isSafeInteger(t)||t<1)throw new TypeError("Invalid maxSize");if(!Number.isSafeInteger(r)||r<1)throw new TypeError("Invalid ttl");this.#l=a,this.#t=s,this.#n=t,this.#r=r,this.#e=new Map;}get params(){return {maxSize:this.#n,defaultTTL:this.#r}}get size(){return this.#e.size}clear(){let e=this.#e.size;return this.#e.clear(),this.#a=this.#s=null,e}has(e,t){let a=this.#e.get(e),s=a!==void 0;return s&&a.expiry<Date.now()?(this.#t&&this.#t(e,this.#e.get(e).value),this.#u(a.node),false):(s&&(t?.touch??this.#l)&&this.#i(this.#e.get(e).node),s)}set(e,t,a){if(this.#e.has(e)){let u=this.#e.get(e);return u.value=t,u.expiry=Date.now()+(a??this.#r),this.#i(u.node),false}let s=new i(e),r={value:t,expiry:Date.now()+(a??this.#r),node:s};return this.#e.set(e,r),this.#i(s),this.#e.size>this.#n&&this.#o(),true}get(e){let t=this.#e.get(e);if(t!==void 0){if(t.expiry<Date.now()){this.#t&&this.#t(e,t.value),this.#u(t.node);return}return this.#i(t.node),t.value}}getOrSet(e,t,a){let s=this.get(e);if(s===void 0){let r=typeof t=="function"?t():t;return this.set(e,r,a),r}return s}peek(e){let t=this.#e.get(e);if(t!==void 0)return t.expiry<Date.now()?void 0:t.value}delete(e){let t=this.#e.get(e)?.node;return t===void 0?false:(this.#u(t),this.#e.delete(e))}*[Symbol.iterator](){let e=this.#s;for(;e;){let t=this.#e.get(e.key);yield [e.key,t.value],e=e.prev;}}#i(e){e!==this.#a&&(this.#u(e),e.next=this.#a,e.prev=null,this.#a&&(this.#a.prev=e),this.#a=e,this.#s??=e);}#u(e){e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e===this.#a&&(this.#a=e.next),e===this.#s&&(this.#s=e.prev);}#o(){if(this.#s===null)return;let e=this.#s.key;this.#u(this.#s),this.#t&&this.#t(e,this.#e.get(e).value),this.#e.delete(e);}};exports.LruCache=l;exports.NullLruCache=o;exports.NullTimeLruCache=h;exports.TimeLruCache=T;//# sourceMappingURL=index.cjs.map //# sourceMappingURL=index.cjs.map