UNPKG

@httpx/lru

Version:

LruCache implementations with O(1) complexity

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