Comparing version 0.0.4 to 0.0.5
@@ -1,2 +0,2 @@ | ||
/*! dw-cache v0.0.4 https://github.com/falsandtru/dw-cache | (c) 2021, falsandtru | (Apache-2.0 AND MPL-2.0) License */ | ||
require=function(){return function e(t,s,i){function r(o,c){if(!s[o]){if(!t[o]){var a="function"==typeof require&&require;if(!c&&a)return a(o,!0);if(n)return n(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var l=s[o]={exports:{}};t[o][0].call(l.exports,function(e){return r(t[o][1][e]||e)},l,l.exports,e,t,s,i)}return s[o].exports}for(var n="function"==typeof require&&require,o=0;o<i.length;o++)r(i[o]);return r}}()({1:[function(e,t,s){},{}],2:[function(e,t,s){arguments[4][1][0].apply(s,arguments)},{dup:1}],3:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.isArray=s.ObjectValues=s.ObjectSetPrototypeOf=s.ObjectSeal=s.ObjectPreventExtensions=s.ObjectKeys=s.isSealed=s.isFrozen=s.isExtensible=s.ObjectIs=s.ObjectGetPrototypeOf=s.ObjectGetOwnPropertySymbols=s.ObjectGetOwnPropertyNames=s.ObjectGetOwnPropertyDescriptors=s.ObjectGetOwnPropertyDescriptor=s.ObjectFromEntries=s.ObjectFreeze=s.ObjectEntries=s.ObjectDefineProperty=s.ObjectDefineProperties=s.ObjectCreate=s.ObjectAssign=s.toString=s.isEnumerable=s.isPrototypeOf=s.hasOwnProperty=s.SymbolKeyFor=s.SymbolFor=s.sign=s.round=s.random=s.min=s.max=s.floor=s.ceil=s.abs=s.parseInt=s.parseFloat=s.isSafeInteger=s.isNaN=s.isInteger=s.isFinite=s.NaN=void 0,s.NaN=Number.NaN,s.isFinite=Number.isFinite,s.isInteger=Number.isInteger,s.isNaN=Number.isNaN,s.isSafeInteger=Number.isSafeInteger,s.parseFloat=Number.parseFloat,s.parseInt=Number.parseInt,s.abs=Math.abs,s.ceil=Math.ceil,s.floor=Math.floor,s.max=Math.max,s.min=Math.min,s.random=Math.random,s.round=Math.round,s.sign=Math.sign,s.SymbolFor=Symbol.for,s.SymbolKeyFor=Symbol.keyFor,s.hasOwnProperty=Object.prototype.hasOwnProperty.call.bind(Object.prototype.hasOwnProperty),s.isPrototypeOf=Object.prototype.isPrototypeOf.call.bind(Object.prototype.isPrototypeOf),s.isEnumerable=Object.prototype.propertyIsEnumerable.call.bind(Object.prototype.propertyIsEnumerable),s.toString=Object.prototype.toString.call.bind(Object.prototype.toString),s.ObjectAssign=Object.assign,s.ObjectCreate=Object.create,s.ObjectDefineProperties=Object.defineProperties,s.ObjectDefineProperty=Object.defineProperty,s.ObjectEntries=Object.entries,s.ObjectFreeze=Object.freeze,s.ObjectFromEntries=Object.fromEntries,s.ObjectGetOwnPropertyDescriptor=Object.getOwnPropertyDescriptor,s.ObjectGetOwnPropertyDescriptors=Object.getOwnPropertyDescriptors,s.ObjectGetOwnPropertyNames=Object.getOwnPropertyNames,s.ObjectGetOwnPropertySymbols=Object.getOwnPropertySymbols,s.ObjectGetPrototypeOf=Object.getPrototypeOf,s.ObjectIs=Object.is,s.isExtensible=Object.isExtensible,s.isFrozen=Object.isFrozen,s.isSealed=Object.isSealed,s.ObjectKeys=Object.keys,s.ObjectPreventExtensions=Object.preventExtensions,s.ObjectSeal=Object.seal,s.ObjectSetPrototypeOf=Object.setPrototypeOf,s.ObjectValues=Object.values,s.isArray=Array.isArray},{}],4:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.join=s.splice=s.pop=s.push=s.shift=s.unshift=s.indexOf=void 0;const i=e("./global");function r(e,t){if("length"in e)for(let s=e.length-1;s>=0;--s)t.unshift(e[s]);else t.unshift(...e);return t}function n(e,t){if("length"in t)for(let s=0,i=t.length;s<i;++s)e.push(t[s]);else for(const s of t)e.push(s);return e}function o(e,t,s,...c){if(0===s&&0===c.length)return[];switch(s=s>e.length?e.length:s,t){case 0:switch(s){case 0:return[[],r(c,e)][0];case 1:return 0===e.length?[[],r(c,e)][0]:[[e.shift()],r(c,e)][0];case void 0:if(e.length>1||arguments.length>2)break;return 0===e.length?[]:o(e,t,1)}break;case-1:case e.length-1:switch(s){case 1:return 0===e.length?[[],n(e,c)][0]:[[e.pop()],n(e,c)][0];case void 0:if(e.length>1||arguments.length>2)break;return 0===e.length?[]:o(e,t,1)}break;case e.length:case i.Infinity:return[[],n(e,c)][0]}return arguments.length>2?e.splice(t,s,...c):e.splice(t)}s.indexOf=function(e,t){return 0===e.length?-1:t==t?e.indexOf(t):e.findIndex(e=>e!=e)},s.unshift=r,s.shift=function(e,t){if(t<0)throw new Error("Unexpected negative number");return void 0===t?[e.shift(),e]:[o(e,0,t),e]},s.push=n,s.pop=function(e,t){if(t<0)throw new Error("Unexpected negative number");return void 0===t?[e,e.pop()]:[e,o(e,e.length-t,t)]},s.splice=o,s.join=function(e,t=""){let s="";for(let i=0;i<e.length;++i)s+=0===i?e[i]:t+e[i];return s}},{"./global":10}],5:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.template=s.overwrite=s.inherit=s.merge=s.extend=s.clone=s.assign=void 0;const i=e("./global"),r=e("./alias"),n=e("./type"),o=e("./array");function c(e){return function(t,...s){if((0,n.isPrimitive)(t))return t;for(let i=0;i<s.length;++i){const o=s[i];if(o===t)continue;if((0,n.isPrimitive)(o))continue;const c=(0,r.ObjectKeys)(o);for(let s=0;s<c.length;++s)e(c[s],t,o)}return t}}function a(e){switch((0,n.type)(e)){case"Array":return[];case"Object":return e instanceof i.Object?{}:(0,r.ObjectCreate)(null);default:return e}}s.assign=c((e,t,s)=>t[e]=s[e]),s.clone=c((e,t,i)=>{switch((0,n.type)(i[e])){case"Array":return t[e]=i[e].slice();case"Object":switch((0,n.type)(t[e])){case"Object":return t[e]=(0,s.clone)(a(i[e]),i[e]);default:return t[e]=i[e]}default:return t[e]=i[e]}}),s.extend=c((e,t,i)=>{switch((0,n.type)(i[e])){case"undefined":return;case"Array":return t[e]=i[e];case"Object":switch((0,n.type)(t[e])){case"Object":return t[e]=(0,s.extend)(t[e],i[e]);default:return t[e]=(0,s.extend)(a(i[e]),i[e])}default:return t[e]=i[e]}}),s.merge=c((e,t,i)=>{switch((0,n.type)(i[e])){case"undefined":return;case"Array":switch((0,n.type)(t[e])){case"Array":return t[e]=(0,o.push)(t[e],i[e]);default:return t[e]=i[e].slice()}case"Object":switch((0,n.type)(t[e])){case"Object":return t[e]=(0,s.merge)(t[e],i[e]);default:return t[e]=(0,s.merge)(a(i[e]),i[e])}default:return t[e]=i[e]}}),s.inherit=c((e,t,i)=>{switch((0,n.type)(i[e])){case"undefined":return;case"Array":return t[e]=i[e].slice();case"Object":switch((0,n.type)(t[e])){case"Object":return t[e]=(0,r.hasOwnProperty)(t,e)?(0,s.inherit)(t[e],i[e]):(0,s.inherit)((0,r.ObjectCreate)(t[e]),i[e]);default:return t[e]=(0,r.ObjectCreate)(i[e])}default:return t[e]=i[e]}}),s.overwrite=c((e,t,i)=>{switch((0,n.type)(i[e])){case"Array":return t[e]=i[e];case"Object":switch((0,n.type)(t[e])){case"Object":return t[e]=(0,s.overwrite)(t[e],i[e]);default:return t[e]=(0,s.overwrite)(a(i[e]),i[e])}default:return t[e]=i[e]}}),s.template=c},{"./alias":3,"./array":4,"./global":10,"./type":18}],6:[function(e,t,s){"use strict";var i;Object.defineProperty(s,"__esModule",{value:!0}),s.Cache=void 0;const r=e("./global"),n=e("./alias"),o=e("./clock"),c=e("./ixlist"),a=e("./stack"),u=e("./assign"),l=e("./tuple"),h=e("./compare"),d=Symbol("size");function f(e,t,s,i,r){e=(0,n.min)(s+r,e);const o=100*t/s|0,c=(0,n.min)(100*s/e|0,100);return o*c+(100*i/r|0)*(100-c)|0}s.Cache=class{constructor(e,t={}){if(this.capacity=e,this.settings={space:0,age:r.Infinity,capture:{delete:!0,clear:!0}},this[i]=0,this.clock=0,this.clockR=0,this.memory=new r.Map,this.indexes={LRU:new c.IxList(this.capacity),LFU:new c.IxList(this.capacity)},this.stack=new a.Stack,this.stats={LRU:(0,l.tuple)(0,0),LFU:(0,l.tuple)(0,0)},this.ratio=50,e<1)throw new Error("Spica: Cache: Capacity must be 1 or more.");(0,u.extend)(this.settings,t),this.space=this.settings.space}get length(){return this.indexes.LRU.length+this.indexes.LFU.length}get size(){return this[d]}resume(){if(this.stack.isEmpty())return;const{stack:e,settings:{disposer:t}}=this;for(let s;s=e.pop();)t(s.value,s.key)}dispose(e,{target:t,index:s,value:i,size:r},n){this.indexes[t].delete(e,s),this.memory.delete(e),this.space&&(this[d]-=r),null==n||n(i,e)}secure(e,t){if(e<=0)return;const{LRU:s,LFU:i}=this.indexes;let r,n=!(arguments.length<2)&&void 0;for(;this.length===this.capacity||this.space&&this.size+e>this.space;){const e=0===s.length||i.length>this.capacity*this.ratio/100||i.length>this.capacity/2&&i.last.value<this.clock-8*this.capacity?i:s;if(0===e.length)throw new Error("Spica: Cache: Failed to secure the margin.");const o=e.last;if(null!=n?n:(0,h.equal)(o.key,t)){n=!1,r=e,e.HEAD=o.index;continue}const c=this.memory.get(o.key);this.dispose(o.key,c,void 0),this.settings.disposer&&this.stack.push({key:o.key,value:c.value})}r&&r.length>0&&(r.HEAD=r.tail.index)}put(e,t,s=1,i=this.settings.age){var n,c;if(s<1)throw new Error("Spica: Cache: Size must be 1 or more.");if(i<1)throw new Error("Spica: Cache: Age must be 1 or more.");if(this.space&&s>this.space||i<=0)return null===(c=(n=this.settings).disposer)||void 0===c||c.call(n,t,e),!1;const a=i===r.Infinity?r.Infinity:(0,o.now)()+i,u=this.memory.get(e);if(u)return this.settings.disposer&&this.stack.push({key:e,value:u.value}),this.secure(s-u.size,e),this.space&&(this[d]+=s-u.size),u.value=t,u.size=s,u.expiry=a,this.resume(),!0;this.secure(s);const{LRU:l}=this.indexes;return this.space&&(this[d]+=s),this.memory.set(e,{target:"LRU",index:l.add(e,++this.clockR),value:t,size:s,expiry:a}),this.resume(),!1}set(e,t,s,i){return this.put(e,t,s,i),this}get(e){const t=this.memory.get(e);if(t){if(!(t.expiry!==r.Infinity&&t.expiry<=(0,o.now)()))return this.access(e,t),this.slide(),t.value;this.dispose(e,t,this.settings.disposer)}}has(e){const t=this.memory.get(e);return!(!t||t.expiry!==r.Infinity&&t.expiry<=(0,o.now)()&&(this.dispose(e,t,this.settings.disposer),1))}delete(e){const t=this.memory.get(e);return!!t&&(this.dispose(e,t,this.settings.capture.delete?this.settings.disposer:void 0),!0)}clear(){if(this[d]=0,this.ratio=50,this.indexes.LRU.clear(),this.indexes.LFU.clear(),this.stats={LRU:[0,0],LFU:[0,0]},!this.settings.disposer||!this.settings.capture.clear)return void this.memory.clear();const e=this.memory;this.memory=new r.Map;for(const[t,{value:s}]of e)this.settings.disposer(s,t)}*[(i=d,Symbol.iterator)](){for(const[e,{value:t}]of this.memory)yield[e,t]}slide(){const{LRU:e,LFU:t}=this.stats,{capacity:s,ratio:i,indexes:r}=this;if((e[0]+t[0])%(0,n.max)(s/100|0,1))return;const o=s,c=e[1]+t[1]>0,a=f(o,e[0],e[0]+t[0],e[1],e[1]+t[1]),u=f(o,t[0],e[0]+t[0],t[1],e[1]+t[1])*r.LRU.length/r.LFU.length|0,l=r.LRU.length>=s*(100-i)/100,h=r.LFU.length>=s*i/100;c&&i<100&&h&&u>a?this.ratio+=1:c&&i>10&&l&&a>u&&(this.ratio-=1),e[0]+t[0]>=o&&(this.stats={LRU:[0,e[0]],LFU:[0,t[0]]})}access(e,t){return this.accessLFU(e,t)||this.accessLRU(e,t)}accessLRU(e,t){if("LRU"!==t.target)return!1;const{LRU:s,LFU:i}=this.indexes,{index:r}=t;return++this.stats.LRU[0],++this.clock,++this.clockR,s.node(r).value+s.length/3>this.clockR?(s.put(e,this.clockR,r),s.moveToHead(r),!0):(s.delete(e,r),t.target="LFU",t.index=i.add(e,this.clock),!0)}accessLFU(e,t){if("LFU"!==t.target)return!1;const{LFU:s}=this.indexes,{index:i}=t;return++this.stats.LFU[0],++this.clock,s.put(e,this.clock,i),s.moveToHead(i),!0}}},{"./alias":3,"./assign":5,"./clock":7,"./compare":8,"./global":10,"./ixlist":11,"./stack":16,"./tuple":17}],7:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.tick=s.wait=s.clock=s.now=void 0;const i=e("./global"),r=e("./promise"),n=e("./exception"),o=e("./queue");let c;s.now=function(){return void 0!==c?c:(d(()=>c=void 0),c=i.Date.now())},s.clock=Promise.resolve(void 0),s.wait=function(e){return 0===e?r.AtomicPromise.resolve(s.clock):new r.AtomicPromise(t=>void(0,i.setTimeout)(t,e))};let a=new o.Queue,u=new o.Queue;const l=Promise.resolve();let h=!1;function d(e){a.enqueue(e),h=h||!!l.then(f)}function f(){h=!1,[u,a]=[a,u];for(let e;e=u.dequeue();)try{e()}catch(e){(0,n.causeAsyncException)(e)}}s.tick=d},{"./exception":9,"./global":10,"./promise":14,"./queue":15}],8:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.equal=void 0,s.equal=function(e,t){return e==e?e===t:t!=t}},{}],9:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.causeAsyncException=void 0,s.causeAsyncException=function(e){Promise.reject(e)}},{}],10:[function(_dereq_,module,exports){"use strict";const global="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||Function("return this")();eval("global.global = global"),module.exports=global},{}],11:[function(e,t,s){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,s,i){void 0===i&&(i=s),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,i){void 0===i&&(i=s),e[i]=t[s]}),r=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||i(t,e,s)};Object.defineProperty(s,"__esModule",{value:!0}),r(e("./list/ixlist"),s)},{"./list/ixlist":12}],12:[function(e,t,s){"use strict";var i,r;Object.defineProperty(s,"__esModule",{value:!0}),s.IxList=void 0;const n=e("../compare"),o=Symbol("cursor"),c=Symbol("length");s.IxList=class{constructor(e,t){this.capacity=e,this.index=t,this.nodes=[],this.buffers=[],this.HEAD=0,this[i]=0,this[r]=0}get length(){return this[c]}get head(){const e=this.nodes[this.HEAD];return e&&{index:e.index,key:e.key,value:e.value}}get tail(){var e;const t=null===(e=this.nodes[this.HEAD])||void 0===e?void 0:e.next;return t&&{index:t.index,key:t.key,value:t.value}}get last(){var e;const t=null===(e=this.nodes[this.HEAD])||void 0===e?void 0:e.prev;return t&&{index:t.index,key:t.key,value:t.value}}node(e){const t=this.nodes[e];if(!t)throw new Error("Spica: IxList: Invalid index.");return{index:t.index,key:t.key,value:t.value}}next(e){var t,s;return this.node(null!==(s=null===(t=this.nodes[e])||void 0===t?void 0:t.next.index)&&void 0!==s?s:this.capacity)}prev(e){var t,s;return this.node(null!==(s=null===(t=this.nodes[e])||void 0===t?void 0:t.prev.index)&&void 0!==s?s:this.capacity)}clear(){var e;this.nodes=[],this.buffers=[],null===(e=this.index)||void 0===e||e.clear(),this.HEAD=0,this[o]=0,this[c]=0}add(e,t){var s,i;const r=this.nodes,u=r[this.HEAD];if(!u){const i=this.HEAD=this[o]=this.buffers.length>0?this.buffers.shift():this.length;return++this[c],null===(s=this.index)||void 0===s||s.set(e,i),r[i]=new a(i,e,t,u,u),i}if(this.length<this.capacity){const s=this.HEAD=this[o]=this.buffers.length>0?this.buffers.shift():this.length;return++this[c],null===(i=this.index)||void 0===i||i.set(e,s),r[s]=u.prev=u.prev.next=new a(s,e,t,u,u.prev),s}{const s=u.prev,i=this.HEAD=this[o]=s.index;return this.index&&!(0,n.equal)(s.key,e)&&(this.index.delete(s.key,s.index),this.index.set(e,i)),s.key=e,s.value=t,i}}put(e,t,s){const i=this.search(e,s);return i?(i.value=t,i.index):this.add(e,t)}delete(e,t){var s;const i=this[o],r=this.search(e,t);if(!r)return;this[o]=i,--this[c],this.buffers.push(r.index),null===(s=this.index)||void 0===s||s.delete(r.key,r.index);const{prev:n,next:a,value:u}=r;return n.next=a,a.prev=n,this.HEAD===r.index&&(this.HEAD=a.index),this[o]===r.index&&(this[o]=a.index),this.nodes[r.index]=r.key=r.value=r.prev=r.next=void 0,{key:e,value:u}}unshift(e,t){return this.add(e,t)}shift(){const e=this.nodes[this.HEAD];return e&&this.delete(e.key,e.index)}push(e,t){const s=this.HEAD,i=this.add(e,t);return this.HEAD=s,i}pop(){var e;const t=null===(e=this.nodes[this.HEAD])||void 0===e?void 0:e.prev;return t&&this.delete(t.key,t.index)}search(e,t=this[o]){var s;let i;if((i=this.nodes[t])&&(0,n.equal)(i.key,e))return this[o]=t,i;if(!this.index)throw new Error("Spica: IxList: Invalid index.");return(i=this.nodes[t=null!==(s=this.index.get(e))&&void 0!==s?s:this.capacity])?(this[o]=t,i):void 0}find(e,t){var s;if(!this.index)throw new Error("Spica: IxList: No index.");return null===(s=this.search(e,t))||void 0===s?void 0:s.value}findIndex(e,t){var s;if(!this.index)throw new Error("Spica: IxList: No index.");return null===(s=this.search(e,t))||void 0===s?void 0:s.index}has(e,t){if(!this.index)throw new Error("Spica: IxList: No index.");return void 0!==this.search(e,t)}*[(i=o,r=c,Symbol.iterator)](){for(let e=this.nodes[this.HEAD],t=0;e&&t<this.length;(e=e.next)&&++t)yield[e.key,e.value]}insert(e,t){if(e===t)return!1;const s=this.nodes[e];if(!s)return!1;const i=this.nodes[t];if(!i)return!1;if(s.next===i)return!1;const r=i.prev,n=s.prev,o=s.next;return r.next=s,s.next=i,i.prev=s,s.prev=r,n.next=o,o.prev=n,!0}moveToHead(e){return!(this.length<=1)&&(e!==this.HEAD&&(!!this.nodes[e]&&(this.insert(e,this.HEAD),this.HEAD=e,!0)))}moveToPrev(e){if(this.length<=1)return!1;if(e===this.HEAD)return!1;const t=this.nodes[e];return!!t&&(this.insert(t.index,t.prev.index),t.next.index===this.HEAD&&(this.HEAD=t.index),!0)}swap(e,t){if(this.length<=1)return!1;if(e===t)return!1;const s=this.nodes[e],i=this.nodes[t];if(!s||!i)return!1;if(s.next===i)return this.moveToPrev(t);if(i.next===s)return this.moveToPrev(e);const r=i.next;switch(this.insert(i.index,s.index),this.insert(s.index,r.index),this.HEAD){case s.index:this.HEAD=i.index;break;case i.index:this.HEAD=s.index}return!0}};class a{constructor(e,t,s,i,r){this.index=e,this.key=t,this.value=s,this.next=i,this.prev=r,i&&i.index!==e||(this.next=this),r&&r.index!==e||(this.prev=this)}}},{"../compare":8}],13:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.noop=void 0,s.noop=function(){}},{}],14:[function(e,t,s){"use strict";var i,r;Object.defineProperty(s,"__esModule",{value:!0}),s.never=s.isPromiseLike=s.Internal=s.AtomicPromise=void 0;const n=e("./global"),o=e("./alias"),c=e("./noop"),a=Symbol.for("spica/promise::internal");class u{constructor(e){this[i]="Promise",this[r]=new l;try{e(e=>void this[a].resolve(e),e=>void this[a].reject(e))}catch(e){this[a].reject(e)}}static get[Symbol.species](){return u}static all(e){return new u((t,s)=>{const i=(0,o.isArray)(e)?e:[...e],r=(0,n.Array)(i.length);let c=0;for(let e=0;e<i.length;++e){const n=i[e];if(h(n)){if(d(n)){const{status:t}=n[a];switch(t.state){case 2:r[e]=t.value,++c;continue;case 3:s(t.reason),e=i.length;continue}}n.then(s=>{r[e]=s,++c===i.length&&t(r)},t=>{s(t),e=i.length})}else r[e]=n,++c}c===i.length&&t(r)})}static race(e){return new u((t,s)=>{const i=(0,o.isArray)(e)?e:[...e];for(let e=0;e<i.length;++e){const r=i[e];if(!h(r))return t(r);if(d(r)){const{status:e}=r[a];switch(e.state){case 2:return t(e.value);case 3:return s(e.reason)}}}let r=!1;for(let e=0;e<i.length;++e){if(i[e].then(e=>{t(e),r=!0},e=>{s(e),r=!0}),r)return}})}static allSettled(e){return new u(t=>{const s=(0,o.isArray)(e)?e:[...e],i=(0,n.Array)(s.length);let r=0;for(let e=0;e<s.length;++e){const n=s[e];if(h(n)){if(d(n)){const{status:t}=n[a];switch(t.state){case 2:i[e]={status:"fulfilled",value:t.value},++r;continue;case 3:i[e]={status:"rejected",reason:t.reason},++r;continue}}n.then(n=>{i[e]={status:"fulfilled",value:n},++r===s.length&&t(i)},n=>{i[e]={status:"rejected",reason:n},++r===s.length&&t(i)})}else i[e]={status:"fulfilled",value:n},++r}r===s.length&&t(i)})}static resolve(e){return new u(t=>t(e))}static reject(e){return new u((t,s)=>s(e))}then(e,t){return new u((s,i)=>this[a].then(s,i,e,t))}catch(e){return this.then(void 0,e)}finally(e){return this.then(e,e).then(()=>this)}}s.AtomicPromise=u,i=Symbol.toStringTag,r=a;class l{constructor(){this.status={state:0},this.fulfillReactions=[],this.rejectReactions=[]}get isPending(){return 0===this.status.state}resolve(e){if(0===this.status.state){if(!h(e))return this.status={state:2,value:e},this.resume();if(d(e)){const t=e[a];switch(t.status.state){case 2:case 3:return this.status=t.status,this.resume();default:return t.then(()=>(this.status=t.status,this.resume()),()=>(this.status=t.status,this.resume()))}}this.status={state:1,promise:e},e.then(e=>{this.status={state:2,value:e},this.resume()},e=>{this.status={state:3,reason:e},this.resume()})}}reject(e){if(0===this.status.state)return this.status={state:3,reason:e},this.resume()}then(e,t,s,i){const{status:r,fulfillReactions:n,rejectReactions:o}=this;switch(r.state){case 2:if(0!==n.length)break;return this.call(e,t,e,s,r.value);case 3:if(0!==o.length)break;return this.call(e,t,t,i,r.reason)}n.push([e,t,e,s]),o.push([e,t,t,i])}resume(){const{status:e,fulfillReactions:t,rejectReactions:s}=this;switch(e.state){case 0:case 1:return;case 2:if(s.length>0&&(this.rejectReactions=[]),0===t.length)return;return this.react(t,e.value),void(this.fulfillReactions=[]);case 3:if(t.length>0&&(this.fulfillReactions=[]),0===s.length)return;return this.react(s,e.reason),void(this.rejectReactions=[])}}react(e,t){for(let s=0;s<e.length;++s){const i=e[s];this.call(i[0],i[1],i[2],i[3],t)}}call(e,t,s,i,r){if(!i)return s(r);try{e(i(r))}catch(e){t(e)}}}function h(e){return null!==e&&"object"==typeof e&&"function"==typeof e.then}function d(e){return a in e}s.Internal=l,s.isPromiseLike=h,s.never=new class e extends Promise{static get[Symbol.species](){return e}constructor(){super(c.noop)}then(){return this}catch(){return this}finally(){return this}}},{"./alias":3,"./global":10,"./noop":13}],15:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.Queue=void 0;const i=void 0,r=[];s.Queue=class{constructor(){const e=[r];this.edges=[e,e]}enqueue(e){const t=this.edges,s=t[1];s[0]=e,t[1]=s[1]=[r]}dequeue(){const e=this.edges,t=e[0],s=t[0];if(s!==r)return e[0]=t[1],t[1]=i,s}isEmpty(){return this.edges[0][0]===r}peek(){const e=this.edges[0][0];if(e!==r)return e}}},{}],16:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.Stack=void 0;const i=void 0;s.Stack=class{constructor(){this.list=i}push(e){this.list=[e,this.list]}pop(){const e=this.list;if(e===i)return;const t=e[0];return this.list=e[1],e[1]=i,t}isEmpty(){return this.list===i}peek(){var e;return null===(e=this.list)||void 0===e?void 0:e[0]}}},{}],17:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.tuple=void 0,s.tuple=function(...e){return e}},{}],18:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.isPrimitive=s.isType=s.type=void 0;const i=e("./alias"),r=Object.prototype.toString.call.bind(Object.prototype.toString),n=Object.prototype,o=Array.prototype;function c(e){if(void 0===e)return"undefined";if(null===e)return"null";const t=typeof e;if("object"===t){const t=(0,i.ObjectGetPrototypeOf)(e);return t===n||null===t?"Object":t===o?"Array":r(e).slice(8,-1)}return"function"===t?"Function":t}s.type=c,s.isType=function(e,t){return"object"===t?null!==e&&typeof e===t:"function"===t?typeof e===t:c(e)===t},s.isPrimitive=function(e){const t=typeof e;return"object"!==t&&"function"!==t||null===e}},{"./alias":3}],"dw-cache":[function(e,t,s){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,s,i){void 0===i&&(i=s),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,i){void 0===i&&(i=s),e[i]=t[s]}),r=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||i(t,e,s)};Object.defineProperty(s,"__esModule",{value:!0}),r(e("spica/cache"),s)},{"spica/cache":6}]},{},[1,2,"dw-cache"]),function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof module&&module.exports?module.exports=t():Object.assign(e,t())}("undefined"!=typeof self?self:this,function(){return require("dw-cache")}); | ||
/*! dw-cache v0.0.5 https://github.com/falsandtru/dw-cache | (c) 2021, falsandtru | (Apache-2.0 AND MPL-2.0) License */ | ||
require=function(){return function e(t,s,i){function n(o,c){if(!s[o]){if(!t[o]){var a="function"==typeof require&&require;if(!c&&a)return a(o,!0);if(r)return r(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var h=s[o]={exports:{}};t[o][0].call(h.exports,function(e){return n(t[o][1][e]||e)},h,h.exports,e,t,s,i)}return s[o].exports}for(var r="function"==typeof require&&require,o=0;o<i.length;o++)n(i[o]);return n}}()({1:[function(e,t,s){},{}],2:[function(e,t,s){arguments[4][1][0].apply(s,arguments)},{dup:1}],3:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.isArray=s.ObjectValues=s.ObjectSetPrototypeOf=s.ObjectSeal=s.ObjectPreventExtensions=s.ObjectKeys=s.isSealed=s.isFrozen=s.isExtensible=s.ObjectIs=s.ObjectGetPrototypeOf=s.ObjectGetOwnPropertySymbols=s.ObjectGetOwnPropertyNames=s.ObjectGetOwnPropertyDescriptors=s.ObjectGetOwnPropertyDescriptor=s.ObjectFromEntries=s.ObjectFreeze=s.ObjectEntries=s.ObjectDefineProperty=s.ObjectDefineProperties=s.ObjectCreate=s.ObjectAssign=s.toString=s.isEnumerable=s.isPrototypeOf=s.hasOwnProperty=s.SymbolKeyFor=s.SymbolFor=s.sign=s.round=s.random=s.min=s.max=s.floor=s.ceil=s.abs=s.parseInt=s.parseFloat=s.isSafeInteger=s.isNaN=s.isInteger=s.isFinite=s.NaN=void 0,s.NaN=Number.NaN,s.isFinite=Number.isFinite,s.isInteger=Number.isInteger,s.isNaN=Number.isNaN,s.isSafeInteger=Number.isSafeInteger,s.parseFloat=Number.parseFloat,s.parseInt=Number.parseInt,s.abs=Math.abs,s.ceil=Math.ceil,s.floor=Math.floor,s.max=Math.max,s.min=Math.min,s.random=Math.random,s.round=Math.round,s.sign=Math.sign,s.SymbolFor=Symbol.for,s.SymbolKeyFor=Symbol.keyFor,s.hasOwnProperty=Object.prototype.hasOwnProperty.call.bind(Object.prototype.hasOwnProperty),s.isPrototypeOf=Object.prototype.isPrototypeOf.call.bind(Object.prototype.isPrototypeOf),s.isEnumerable=Object.prototype.propertyIsEnumerable.call.bind(Object.prototype.propertyIsEnumerable),s.toString=Object.prototype.toString.call.bind(Object.prototype.toString),s.ObjectAssign=Object.assign,s.ObjectCreate=Object.create,s.ObjectDefineProperties=Object.defineProperties,s.ObjectDefineProperty=Object.defineProperty,s.ObjectEntries=Object.entries,s.ObjectFreeze=Object.freeze,s.ObjectFromEntries=Object.fromEntries,s.ObjectGetOwnPropertyDescriptor=Object.getOwnPropertyDescriptor,s.ObjectGetOwnPropertyDescriptors=Object.getOwnPropertyDescriptors,s.ObjectGetOwnPropertyNames=Object.getOwnPropertyNames,s.ObjectGetOwnPropertySymbols=Object.getOwnPropertySymbols,s.ObjectGetPrototypeOf=Object.getPrototypeOf,s.ObjectIs=Object.is,s.isExtensible=Object.isExtensible,s.isFrozen=Object.isFrozen,s.isSealed=Object.isSealed,s.ObjectKeys=Object.keys,s.ObjectPreventExtensions=Object.preventExtensions,s.ObjectSeal=Object.seal,s.ObjectSetPrototypeOf=Object.setPrototypeOf,s.ObjectValues=Object.values,s.isArray=Array.isArray},{}],4:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.join=s.splice=s.pop=s.push=s.shift=s.unshift=s.indexOf=void 0;const i=e("./global");function n(e,t){if("length"in e)for(let s=e.length-1;s>=0;--s)t.unshift(e[s]);else t.unshift(...e);return t}function r(e,t){if("length"in t)for(let s=0,i=t.length;s<i;++s)e.push(t[s]);else for(const s of t)e.push(s);return e}function o(e,t,s,...c){if(0===s&&0===c.length)return[];switch(s=s>e.length?e.length:s,t){case 0:switch(s){case 0:return[[],n(c,e)][0];case 1:return 0===e.length?[[],n(c,e)][0]:[[e.shift()],n(c,e)][0];case void 0:if(e.length>1||arguments.length>2)break;return 0===e.length?[]:o(e,t,1)}break;case-1:case e.length-1:switch(s){case 1:return 0===e.length?[[],r(e,c)][0]:[[e.pop()],r(e,c)][0];case void 0:if(e.length>1||arguments.length>2)break;return 0===e.length?[]:o(e,t,1)}break;case e.length:case i.Infinity:return[[],r(e,c)][0]}return arguments.length>2?e.splice(t,s,...c):e.splice(t)}s.indexOf=function(e,t){return 0===e.length?-1:t==t?e.indexOf(t):e.findIndex(e=>e!=e)},s.unshift=n,s.shift=function(e,t){if(t<0)throw new Error("Unexpected negative number");return void 0===t?[e.shift(),e]:[o(e,0,t),e]},s.push=r,s.pop=function(e,t){if(t<0)throw new Error("Unexpected negative number");return void 0===t?[e,e.pop()]:[e,o(e,e.length-t,t)]},s.splice=o,s.join=function(e,t=""){let s="";for(let i=0;i<e.length;++i)s+=0===i?e[i]:t+e[i];return s}},{"./global":10}],5:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.template=s.overwrite=s.inherit=s.merge=s.extend=s.clone=s.assign=void 0;const i=e("./global"),n=e("./alias"),r=e("./type"),o=e("./array");function c(e){return function(t,...s){if((0,r.isPrimitive)(t))return t;for(let i=0;i<s.length;++i){const o=s[i];if(o===t)continue;if((0,r.isPrimitive)(o))continue;const c=(0,n.ObjectKeys)(o);for(let s=0;s<c.length;++s)e(c[s],t,o)}return t}}function a(e){switch((0,r.type)(e)){case"Array":return[];case"Object":return e instanceof i.Object?{}:(0,n.ObjectCreate)(null);default:return e}}s.assign=c((e,t,s)=>t[e]=s[e]),s.clone=c((e,t,i)=>{switch((0,r.type)(i[e])){case"Array":return t[e]=i[e].slice();case"Object":switch((0,r.type)(t[e])){case"Object":return t[e]=(0,s.clone)(a(i[e]),i[e]);default:return t[e]=i[e]}default:return t[e]=i[e]}}),s.extend=c((e,t,i)=>{switch((0,r.type)(i[e])){case"undefined":return;case"Array":return t[e]=i[e];case"Object":switch((0,r.type)(t[e])){case"Object":return t[e]=(0,s.extend)(t[e],i[e]);default:return t[e]=(0,s.extend)(a(i[e]),i[e])}default:return t[e]=i[e]}}),s.merge=c((e,t,i)=>{switch((0,r.type)(i[e])){case"undefined":return;case"Array":switch((0,r.type)(t[e])){case"Array":return t[e]=(0,o.push)(t[e],i[e]);default:return t[e]=i[e].slice()}case"Object":switch((0,r.type)(t[e])){case"Object":return t[e]=(0,s.merge)(t[e],i[e]);default:return t[e]=(0,s.merge)(a(i[e]),i[e])}default:return t[e]=i[e]}}),s.inherit=c((e,t,i)=>{switch((0,r.type)(i[e])){case"undefined":return;case"Array":return t[e]=i[e].slice();case"Object":switch((0,r.type)(t[e])){case"Object":return t[e]=(0,n.hasOwnProperty)(t,e)?(0,s.inherit)(t[e],i[e]):(0,s.inherit)((0,n.ObjectCreate)(t[e]),i[e]);default:return t[e]=(0,n.ObjectCreate)(i[e])}default:return t[e]=i[e]}}),s.overwrite=c((e,t,i)=>{switch((0,r.type)(i[e])){case"Array":return t[e]=i[e];case"Object":switch((0,r.type)(t[e])){case"Object":return t[e]=(0,s.overwrite)(t[e],i[e]);default:return t[e]=(0,s.overwrite)(a(i[e]),i[e])}default:return t[e]=i[e]}}),s.template=c},{"./alias":3,"./array":4,"./global":10,"./type":16}],6:[function(e,t,s){"use strict";var i;Object.defineProperty(s,"__esModule",{value:!0}),s.Cache=void 0;const n=e("./global"),r=e("./alias"),o=e("./clock"),c=e("./ixlist"),a=e("./assign"),u=e("./tuple"),h=e("./compare"),l=Symbol("size");function f(e,t,s,i,n){e=(0,r.min)(s+n,e);const o=100*t/s|0,c=(0,r.min)(100*s/e|0,100);return o*c+(100*i/n|0)*(100-c)|0}s.Cache=class{constructor(e,t={}){if(this.capacity=e,this.settings={space:0,age:n.Infinity,capture:{delete:!0,clear:!0}},this[i]=0,this.clock=0,this.clockR=0,this.memory=new n.Map,this.indexes={LRU:new c.IxList(this.capacity),LFU:new c.IxList(this.capacity)},this.stack={length:0},this.stats={LRU:(0,u.tuple)(0,0),LFU:(0,u.tuple)(0,0)},this.ratio=50,this.frequency=(0,r.max)(this.capacity/100|0,1),e<1)throw new Error("Spica: Cache: Capacity must be 1 or more.");(0,a.extend)(this.settings,t),this.space=this.settings.space}get length(){return this.indexes.LRU.length+this.indexes.LFU.length}get size(){return this[l]}resume(){if(0===this.stack.length)return;const{stack:e,settings:{disposer:t}}=this;for(;e.length>0;){const{key:s,value:i}=e[--e.length];t(i,s)}}dispose(e,{target:t,index:s,value:i,size:n},r){this.indexes[t].del(e,s),this.memory.delete(e),this.space&&(this[l]-=n),null==r||r(i,e)}secure(e,t){if(e<=0)return;const{LRU:s,LFU:i}=this.indexes;let n,r=!(arguments.length<2)&&void 0;for(;this.length===this.capacity||this.space&&this.size+e>this.space;){const e=0===s.length||i.length>this.capacity*this.ratio/100||i.length>this.capacity/2&&i.last.value<this.clock-8*this.capacity?i:s;if(0===e.length)throw new Error("Spica: Cache: Failed to secure the margin.");const o=e.last;if(null!=r?r:(0,h.equal)(o.key,t)){r=!1,n=e,e.HEAD=o.index;continue}const c=this.memory.get(o.key);this.dispose(o.key,c,void 0),this.settings.disposer&&(this.stack[this.stack.length++]={key:o.key,value:c.value})}n&&n.length>0&&(n.HEAD=n.tail.index)}put(e,t,s=1,i=this.settings.age){var r,c;if(s<1)throw new Error("Spica: Cache: Size must be 1 or more.");if(i<1)throw new Error("Spica: Cache: Age must be 1 or more.");if(this.space&&s>this.space||i<=0)return null===(c=(r=this.settings).disposer)||void 0===c||c.call(r,t,e),!1;const a=i===n.Infinity?n.Infinity:(0,o.now)()+i,u=this.memory.get(e);if(u)return this.settings.disposer&&(this.stack[this.stack.length++]={key:e,value:u.value}),this.secure(s-u.size,e),this.space&&(this[l]+=s-u.size),u.value=t,u.size=s,u.expiry=a,this.resume(),!0;this.secure(s);const{LRU:h}=this.indexes;return this.space&&(this[l]+=s),this.memory.set(e,{target:"LRU",index:h.add(e,++this.clockR),value:t,size:s,expiry:a}),this.resume(),!1}set(e,t,s,i){return this.put(e,t,s,i),this}get(e){const t=this.memory.get(e);if(t){if(!(t.expiry!==n.Infinity&&t.expiry<=(0,o.now)()))return this.access(e,t),this.slide(),t.value;this.dispose(e,t,this.settings.disposer)}}has(e){const t=this.memory.get(e);return!(!t||t.expiry!==n.Infinity&&t.expiry<=(0,o.now)()&&(this.dispose(e,t,this.settings.disposer),1))}delete(e){const t=this.memory.get(e);return!!t&&(this.dispose(e,t,this.settings.capture.delete?this.settings.disposer:void 0),!0)}clear(){if(this[l]=0,this.ratio=50,this.indexes.LRU.clear(),this.indexes.LFU.clear(),this.stack={length:0},this.stats={LRU:[0,0],LFU:[0,0]},!this.settings.disposer||!this.settings.capture.clear)return void this.memory.clear();const e=this.memory;this.memory=new n.Map;for(const[t,{value:s}]of e)this.settings.disposer(s,t)}*[(i=l,Symbol.iterator)](){for(const[e,{value:t}]of this.memory)yield[e,t]}slide(){const{LRU:e,LFU:t}=this.stats,{capacity:s,ratio:i,indexes:n}=this;if((e[0]+t[0])%this.frequency)return;const r=s,o=e[1]+t[1]>0,c=f(r,e[0],e[0]+t[0],e[1],e[1]+t[1]),a=f(r,t[0],e[0]+t[0],t[1],e[1]+t[1])*n.LRU.length/n.LFU.length|0,u=n.LRU.length>=s*(100-i)/100,h=n.LFU.length>=s*i/100;o&&i<100&&h&&a>c?this.ratio+=1:o&&i>10&&u&&c>a&&(this.ratio-=1),e[0]+t[0]>=r&&(this.stats={LRU:[0,e[0]],LFU:[0,t[0]]})}access(e,t){return this.accessLFU(e,t)||this.accessLRU(e,t)}accessLRU(e,t){if("LRU"!==t.target)return!1;const{LRU:s,LFU:i}=this.indexes,{index:n}=t;return++this.stats.LRU[0],++this.clock,++this.clockR,s.node(n).value+s.length/3>this.clockR?(s.put(e,this.clockR,n),s.moveToHead(n),!0):(s.del(e,n),t.target="LFU",t.index=i.add(e,this.clock),!0)}accessLFU(e,t){if("LFU"!==t.target)return!1;const{LFU:s}=this.indexes,{index:i}=t;return++this.stats.LFU[0],++this.clock,s.put(e,this.clock,i),s.moveToHead(i),!0}}},{"./alias":3,"./assign":5,"./clock":7,"./compare":8,"./global":10,"./ixlist":11,"./tuple":15}],7:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.tick=s.wait=s.clock=s.now=void 0;const i=e("./global"),n=e("./alias"),r=e("./promise"),o=e("./exception");let c;s.now=function(){return void 0!==c?c:(f(()=>c=void 0),c=i.Date.now())},s.clock=Promise.resolve(void 0),s.wait=function(e){return 0===e?r.AtomicPromise.resolve(s.clock):new r.AtomicPromise(t=>void(0,i.setTimeout)(t,e))};let a=[],u=[],h=0;const l=Promise.resolve();function f(e){0===h&&l.then(d),h++===a.length?a.push(e):a[h-1]=e}function d(){const e=h;[h,a,u]=[0,u,a];for(let t=0;t<e;++t)try{u[t](),u[t]=void 0}catch(e){(0,o.causeAsyncException)(e)}u.length>1e3&&e<.5*u.length&&u.splice((0,n.floor)(.9*u.length),u.length)}s.tick=f},{"./alias":3,"./exception":9,"./global":10,"./promise":14}],8:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.equal=void 0,s.equal=function(e,t){return e==e?e===t:t!=t}},{}],9:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.causeAsyncException=void 0,s.causeAsyncException=function(e){Promise.reject(e)}},{}],10:[function(_dereq_,module,exports){"use strict";const global="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||Function("return this")();eval("global.global = global"),module.exports=global},{}],11:[function(e,t,s){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,s,i){void 0===i&&(i=s),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,i){void 0===i&&(i=s),e[i]=t[s]}),n=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||i(t,e,s)};Object.defineProperty(s,"__esModule",{value:!0}),n(e("./list/ixlist"),s)},{"./list/ixlist":12}],12:[function(e,t,s){"use strict";var i,n;Object.defineProperty(s,"__esModule",{value:!0}),s.IxList=void 0;const r=e("../compare"),o=Symbol("cursor"),c=Symbol("length");s.IxList=class{constructor(e,t){this.capacity=e,this.index=t,this.nodes={},this.buffers={length:0},this.HEAD=0,this[i]=0,this[n]=0}get length(){return this[c]}get head(){return this.nodes[this.HEAD]}get tail(){if(0===this.length)return;const e=this.nodes;return e[e[this.HEAD].next]}get last(){if(0===this.length)return;const e=this.nodes;return e[e[this.HEAD].prev]}node(e){return this.nodes[e]}clear(){var e;this.nodes={},this.buffers={length:0},null===(e=this.index)||void 0===e||e.clear(),this.HEAD=0,this[o]=0,this[c]=0}add(e,t){var s,i;const n=this.nodes,a=n[this.HEAD];if(!a){const i=this.HEAD=this[o]=this.buffers.length>0?this.buffers[--this.buffers.length]:this.length;return++this[c],null===(s=this.index)||void 0===s||s.set(e,i),n[i]={index:i,key:e,value:t,next:i,prev:i},i}if(this.length<this.capacity){const s=this.HEAD=this[o]=this.buffers.length>0?this.buffers[--this.buffers.length]:this.length;return++this[c],null===(i=this.index)||void 0===i||i.set(e,s),n[s]={index:s,key:e,value:t,next:a.index,prev:a.prev},a.prev=n[a.prev].next=s,s}{const s=n[a.prev],i=this.HEAD=this[o]=s.index;return this.index&&!(0,r.equal)(s.key,e)&&(this.index.delete(s.key,s.index),this.index.set(e,i)),s.key=e,s.value=t,i}}put(e,t,s){const i=this.search(e,s);return i?(i.value=t,i.index):this.add(e,t)}set(e,t,s){return this.put(e,t,s),this}search(e,t=this[o]){var s;const i=this.nodes;let n;if((n=i[t])&&(0,r.equal)(n.key,e))return this[o]=t,n;if(!this.index)throw new Error("Spica: IxList: Invalid index.");return 0===this.length||n&&1===this.length?void 0:(n=i[t=null!==(s=this.index.get(e))&&void 0!==s?s:this.capacity])?(this[o]=t,n):void 0}find(e,t){if(!this.index)throw new Error("Spica: IxList: No index.");return this.search(e,t)}get(e,t){var s;return null===(s=this.find(e,t))||void 0===s?void 0:s.value}has(e,t){return void 0!==this.find(e,t)}del(e,t){var s;const i=this[o],n=this.search(e,t);if(!n)return;this[o]=i,--this[c],this.buffers[this.buffers.length++]=n.index,null===(s=this.index)||void 0===s||s.delete(n.key,n.index);const r=this.nodes;return r[n.prev].next=n.next,r[n.next].prev=n.prev,this.HEAD===n.index&&(this.HEAD=n.next),this[o]===n.index&&(this[o]=n.next),r[n.index]=void 0,n}delete(e,t){return void 0!==this.del(e,t)}unshift(e,t){return this.add(e,t)}shift(){const e=this.nodes[this.HEAD];return e&&this.del(e.key,e.index)}push(e,t){return this.HEAD=this.nodes[this.add(e,t)].next}pop(){if(0===this.length)return;const e=this.nodes,t=e[e[this.HEAD].prev];return t&&this.del(t.key,t.index)}*[(i=o,n=c,Symbol.iterator)](){const e=this.nodes;for(let t=e[this.HEAD],s=0;t&&s<this.length;(t=e[t.next])&&++s)yield[t.key,t.value]}insert(e,t){if(e===t)return!1;const s=this.nodes,i=s[e];if(!i)return!1;const n=s[t];if(!n)return!1;if(i.next===n.index)return!1;const r=s[n.prev],o=s[i.prev],c=s[i.next];return r.next=i.index,i.next=n.index,n.prev=i.index,i.prev=r.index,o.next=c.index,c.prev=o.index,!0}moveToHead(e){return!(this.length<=1)&&(e!==this.HEAD&&(!!this.nodes[e]&&(this.insert(e,this.HEAD),this.HEAD=e,!0)))}moveToPrev(e){if(this.length<=1)return!1;if(e===this.HEAD)return!1;const t=this.nodes[e];return!!t&&(this.insert(t.index,t.prev),t.next===this.HEAD&&(this.HEAD=t.index),!0)}swap(e,t){if(this.length<=1)return!1;if(e===t)return!1;const s=this.nodes,i=s[e],n=s[t];if(!i||!n)return!1;if(i.next===n.index)return this.moveToPrev(t);if(n.next===i.index)return this.moveToPrev(e);switch(this.insert(n.index,i.index),this.insert(i.index,n.next),this.HEAD){case i.index:this.HEAD=n.index;break;case n.index:this.HEAD=i.index}return!0}}},{"../compare":8}],13:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.noop=void 0,s.noop=function(){}},{}],14:[function(e,t,s){"use strict";var i,n;Object.defineProperty(s,"__esModule",{value:!0}),s.never=s.isPromiseLike=s.Internal=s.AtomicPromise=void 0;const r=e("./global"),o=e("./alias"),c=e("./noop"),a=Symbol.for("spica/promise::internal");class u{constructor(e){this[i]="Promise",this[n]=new h;try{e(e=>void this[a].resolve(e),e=>void this[a].reject(e))}catch(e){this[a].reject(e)}}static get[Symbol.species](){return u}static all(e){return new u((t,s)=>{const i=(0,o.isArray)(e)?e:[...e],n=(0,r.Array)(i.length);let c=0;for(let e=0;e<i.length;++e){const r=i[e];if(d(r)){if(p(r)){const{status:t}=r[a];switch(t.state){case 2:n[e]=t.value,++c;continue;case 3:s(t.reason),e=i.length;continue}}r.then(s=>{n[e]=s,++c===i.length&&t(n)},t=>{s(t),e=i.length})}else n[e]=r,++c}c===i.length&&t(n)})}static race(e){return new u((t,s)=>{const i=(0,o.isArray)(e)?e:[...e];for(let e=0;e<i.length;++e){const n=i[e];if(!d(n))return t(n);if(p(n)){const{status:e}=n[a];switch(e.state){case 2:return t(e.value);case 3:return s(e.reason)}}}let n=!1;for(let e=0;e<i.length;++e){if(i[e].then(e=>{t(e),n=!0},e=>{s(e),n=!0}),n)return}})}static allSettled(e){return new u(t=>{const s=(0,o.isArray)(e)?e:[...e],i=(0,r.Array)(s.length);let n=0;for(let e=0;e<s.length;++e){const r=s[e];if(d(r)){if(p(r)){const{status:t}=r[a];switch(t.state){case 2:i[e]={status:"fulfilled",value:t.value},++n;continue;case 3:i[e]={status:"rejected",reason:t.reason},++n;continue}}r.then(r=>{i[e]={status:"fulfilled",value:r},++n===s.length&&t(i)},r=>{i[e]={status:"rejected",reason:r},++n===s.length&&t(i)})}else i[e]={status:"fulfilled",value:r},++n}n===s.length&&t(i)})}static resolve(e){return new u(t=>t(e))}static reject(e){return new u((t,s)=>s(e))}then(e,t){return new u((s,i)=>this[a].then(s,i,e,t))}catch(e){return this.then(void 0,e)}finally(e){return this.then(e,e).then(()=>this)}}s.AtomicPromise=u,i=Symbol.toStringTag,n=a;class h{constructor(){this.status={state:0},this.fulfillReactions=[],this.rejectReactions=[]}get isPending(){return 0===this.status.state}resolve(e){if(0===this.status.state){if(!d(e))return this.status={state:2,value:e},this.resume();if(p(e)){const t=e[a];switch(t.status.state){case 2:case 3:return this.status=t.status,this.resume();default:return t.then(()=>(this.status=t.status,this.resume()),()=>(this.status=t.status,this.resume()))}}this.status={state:1,promise:e},e.then(e=>{this.status={state:2,value:e},this.resume()},e=>{this.status={state:3,reason:e},this.resume()})}}reject(e){if(0===this.status.state)return this.status={state:3,reason:e},this.resume()}then(e,t,s,i){const{status:n,fulfillReactions:r,rejectReactions:o}=this;switch(n.state){case 2:if(0!==r.length)break;return f(e,t,e,s,n.value);case 3:if(0!==o.length)break;return f(e,t,t,i,n.reason)}r.push([e,t,e,s]),o.push([e,t,t,i])}resume(){const{status:e,fulfillReactions:t,rejectReactions:s}=this;switch(e.state){case 0:case 1:return;case 2:if(0!==s.length&&(this.rejectReactions=[]),0===t.length)return;return l(t,e.value),void(this.fulfillReactions=[]);case 3:if(0!==t.length&&(this.fulfillReactions=[]),0===s.length)return;return l(s,e.reason),void(this.rejectReactions=[])}}}function l(e,t){for(let s=0;s<e.length;++s){const i=e[s];f(i[0],i[1],i[2],i[3],t)}}function f(e,t,s,i,n){if(!i)return s(n);try{e(i(n))}catch(e){t(e)}}function d(e){return null!==e&&"object"==typeof e&&"function"==typeof e.then}function p(e){return a in e}s.Internal=h,s.isPromiseLike=d,s.never=new class e extends Promise{static get[Symbol.species](){return e}constructor(){super(c.noop)}then(){return this}catch(){return this}finally(){return this}}},{"./alias":3,"./global":10,"./noop":13}],15:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.tuple=void 0,s.tuple=function(...e){return e}},{}],16:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.isPrimitive=s.isType=s.type=void 0;const i=e("./alias"),n=Object.prototype.toString.call.bind(Object.prototype.toString),r=Object.prototype,o=Array.prototype;function c(e){if(void 0===e)return"undefined";if(null===e)return"null";const t=typeof e;if("object"===t){const t=(0,i.ObjectGetPrototypeOf)(e);return t===r||null===t?"Object":t===o?"Array":n(e).slice(8,-1)}return"function"===t?"Function":t}s.type=c,s.isType=function(e,t){return"object"===t?null!==e&&typeof e===t:"function"===t?typeof e===t:c(e)===t},s.isPrimitive=function(e){const t=typeof e;return"object"!==t&&"function"!==t||null===e}},{"./alias":3}],"dw-cache":[function(e,t,s){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,s,i){void 0===i&&(i=s),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,i){void 0===i&&(i=s),e[i]=t[s]}),n=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||i(t,e,s)};Object.defineProperty(s,"__esModule",{value:!0}),n(e("spica/cache"),s)},{"spica/cache":6}]},{},[1,2,"dw-cache"]),function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof module&&module.exports?module.exports=t():Object.assign(e,t())}("undefined"!=typeof self?self:this,function(){return require("dw-cache")}); |
{ | ||
"name": "dw-cache", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"description": "Dual window cache adaptively coordinates the ratio of LRU to LFU using the two sliding windows.", | ||
@@ -45,3 +45,3 @@ "private": false, | ||
"gulp-unassert": "^2.0.0", | ||
"karma": "^6.1.1", | ||
"karma": "^6.1.2", | ||
"karma-chrome-launcher": "^3.1.0", | ||
@@ -54,7 +54,7 @@ "karma-coverage-istanbul-instrumenter": "^1.0.3", | ||
"mocha": "^8.3.1", | ||
"npm-check-updates": "^11.1.10", | ||
"npm-check-updates": "^11.2.0", | ||
"power-assert": "^1.6.1", | ||
"spica": "0.0.464", | ||
"spica": "0.0.466", | ||
"tsify": "^5.0.2", | ||
"typescript": "4.3.0-dev.20210307", | ||
"typescript": "4.3.0-dev.20210308", | ||
"vinyl-buffer": "^1.0.1", | ||
@@ -61,0 +61,0 @@ "vinyl-source-stream": "^2.0.0" |
@@ -20,29 +20,29 @@ # Dual Window Cache | ||
``` | ||
'LRU hit rate even 100', 9.9 | ||
'DWC hit rate even 100', 9.98 | ||
'LFU ratio even 100', 31, 31 | ||
'DWC / LRU hit rate ratio even 100', '100%' | ||
'LRU hit rate even 100', 10.148 | ||
'DWC hit rate even 100', 10.1365 | ||
'LFU ratio even 100', 10, 10 | ||
'DWC / LRU hit rate ratio even 100', '99%' | ||
'LRU hit rate uneven 100', 18.562 | ||
'DWC hit rate uneven 100', 37.5645 | ||
'LFU ratio uneven 100', 98, 97 | ||
'LRU hit rate uneven 100', 18.5135 | ||
'DWC hit rate uneven 100', 37.4355 | ||
'LFU ratio uneven 100', 100, 97 | ||
'DWC / LRU hit rate ratio uneven 100', '202%' | ||
'LRU hit rate uneven 100 transitive distribution', 18.3415 | ||
'DWC hit rate uneven 100 transitive distribution', 37.9475 | ||
'LFU ratio uneven 100 transitive distribution', 98, 97 | ||
'LRU hit rate uneven 100 transitive distribution', 18.3445 | ||
'DWC hit rate uneven 100 transitive distribution', 37.869 | ||
'LFU ratio uneven 100 transitive distribution', 99, 95 | ||
'DWC / LRU hit rate ratio uneven 100 transitive distribution', '206%' | ||
'LRU hit rate uneven 100 transitive bias', 17.527 | ||
'DWC hit rate uneven 100 transitive bias', 16.3925 | ||
'LFU ratio uneven 100 transitive bias', 54, 54 | ||
'DWC / LRU hit rate ratio uneven 100 transitive bias', '93%' | ||
'LRU hit rate uneven 100 transitive bias', 17.4255 | ||
'DWC hit rate uneven 100 transitive bias', 16.398 | ||
'LFU ratio uneven 100 transitive bias', 39, 39 | ||
'DWC / LRU hit rate ratio uneven 100 transitive bias', '94%' | ||
'LRU hit rate uneven 100 sequential', 14.1095 | ||
'DWC hit rate uneven 100 sequential', 39.128 | ||
'LFU ratio uneven 100 sequential', 100, 99 | ||
'DWC / LRU hit rate ratio uneven 100 sequential', '277%' | ||
'LRU hit rate uneven 100 sequential', 14.03 | ||
'DWC hit rate uneven 100 sequential', 39.202 | ||
'LFU ratio uneven 100 sequential', 100, 98 | ||
'DWC / LRU hit rate ratio uneven 100 sequential', '279%' | ||
'LRU hit rate uneven 100 adversarial', 42.074 | ||
'DWC hit rate uneven 100 adversarial', 42.649 | ||
'LRU hit rate uneven 100 adversarial', 42.0645 | ||
'DWC hit rate uneven 100 adversarial', 42.6775 | ||
'LFU ratio uneven 100 adversarial', 10, 10 | ||
@@ -52,29 +52,28 @@ 'DWC / LRU hit rate ratio uneven 100 adversarial', '101%' | ||
https://github.com/falsandtru/spica/runs/2051018534 | ||
https://github.com/falsandtru/spica/runs/2061824226 | ||
### Benchmark (ops/sec) | ||
Slower x0.2-0.5 of [lru-cache](https://www.npmjs.com/package/lru-cache). | ||
Slower x0.0-0.2 of [lru-cache](https://www.npmjs.com/package/lru-cache). | ||
|Operation |dw-cache |lru-cache|Faster| | ||
|:-----------------|--------:|--------:|-----:| | ||
|set 100 (hit) | 11,404K | 7,523K | 51% | | ||
|set 1,000 (hit) | 13,133K | 7,299K | 79% | | ||
|set 10,000 (hit) | 11,907K | 7,905K | 50% | | ||
|set 100,000 (hit) | 8,204K | 6,326K | 29% | | ||
|set 100 (miss)| 4,139K | 2,693K | 53% | | ||
|set 1,000 (miss)| 3,726K | 5,126K | -28% | | ||
|set 10,000 (miss)| 2,467K | 3,161K | -22% | | ||
|set 100,000 (miss)| 1,362K | 1,771K | -24% | | ||
|get 100 (hit) | 7,633K | 12,656K | -40% | | ||
|get 1,000 (hit) | 9,189K | 11,638K | -22% | | ||
|get 10,000 (hit) | 10,022K | 11,439K | -13% | | ||
|get 100,000 (hit) | 7,639K | 8,563K | -11% | | ||
|get 100 (miss)| 20,562K | 20,484K | 0% | | ||
|get 1,000 (miss)| 19,942K | 18,580K | 7% | | ||
|get 10,000 (miss)| 20,401K | 19,310K | 5% | | ||
|get 100,000 (miss)| 14,883K | 14,011K | 6% | | ||
``` | ||
'LRUCache get/set 100 x 4,363,797 ops/sec ±0.86% (61 runs sampled)' | ||
https://github.com/falsandtru/spica/runs/2051028115 | ||
'DW-Cache get/set 100 x 3,309,959 ops/sec ±0.62% (65 runs sampled)' | ||
'LRUCache get/set 1,000 x 3,052,910 ops/sec ±6.82% (49 runs sampled)' | ||
'DW-Cache get/set 1,000 x 3,409,339 ops/sec ±0.94% (62 runs sampled)' | ||
'LRUCache get/set 10,000 x 2,718,037 ops/sec ±3.98% (50 runs sampled)' | ||
'DW-Cache get/set 10,000 x 2,595,130 ops/sec ±3.02% (58 runs sampled)' | ||
'LRUCache get/set 100,000 x 1,463,442 ops/sec ±2.76% (56 runs sampled)' | ||
'DW-Cache get/set 100,000 x 1,454,421 ops/sec ±4.33% (56 runs sampled)' | ||
``` | ||
https://github.com/falsandtru/spica/runs/2061836649 | ||
## API | ||
@@ -81,0 +80,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
526160
12397
106