foxts 3.0.0 → 3.0.1

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.
Files changed (119) hide show
  1. package/dist/cjs/add-array-elements-to-set.js +0 -1
  2. package/dist/cjs/ahocorasick.js +0 -1
  3. package/dist/cjs/append-set-elements-to-array.js +0 -1
  4. package/dist/cjs/async-write-to-stream.js +0 -1
  5. package/dist/cjs/bitwise.js +0 -1
  6. package/dist/cjs/create-fixed-array.js +0 -1
  7. package/dist/cjs/detect-eol.js +0 -1
  8. package/dist/cjs/escape-html.js +0 -1
  9. package/dist/cjs/escape-string-regexp.js +0 -1
  10. package/dist/cjs/fast-string-array-join.js +0 -1
  11. package/dist/cjs/fifo.js +0 -1
  12. package/dist/cjs/fnv1a.js +0 -1
  13. package/dist/cjs/fnv1a52.js +0 -1
  14. package/dist/cjs/guard.js +0 -1
  15. package/dist/cjs/headers-to-object.js +0 -1
  16. package/dist/cjs/identity.js +0 -1
  17. package/dist/cjs/is-probably-ip.js +0 -1
  18. package/dist/cjs/merge-headers.js +0 -1
  19. package/dist/cjs/noop.js +0 -1
  20. package/dist/cjs/once.js +0 -1
  21. package/dist/cjs/pick-random.js +1 -2
  22. package/dist/cjs/random-int.js +0 -1
  23. package/dist/cjs/repool.js +0 -1
  24. package/dist/cjs/retrie.js +0 -1
  25. package/dist/cjs/serialized-memo.js +0 -1
  26. package/dist/cjs/simple-string-hash.js +0 -1
  27. package/dist/cjs/tagged.js +0 -1
  28. package/dist/cjs/text-line-stream.d.ts +0 -2
  29. package/dist/cjs/text-line-stream.js +1 -2
  30. package/dist/cjs/wait.js +0 -1
  31. package/dist/es/add-array-elements-to-set.mjs +0 -1
  32. package/dist/es/ahocorasick.mjs +0 -1
  33. package/dist/es/append-set-elements-to-array.mjs +0 -1
  34. package/dist/es/async-write-to-stream.mjs +0 -1
  35. package/dist/es/bitwise.mjs +0 -1
  36. package/dist/es/create-fixed-array.mjs +0 -1
  37. package/dist/es/detect-eol.mjs +0 -1
  38. package/dist/es/escape-html.mjs +0 -1
  39. package/dist/es/escape-string-regexp.mjs +0 -1
  40. package/dist/es/fast-string-array-join.mjs +0 -1
  41. package/dist/es/fifo.mjs +0 -1
  42. package/dist/es/fnv1a.mjs +0 -1
  43. package/dist/es/fnv1a52.mjs +0 -1
  44. package/dist/es/guard.mjs +0 -1
  45. package/dist/es/headers-to-object.mjs +0 -1
  46. package/dist/es/identity.mjs +0 -1
  47. package/dist/es/is-probably-ip.mjs +0 -1
  48. package/dist/es/merge-headers.mjs +0 -1
  49. package/dist/es/noop.mjs +0 -1
  50. package/dist/es/once.mjs +0 -1
  51. package/dist/es/pick-random.mjs +1 -2
  52. package/dist/es/random-int.mjs +0 -1
  53. package/dist/es/repool.mjs +0 -1
  54. package/dist/es/retrie.mjs +0 -1
  55. package/dist/es/serialized-memo.mjs +0 -1
  56. package/dist/es/simple-string-hash.mjs +0 -1
  57. package/dist/es/tagged.mjs +0 -1
  58. package/dist/es/text-line-stream.d.mts +0 -2
  59. package/dist/es/text-line-stream.mjs +1 -2
  60. package/dist/es/wait.mjs +0 -1
  61. package/package.json +2 -2
  62. package/dist/cjs/add-array-elements-to-set.js.map +0 -1
  63. package/dist/cjs/ahocorasick.js.map +0 -1
  64. package/dist/cjs/append-set-elements-to-array.js.map +0 -1
  65. package/dist/cjs/async-write-to-stream.js.map +0 -1
  66. package/dist/cjs/bitwise.js.map +0 -1
  67. package/dist/cjs/create-fixed-array.js.map +0 -1
  68. package/dist/cjs/detect-eol.js.map +0 -1
  69. package/dist/cjs/escape-html.js.map +0 -1
  70. package/dist/cjs/escape-string-regexp.js.map +0 -1
  71. package/dist/cjs/fast-string-array-join.js.map +0 -1
  72. package/dist/cjs/fifo.js.map +0 -1
  73. package/dist/cjs/fnv1a.js.map +0 -1
  74. package/dist/cjs/fnv1a52.js.map +0 -1
  75. package/dist/cjs/guard.js.map +0 -1
  76. package/dist/cjs/headers-to-object.js.map +0 -1
  77. package/dist/cjs/identity.js.map +0 -1
  78. package/dist/cjs/is-probably-ip.js.map +0 -1
  79. package/dist/cjs/merge-headers.js.map +0 -1
  80. package/dist/cjs/noop.js.map +0 -1
  81. package/dist/cjs/once.js.map +0 -1
  82. package/dist/cjs/pick-random.js.map +0 -1
  83. package/dist/cjs/random-int.js.map +0 -1
  84. package/dist/cjs/repool.js.map +0 -1
  85. package/dist/cjs/retrie.js.map +0 -1
  86. package/dist/cjs/serialized-memo.js.map +0 -1
  87. package/dist/cjs/simple-string-hash.js.map +0 -1
  88. package/dist/cjs/tagged.js.map +0 -1
  89. package/dist/cjs/text-line-stream.js.map +0 -1
  90. package/dist/cjs/wait.js.map +0 -1
  91. package/dist/es/add-array-elements-to-set.mjs.map +0 -1
  92. package/dist/es/ahocorasick.mjs.map +0 -1
  93. package/dist/es/append-set-elements-to-array.mjs.map +0 -1
  94. package/dist/es/async-write-to-stream.mjs.map +0 -1
  95. package/dist/es/bitwise.mjs.map +0 -1
  96. package/dist/es/create-fixed-array.mjs.map +0 -1
  97. package/dist/es/detect-eol.mjs.map +0 -1
  98. package/dist/es/escape-html.mjs.map +0 -1
  99. package/dist/es/escape-string-regexp.mjs.map +0 -1
  100. package/dist/es/fast-string-array-join.mjs.map +0 -1
  101. package/dist/es/fifo.mjs.map +0 -1
  102. package/dist/es/fnv1a.mjs.map +0 -1
  103. package/dist/es/fnv1a52.mjs.map +0 -1
  104. package/dist/es/guard.mjs.map +0 -1
  105. package/dist/es/headers-to-object.mjs.map +0 -1
  106. package/dist/es/identity.mjs.map +0 -1
  107. package/dist/es/is-probably-ip.mjs.map +0 -1
  108. package/dist/es/merge-headers.mjs.map +0 -1
  109. package/dist/es/noop.mjs.map +0 -1
  110. package/dist/es/once.mjs.map +0 -1
  111. package/dist/es/pick-random.mjs.map +0 -1
  112. package/dist/es/random-int.mjs.map +0 -1
  113. package/dist/es/repool.mjs.map +0 -1
  114. package/dist/es/retrie.mjs.map +0 -1
  115. package/dist/es/serialized-memo.mjs.map +0 -1
  116. package/dist/es/simple-string-hash.mjs.map +0 -1
  117. package/dist/es/tagged.mjs.map +0 -1
  118. package/dist/es/text-line-stream.mjs.map +0 -1
  119. package/dist/es/wait.mjs.map +0 -1
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./identity.js");exports.addArrayElementsToSet=function(r,t,d=e.identity){return t.forEach(e=>r.add(d(e))),r};
2
- //# sourceMappingURL=add-array-elements-to-set.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});class e extends Map{constructor(e,t){super(),this.wordEnd=e,this.fail=t}}exports.createAhoCorasick=function(t){let r=new e(!1,void 0);t.forEach(t=>{let l=r;for(let r=0,o=t.length;r<o;r++){let o=t[r];if(l.has(o))l=l.get(o);else{let t=new e(!1,void 0);l.set(o,t),l=t}}l!==r&&(l.wordEnd=!0)});let l=[r];for(;l.length;){let e=l.pop();e.forEach((t,o)=>{let s=e.fail;for(;s&&!s.has(o);)s=s.fail;t.fail=s?s.get(o):r,l.push(t)})}return e=>{let t=r;for(let l=0,o=e.length;l<o;l++){let o=e[l];for(;t&&!t.has(o);)t=t.fail;if((t=t?t.get(o):r).wordEnd)return!0}return!1}};
2
- //# sourceMappingURL=ahocorasick.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./identity.js");function r(e,r,t){let n;let u=r.values();for(;!(n=u.next()).done;)e.push(t(n.value));return e}exports.appendSetElementsToArray=function(t,n,u=e.identity){if(!Array.isArray(n))return r(t,n,u);for(let e=0,i=n.length;e<i;e++)r(t,n[e],u);return t};
2
- //# sourceMappingURL=append-set-elements-to-array.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});var e=require("node:events");exports.asyncWriteToStream=function(r,n){return r.write(n)?null:e.once(r,"drain")};
2
- //# sourceMappingURL=async-write-to-stream.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});const e=e=>e>>16&65535,t=e=>65535&e,r=e=>e>>20&1023,s=e=>e>>10&1023,o=e=>1023&e;exports.bitCount=function(e){return e-=e>>1&0x55555555,((e=(0x33333333&e)+(e>>2&0x33333333))+(e>>4)&0xf0f0f0f)*0x1010101>>24},exports.deleteBit=(e,t)=>e&~t,exports.getBit=(e,t)=>!!(e&t),exports.missingBit=(e,t)=>!(e&t),exports.packThreeBits=(e,t,r)=>e<<20|t<<10|r,exports.packTwoBits=(e,t)=>e<<16|t,exports.setBit=(e,t)=>e|t,exports.unpackThreeBits=function(e,t=Array.from([,,,].keys())){return t[0]=r(e),t[1]=s(e),t[2]=o(e),t},exports.unpackThreeBitsFirst=r,exports.unpackThreeBitsSecond=s,exports.unpackThreeBitsThird=o,exports.unpackTwoBits=function(r,s=Array.from([,,].keys())){return s[0]=e(r),s[1]=t(r),s},exports.unpackTwoBitsFirst=e,exports.unpackTwoBitsSecond=t;
2
- //# sourceMappingURL=bitwise.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});const e=new Map;function t(e){return Array.from(Array(e).keys())}function r(r){if(e.has(r))return e.get(r);let n=t(r);return e.set(r,n),n}const n=new Map;function o(e){let r,o;return n.has(e)&&(o=(r=n.get(e)).deref()),o||(r=new WeakRef(o=t(e)),n.set(e,r)),o}const a="function"==typeof WeakRef?o:r,s=a(0);exports.EMPTY_ARRAY=s,exports.createFixedArray=a,exports.createFixedArrayWithGC=o,exports.createFixedArrayWithoutGC=r;
2
- //# sourceMappingURL=create-fixed-array.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.detectEol=function(e){for(let r=0,t=e.length;r<t;r++){let t=e[r];if("\n"===t)break;if("\r"===t&&"\n"===e[r+1])return"\r\n"}return"\n"};
2
- //# sourceMappingURL=detect-eol.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});const e=/["&'<>]/;exports.escapeHTML=function(t){let a=e.exec(t);if(null===a)return t;let c="",r="",s=a.index,l=0;for(let e=t.length;s<e;s++){switch(t.charCodeAt(s)){case 34:c="&quot;";break;case 38:c="&amp;";break;case 39:c="&#39;";break;case 60:c="&lt;";break;case 62:c="&gt;";break;default:continue}l!==s&&(r+=t.slice(l,s)),l=s+1,r+=c}return l===s?r:r+t.slice(l,s)};
2
- //# sourceMappingURL=escape-html.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});const e=/[$()*+.?[\\\]^{|}-]/;exports.escapeStringRegexp=function(a){let r=e.exec(a);if(null===r)return a;let c="",s="",t=r.index,b=0;for(let e=a.length;t<e;t++){switch(a.charCodeAt(t)){case 92:c="\\\\";break;case 94:c="\\^";break;case 36:c="\\$";break;case 46:c="\\.";break;case 42:c="\\*";break;case 43:c="\\+";break;case 63:c="\\?";break;case 40:c="\\(";break;case 41:c="\\)";break;case 91:c="\\[";break;case 93:c="\\]";break;case 123:c="\\{";break;case 125:c="\\}";break;case 124:c="\\|";break;case 45:c="\\x2d";break;default:continue}b!==t&&(s+=a.slice(b,t)),b=t+1,s+=c}return b===t?s:s+a.slice(b,t)};
2
- //# sourceMappingURL=escape-string-regexp.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.fastStringArrayJoin=function(e,t){let r=e.length;if(0===r)return"";let n=e[0];for(let o=1;o<r;o++)n+=t,n+=e[o];return n};
2
- //# sourceMappingURL=fast-string-array-join.js.map
package/dist/cjs/fifo.js CHANGED
@@ -1,2 +1 @@
1
1
  var e;Object.defineProperty(exports,"__esModule",{value:!0}),e=Symbol.iterator,exports.FIFO=class{constructor(){this.head=null,this.tail=null,this.$size=0,this.push=this.enqueue,this.shift=this.dequeue,this.clear()}enqueue(e){let t=[e,null];this.head?this.tail[1]=t:this.head=t,this.tail=t,this.$size++}dequeue(){let e=this.head;if(e)return this.head=this.head[1],this.$size--,e[0]}peek(){return this.head?.[0]}clear(){this.head=null,this.tail=null,this.$size=0}get size(){return this.$size}get length(){return this.$size}*[e](){let e=this.head;for(;e;)yield e[0],e=e[1]}};
2
- //# sourceMappingURL=fifo.js.map
package/dist/cjs/fnv1a.js CHANGED
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.fnv1a=function(e){let t=0x811c9dc5;for(let r=0,o=e.length;r<o;r++)t^=e.charCodeAt(r),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return t>>>0};
2
- //# sourceMappingURL=fnv1a.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.fnv1a52=function(e){let t=e.length,r=0,o=0,n=8997,f=0,l=33826,u=0,x=40164,a=0,c=52210;for(;r<t;)n^=e.charCodeAt(r++),o=435*n,f=435*l,u=435*x,a=435*c,u+=n<<8,a+=l<<8,f+=o>>>16,n=65535&o,u+=f>>>16,l=65535&f,c=a+(u>>>16)&65535,x=65535&u;return(15&c)*0x1000000000000+0x100000000*x+65536*l+(n^c>>4)};
2
- //# sourceMappingURL=fnv1a52.js.map
package/dist/cjs/guard.js CHANGED
@@ -1,2 +1 @@
1
1
  function e(e){switch(e){case null:return e=>null!==e;case void 0:return e=>void 0!==e;case!1:return e=>!1!==e;case"nullish":return e=>null!=e;case"falsy":return e=>!!e;default:s(e,"argument")}}function r(e){switch(e){case null:return e=>null===e;case void 0:return e=>void 0===e;case!1:return e=>!1===e;case"nullish":return e=>null==e;case"falsy":return e=>!e;case"truthy":return e=>!!e;default:s(e,"argument")}}Object.defineProperty(exports,"__esModule",{value:!0});const n=r("truthy"),t=r("falsy"),u=e(null),l=e("nullish");function s(e,r="value"){throw TypeError(`Unexpected ${r}: ${e} as ${JSON.stringify(typeof e)}, should be "never"`)}exports.invariant=function(e,r='[foxts/invariant] "value" is null or undefined'){if(null==e)throw TypeError(r)},exports.is=r,exports.isFalsy=t,exports.isNonNull=u,exports.isNonNullish=l,exports.isTruthy=n,exports.never=s,exports.not=e,exports.nullthrow=function(e,r='[foxts/invariant] "value" is null or undefined'){if(null==e)throw TypeError(r);return e};
2
- //# sourceMappingURL=guard.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.headersToObject=function(e){let r={};return null==e||new Headers(e).forEach((e,t)=>{r[t]=e}),r};
2
- //# sourceMappingURL=headers-to-object.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.identity=function(e){return e};
2
- //# sourceMappingURL=identity.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.isProbablyIpv4=function(e){if(e.length<7||e.length>15)return!1;let t=0;for(let r=0;r<e.length;r+=1){let l=e.charCodeAt(r);if(46===l)t+=1;else if(l<48||l>57)return!1}return 3===t&&46!==e.charCodeAt(0)&&46!==e.charCodeAt(e.length-1)},exports.isProbablyIpv6=function(e){if(e.length<3)return!1;let t=+("["===e[0]),r=e.length;if("]"===e[r-1]&&(r-=1),r-t>39)return!1;let l=!1;for(;t<r;t+=1){let r=e.charCodeAt(t);if(58===r)l=!0;else if((r<48||r>57)&&(r<97||r>102)&&(r<65||r>90))return!1}return l};
2
- //# sourceMappingURL=is-probably-ip.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.mergeHeaders=function(e,r){if(null==e)return null==r?new Headers:new Headers(r);if(null==r)return new Headers(e);let n=new Headers(e);return new Headers(r).forEach((e,r)=>{n.set(r,e)}),n},exports.mergeNodeHttpHeaders=function(e,r){return null==e?null==r?{}:r:null==r?e:Object.assign({},e,r)};
2
- //# sourceMappingURL=merge-headers.js.map
package/dist/cjs/noop.js CHANGED
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});const e=()=>{},o=Promise.resolve(),r=new Promise(e);exports.asyncNeverFn=()=>r,exports.asyncNoop=()=>o,exports.falseFn=()=>!1,exports.noop=e,exports.throwFn=()=>{throw Error()},exports.trueFn=()=>!0;
2
- //# sourceMappingURL=noop.js.map
package/dist/cjs/once.js CHANGED
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.once=function(e){let t,o=!1;return()=>(o||(o=!0,t=e()),t)};
2
- //# sourceMappingURL=once.js.map
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0});var e=require("node:crypto");function t(e){return function(t,n=1){if(n>t.length)throw TypeError("Count must be lower or the same as the number of picks");let r=t.slice(),o=[];for(;n--;)1===r.length?o.push(r[0]):o.push(r.splice(e(0,r.length-1),1)[0]);return o}}const n=t(e.randomInt);function r(e){return function(t){return 1===t.length?t[0]:t[e(0,t.length-1)]}}const o=r(e.randomInt);exports.createPickOne=r,exports.createPickRandom=t,exports.pickOne=o,exports.pickRandom=n;
2
- //# sourceMappingURL=pick-random.js.map
1
+ Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./random-int.js");function t(e){return function(t,n=1){if(n>t.length)throw TypeError("Count must be lower or the same as the number of picks");let r=t.slice(),o=[];for(;n--;)1===r.length?o.push(r[0]):o.push(r.splice(e(0,r.length-1),1)[0]);return o}}const n=t(e.randomInt);function r(e){return function(t){return 1===t.length?t[0]:t[e(0,t.length-1)]}}const o=r(e.randomInt);exports.createPickOne=r,exports.createPickRandom=t,exports.pickOne=o,exports.pickRandom=n;
@@ -1,2 +1 @@
1
1
  function e(e){return(t,o)=>Math.floor(e()*(o-t+1))+t}Object.defineProperty(exports,"__esModule",{value:!0});const t=e(Math.random);exports.createRandomInt=e,exports.randomInt=t;
2
- //# sourceMappingURL=random-int.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.Repool=class{constructor(e){this.createObject=e;let t=e();this.tail=t,this.head=t}get(){let e=this.head;if(e.next)this.head=e.next;else{let e=this.createObject();this.tail=e,this.head=e}return e.next=null,e}release(e){this.tail.next=e,this.tail=e}};
2
- //# sourceMappingURL=repool.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./noop.js");const t=new Set([".","?","*","+","^","$","|","(",")","{","}","[","]","\\"]);function n(e,r=!1){let l={},o=(e,t)=>{let n;let r=l;for(let l=0,o=e.length;l<o;++l)(n=e.charAt(l))in r||(r[n]=t?{"":""}:{}),r=r[n];r[""]=""};for(let t=0,n=e.length;t<n;++t)o(e[t],r);let i=()=>(function e(n){let r,l,o=!1,i=!1,u=[],s=[];for(let r in n){if(!r){o=!0;continue}((l=e(n[r]))?u:s).push(("-"===r?"\\x2d":t.has(r)?"\\"+r:r)+l)}return o&&null==l?"":(i=!u.length,s.length&&u.push(s[1]?"["+s.join("")+"]":s[0]),r=u[1]?"(?:"+u.join("|")+")":u[0],o&&(r=i?r+"?":"(?:"+r+")?"),r||"")})(l);return{tree:l,add:o,toString:i,toRe:()=>new RegExp((r?"^":"")+i())}}exports.createRetrieKeywordFilter=function(t,r=!1){if(0===t.length)return e.falseFn;let l=n(t,r).toRe();return l.test.bind(l)},exports.retrie=n;
2
- //# sourceMappingURL=retrie.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./fast-string-array-join.js"),a=require("./identity.js"),t=require("./noop.js");exports.createMemoize=function(i,{onlyUseCachedIfFail:n=!1,resetTtlOnHit:r=!1,defaultTtl:l=6048e5,onCacheUpdate:s=t.noop,onCacheMiss:o=t.noop,onCacheHit:u=t.noop,keyHasher:d=a.identity,argHasher:f}){return function(t,h){if(h?.temporaryBypass)return(...e)=>Promise.resolve(t(...e));let m=h&&"serializer"in h?h.serializer:a.identity,c=h&&"deserializer"in h?h.deserializer:a.identity,p=h?.ttl??l,y=t.toString(),w=d(y);return async function(...a){let l=e.fastStringArrayJoin(await Promise.all([w,f(a)]),"|"),d=t.name||y||l,h=i.get(l);if(h&&"object"==typeof h&&"then"in h&&(h=await h),n)try{let e=await t(...a);s(l,{humanReadableName:d,isUseCachedIfFail:!0});let n=i.set(l,m(e),p);return n&&"then"in n&&await n,e}catch(e){if(null==h)throw o(l,{humanReadableName:d,isUseCachedIfFail:!0}),e;if(r){let e=i.updateTtl?.(l,p);e&&"then"in e&&await e}return u(l,{humanReadableName:d,isUseCachedIfFail:!0}),c(h)}else{if(null==h){o(l,{humanReadableName:d,isUseCachedIfFail:!1});let e=await t(...a),n=i.set(l,m(e),p);return n&&"then"in n&&await n,e}if(u(l,{humanReadableName:d,isUseCachedIfFail:!1}),r){let e=i.updateTtl?.(l,p);e&&"then"in e&&await e}return c(h)}}}};
2
- //# sourceMappingURL=serialized-memo.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./fnv1a52.js");exports.simpleStringHash=function(r){return e.fnv1a52(r).toString(36)+r.length.toString(36)};
2
- //# sourceMappingURL=simple-string-hash.js.map
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.tagged=function(e,...r){return e.reduce((e,t,o)=>e+t+(r[o]??""),"")};
2
- //# sourceMappingURL=tagged.js.map
@@ -1,5 +1,3 @@
1
- import { TransformStream } from 'node:stream/web';
2
-
3
1
  interface TextLineStreamOptions {
4
2
  /** Allow splitting by solo \r */
5
3
  allowCR?: boolean;
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0});var e=require("node:stream/web"),r=require("./noop.js");class n extends e.TransformStream{constructor({allowCR:e=!1,skipEmptyLines:n=!1}={}){let t="",l=0,s=e?(e,r,t)=>{let s=e.indexOf("\r",l);if(-1!==s&&s!==e.length-1&&(-1===r||r-1>s)){let r=e.slice(l,s);return n&&0===r.length||t.enqueue(e.slice(l,s)),l=s+1,!0}return!1}:r.falseFn;super({transform(e,r){for(e=t+e,l=0;;){let t=e.indexOf("\n",l);if(s(e,t,r))continue;if(-1===t)break;let u=t;"\r"===e[t-1]&&u--;let i=e.slice(l,u);if(n&&0===i.length){l=t+1;continue}r.enqueue(i),l=t+1}t=e.slice(l)},flush(r){t.length>0&&(e&&"\r"===t[t.length-1]?r.enqueue(t.slice(0,-1)):r.enqueue(t))}})}}exports.TextLineStream=n;
2
- //# sourceMappingURL=text-line-stream.js.map
1
+ Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./noop.js");class n extends TransformStream{constructor({allowCR:n=!1,skipEmptyLines:t=!1}={}){let r="",l=0,s=n?(e,n,r)=>{let s=e.indexOf("\r",l);if(-1!==s&&s!==e.length-1&&(-1===n||n-1>s)){let n=e.slice(l,s);return t&&0===n.length||r.enqueue(e.slice(l,s)),l=s+1,!0}return!1}:e.falseFn;super({transform(e,n){for(e=r+e,l=0;;){let r=e.indexOf("\n",l);if(s(e,r,n))continue;if(-1===r)break;let u=r;"\r"===e[r-1]&&u--;let i=e.slice(l,u);if(t&&0===i.length){l=r+1;continue}n.enqueue(i),l=r+1}r=e.slice(l)},flush(e){r.length>0&&(n&&"\r"===r[r.length-1]?e.enqueue(r.slice(0,-1)):e.enqueue(r))}})}}exports.TextLineStream=n;
package/dist/cjs/wait.js CHANGED
@@ -1,2 +1 @@
1
1
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.wait=function(e){return new Promise(t=>{setTimeout(t,e)})},exports.waitWithAbort=function(e,t){return new Promise((r,o)=>{if(t.aborted){o(t.reason);return}let n=setTimeout(()=>{t.removeEventListener("abort",i),r()},e);function i(){clearTimeout(n),t.removeEventListener("abort",i),o(t.reason)}t.addEventListener("abort",i)})};
2
- //# sourceMappingURL=wait.js.map
@@ -1,2 +1 @@
1
1
  import{identity as r}from"./identity.mjs";function t(e,o,d=r){return o.forEach(r=>e.add(d(r))),e}export{t as addArrayElementsToSet};
2
- //# sourceMappingURL=add-array-elements-to-set.mjs.map
@@ -1,2 +1 @@
1
1
  class e extends Map{constructor(e,t){super(),this.wordEnd=e,this.fail=t}}function t(t){let r=new e(!1,void 0);t.forEach(t=>{let l=r;for(let r=0,o=t.length;r<o;r++){let o=t[r];if(l.has(o))l=l.get(o);else{let t=new e(!1,void 0);l.set(o,t),l=t}}l!==r&&(l.wordEnd=!0)});let l=[r];for(;l.length;){let e=l.pop();e.forEach((t,o)=>{let f=e.fail;for(;f&&!f.has(o);)f=f.fail;t.fail=f?f.get(o):r,l.push(t)})}return e=>{let t=r;for(let l=0,o=e.length;l<o;l++){let o=e[l];for(;t&&!t.has(o);)t=t.fail;if((t=t?t.get(o):r).wordEnd)return!0}return!1}}export{t as createAhoCorasick};
2
- //# sourceMappingURL=ahocorasick.mjs.map
@@ -1,2 +1 @@
1
1
  import{identity as e}from"./identity.mjs";function r(e,r,t){let n;let o=r.values();for(;!(n=o.next()).done;)e.push(t(n.value));return e}function t(n,o,u=e){if(!Array.isArray(o))return r(n,o,u);for(let e=0,t=o.length;e<t;e++)r(n,o[e],u);return n}export{t as appendSetElementsToArray};
2
- //# sourceMappingURL=append-set-elements-to-array.mjs.map
@@ -1,2 +1 @@
1
1
  import{once as r}from"node:events";function e(e,n){return e.write(n)?null:r(e,"drain")}export{e as asyncWriteToStream};
2
- //# sourceMappingURL=async-write-to-stream.mjs.map
@@ -1,2 +1 @@
1
1
  function t(t){return t-=t>>1&0x55555555,((t=(0x33333333&t)+(t>>2&0x33333333))+(t>>4)&0xf0f0f0f)*0x1010101>>24}let e=(t,e)=>!!(t&e),i=(t,e)=>!(t&e),r=(t,e)=>t|e,n=(t,e)=>t&~e,s=(t,e)=>t<<16|e,c=t=>t>>16&65535,u=t=>65535&t;function o(t,e=Array.from([,,].keys())){return e[0]=c(t),e[1]=u(t),e}let B=(t,e,i)=>t<<20|e<<10|i,a=t=>t>>20&1023,k=t=>t>>10&1023,p=t=>1023&t;function T(t,e=Array.from([,,,].keys())){return e[0]=a(t),e[1]=k(t),e[2]=p(t),e}export{t as bitCount,n as deleteBit,e as getBit,i as missingBit,B as packThreeBits,s as packTwoBits,r as setBit,T as unpackThreeBits,a as unpackThreeBitsFirst,k as unpackThreeBitsSecond,p as unpackThreeBitsThird,o as unpackTwoBits,c as unpackTwoBitsFirst,u as unpackTwoBitsSecond};
2
- //# sourceMappingURL=bitwise.mjs.map
@@ -1,2 +1 @@
1
1
  let e=new Map;function t(e){return Array.from(Array(e).keys())}function r(r){if(e.has(r))return e.get(r);let n=t(r);return e.set(r,n),n}let n=new Map;function a(e){let r,a;return n.has(e)&&(a=(r=n.get(e)).deref()),a||(r=new WeakRef(a=t(e)),n.set(e,r)),a}let f="function"==typeof WeakRef?a:r,i=f(0);export{i as EMPTY_ARRAY,f as createFixedArray,a as createFixedArrayWithGC,r as createFixedArrayWithoutGC};
2
- //# sourceMappingURL=create-fixed-array.mjs.map
@@ -1,2 +1 @@
1
1
  function e(e){for(let n=0,r=e.length;n<r;n++){let r=e[n];if("\n"===r)break;if("\r"===r&&"\n"===e[n+1])return"\r\n"}return"\n"}export{e as detectEol};
2
- //# sourceMappingURL=detect-eol.mjs.map
@@ -1,2 +1 @@
1
1
  let e=/["&'<>]/;function t(t){let a=e.exec(t);if(null===a)return t;let c="",r="",l=a.index,n=0;for(let e=t.length;l<e;l++){switch(t.charCodeAt(l)){case 34:c="&quot;";break;case 38:c="&amp;";break;case 39:c="&#39;";break;case 60:c="&lt;";break;case 62:c="&gt;";break;default:continue}n!==l&&(r+=t.slice(n,l)),n=l+1,r+=c}return n===l?r:r+t.slice(n,l)}export{t as escapeHTML};
2
- //# sourceMappingURL=escape-html.mjs.map
@@ -1,2 +1 @@
1
1
  let e=/[$()*+.?[\\\]^{|}-]/;function a(a){let c=e.exec(a);if(null===c)return a;let r="",s="",b=c.index,k=0;for(let e=a.length;b<e;b++){switch(a.charCodeAt(b)){case 92:r="\\\\";break;case 94:r="\\^";break;case 36:r="\\$";break;case 46:r="\\.";break;case 42:r="\\*";break;case 43:r="\\+";break;case 63:r="\\?";break;case 40:r="\\(";break;case 41:r="\\)";break;case 91:r="\\[";break;case 93:r="\\]";break;case 123:r="\\{";break;case 125:r="\\}";break;case 124:r="\\|";break;case 45:r="\\x2d";break;default:continue}k!==b&&(s+=a.slice(k,b)),k=b+1,s+=r}return k===b?s:s+a.slice(k,b)}export{a as escapeStringRegexp};
2
- //# sourceMappingURL=escape-string-regexp.mjs.map
@@ -1,2 +1 @@
1
1
  function t(t,r){let e=t.length;if(0===e)return"";let n=t[0];for(let f=1;f<e;f++)n+=r,n+=t[f];return n}export{t as fastStringArrayJoin};
2
- //# sourceMappingURL=fast-string-array-join.mjs.map
package/dist/es/fifo.mjs CHANGED
@@ -1,2 +1 @@
1
1
  var e;e=Symbol.iterator;class t{constructor(){this.head=null,this.tail=null,this.$size=0,this.push=this.enqueue,this.shift=this.dequeue,this.clear()}enqueue(e){let t=[e,null];this.head?this.tail[1]=t:this.head=t,this.tail=t,this.$size++}dequeue(){let e=this.head;if(e)return this.head=this.head[1],this.$size--,e[0]}peek(){return this.head?.[0]}clear(){this.head=null,this.tail=null,this.$size=0}get size(){return this.$size}get length(){return this.$size}*[e](){let e=this.head;for(;e;)yield e[0],e=e[1]}}export{t as FIFO};
2
- //# sourceMappingURL=fifo.mjs.map
package/dist/es/fnv1a.mjs CHANGED
@@ -1,2 +1 @@
1
1
  function t(t){let e=0x811c9dc5;for(let n=0,r=t.length;n<r;n++)e^=t.charCodeAt(n),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);return e>>>0}export{t as fnv1a};
2
- //# sourceMappingURL=fnv1a.mjs.map
@@ -1,2 +1 @@
1
1
  function t(t){let e=t.length,n=0,r=0,o=8997,f=0,x=33826,a=0,c=40164,h=0,l=52210;for(;n<e;)o^=t.charCodeAt(n++),r=435*o,f=435*x,a=435*c,h=435*l,a+=o<<8,h+=x<<8,f+=r>>>16,o=65535&r,a+=f>>>16,x=65535&f,l=h+(a>>>16)&65535,c=65535&a;return(15&l)*0x1000000000000+0x100000000*c+65536*x+(o^l>>4)}export{t as fnv1a52};
2
- //# sourceMappingURL=fnv1a52.mjs.map
package/dist/es/guard.mjs CHANGED
@@ -1,2 +1 @@
1
1
  function n(n){switch(n){case null:return n=>null!==n;case void 0:return n=>void 0!==n;case!1:return n=>!1!==n;case"nullish":return n=>null!=n;case"falsy":return n=>!!n;default:a(n,"argument")}}function r(n){switch(n){case null:return n=>null===n;case void 0:return n=>void 0===n;case!1:return n=>!1===n;case"nullish":return n=>null==n;case"falsy":return n=>!n;case"truthy":return n=>!!n;default:a(n,"argument")}}let e=r("truthy"),u=r("falsy"),l=n(null),t=n("nullish");function i(n,r='[foxts/invariant] "value" is null or undefined'){if(null==n)throw TypeError(r);return n}function s(n,r='[foxts/invariant] "value" is null or undefined'){if(null==n)throw TypeError(r)}function a(n,r="value"){throw TypeError(`Unexpected ${r}: ${n} as ${JSON.stringify(typeof n)}, should be "never"`)}export{s as invariant,r as is,u as isFalsy,l as isNonNull,t as isNonNullish,e as isTruthy,a as never,n as not,i as nullthrow};
2
- //# sourceMappingURL=guard.mjs.map
@@ -1,2 +1 @@
1
1
  function e(e){let r={};return null==e||new Headers(e).forEach((e,n)=>{r[n]=e}),r}export{e as headersToObject};
2
- //# sourceMappingURL=headers-to-object.mjs.map
@@ -1,2 +1 @@
1
1
  function t(t){return t}export{t as identity};
2
- //# sourceMappingURL=identity.mjs.map
@@ -1,2 +1 @@
1
1
  function e(e){if(e.length<7||e.length>15)return!1;let t=0;for(let r=0;r<e.length;r+=1){let n=e.charCodeAt(r);if(46===n)t+=1;else if(n<48||n>57)return!1}return 3===t&&46!==e.charCodeAt(0)&&46!==e.charCodeAt(e.length-1)}function t(e){if(e.length<3)return!1;let t=+("["===e[0]),r=e.length;if("]"===e[r-1]&&(r-=1),r-t>39)return!1;let n=!1;for(;t<r;t+=1){let r=e.charCodeAt(t);if(58===r)n=!0;else if((r<48||r>57)&&(r<97||r>102)&&(r<65||r>90))return!1}return n}export{e as isProbablyIpv4,t as isProbablyIpv6};
2
- //# sourceMappingURL=is-probably-ip.mjs.map
@@ -1,2 +1 @@
1
1
  function e(e,n){if(null==e)return null==n?new Headers:new Headers(n);if(null==n)return new Headers(e);let r=new Headers(e);return new Headers(n).forEach((e,n)=>{r.set(n,e)}),r}function n(e,n){return null==e?null==n?{}:n:null==n?e:Object.assign({},e,n)}export{e as mergeHeaders,n as mergeNodeHttpHeaders};
2
- //# sourceMappingURL=merge-headers.mjs.map
package/dist/es/noop.mjs CHANGED
@@ -1,2 +1 @@
1
1
  let e=()=>{},o=()=>!0,r=()=>!1,n=()=>{throw Error()},s=Promise.resolve(),t=()=>s,F=new Promise(e),a=()=>F;export{a as asyncNeverFn,t as asyncNoop,r as falseFn,e as noop,n as throwFn,o as trueFn};
2
- //# sourceMappingURL=noop.mjs.map
package/dist/es/once.mjs CHANGED
@@ -1,2 +1 @@
1
1
  function e(e){let n,t=!1;return()=>(t||(t=!0,n=e()),n)}export{e as once};
2
- //# sourceMappingURL=once.mjs.map
@@ -1,2 +1 @@
1
- import{randomInt as e}from"node:crypto";function t(e){return function(t,n=1){if(n>t.length)throw TypeError("Count must be lower or the same as the number of picks");let r=t.slice(),o=[];for(;n--;)1===r.length?o.push(r[0]):o.push(r.splice(e(0,r.length-1),1)[0]);return o}}let n=t(e);function r(e){return function(t){return 1===t.length?t[0]:t[e(0,t.length-1)]}}let o=r(e);export{r as createPickOne,t as createPickRandom,o as pickOne,n as pickRandom};
2
- //# sourceMappingURL=pick-random.mjs.map
1
+ import{randomInt as e}from"./random-int.mjs";function t(e){return function(t,n=1){if(n>t.length)throw TypeError("Count must be lower or the same as the number of picks");let r=t.slice(),o=[];for(;n--;)1===r.length?o.push(r[0]):o.push(r.splice(e(0,r.length-1),1)[0]);return o}}let n=t(e);function r(e){return function(t){return 1===t.length?t[0]:t[e(0,t.length-1)]}}let o=r(e);export{r as createPickOne,t as createPickRandom,o as pickOne,n as pickRandom};
@@ -1,2 +1 @@
1
1
  function t(t){return(n,o)=>Math.floor(t()*(o-n+1))+n}let n=t(Math.random);export{t as createRandomInt,n as randomInt};
2
- //# sourceMappingURL=random-int.mjs.map
@@ -1,2 +1 @@
1
1
  class t{constructor(t){this.createObject=t;let e=t();this.tail=e,this.head=e}get(){let t=this.head;if(t.next)this.head=t.next;else{let t=this.createObject();this.tail=t,this.head=t}return t.next=null,t}release(t){this.tail.next=t,this.tail=t}}export{t as Repool};
2
- //# sourceMappingURL=repool.mjs.map
@@ -1,2 +1 @@
1
1
  import{falseFn as e}from"./noop.mjs";let t=new Set([".","?","*","+","^","$","|","(",")","{","}","[","]","\\"]);function n(e,r=!1){let l={},o=(e,t)=>{let n;let r=l;for(let l=0,o=e.length;l<o;++l)(n=e.charAt(l))in r||(r[n]=t?{"":""}:{}),r=r[n];r[""]=""};for(let t=0,n=e.length;t<n;++t)o(e[t],r);let i=()=>(function e(n){let r,l,o=!1,i=!1,u=[],f=[];for(let r in n){if(!r){o=!0;continue}((l=e(n[r]))?u:f).push(("-"===r?"\\x2d":t.has(r)?"\\"+r:r)+l)}return o&&null==l?"":(i=!u.length,f.length&&u.push(f[1]?"["+f.join("")+"]":f[0]),r=u[1]?"(?:"+u.join("|")+")":u[0],o&&(r=i?r+"?":"(?:"+r+")?"),r||"")})(l);return{tree:l,add:o,toString:i,toRe:()=>new RegExp((r?"^":"")+i())}}function r(t,l=!1){if(0===t.length)return e;let o=n(t,l).toRe();return o.test.bind(o)}export{r as createRetrieKeywordFilter,n as retrie};
2
- //# sourceMappingURL=retrie.mjs.map
@@ -1,2 +1 @@
1
1
  import{fastStringArrayJoin as e}from"./fast-string-array-join.mjs";import{identity as a}from"./identity.mjs";import{noop as t}from"./noop.mjs";function i(i,{onlyUseCachedIfFail:r=!1,resetTtlOnHit:n=!1,defaultTtl:l=6048e5,onCacheUpdate:s=t,onCacheMiss:m=t,onCacheHit:o=t,keyHasher:f=a,argHasher:u}){return function(t,h){if(h?.temporaryBypass)return(...e)=>Promise.resolve(t(...e));let d=h&&"serializer"in h?h.serializer:a,c=h&&"deserializer"in h?h.deserializer:a,p=h?.ttl??l,w=t.toString(),y=f(w);return async function(...a){let l=e(await Promise.all([y,u(a)]),"|"),f=t.name||w||l,h=i.get(l);if(h&&"object"==typeof h&&"then"in h&&(h=await h),r)try{let e=await t(...a);s(l,{humanReadableName:f,isUseCachedIfFail:!0});let r=i.set(l,d(e),p);return r&&"then"in r&&await r,e}catch(e){if(null==h)throw m(l,{humanReadableName:f,isUseCachedIfFail:!0}),e;if(n){let e=i.updateTtl?.(l,p);e&&"then"in e&&await e}return o(l,{humanReadableName:f,isUseCachedIfFail:!0}),c(h)}else{if(null==h){m(l,{humanReadableName:f,isUseCachedIfFail:!1});let e=await t(...a),r=i.set(l,d(e),p);return r&&"then"in r&&await r,e}if(o(l,{humanReadableName:f,isUseCachedIfFail:!1}),n){let e=i.updateTtl?.(l,p);e&&"then"in e&&await e}return c(h)}}}}export{i as createMemoize};
2
- //# sourceMappingURL=serialized-memo.mjs.map
@@ -1,2 +1 @@
1
1
  import{fnv1a52 as t}from"./fnv1a52.mjs";function n(n){return t(n).toString(36)+n.length.toString(36)}export{n as simpleStringHash};
2
- //# sourceMappingURL=simple-string-hash.mjs.map
@@ -1,2 +1 @@
1
1
  function e(r,...t){return r.reduce((e,r,n)=>e+r+(t[n]??""),"")}export{e as tagged};
2
- //# sourceMappingURL=tagged.mjs.map
@@ -1,5 +1,3 @@
1
- import { TransformStream } from 'node:stream/web';
2
-
3
1
  interface TextLineStreamOptions {
4
2
  /** Allow splitting by solo \r */
5
3
  allowCR?: boolean;
@@ -1,2 +1 @@
1
- import{TransformStream as e}from"node:stream/web";import{falseFn as t}from"./noop.mjs";class n extends e{constructor({allowCR:e=!1,skipEmptyLines:n=!1}={}){let r="",l=0,i=e?(e,t,r)=>{let i=e.indexOf("\r",l);if(-1!==i&&i!==e.length-1&&(-1===t||t-1>i)){let t=e.slice(l,i);return n&&0===t.length||r.enqueue(e.slice(l,i)),l=i+1,!0}return!1}:t;super({transform(e,t){for(e=r+e,l=0;;){let r=e.indexOf("\n",l);if(i(e,r,t))continue;if(-1===r)break;let u=r;"\r"===e[r-1]&&u--;let o=e.slice(l,u);if(n&&0===o.length){l=r+1;continue}t.enqueue(o),l=r+1}r=e.slice(l)},flush(t){r.length>0&&(e&&"\r"===r[r.length-1]?t.enqueue(r.slice(0,-1)):t.enqueue(r))}})}}export{n as TextLineStream};
2
- //# sourceMappingURL=text-line-stream.mjs.map
1
+ import{falseFn as e}from"./noop.mjs";class n extends TransformStream{constructor({allowCR:n=!1,skipEmptyLines:t=!1}={}){let r="",l=0,i=n?(e,n,r)=>{let i=e.indexOf("\r",l);if(-1!==i&&i!==e.length-1&&(-1===n||n-1>i)){let n=e.slice(l,i);return t&&0===n.length||r.enqueue(e.slice(l,i)),l=i+1,!0}return!1}:e;super({transform(e,n){for(e=r+e,l=0;;){let r=e.indexOf("\n",l);if(i(e,r,n))continue;if(-1===r)break;let u=r;"\r"===e[r-1]&&u--;let s=e.slice(l,u);if(t&&0===s.length){l=r+1;continue}n.enqueue(s),l=r+1}r=e.slice(l)},flush(e){r.length>0&&(n&&"\r"===r[r.length-1]?e.enqueue(r.slice(0,-1)):e.enqueue(r))}})}}export{n as TextLineStream};
package/dist/es/wait.mjs CHANGED
@@ -1,2 +1 @@
1
1
  function e(e){return new Promise(t=>{setTimeout(t,e)})}function t(e,t){return new Promise((r,n)=>{if(t.aborted){n(t.reason);return}let o=setTimeout(()=>{t.removeEventListener("abort",i),r()},e);function i(){clearTimeout(o),t.removeEventListener("abort",i),n(t.reason)}t.addEventListener("abort",i)})}export{e as wait,t as waitWithAbort};
2
- //# sourceMappingURL=wait.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foxts",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "Opinionated collection of common TypeScript utils by @SukkaW",
5
5
  "repository": {
6
6
  "url": "https://github.com/SukkaW/foxts"
@@ -355,7 +355,7 @@
355
355
  "bench": "SWC_NODE_IGNORE_DYNAMIC=1 node --require @swc-node/register",
356
356
  "bench:all": "SWC_NODE_IGNORE_DYNAMIC=1 node --require @swc-node/register ./src/**/*.bench.ts",
357
357
  "prebuild": "bunchee prepare && node -r @swc-node/register ./tools/index.ts",
358
- "build": "bunchee --minify",
358
+ "build": "bunchee --minify --no-sourcemap",
359
359
  "prerelease": "pnpm run lint && pnpm run test && pnpm run build",
360
360
  "release": "bumpp -r --all --commit \"release: %s\" --tag \"%s\""
361
361
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-array-elements-to-set.js","sources":["../../src/add-array-elements-to-set/index.ts"],"sourcesContent":["import { identity } from '../identity';\n\nexport function addArrayElementsToSet<T>(set: Set<T>, arr: T[], transformer: (item: T) => T = identity): Set<T> {\n const add = (item: T) => set.add(transformer(item));\n arr.forEach(add);\n return set;\n}\n"],"names":["set","arr","transformer","identity","forEach","item","add"],"mappings":"oHAEO,SAAkCA,CAAW,CAAEC,CAAQ,CAAEC,EAA8BC,EAAAA,QAAQ,EAGpG,OADAF,EAAIG,OAAO,CADC,AAACC,GAAYL,EAAIM,GAAG,CAACJ,EAAYG,KAEtCL,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ahocorasick.js","sources":["../../src/ahocorasick/index.ts"],"sourcesContent":["class Node extends Map<string, Node> {\n constructor(\n public wordEnd: boolean,\n public fail: Node | undefined\n ) {\n super();\n }\n}\n\nexport function createAhoCorasick(keys: string[] | Set<string> | readonly string[]) {\n const root = new Node(false, undefined);\n\n // Create a trie with extra fields and information\n const put = (key: string) => {\n let node = root;\n\n for (let idx = 0, len = key.length; idx < len; idx++) {\n const char = key[idx];\n\n if (node.has(char)) {\n node = node.get(char)!;\n } else {\n const newNode = new Node(false, undefined);\n node.set(char, newNode);\n node = newNode;\n }\n }\n\n // If a new node is created, mark it as a word end when loop finish\n if (node !== root) {\n node.wordEnd = true;\n }\n };\n\n keys.forEach(put);\n\n // const build = () => {\n const queue: Node[] = [root];\n\n while (queue.length) {\n const beginNode = queue.pop()!;\n\n beginNode.forEach((node, char) => {\n let failNode = beginNode.fail;\n\n while (failNode && !failNode.has(char)) {\n failNode = failNode.fail;\n }\n\n node.fail = failNode\n ? failNode.get(char)\n : root;\n\n queue.push(node);\n });\n }\n // };\n // build();\n\n return (text: string) => {\n let node: Node | undefined = root;\n\n for (let i = 0, textLen = text.length; i < textLen; i++) {\n const char = text[i];\n\n while (node && !node.has(char)) {\n node = node.fail;\n }\n\n node = node ? node.get(char)! : root;\n\n if (node.wordEnd) {\n return true;\n }\n }\n\n return false;\n };\n}\n"],"names":["Node","Map","constructor","wordEnd","fail","keys","root","undefined","forEach","key","node","idx","len","length","char","has","get","newNode","set","queue","beginNode","pop","failNode","push","text","i","textLen"],"mappings":"sDAAA,OAAMA,UAAaC,IACjBC,YACEC,CAAuB,CAChBC,CAAsB,CAC7B,CACA,KAAK,GAAA,IAAA,CAHED,OAAAA,CAAAA,EAAAA,IAAAA,CACAC,IAAAA,CAAAA,CAGT,CACF,2BAEO,SAA2BC,CAAgD,EAChF,IAAMC,EAAO,IAAIN,EAAK,CAAA,EAAOO,KAAAA,GAwB7BF,EAAKG,OAAO,CArBA,AAACC,IACX,IAAIC,EAAOJ,EAEX,IAAK,IAAIK,EAAM,EAAGC,EAAMH,EAAII,MAAM,CAAEF,EAAMC,EAAKD,IAAO,CACpD,IAAMG,EAAOL,CAAG,CAACE,EAAI,CAErB,GAAID,EAAKK,GAAG,CAACD,GACXJ,EAAOA,EAAKM,GAAG,CAACF,OACX,CACL,IAAMG,EAAU,IAAIjB,EAAK,CAAA,EAAOO,KAAAA,GAChCG,EAAKQ,GAAG,CAACJ,EAAMG,GACfP,EAAOO,CACT,CACF,CAGIP,IAASJ,GACXI,CAAAA,EAAKP,OAAO,CAAG,CAAA,CAAA,CAEnB,GAKA,IAAMgB,EAAgB,CAACb,EAAK,CAE5B,KAAOa,EAAMN,MAAM,EAAE,CACnB,IAAMO,EAAYD,EAAME,GAAG,GAE3BD,EAAUZ,OAAO,CAAC,CAACE,EAAMI,KACvB,IAAIQ,EAAWF,EAAUhB,IAAI,CAE7B,KAAOkB,GAAY,CAACA,EAASP,GAAG,CAACD,IAC/BQ,EAAWA,EAASlB,IAAI,AAG1BM,CAAAA,EAAKN,IAAI,CAAGkB,EACRA,EAASN,GAAG,CAACF,GACbR,EAEJa,EAAMI,IAAI,CAACb,EACb,EACF,CAIA,OAAO,AAACc,IACN,IAAId,EAAyBJ,EAE7B,IAAK,IAAImB,EAAI,EAAGC,EAAUF,EAAKX,MAAM,CAAEY,EAAIC,EAASD,IAAK,CACvD,IAAMX,EAAOU,CAAI,CAACC,EAAE,CAEpB,KAAOf,GAAQ,CAACA,EAAKK,GAAG,CAACD,IACvBJ,EAAOA,EAAKN,IAAI,CAKlB,GAAIM,AAFJA,CAAAA,EAAOA,EAAOA,EAAKM,GAAG,CAACF,GAASR,CAAAA,EAEvBH,OAAO,CACd,MAAO,CAAA,CAEX,CAEA,MAAO,CAAA,CACT,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"append-set-elements-to-array.js","sources":["../../src/append-set-elements-to-array/index.ts"],"sourcesContent":["import { identity } from '../identity';\n\nfunction innerAppendSetElementsToArray<T>(\n dest: T[],\n source: Set<T>,\n transformer: (item: T) => T\n): T[] {\n const iterator = source.values();\n let step: IteratorResult<T, undefined>;\n\n while ((step = iterator.next(), !step.done)) {\n dest.push(transformer(step.value));\n }\n\n return dest;\n}\n\nexport function appendSetElementsToArray<T>(\n dest: T[],\n source: Set<T> | Array<Set<T>>,\n transformer: (item: T) => T = identity\n) {\n if (!Array.isArray(source)) {\n return innerAppendSetElementsToArray(dest, source, transformer);\n }\n\n for (let i = 0, len = source.length; i < len; i++) {\n innerAppendSetElementsToArray(dest, source[i], transformer);\n }\n\n return dest;\n}\n"],"names":["innerAppendSetElementsToArray","dest","source","transformer","step","iterator","values","next","done","push","value","identity","Array","isArray","i","len","length"],"mappings":"sFAEA,SAASA,EACPC,CAAS,CACTC,CAAc,CACdC,CAA2B,MAGvBC,EADJ,IAAMC,EAAWH,EAAOI,MAAM,GAG9B,KAAQF,CAAyBA,AAAzBA,CAAAA,EAAOC,EAASE,IAAI,IAAUC,IAAI,EACxCP,EAAKQ,IAAI,CAACN,EAAYC,EAAKM,KAAK,GAGlC,OAAOT,CACT,kCAEO,SACLA,CAAS,CACTC,CAA8B,CAC9BC,EAA8BQ,EAAAA,QAAQ,EAEtC,GAAI,CAACC,MAAMC,OAAO,CAACX,GACjB,OAAOF,EAA8BC,EAAMC,EAAQC,GAGrD,IAAK,IAAIW,EAAI,EAAGC,EAAMb,EAAOc,MAAM,CAAEF,EAAIC,EAAKD,IAC5Cd,EAA8BC,EAAMC,CAAM,CAACY,EAAE,CAAEX,GAGjD,OAAOF,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"async-write-to-stream.js","sources":["../../src/async-write-to-stream/index.ts"],"sourcesContent":["import type { Writable } from 'node:stream';\nimport { once } from 'node:events';\n\n/**\n * A small utility function for writing chunk to a stream, and only return promise when needed (stream backpressure)\n *\n * ```ts\n * const writeStream = fs.createWriteStream(outputFile);\n * for (const line of source) {\n * const p = asyncWriteToStream(writeStream, line + '\\n');\n * if (p) {\n * // eslint-disable-next-line no-await-in-loop -- stream backpressure\n * await p;\n * }\n * }\n */\nexport function asyncWriteToStream<T>(stream: Writable, chunk: T): Promise<unknown> | null {\n const waitDrain = !stream.write(chunk);\n if (waitDrain) {\n return once(stream, 'drain'); // returns a promise only if needed\n }\n return null;\n}\n"],"names":["stream","chunk","write","once"],"mappings":"+GAgBO,SAA+BA,CAAgB,CAAEC,CAAQ,SAE9D,AADmBD,EAAOE,KAAK,CAACD,GAIzB,KAFEE,EAAAA,IAAAA,CAAKH,EAAQ,QAGxB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bitwise.js","sources":["../../src/bitwise/index.ts"],"sourcesContent":["// From: https://stackoverflow.com/a/43122214/1185079\nexport function bitCount(n: number): number {\n n = n - ((n >> 1) & 0x55_55_55_55);\n n = (n & 0x33_33_33_33) + ((n >> 2) & 0x33_33_33_33);\n return (((n + (n >> 4)) & 0xF_0F_0F_0F) * 0x1_01_01_01) >> 24;\n}\n\nexport const getBit = (n: number, mask: number) => !!(n & mask);\nexport const missingBit = (n: number, mask: number): boolean => !(n & mask);\nexport const setBit = (n: number, mask: number) => n | mask;\nexport const deleteBit = (n: number, mask: number) => n & ~mask;\n\n/** Packs two 16-bit integers (0~65535) into one 32-bit integer */\nexport const packTwoBits = (a: number, b: number): number => (a << 16) | b;\n\nexport const unpackTwoBitsFirst = (value: number): number => (value >> 16) & 0xFFFF;\nexport const unpackTwoBitsSecond = (value: number): number => value & 0xFFFF;\n/**\n * Unpacks two 16-bit integers (0~65535) from one 32-bit integer\n *\n * @param value - The 32-bit integer to unpack\n * @param arr - An optional array to store the unpacked values, useful if you are trying to re-use arrays\n */\nexport function unpackTwoBits(value: number, arr: [a: number, b: number] = Array.from(new Array(2).keys()) as any): [a: number, b: number] {\n arr[0] = unpackTwoBitsFirst(value);\n arr[1] = unpackTwoBitsSecond(value);\n return arr;\n}\n\n/** Packs three 10-bit integers (0~1023) into one 32-bit integer */\nexport const packThreeBits = (a: number, b: number, c: number): number => (a << 20) | (b << 10) | c;\n\nexport const unpackThreeBitsFirst = (value: number): number => (value >> 20) & 0x3FF;\nexport const unpackThreeBitsSecond = (value: number): number => (value >> 10) & 0x3FF;\nexport const unpackThreeBitsThird = (value: number): number => value & 0x3FF;\n/**\n * Unpacks three 10-bit integers (0~1023) from one 32-bit integer\n *\n * @param value - The 32-bit integer to unpack\n * @param arr - An optional array to store the unpacked values, useful if you are trying to re-use arrays\n */\nexport function unpackThreeBits(value: number, arr: [a: number, b: number, c: number] = Array.from(new Array(3).keys()) as any): [a: number, b: number, c: number] {\n arr[0] = unpackThreeBitsFirst(value);\n arr[1] = unpackThreeBitsSecond(value);\n arr[2] = unpackThreeBitsThird(value);\n return arr;\n}\n"],"names":["unpackTwoBitsFirst","value","unpackTwoBitsSecond","unpackThreeBitsFirst","unpackThreeBitsSecond","unpackThreeBitsThird","n","mask","a","b","c","arr","Array","from","keys"],"mappings":"6DAeaA,EAAqB,AAACC,GAA0BA,GAAU,GAAM,MAChEC,EAAsB,AAACD,GAA0BA,AAAQ,MAARA,EAgBjDE,EAAuB,AAACF,GAA0BA,GAAU,GAAM,KAClEG,EAAwB,AAACH,GAA0BA,GAAU,GAAM,KACnEI,EAAuB,AAACJ,GAA0BA,AAAQ,KAARA,mBAjCxD,SAAkBK,CAAS,EAGhC,OAFAA,GAASA,GAAM,EAAK,WAEX,AAACA,CAAAA,AADVA,CAAAA,EAAKA,AAAAA,CAAAA,AAAI,WAAJA,CAAI,EAAmBA,CAAAA,GAAK,EAAK,UAAA,CAAY,EACnCA,CAAAA,GAAK,CAAA,EAAM,SAAA,EAAgB,WAAiB,EAC7D,oBAKyB,CAACA,EAAWC,IAAiBD,EAAI,CAACC,iBAHrC,CAACD,EAAWC,IAAiB,CAAC,CAAED,CAAAA,EAAIC,CAAG,qBACnC,CAACD,EAAWC,IAA0B,CAAED,CAAAA,EAAIC,CAAG,wBAsB5C,CAACC,EAAWC,EAAWC,IAAsBF,GAAM,GAAOC,GAAK,GAAMC,sBAjBvE,CAACF,EAAWC,IAAuBD,GAAK,GAAMC,iBAJnD,CAACH,EAAWC,IAAiBD,EAAIC,0BAgChD,SAAyBN,CAAa,CAAEU,EAAyCC,MAAMC,IAAI,CAAC,KAAU,CAAGC,IAAI,GAAU,EAI5H,OAHAH,CAAG,CAAC,EAAE,CAAGR,EAAqBF,GAC9BU,CAAG,CAAC,EAAE,CAAGP,EAAsBH,GAC/BU,CAAG,CAAC,EAAE,CAAGN,EAAqBJ,GACvBU,CACT,sHAvBO,SAAuBV,CAAa,CAAEU,EAA8BC,MAAMC,IAAI,CAAC,IAAU,CAAGC,IAAI,GAAU,EAG/G,OAFAH,CAAG,CAAC,EAAE,CAAGX,EAAmBC,GAC5BU,CAAG,CAAC,EAAE,CAAGT,EAAoBD,GACtBU,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-fixed-array.js","sources":["../../src/create-fixed-array/index.ts"],"sourcesContent":["const arrayMap = new Map<number, readonly number[]>();\n\nfunction makeArray(length: number): readonly number[] {\n return Array.from(new Array(length).keys());\n}\n\nexport function createFixedArrayWithoutGC(length: number): readonly number[] {\n if (arrayMap.has(length)) {\n return arrayMap.get(length)!;\n }\n const arr = makeArray(length);\n arrayMap.set(length, arr);\n return arr;\n}\n\nconst arrayWeakRefMap = new Map<number, WeakRef<readonly number[]>>();\n\nexport function createFixedArrayWithGC(length: number): readonly number[] {\n let ref: WeakRef<readonly number[]> | undefined;\n let array: readonly number[] | undefined;\n if (arrayWeakRefMap.has(length)) {\n ref = arrayWeakRefMap.get(length)!;\n array = ref.deref();\n }\n\n if (!array) {\n array = makeArray(length);\n\n // every time a new array is created, we create a new WeakRef and update map\n ref = new WeakRef(array);\n arrayWeakRefMap.set(length, ref);\n }\n\n return array;\n}\n\nexport const createFixedArray = typeof WeakRef === 'function' ? createFixedArrayWithGC : createFixedArrayWithoutGC;\nexport const EMPTY_ARRAY = createFixedArray(0);\n"],"names":["arrayMap","Map","makeArray","length","Array","from","keys","createFixedArrayWithoutGC","has","get","arr","set","arrayWeakRefMap","createFixedArrayWithGC","ref","array","deref","WeakRef","createFixedArray","EMPTY_ARRAY"],"mappings":"uDAAA,MAAMA,EAAW,IAAIC,IAErB,SAASC,EAAUC,CAAc,EAC/B,OAAOC,MAAMC,IAAI,CAAC,AAAID,MAAMD,GAAQG,IAAI,GAC1C,CAEO,SAASC,EAA0BJ,CAAc,EACtD,GAAIH,EAASQ,GAAG,CAACL,GACf,OAAOH,EAASS,GAAG,CAACN,GAEtB,IAAMO,EAAMR,EAAUC,GAEtB,OADAH,EAASW,GAAG,CAACR,EAAQO,GACdA,CACT,CAEA,MAAME,EAAkB,IAAIX,IAErB,SAASY,EAAuBV,CAAc,EACnD,IAAIW,EACAC,EAcJ,OAbIH,EAAgBJ,GAAG,CAACL,IAEtBY,CAAAA,EAAQD,AADRA,CAAAA,EAAMF,EAAgBH,GAAG,CAACN,EAAAA,EACda,KAAK,EAAA,EAGdD,IAIHD,EAAM,IAAIG,QAHVF,EAAQb,EAAUC,IAIlBS,EAAgBD,GAAG,CAACR,EAAQW,IAGvBC,CACT,OAEaG,EAAmB,AAAmB,YAAnB,OAAOD,QAAyBJ,EAAyBN,EAC5EY,EAAcD,EAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect-eol.js","sources":["../../src/detect-eol/index.ts"],"sourcesContent":["export function detectEol(str: string) {\n for (let i = 0, len = str.length; i < len; i++) {\n const c = str[i];\n if (c === '\\n') return '\\n';\n if (c === '\\r' && str[i + 1] === '\\n') return '\\r\\n';\n }\n return '\\n';\n}\n"],"names":["str","i","len","length","c"],"mappings":"yEAAO,SAAmBA,CAAW,EACnC,IAAK,IAAIC,EAAI,EAAGC,EAAMF,EAAIG,MAAM,CAAEF,EAAIC,EAAKD,IAAK,CAC9C,IAAMG,EAAIJ,CAAG,CAACC,EAAE,CAChB,GAAIG,AAAM,OAANA,EAAY,MAChB,GAAIA,AAAM,OAANA,GAAcJ,AAAe,OAAfA,CAAG,CAACC,EAAI,EAAE,CAAW,MAAO,MAChD,CACA,MAAO,IACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"escape-html.js","sources":["../../src/escape-html/index.ts"],"sourcesContent":["const reHtmlEntity = /[\"&'<>]/;\nexport function escapeHTML(str: string) {\n const match = reHtmlEntity.exec(str);\n\n if (match === null) {\n return str;\n }\n\n let escape = '';\n let html = '';\n\n let index = match.index;\n let lastIndex = 0;\n\n // iterate from the first match\n for (const len = str.length; index < len; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '&quot;';\n break;\n case 38: // &\n escape = '&amp;';\n break;\n case 39: // '\n escape = '&#39;';\n break;\n case 60: // <\n escape = '&lt;';\n break;\n case 62: // >\n escape = '&gt;';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex === index\n ? html\n : html + str.slice(lastIndex, index);\n}\n"],"names":["reHtmlEntity","str","match","exec","escape","html","index","lastIndex","len","length","charCodeAt","slice"],"mappings":"uDAAA,MAAMA,EAAe,6BACd,SAAoBC,CAAW,EACpC,IAAMC,EAAQF,EAAaG,IAAI,CAACF,GAEhC,GAAIC,AAAU,OAAVA,EACF,OAAOD,EAGT,IAAIG,EAAS,GACTC,EAAO,GAEPC,EAAQJ,EAAMI,KAAK,CACnBC,EAAY,EAGhB,IAAK,IAAMC,EAAMP,EAAIQ,MAAM,CAAEH,EAAQE,EAAKF,IAAS,CACjD,OAAQL,EAAIS,UAAU,CAACJ,IACrB,KAAK,GACHF,EAAS,SACT,KACF,MAAK,GACHA,EAAS,QACT,KACF,MAAK,GACHA,EAAS,QACT,KACF,MAAK,GACHA,EAAS,OACT,KACF,MAAK,GACHA,EAAS,OACT,KACF,SACE,QACJ,CAEIG,IAAcD,GAChBD,CAAAA,GAAQJ,EAAIU,KAAK,CAACJ,EAAWD,EAAAA,EAG/BC,EAAYD,EAAQ,EACpBD,GAAQD,CACV,CAEA,OAAOG,IAAcD,EACjBD,EACAA,EAAOJ,EAAIU,KAAK,CAACJ,EAAWD,EAClC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"escape-string-regexp.js","sources":["../../src/escape-string-regexp/index.ts"],"sourcesContent":["const r = /[$()*+.?[\\\\\\]^{|}-]/;\n\n/**\n * Escape characters with special meaning either inside or outside character sets.\n * Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n */\nexport function escapeStringRegexp(str: string) {\n const match = r.exec(str);\n\n if (match === null) {\n return str;\n }\n\n let escape = '';\n let regexp = '';\n\n let index = match.index;\n let lastIndex = 0;\n\n // iterate from the first match\n for (const len = str.length; index < len; index++) {\n /* eslint-disable sukka/unicorn/prefer-string-raw -- performance */\n switch (str.charCodeAt(index)) {\n case 92: // \\\n escape = '\\\\\\\\';\n break;\n case 94: // ^\n escape = '\\\\^';\n break;\n case 36: // $\n escape = '\\\\$';\n break;\n case 46: // .\n escape = '\\\\.';\n break;\n case 42: // *\n escape = '\\\\*';\n break;\n case 43: // +\n escape = '\\\\+';\n break;\n case 63: // ?\n escape = '\\\\?';\n break;\n case 40: // (\n escape = '\\\\(';\n break;\n case 41: // )\n escape = '\\\\)';\n break;\n case 91: // [\n escape = '\\\\[';\n break;\n case 93: // ]\n escape = '\\\\]';\n break;\n case 123: // {\n escape = '\\\\{';\n break;\n case 125: // }\n escape = '\\\\}';\n break;\n case 124: // |\n escape = '\\\\|';\n break;\n case 45: // -\n escape = '\\\\x2d';\n break;\n default:\n continue;\n }\n /* eslint-enable sukka/unicorn/prefer-string-raw */\n\n if (lastIndex !== index) {\n regexp += str.slice(lastIndex, index);\n }\n\n lastIndex = index + 1;\n regexp += escape;\n }\n\n return lastIndex === index\n ? regexp\n : regexp + str.slice(lastIndex, index);\n};\n"],"names":["r","str","match","exec","escape","regexp","index","lastIndex","len","length","charCodeAt","slice"],"mappings":"uDAAA,MAAMA,EAAI,iDAMH,SAA4BC,CAAW,EAC5C,IAAMC,EAAQF,EAAEG,IAAI,CAACF,GAErB,GAAIC,AAAU,OAAVA,EACF,OAAOD,EAGT,IAAIG,EAAS,GACTC,EAAS,GAETC,EAAQJ,EAAMI,KAAK,CACnBC,EAAY,EAGhB,IAAK,IAAMC,EAAMP,EAAIQ,MAAM,CAAEH,EAAQE,EAAKF,IAAS,CAEjD,OAAQL,EAAIS,UAAU,CAACJ,IACrB,KAAK,GACHF,EAAS,OACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,IACHA,EAAS,MACT,KACF,MAAK,IACHA,EAAS,MACT,KACF,MAAK,IACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,QACT,KACF,SACE,QACJ,CAGIG,IAAcD,GAChBD,CAAAA,GAAUJ,EAAIU,KAAK,CAACJ,EAAWD,EAAAA,EAGjCC,EAAYD,EAAQ,EACpBD,GAAUD,CACZ,CAEA,OAAOG,IAAcD,EACjBD,EACAA,EAASJ,EAAIU,KAAK,CAACJ,EAAWD,EACpC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fast-string-array-join.js","sources":["../../src/fast-string-array-join/index.ts"],"sourcesContent":["/**\n * A 65% faster join than the native `Array.prototype.join` for string arrays and string separator.\n */\nexport function fastStringArrayJoin(arr: string[], sep: string) {\n const len = arr.length;\n if (len === 0) {\n return '';\n }\n\n let result = arr[0];\n\n for (let i = 1; i < len; i++) {\n result += sep;\n result += arr[i];\n }\n\n return result;\n}\n"],"names":["arr","sep","len","length","result","i"],"mappings":"mFAGO,SAA6BA,CAAa,CAAEC,CAAW,EAC5D,IAAMC,EAAMF,EAAIG,MAAM,CACtB,GAAID,AAAQ,IAARA,EACF,MAAO,GAGT,IAAIE,EAASJ,CAAG,CAAC,EAAE,CAEnB,IAAK,IAAIK,EAAI,EAAGA,EAAIH,EAAKG,IACvBD,GAAUH,EACVG,GAAUJ,CAAG,CAACK,EAAE,CAGlB,OAAOD,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fifo.js","sources":["../../src/fifo/index.ts"],"sourcesContent":["type Node<T> = [value: T, next: Node<T> | null];\n\n/** Checkout https://npm.im/fast-fifo if performance is critical */\nexport class FIFO<T> {\n private head: Node<T> | null = null;\n private tail: Node<T> | null = null;\n public $size = 0;\n\n constructor() {\n this.clear();\n }\n\n enqueue(value: T) {\n const node: Node<T> = [value, null];\n\n if (this.head) {\n this.tail![1] = node;\n this.tail = node;\n } else {\n this.head = node;\n this.tail = node;\n }\n\n this.$size++;\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method -- alias\n push = this.enqueue;\n\n dequeue() {\n const current = this.head;\n if (!current) {\n return;\n }\n\n this.head = this.head![1];\n this.$size--;\n return current[0];\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method -- alias\n shift = this.dequeue;\n\n peek() {\n return this.head?.[0];\n }\n\n clear() {\n this.head = null;\n this.tail = null;\n this.$size = 0;\n }\n\n get size() {\n return this.$size;\n }\n\n get length() {\n return this.$size;\n }\n\n *[Symbol.iterator]() {\n let current = this.head;\n\n while (current) {\n yield current[0];\n current = current[1];\n }\n }\n}\n"],"names":["Symbol","iterator","constructor","head","tail","$size","push","enqueue","shift","dequeue","clear","value","node","current","peek","size","length","_computedKey"],"mappings":"6DA6DIA,EAAAA,OAAOC,QAAQ,cA1DZ,MAKLC,aAAc,MAJNC,IAAuB,CAAA,UACvBC,IAAuB,CAAA,UACxBC,KAAQ,CAAA,OAqBfC,IAAO,CAAA,IAAI,CAACC,OAAO,MAcnBC,KAAQ,CAAA,IAAI,CAACC,OAAO,CAhClB,IAAI,CAACC,KAAK,EACZ,CAEAH,QAAQI,CAAQ,CAAE,CAChB,IAAMC,EAAgB,CAACD,EAAO,KAAK,AAE/B,CAAA,IAAI,CAACR,IAAI,CACX,IAAI,CAACC,IAAI,CAAE,EAAE,CAAGQ,EAGhB,IAAI,CAACT,IAAI,CAAGS,EACZ,IAAI,CAACR,IAAI,CAAGQ,EAGd,IAAI,CAACP,KAAK,EACZ,CAKAI,SAAU,CACR,IAAMI,EAAU,IAAI,CAACV,IAAI,CACzB,GAAKU,EAML,OAFA,IAAI,CAACV,IAAI,CAAG,IAAI,CAACA,IAAK,CAAC,EAAE,CACzB,IAAI,CAACE,KAAK,GACHQ,CAAO,CAAC,EAAE,AACnB,CAKAC,MAAO,CACL,OAAO,IAAI,CAACX,IAAI,EAAA,CAAG,EAAE,AACvB,CAEAO,OAAQ,CACN,IAAI,CAACP,IAAI,CAAG,KACZ,IAAI,CAACC,IAAI,CAAG,KACZ,IAAI,CAACC,KAAK,CAAG,CACf,CAEA,IAAIU,MAAO,CACT,OAAO,IAAI,CAACV,KAAK,AACnB,CAEA,IAAIW,QAAS,CACX,OAAO,IAAI,CAACX,KAAK,AACnB,CAEA,CAAA,CAAqBY,EAAA,EAAA,CACnB,IAAIJ,EAAU,IAAI,CAACV,IAAI,CAEvB,KAAOU,GACL,MAAMA,CAAO,CAAC,EAAE,CAChBA,EAAUA,CAAO,CAAC,EAAE,AAExB,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fnv1a.js","sources":["../../src/fnv1a/index.ts"],"sourcesContent":["export function fnv1a(s: string) {\n let h = 0x81_1C_9D_C5;\n\n for (let i = 0, l = s.length; i < l; i++) {\n h ^= s.charCodeAt(i);\n h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);\n }\n\n return (h >>> 0);\n}\n"],"names":["s","h","i","l","length","charCodeAt"],"mappings":"qEAAO,SAAeA,CAAS,EAC7B,IAAIC,EAAI,WAER,IAAK,IAAIC,EAAI,EAAGC,EAAIH,EAAEI,MAAM,CAAEF,EAAIC,EAAGD,IACnCD,GAAKD,EAAEK,UAAU,CAACH,GAClBD,GAAK,AAACA,CAAAA,GAAK,CAAA,EAAMA,CAAAA,GAAK,CAAA,EAAMA,CAAAA,GAAK,CAAA,EAAMA,CAAAA,GAAK,CAAA,EAAMA,CAAAA,GAAK,EAAA,EAGzD,OAAQA,IAAM,CAChB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fnv1a52.js","sources":["../../src/fnv1a52/index.ts"],"sourcesContent":["/**\n * FNV-1a Hash implementation\n * @author Travis Webb (tjwebb) <me@traviswebb.com>\n *\n * Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js\n *\n * Simplified, optimized and add modified for 52 bit, which provides a larger hash space\n * and still making use of Javascript's 53-bit integer space.\n */\nexport function fnv1a52(str: string) {\n const len = str.length;\n let i = 0,\n t0 = 0,\n v0 = 0x2325,\n t1 = 0,\n v1 = 0x8422,\n t2 = 0,\n v2 = 0x9CE4,\n t3 = 0,\n v3 = 0xCBF2;\n\n while (i < len) {\n v0 ^= str.charCodeAt(i++);\n t0 = v0 * 435;\n t1 = v1 * 435;\n t2 = v2 * 435;\n t3 = v3 * 435;\n t2 += v0 << 8;\n t3 += v1 << 8;\n t1 += t0 >>> 16;\n v0 = t0 & 65535;\n t2 += t1 >>> 16;\n v1 = t1 & 65535;\n v3 = (t3 + (t2 >>> 16)) & 65535;\n v2 = t2 & 65535;\n }\n\n return (\n (v3 & 15) * 281_474_976_710_656\n + v2 * 4_294_967_296\n + v1 * 65536\n + (v0 ^ (v3 >> 4))\n );\n}\n"],"names":["str","len","length","i","t0","v0","t1","v1","t2","v2","t3","v3","charCodeAt"],"mappings":"uEASO,SAAiBA,CAAW,EACjC,IAAMC,EAAMD,EAAIE,MAAM,CAClBC,EAAI,EACNC,EAAK,EACLC,EAAK,KACLC,EAAK,EACLC,EAAK,MACLC,EAAK,EACLC,EAAK,MACLC,EAAK,EACLC,EAAK,MAEP,KAAOR,EAAIF,GACTI,GAAML,EAAIY,UAAU,CAACT,KACrBC,EAAKC,AAAK,IAALA,EACLC,EAAKC,AAAK,IAALA,EACLC,EAAKC,AAAK,IAALA,EACLC,EAAKC,AAAK,IAALA,EACLH,GAAMH,GAAM,EACZK,GAAMH,GAAM,EACZD,GAAMF,IAAO,GACbC,EAAKD,AAAK,MAALA,EACLI,GAAMF,IAAO,GACbC,EAAKD,AAAK,MAALA,EACLK,EAAKD,EAAOF,CAAAA,IAAO,EAAA,EAAO,MAC1BC,EAAKD,AAAK,MAALA,EAGP,MACE,AAACG,CAAAA,AAAK,GAALA,GAAW,gBACVF,AAAK,YAALA,EACAF,AAAK,MAALA,EACCF,CAAAA,EAAMM,GAAM,CAAA,CAEnB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"guard.js","sources":["../../src/guard/index.ts"],"sourcesContent":["export function not(arg: null): <T>(i: T | null) => i is T;\nexport function not(arg: undefined): <T>(i: T | undefined) => i is T;\nexport function not(arg: false): <T>(i: T | false) => i is T;\nexport function not(arg: 'nullish'): <T>(i: T | null | undefined) => i is T;\nexport function not(arg: 'falsy'): <T>(i: T | 0 | '' | false | null | undefined) => i is T;\nexport function not(arg: null | undefined | false | 'nullish' | 'falsy') {\n switch (arg) {\n case null:\n return <T>(i: T | null): i is T => i !== null;\n case undefined:\n return <T>(i: T | undefined): i is T => i !== undefined;\n case false:\n return <T>(i: T | false): i is T => i !== false;\n case 'nullish':\n return <T>(i: T | null | undefined): i is T => i != null;\n case 'falsy':\n return <T>(i: T | 0 | '' | false | null | undefined): i is T => !!i;\n default:\n never(arg, 'argument');\n }\n}\n\nexport function is(arg: null): (i: unknown) => i is null;\nexport function is(arg: undefined): (i: unknown) => i is undefined;\nexport function is(arg: false): (i: unknown) => i is false;\nexport function is(arg: 'nullish'): (i: unknown) => i is null | undefined;\nexport function is(arg: 'falsy'): (i: unknown) => i is 0 | '' | false | null | undefined;\nexport function is(arg: 'truthy'): <T>(i: T | 0 | '' | false | null | undefined) => i is T;\nexport function is(arg: null | undefined | false | 'nullish' | 'falsy' | 'truthy') {\n switch (arg) {\n case null:\n return (i: unknown): i is null => i === null;\n case undefined:\n return (i: unknown): i is undefined => i === undefined;\n case false:\n return (i: unknown): i is false => i === false;\n case 'nullish':\n return (i: unknown): i is null | undefined => i == null;\n case 'falsy':\n return (i: unknown): i is 0 | '' | false | null | undefined => !i;\n case 'truthy':\n return <T>(i: T | 0 | '' | false | null | undefined): i is T => !!i;\n default:\n never(arg, 'argument');\n }\n}\n\nexport const isTruthy = is('truthy');\nexport const isFalsy = is('falsy');\nexport const isNonNull = not(null);\nexport const isNonNullish = not('nullish');\n\nexport function nullthrow<T>(value: T | null | undefined, message = '[foxts/invariant] \"value\" is null or undefined'): T {\n if (value === null || value === undefined) {\n throw new TypeError(message);\n }\n return value;\n}\n\nexport function invariant<T>(value: T | null | undefined, message = '[foxts/invariant] \"value\" is null or undefined'): asserts value is T {\n if (value === null || value === undefined) {\n throw new TypeError(message);\n }\n}\n\nexport function never(value: never, valueMetaName = 'value'): never {\n throw new TypeError(`Unexpected ${valueMetaName}: ${value} as ${JSON.stringify(typeof value)}, should be \"never\"`);\n}\n"],"names":["not","arg","i","undefined","never","is","isTruthy","isFalsy","isNonNull","isNonNullish","value","valueMetaName","TypeError","JSON","stringify","message"],"mappings":"AAKO,SAASA,EAAIC,CAAmD,EACrE,OAAQA,GACN,KAAK,KACH,OAAO,AAAIC,GAAwBA,AAAM,OAANA,CACrC,MAAKC,KAAAA,EACH,OAAO,AAAID,GAA6BA,AAAMC,KAAAA,IAAND,CAC1C,KAAK,CAAA,EACH,OAAO,AAAIA,GAAyBA,AAAM,CAAA,IAANA,CACtC,KAAK,UACH,OAAO,AAAIA,GAAoCA,AAAK,MAALA,CACjD,KAAK,QACH,OAAO,AAAIA,GAAqD,CAAC,CAACA,CACpE,SACEE,EAAMH,EAAK,WACf,CACF,CAQO,SAASI,EAAGJ,CAA8D,EAC/E,OAAQA,GACN,KAAK,KACH,OAAO,AAACC,GAA0BA,AAAM,OAANA,CACpC,MAAKC,KAAAA,EACH,OAAO,AAACD,GAA+BA,AAAMC,KAAAA,IAAND,CACzC,KAAK,CAAA,EACH,OAAO,AAACA,GAA2BA,AAAM,CAAA,IAANA,CACrC,KAAK,UACH,OAAO,AAACA,GAAsCA,AAAK,MAALA,CAChD,KAAK,QACH,OAAO,AAACA,GAAuD,CAACA,CAClE,KAAK,SACH,OAAO,AAAIA,GAAqD,CAAC,CAACA,CACpE,SACEE,EAAMH,EAAK,WACf,CACF,wDAEO,MAAMK,EAAWD,EAAG,UACdE,EAAUF,EAAG,SACbG,EAAYR,EAAI,MAChBS,EAAeT,EAAI,WAezB,SAASI,EAAMM,CAAY,CAAEC,EAAgB,OAAO,EACzD,MAAM,AAAIC,UAAU,CAAC,WAAW,EAAED,EAAc,EAAE,EAAED,EAAM,IAAI,EAAEG,KAAKC,SAAS,CAAC,OAAOJ,GAAO,mBAAmB,CAAC,CACnH,mBARO,SAAsBA,CAA2B,CAAEK,EAAU,gDAAgD,EAClH,GAAIL,MAAAA,EACF,MAAM,AAAIE,UAAUG,EAExB,+IAXO,SAAsBL,CAA2B,CAAEK,EAAU,gDAAgD,EAClH,GAAIL,MAAAA,EACF,MAAM,AAAIE,UAAUG,GAEtB,OAAOL,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"headers-to-object.js","sources":["../../src/headers-to-object/index.ts"],"sourcesContent":["import type { HeadersInitLike } from '../merge-headers';\n\nexport function headersToObject(headers: HeadersInitLike | Headers): Record<string, string> {\n const obj: Record<string, string> = {};\n\n if (headers == null) {\n return obj;\n }\n\n new Headers(headers).forEach((value: string, key: string) => {\n obj[key] = value;\n });\n\n return obj;\n}\n"],"names":["headers","obj","Headers","forEach","value","key"],"mappings":"+EAEO,SAAyBA,CAAkC,EAChE,IAAMC,EAA8B,CAAC,SAEtB,MAAXD,GAIJ,IAAIE,QAAQF,GAASG,OAAO,CAAC,CAACC,EAAeC,KAC3CJ,CAAG,CAACI,EAAI,CAAGD,CACb,GALSH,CAQX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.js","sources":["../../src/identity/index.ts"],"sourcesContent":["export function identity<T = any, R = T>(item: T): R {\n return item as any;\n}\n"],"names":["item"],"mappings":"wEAAO,SAAkCA,CAAO,EAC9C,OAAOA,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-probably-ip.js","sources":["../../src/is-probably-ip/index.ts"],"sourcesContent":["/**\n * Check if a hostname is an IP. You should be aware that this only works\n * because `hostname` is already garanteed to be a valid hostname!\n */\nexport function isProbablyIpv4(hostname: string): boolean {\n // Cannot be shorted than 1.1.1.1 or longer than 255.255.255.255\n if (hostname.length < 7 || hostname.length > 15) {\n return false;\n }\n\n let numberOfDots = 0;\n\n for (let i = 0; i < hostname.length; i += 1) {\n const code = hostname.charCodeAt(i);\n\n if (code === 46 /* '.' */) {\n numberOfDots += 1;\n } else if (code < 48 /* '0' */ || code > 57 /* '9' */) {\n return false;\n }\n }\n\n return (\n numberOfDots === 3\n && hostname.charCodeAt(0) !== 46 /* '.' */\n && hostname.charCodeAt(hostname.length - 1) !== 46 /* '.' */\n );\n}\n\nexport function isProbablyIpv6(hostname: string): boolean {\n if (hostname.length < 3) {\n return false;\n }\n\n let start = hostname[0] === '[' ? 1 : 0;\n let end = hostname.length;\n\n if (hostname[end - 1] === ']') {\n end -= 1;\n }\n\n // We only consider the maximum size of a normal IPV6. Note that this will\n // fail on so-called \"IPv4 mapped IPv6 addresses\" but this is a corner-case\n // and a proper validation library should be used for these.\n if (end - start > 39) {\n return false;\n }\n\n /* eslint-disable sukka/no-single-return -- here it goes */\n let hasColon = false;\n\n for (; start < end; start += 1) {\n const code = hostname.charCodeAt(start);\n\n if (code === 58 /* ':' */) {\n hasColon = true;\n } else if (\n (code < 48 || code > 57) // does not match 0-9\n && (code < 97 || code > 102) // and does not match a-f\n && (code < 65 || code > 90) // and does not match A-F\n ) {\n // does not contain any characters that are required in a valid IPv6\n return false;\n }\n }\n\n return hasColon;\n /* eslint-enable sukka/no-single-return -- here it goes */\n}\n"],"names":["hostname","length","numberOfDots","i","code","charCodeAt","start","end","hasColon"],"mappings":"8EAIO,SAAwBA,CAAgB,EAE7C,GAAIA,EAASC,MAAM,CAAG,GAAKD,EAASC,MAAM,CAAG,GAC3C,MAAO,CAAA,EAGT,IAAIC,EAAe,EAEnB,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAASC,MAAM,CAAEE,GAAK,EAAG,CAC3C,IAAMC,EAAOJ,EAASK,UAAU,CAACF,GAEjC,GAAIC,AAAS,KAATA,EACFF,GAAgB,OACX,GAAIE,EAAO,IAAgBA,EAAO,GACvC,MAAO,CAAA,CAEX,CAEA,OACEF,AAAiB,IAAjBA,GACGF,AAA2B,KAA3BA,EAASK,UAAU,CAAC,IACpBL,AAA6C,KAA7CA,EAASK,UAAU,CAACL,EAASC,MAAM,CAAG,EAE7C,yBAEO,SAAwBD,CAAgB,EAC7C,GAAIA,EAASC,MAAM,CAAG,EACpB,MAAO,CAAA,EAGT,IAAIK,EAAQN,CAAAA,CAAAA,AAAgB,MAAhBA,CAAQ,CAAC,EAAE,EACnBO,EAAMP,EAASC,MAAM,CASzB,GAP0B,MAAtBD,CAAQ,CAACO,EAAM,EAAE,EACnBA,CAAAA,GAAO,CAAA,EAMLA,EAAMD,EAAQ,GAChB,MAAO,CAAA,EAIT,IAAIE,EAAW,CAAA,EAEf,KAAOF,EAAQC,EAAKD,GAAS,EAAG,CAC9B,IAAMF,EAAOJ,EAASK,UAAU,CAACC,GAEjC,GAAIF,AAAS,KAATA,EACFI,EAAW,CAAA,OACN,GACL,AAACJ,CAAAA,EAAO,IAAMA,EAAO,KACjBA,CAAAA,EAAO,IAAMA,EAAO,MACpBA,CAAAA,EAAO,IAAMA,EAAO,IAGxB,MAAO,CAAA,CAEX,CAEA,OAAOI,CACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-headers.js","sources":["../../src/merge-headers/index.ts"],"sourcesContent":["export type HeadersInitLike = string[][] | Record<string, string | readonly string[]> | Headers | null | undefined;\nexport type IncomingHttpHeadersLike = Record<string, string | string[] | undefined> | undefined | null;\nexport type OutgoingHttpHeadersLike = Record<string, number | string | string[] | undefined> | undefined | null;\n\nexport function mergeHeaders(dest: HeadersInitLike, source: HeadersInitLike): Headers {\n if (dest == null) {\n return source == null ? new Headers() : new Headers(source);\n }\n if (source == null) {\n return new Headers(dest);\n }\n\n const destHeaders = new Headers(dest);\n const sourceHeaders = new Headers(source);\n\n sourceHeaders.forEach((value: string, key: string) => {\n destHeaders.set(key, value);\n });\n\n return destHeaders;\n}\n\nexport function mergeNodeHttpHeaders(dest: IncomingHttpHeadersLike, source: IncomingHttpHeadersLike): IncomingHttpHeadersLike;\nexport function mergeNodeHttpHeaders(dest: OutgoingHttpHeadersLike, source: IncomingHttpHeadersLike | OutgoingHttpHeadersLike): OutgoingHttpHeadersLike;\nexport function mergeNodeHttpHeaders(dest: IncomingHttpHeadersLike | OutgoingHttpHeadersLike, source: IncomingHttpHeadersLike | OutgoingHttpHeadersLike): IncomingHttpHeadersLike | OutgoingHttpHeadersLike {\n if (dest == null) {\n return source == null ? {} : source;\n }\n if (source == null) {\n return dest;\n }\n return Object.assign({}, dest, source);\n}\n"],"names":["dest","source","Headers","destHeaders","sourceHeaders","forEach","value","key","set","Object","assign"],"mappings":"4EAIO,SAAsBA,CAAqB,CAAEC,CAAuB,EACzE,GAAID,AAAQ,MAARA,EACF,OAAOC,AAAU,MAAVA,EAAiB,IAAIC,QAAY,IAAIA,QAAQD,GAEtD,GAAIA,AAAU,MAAVA,EACF,OAAO,IAAIC,QAAQF,GAGrB,IAAMG,EAAc,IAAID,QAAQF,GAOhC,OAJAI,AAFsB,IAAIF,QAAQD,GAEpBI,OAAO,CAAC,CAACC,EAAeC,KACpCJ,EAAYK,GAAG,CAACD,EAAKD,EACvB,GAEOH,CACT,+BAIO,SAA8BH,CAAuD,CAAEC,CAAyD,SACrJ,AAAID,AAAQ,MAARA,EACKC,AAAU,MAAVA,EAAiB,CAAA,EAAKA,EAE3BA,AAAU,MAAVA,EACKD,EAEFS,OAAOC,MAAM,CAAC,GAAIV,EAAMC,EACjC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"noop.js","sources":["../../src/noop/index.ts"],"sourcesContent":["export interface Noop<T = any> {\n (...args: any[]): T\n}\nexport const noop: Noop = () => { /* noop */ };\n\nexport const trueFn: Noop<true> = () => true;\nexport const falseFn: Noop<false> = () => false;\n\n// eslint-disable-next-line sukka/unicorn/error-message -- deliberately w/o error msg\nexport const throwFn: Noop<never> = () => { throw new Error(); };\n\nconst p = Promise.resolve();\nexport const asyncNoop: Noop<Promise<any>> = () => p;\n\nconst neverResolvedPromise = new Promise<never>(noop);\nexport const asyncNeverFn: Noop<Promise<never>> = () => neverResolvedPromise;\n"],"names":["noop","p","Promise","resolve","neverResolvedPromise","Error"],"mappings":"uDAGO,MAAMA,EAAa,KAAA,EAQpBC,EAAIC,QAAQC,OAAO,GAGnBC,EAAuB,IAAIF,QAAeF,wBACE,IAAMI,oBAHX,IAAMH,kBANf,IAAM,CAAA,iCAGN,KAAQ,MAAM,AAAII,OAAS,iBAJ7B,IAAM,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"once.js","sources":["../../src/once/index.ts"],"sourcesContent":["export function once<T>(fn: (() => T)): (() => T) {\n let called = false;\n let result: T;\n\n return (): T => {\n if (!called) {\n called = true;\n result = fn();\n }\n\n return result;\n };\n}\n"],"names":["fn","result","called"],"mappings":"oEAAO,SAAiBA,CAAa,EACnC,IACIC,EADAC,EAAS,CAAA,EAGb,MAAO,KACAA,IACHA,EAAS,CAAA,EACTD,EAASD,KAGJC,EAEX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pick-random.js","sources":["../../src/pick-random/index.ts"],"sourcesContent":["import { randomInt } from 'node:crypto';\n\n/**\n * @param randomInt - a random generate function that accepts two arguments `min` and `max` and returns a random number between `min` and `max`\n */\nexport function createPickRandom(randomInt: (min: number, max: number) => number) {\n return function pickRandom<T>(data: T[] | readonly T[], count = 1) {\n if (count > data.length) {\n throw new TypeError('Count must be lower or the same as the number of picks');\n }\n\n const $data = data.slice();\n\n const pickedElements = [];\n\n while (count--) {\n if ($data.length === 1) {\n // skip randomInt since it might be expensive\n pickedElements.push($data[0]);\n } else {\n pickedElements.push($data.splice(randomInt(0, $data.length - 1), 1)[0]);\n }\n }\n\n return pickedElements;\n };\n}\n\nexport const pickRandom = createPickRandom(randomInt);\n\nexport function createPickOne(randomInt: (min: number, max: number) => number) {\n return function pickOne<T>(data: T[] | readonly T[]) {\n if (data.length === 1) {\n // skip randomInt since it might be expensive\n return data[0];\n }\n return data[randomInt(0, data.length - 1)];\n };\n}\n\nexport const pickOne = createPickOne(randomInt);\n"],"names":["createPickRandom","randomInt","data","count","length","TypeError","$data","slice","pickedElements","push","splice","pickRandom","createPickOne","pickOne"],"mappings":"oFAKO,SAASA,EAAiBC,CAA+C,EAC9E,OAAO,SAAuBC,CAAwB,CAAEC,EAAQ,CAAC,EAC/D,GAAIA,EAAQD,EAAKE,MAAM,CACrB,MAAM,AAAIC,UAAU,0DAGtB,IAAMC,EAAQJ,EAAKK,KAAK,GAElBC,EAAiB,EAAE,CAEzB,KAAOL,KACDG,AAAiB,IAAjBA,EAAMF,MAAM,CAEdI,EAAeC,IAAI,CAACH,CAAK,CAAC,EAAE,EAE5BE,EAAeC,IAAI,CAACH,EAAMI,MAAM,CAACT,EAAU,EAAGK,EAAMF,MAAM,CAAG,GAAI,EAAE,CAAC,EAAE,EAI1E,OAAOI,CACT,CACF,CAEO,MAAMG,EAAaX,EAAiBC,EAAWA,SAAA,EAE/C,SAASW,EAAcX,CAA+C,EAC3E,OAAO,SAAoBC,CAAwB,SACjD,AAAIA,AAAgB,IAAhBA,EAAKE,MAAM,CAENF,CAAI,CAAC,EAAE,CAETA,CAAI,CAACD,EAAU,EAAGC,EAAKE,MAAM,CAAG,GAAG,AAC5C,CACF,CAEO,MAAMS,EAAUD,EAAcX,EAAWA,SAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"random-int.js","sources":["../../src/random-int/index.ts"],"sourcesContent":["/**\n * @param random - a random generate function that returns a number between 0 and 1\n */\nexport function createRandomInt(random: () => number) {\n return (min: number, max: number): number => Math.floor(random() * (max - min + 1)) + min;\n}\n\nexport const randomInt = createRandomInt(Math.random);\n\n// function secureRandom() {\n// const buf = new Uint32Array(1);\n// getRandomValues(buf);\n// return buf[0] / (0xFF_FF_FF_FF + 1);\n// }\n\n// export const randomIntSecure = createRandomInt(secureRandom);\n"],"names":["createRandomInt","random","min","max","Math","floor","randomInt"],"mappings":"AAGO,SAASA,EAAgBC,CAAoB,EAClD,MAAO,CAACC,EAAaC,IAAwBC,KAAKC,KAAK,CAACJ,IAAYE,CAAAA,EAAMD,EAAM,CAAA,GAAMA,CACxF,8DAEaI,EAAYN,EAAgBI,KAAKH,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"repool.js","sources":["../../src/repool/index.ts"],"sourcesContent":["export interface Reusifiable {\n next: this | null\n}\n\n/**\n * Repool is a class that allows you to reuse objects.\n *\n * Do not use this to store class instances, please use https://github.com/mcollina/reusify instead.\n */\nexport class Repool<T extends Reusifiable> {\n private head: T;\n private tail: T;\n\n constructor(private createObject: () => T) {\n const obj = createObject();\n this.tail = obj;\n this.head = obj;\n }\n\n public get(): T {\n const current = this.head;\n\n if (current.next) {\n this.head = current.next;\n } else {\n const obj = this.createObject();\n this.tail = obj;\n this.head = obj;\n }\n\n current.next = null;\n\n return current;\n }\n\n public release(obj: T): void {\n this.tail.next = obj;\n this.tail = obj;\n }\n}\n"],"names":["constructor","createObject","obj","tail","head","get","current","next","release"],"mappings":"sEASO,MAILA,YAAoBC,CAAqB,CAAE,MAAvBA,YAAAA,CAAAA,EAClB,IAAMC,EAAMD,GACZ,CAAA,IAAI,CAACE,IAAI,CAAGD,EACZ,IAAI,CAACE,IAAI,CAAGF,CACd,CAEOG,KAAS,CACd,IAAMC,EAAU,IAAI,CAACF,IAAI,CAEzB,GAAIE,EAAQC,IAAI,CACd,IAAI,CAACH,IAAI,CAAGE,EAAQC,IAAI,KACnB,CACL,IAAML,EAAM,IAAI,CAACD,YAAY,EAC7B,CAAA,IAAI,CAACE,IAAI,CAAGD,EACZ,IAAI,CAACE,IAAI,CAAGF,CACd,CAIA,OAFAI,EAAQC,IAAI,CAAG,KAERD,CACT,CAEOE,QAAQN,CAAM,CAAQ,CAC3B,IAAI,CAACC,IAAI,CAACI,IAAI,CAAGL,EACjB,IAAI,CAACC,IAAI,CAAGD,CACd,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"retrie.js","sources":["../../src/retrie/index.ts"],"sourcesContent":["// TypeScript port of [retrie](https://github.com/satyr/retrie), which is a Coco -> JS port of [@dankogai](https://x.com/dankogai)'s [RegexpTrie](https://metacpan.org/release/DANKOGAI/Regexp-Trie-0.02/view/lib/Regexp/Trie.pm).\n\nimport { falseFn } from '../noop';\n\ninterface BaseTrie {\n [key: string]: Trie\n}\n\ntype Trie = BaseTrie | {\n '': ''\n};\n\nconst shouldEscapeChars = new Set<string>([\n '.',\n '?',\n '*',\n '+',\n '^',\n '$',\n '|',\n '(',\n ')',\n '{',\n '}',\n '[',\n ']',\n '\\\\'\n]);\n\nexport function retrie(keywords: ArrayLike<string>, asPrefixes = false) {\n const tree: Trie = {};\n\n const add = (keywords: string, asPrefixes: boolean) => {\n let keyword: string;\n let ref: Trie = tree;\n\n for (let i = 0, len = keywords.length; i < len; ++i) {\n keyword = keywords.charAt(i);\n\n if (!(keyword in ref)) {\n (ref as BaseTrie)[keyword] = asPrefixes\n ? { '': '' }\n : {};\n }\n\n ref = (ref as BaseTrie)[keyword];\n }\n\n ref[''] = '';\n };\n\n for (let i = 0, len = keywords.length; i < len; ++i) {\n add(keywords[i], asPrefixes);\n }\n\n const toString = () => {\n function recur(it: Trie): string {\n let q = false;\n let re;\n let sub: string | undefined;\n let cconly = false;\n const alt: string[] = [];\n const cc: string[] = [];\n\n // eslint-disable-next-line guard-for-in -- plain object\n for (const chr in it) {\n if (!chr) {\n q = true;\n continue;\n }\n\n sub = recur((it as BaseTrie)[chr]);\n\n (sub ? alt : cc).push(\n (\n chr === '-'\n // eslint-disable-next-line sukka/unicorn/prefer-string-raw -- regexp escape\n ? '\\\\x2d'\n : (\n shouldEscapeChars.has(chr)\n ? '\\\\' + chr\n : chr\n )\n )\n + sub\n );\n }\n\n if (q && sub == null) {\n return '';\n }\n\n cconly = !alt.length;\n\n if (cc.length) {\n alt.push(\n cc[1]\n ? '[' + cc.join('') + ']'\n : cc[0]\n );\n }\n\n re = alt[1]\n ? '(?:' + alt.join('|') + ')'\n : alt[0];\n\n if (q) {\n re = cconly\n ? re + '?'\n : '(?:' + re + ')?';\n }\n\n return re || '';\n }\n return recur(tree);\n };\n\n const toRe = () => new RegExp(\n (asPrefixes ? '^' : '')\n + toString()\n );\n\n return {\n tree,\n add,\n toString,\n toRe\n };\n}\n\nexport function createRetrieKeywordFilter(keywords: ArrayLike<string>, asPrefixes = false) {\n if (keywords.length === 0) {\n return falseFn;\n }\n\n const re = retrie(keywords, asPrefixes).toRe();\n return re.test.bind(re);\n}\n"],"names":["shouldEscapeChars","Set","retrie","keywords","asPrefixes","tree","add","keyword","ref","i","len","length","charAt","toString","recur","it","re","sub","q","cconly","alt","cc","chr","push","has","join","toRe","RegExp","falseFn","test","bind"],"mappings":"kFAYA,MAAMA,EAAoB,IAAIC,IAAY,CACxC,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACD,EAEM,SAASC,EAAOC,CAA2B,CAAEC,EAAa,CAAA,CAAK,EACpE,IAAMC,EAAa,CAAC,EAEdC,EAAM,CAACH,EAAkBC,SACzBG,EACJ,IAAIC,EAAYH,EAEhB,IAAK,IAAII,EAAI,EAAGC,EAAMP,EAASQ,MAAM,CAAEF,EAAIC,EAAK,EAAED,EAChDF,CAAAA,EAAUJ,EAASS,MAAM,CAACH,EAAAA,IAETD,GACdA,CAAAA,CAAgB,CAACD,EAAQ,CAAGH,EACzB,CAAE,GAAI,EAAG,EACT,CAAC,CAAA,EAGPI,EAAOA,CAAgB,CAACD,EAAQ,AAGlCC,CAAAA,CAAG,CAAC,GAAG,CAAG,EACZ,EAEA,IAAK,IAAIC,EAAI,EAAGC,EAAMP,EAASQ,MAAM,CAAEF,EAAIC,EAAK,EAAED,EAChDH,EAAIH,CAAQ,CAACM,EAAE,CAAEL,GAGnB,IAAMS,EAAW,IA2DRC,AA1DP,CAAA,SAASA,EAAMC,CAAQ,EACrB,IACIC,EACAC,EAFAC,EAAI,CAAA,EAGJC,EAAS,CAAA,EACPC,EAAgB,EAAE,CAClBC,EAAe,EAAE,CAGvB,IAAK,IAAMC,KAAOP,EAAI,CACpB,GAAI,CAACO,EAAK,CACRJ,EAAI,CAAA,EACJ,QACF,CAICD,AAAAA,CAAAA,AAFDA,CAAAA,EAAMH,EAAOC,CAAe,CAACO,EAAI,CAAA,EAE1BF,EAAMC,CAAAA,EAAIE,IAAI,CACnB,AACED,CAAAA,AAAQ,MAARA,EAEI,QAEAtB,EAAkBwB,GAAG,CAACF,GAClB,KAAOA,EACPA,CACN,EAEFL,EAEN,QAEA,AAAIC,GAAKD,AAAO,MAAPA,EACA,IAGTE,EAAS,CAACC,EAAIT,MAAM,CAEhBU,EAAGV,MAAM,EACXS,EAAIG,IAAI,CACNF,CAAE,CAAC,EAAE,CACD,IAAMA,EAAGI,IAAI,CAAC,IAAM,IACpBJ,CAAE,CAAC,EAAE,EAIbL,EAAKI,CAAG,CAAC,EAAE,CACP,MAAQA,EAAIK,IAAI,CAAC,KAAO,IACxBL,CAAG,CAAC,EAAE,CAENF,GACFF,CAAAA,EAAKG,EACDH,EAAK,IACL,MAAQA,EAAK,IAAA,EAGZA,GAAM,GACf,CAAA,EACaX,GAQf,MAAO,CACLA,KAAAA,EACAC,IAAAA,EACAO,SAAAA,EACAa,KATW,IAAM,IAAIC,OACrB,AAACvB,CAAAA,EAAa,IAAM,EAAA,EAClBS,IAQJ,CACF,mCAEO,SAAmCV,CAA2B,CAAEC,EAAa,CAAA,CAAK,EACvF,GAAID,AAAoB,IAApBA,EAASQ,MAAM,CACjB,OAAOiB,EAAAA,OAAAA,CAGT,IAAMZ,EAAKd,EAAOC,EAAUC,GAAYsB,IAAI,GAC5C,OAAOV,EAAGa,IAAI,CAACC,IAAI,CAACd,EACtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialized-memo.js","sources":["../../src/serialized-memo/index.ts"],"sourcesContent":["import { fastStringArrayJoin } from '../fast-string-array-join';\nimport { identity } from '../identity';\nimport { noop } from '../noop';\n\nexport interface MemoizeStorageProvider {\n has(key: string): boolean | Promise<boolean>,\n get(key: string): string | undefined | PromiseLike<string | undefined>,\n set(key: string, value: string, ttl: number): void | Promise<void>,\n updateTtl?: (key: string, ttl: number) => void | Promise<void>,\n delete(key: string): void | Promise<void>\n}\n\nexport interface CreateMemoizeOptions {\n /**\n * When set to true, the memoize will always try run the function first.\n * If promise resolved, it will update the cache.\n * If promise rejected, it will try to get the value from cache, and return\n * the cached value. If the cache is not available, it will throw the error.\n */\n onlyUseCachedIfFail?: boolean,\n resetTtlOnHit?: boolean,\n defaultTtl?: number,\n onCacheUpdate?: (key: string, { humanReadableName }: { humanReadableName: string, isUseCachedIfFail: boolean }) => void,\n onCacheMiss?: (key: string, { humanReadableName }: { humanReadableName: string, isUseCachedIfFail: boolean }) => void,\n onCacheHit?: (key: string, { humanReadableName }: { humanReadableName: string, isUseCachedIfFail: boolean }) => void,\n\n /** recommendation: import('hash-wasm').xxhash64 */\n keyHasher?: (key: string) => Promise<string> | string,\n /** recommendation: import('devalue').stringify */\n argHasher: (args: any[]) => Promise<string> | string\n}\n\n// https://github.com/Rich-Harris/devalue/blob/f3fd2aa93d79f21746555671f955a897335edb1b/src/stringify.js#L77\nexport type SerializableValue =\n | number\n | string\n | boolean\n | bigint\n | Date\n | RegExp\n | Set<SerializableValue>\n | SerializableValue[]\n | null\n | undefined\n | Map<SerializableValue, SerializableValue>\n | SerializableObject\n | /** TypedArray */ Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array\n | ArrayBuffer;\n\n// Has to use an interface to avoid circular reference\ninterface SerializableObject {\n [key: string]: SerializableValue\n}\n\ninterface MemoizeBaseOptions {\n /**\n * The time to live of the cache in milliseconds.\n */\n ttl?: number | null,\n temporaryBypass?: boolean\n}\n\ninterface MemoizeOptionsWithCustomSerializer<T> extends MemoizeBaseOptions {\n serializer: (value: T) => string,\n deserializer: (cached: string) => T\n}\n\nexport type MemoizeOptions<T> = T extends string ? MemoizeBaseOptions : MemoizeOptionsWithCustomSerializer<T>;\n\n/**\n * A factory function that returns a memoize function.\n *\n * Unlike common memoize function out there, this serialize the parameters and returned value\n * for easy storing with file system, SQLite, Redis, etc.\n */\nexport function createMemoize(storage: MemoizeStorageProvider, {\n onlyUseCachedIfFail = false,\n resetTtlOnHit = false,\n defaultTtl = 7 * 86400 * 1000,\n onCacheUpdate = noop,\n onCacheMiss = noop,\n onCacheHit = noop,\n keyHasher = identity,\n argHasher\n}: CreateMemoizeOptions) {\n return function memoize<Args extends SerializableValue[], R>(\n fn: (...args: Args) => R | Promise<R>,\n opt?: MemoizeOptions<R>\n ): (...args: Args) => Promise<R> {\n if (opt?.temporaryBypass) {\n return (...args: Args) => Promise.resolve(fn(...args));\n }\n\n const serializer = opt && 'serializer' in opt ? opt.serializer : identity<Awaited<R>, string>;\n const deserializer = opt && 'deserializer' in opt ? opt.deserializer : identity<string, Awaited<R>>;\n const ttl = opt?.ttl ?? defaultTtl;\n\n const fixedKey = fn.toString();\n\n const fixedKeyHashPromise = keyHasher(fixedKey);\n\n return async function cachedCb(...args: Args) {\n // Construct the complete cache key for this function invocation\n // typeson.stringify is still limited. For now we uses typescript to guard the args.\n const cacheKey = fastStringArrayJoin(\n await Promise.all([\n fixedKeyHashPromise,\n argHasher(args)\n ]),\n '|'\n );\n\n const cacheName = fn.name || fixedKey || cacheKey;\n\n let cached = storage.get(cacheKey);\n if (cached && typeof cached === 'object' && 'then' in cached) {\n cached = await cached;\n }\n\n if (onlyUseCachedIfFail) {\n try {\n const value = await fn(...args);\n\n onCacheUpdate(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: true });\n const p = storage.set(cacheKey, serializer(value), ttl);\n if (p && 'then' in p) {\n await p;\n }\n\n return value;\n } catch (e) {\n if (cached == null) {\n onCacheMiss(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: true });\n throw e;\n }\n\n if (resetTtlOnHit) {\n const p = storage.updateTtl?.(cacheKey, ttl);\n if (p && 'then' in p) {\n await p;\n }\n }\n\n onCacheHit(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: true });\n\n return deserializer(cached);\n }\n } else {\n if (cached == null) {\n onCacheMiss(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: false });\n\n const value = await fn(...args);\n\n const p = storage.set(cacheKey, serializer(value), ttl);\n if (p && 'then' in p) {\n await p;\n }\n\n return value;\n }\n\n onCacheHit(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: false });\n\n if (resetTtlOnHit) {\n const p = storage.updateTtl?.(cacheKey, ttl);\n if (p && 'then' in p) {\n await p;\n }\n }\n\n return deserializer(cached);\n }\n };\n };\n}\n"],"names":["storage","onlyUseCachedIfFail","resetTtlOnHit","defaultTtl","onCacheUpdate","noop","onCacheMiss","onCacheHit","keyHasher","identity","argHasher","fn","opt","temporaryBypass","args","Promise","resolve","serializer","deserializer","ttl","fixedKey","toString","fixedKeyHashPromise","cacheKey","fastStringArrayJoin","all","cacheName","name","cached","get","value","humanReadableName","isUseCachedIfFail","p","set","e","updateTtl"],"mappings":"4KA2EO,SAAuBA,CAA+B,CAAE,CAC7DC,oBAAAA,EAAsB,CAAA,CAAK,CAC3BC,cAAAA,EAAgB,CAAA,CAAK,CACrBC,WAAAA,EAAa,MAAgB,CAC7BC,cAAAA,EAAgBC,EAAAA,IAAI,CACpBC,YAAAA,EAAcD,MAAI,CAClBE,WAAAA,EAAaF,EAAAA,IAAI,CACjBG,UAAAA,EAAYC,UAAQ,CACpBC,UAAAA,CAAS,CACY,EACrB,OAAO,SACLC,CAAqC,CACrCC,CAAuB,EAEvB,GAAIA,GAAKC,gBACP,MAAO,CAAC,GAAGC,IAAeC,QAAQC,OAAO,CAACL,KAAMG,IAGlD,IAAMG,EAAaL,GAAO,eAAgBA,EAAMA,EAAIK,UAAU,CAAGR,EAAAA,QAAAA,CAC3DS,EAAeN,GAAO,iBAAkBA,EAAMA,EAAIM,YAAY,CAAGT,EAAAA,QAAAA,CACjEU,EAAMP,GAAKO,KAAOhB,EAElBiB,EAAWT,EAAGU,QAAQ,GAEtBC,EAAsBd,EAAUY,GAEtC,OAAO,eAAwB,GAAGN,CAAU,EAG1C,IAAMS,EAAWC,EAAAA,mBAAAA,CACf,MAAMT,QAAQU,GAAG,CAAC,CAChBH,EACAZ,EAAUI,GACX,EACD,KAGIY,EAAYf,EAAGgB,IAAI,EAAIP,GAAYG,EAErCK,EAAS5B,EAAQ6B,GAAG,CAACN,GAKzB,GAJIK,GAAU,AAAkB,UAAlB,OAAOA,GAAuB,SAAUA,GACpDA,CAAAA,EAAS,MAAMA,CAAAA,EAGb3B,EACF,GAAI,CACF,IAAM6B,EAAQ,MAAMnB,KAAMG,GAE1BV,EAAcmB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAK,GAChF,IAAMC,EAAIjC,EAAQkC,GAAG,CAACX,EAAUN,EAAWa,GAAQX,GAKnD,OAJIc,GAAK,SAAUA,GACjB,MAAMA,EAGDH,CACT,CAAE,MAAOK,EAAG,CACV,GAAIP,AAAU,MAAVA,EAEF,MADAtB,EAAYiB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAK,GACxEG,EAGR,GAAIjC,EAAe,CACjB,IAAM+B,EAAIjC,EAAQoC,SAAS,GAAGb,EAAUJ,GACpCc,GAAK,SAAUA,GACjB,MAAMA,CAEV,CAIA,OAFA1B,EAAWgB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAK,GAEtEd,EAAaU,EACtB,KACK,CACL,GAAIA,AAAU,MAAVA,EAAgB,CAClBtB,EAAYiB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAM,GAE/E,IAAMF,EAAQ,MAAMnB,KAAMG,GAEpBmB,EAAIjC,EAAQkC,GAAG,CAACX,EAAUN,EAAWa,GAAQX,GAKnD,OAJIc,GAAK,SAAUA,GACjB,MAAMA,EAGDH,CACT,CAIA,GAFAvB,EAAWgB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAM,GAE1E9B,EAAe,CACjB,IAAM+B,EAAIjC,EAAQoC,SAAS,GAAGb,EAAUJ,GACpCc,GAAK,SAAUA,GACjB,MAAMA,CAEV,CAEA,OAAOf,EAAaU,EACtB,CACF,CACF,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"simple-string-hash.js","sources":["../../src/simple-string-hash/index.ts"],"sourcesContent":["import { fnv1a52 } from '../fnv1a52';\n\nexport function simpleStringHash(payload: string): string {\n return fnv1a52(payload).toString(36) + payload.length.toString(36);\n}\n"],"names":["payload","fnv1a52","toString","length"],"mappings":"8GAEO,SAA0BA,CAAe,EAC9C,OAAOC,EAAAA,OAAAA,CAAQD,GAASE,QAAQ,CAAC,IAAMF,EAAQG,MAAM,CAACD,QAAQ,CAAC,GACjE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tagged.js","sources":["../../src/tagged/index.ts"],"sourcesContent":["/**\n * @example import { tagged as html } from 'foxts/tagged';\n */\nexport function tagged(string: TemplateStringsArray, ...values: any[]) {\n return string.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n // let result = '';\n // for (let i = 0, len = string.length; i < len; i++) {\n // result += string[i] + (values[i] ?? '');\n // }\n // return result;\n}\n"],"names":["string","values","reduce","acc","str","i"],"mappings":"sEAGO,SAAgBA,CAA4B,CAAE,GAAGC,CAAa,EACnE,OAAOD,EAAOE,MAAM,CAAC,CAACC,EAAKC,EAAKC,IAAMF,EAAMC,EAAOH,CAAAA,CAAM,CAACI,EAAE,EAAI,EAAC,EAAI,GAMvE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-line-stream.js","sources":["../../src/text-line-stream/index.ts"],"sourcesContent":["// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.\n// This module is browser compatible.\n// Modified by Sukka (https://skk.moe) to increase compatibility and performance with Bun & Node.js.\n\nimport { TransformStream } from 'node:stream/web';\nimport { falseFn } from '../noop';\n\ninterface TextLineStreamOptions {\n /** Allow splitting by solo \\r */\n allowCR?: boolean,\n\n skipEmptyLines?: boolean\n}\n\n/** Transform a stream into a stream where each chunk is divided by a newline,\n * be it `\\n` or `\\r\\n`. `\\r` can be enabled via the `allowCR` option.\n *\n * ```ts\n * const res = await fetch('https://example.com');\n * const lines = res.body!\n * .pipeThrough(new TextDecoderStream())\n * .pipeThrough(new TextLineStream());\n * ```\n */\nexport class TextLineStream extends TransformStream<string, string> {\n // private __buf = '';\n constructor({\n allowCR = false,\n skipEmptyLines = false\n }: TextLineStreamOptions = {}) {\n let __buf = '';\n let chunkIndex = 0;\n\n const transformOnCR = allowCR\n ? (chunk: string, lfIndex: number, controller: TransformStreamDefaultController<string>) => {\n const crIndex = chunk.indexOf('\\r', chunkIndex);\n\n if (\n crIndex !== -1 && crIndex !== (chunk.length - 1)\n && (lfIndex === -1 || (lfIndex - 1) > crIndex)\n ) {\n const curChunk = chunk.slice(chunkIndex, crIndex);\n\n if (skipEmptyLines && curChunk.length === 0) {\n chunkIndex = crIndex + 1;\n return true;\n }\n\n controller.enqueue(chunk.slice(chunkIndex, crIndex));\n chunkIndex = crIndex + 1;\n\n // continue;\n return true;\n }\n\n return false;\n }\n : falseFn;\n\n super({\n transform(chunk, controller) {\n chunk = __buf + chunk;\n chunkIndex = 0;\n\n for (; ;) {\n const lfIndex = chunk.indexOf('\\n', chunkIndex);\n\n if (transformOnCR(chunk, lfIndex, controller)) {\n continue;\n }\n\n if (lfIndex === -1) {\n // we can no longer find a line break in the chunk, break the current loop\n break;\n }\n\n // enqueue current line, and loop again to find next line\n let crOrLfIndex = lfIndex;\n if (chunk[lfIndex - 1] === '\\r') {\n crOrLfIndex--;\n }\n\n const curChunk = chunk.slice(chunkIndex, crOrLfIndex);\n\n if (skipEmptyLines && curChunk.length === 0) {\n chunkIndex = lfIndex + 1;\n continue;\n }\n\n controller.enqueue(curChunk);\n chunkIndex = lfIndex + 1;\n continue;\n }\n\n __buf = chunk.slice(chunkIndex);\n },\n flush(controller) {\n if (__buf.length > 0) {\n // eslint-disable-next-line sukka/string/prefer-string-starts-ends-with -- performance\n if (allowCR && __buf[__buf.length - 1] === '\\r') {\n controller.enqueue(__buf.slice(0, -1));\n } else {\n controller.enqueue(__buf);\n }\n }\n }\n });\n }\n}\n"],"names":["TextLineStream","TransformStream","constructor","allowCR","skipEmptyLines","__buf","chunkIndex","transformOnCR","chunk","lfIndex","controller","crIndex","indexOf","length","curChunk","slice","enqueue","falseFn","transform","crOrLfIndex","flush"],"mappings":"8GAwBO,OAAMA,UAAuBC,EAAAA,eAAAA,CAElCC,YAAY,CACVC,QAAAA,EAAU,CAAA,CAAK,CACfC,eAAAA,EAAiB,CAAA,CAAK,CACA,CAAG,EAAE,CAAE,CAC7B,IAAIC,EAAQ,GACRC,EAAa,EAEXC,EAAgBJ,EAClB,CAACK,EAAeC,EAAiBC,KACjC,IAAMC,EAAUH,EAAMI,OAAO,CAAC,KAAMN,GAEpC,GACEK,AAAY,KAAZA,GAAkBA,IAAaH,EAAMK,MAAM,CAAG,GAC1CJ,CAAAA,AAAY,KAAZA,GAAmBA,EAAU,EAAKE,CAAM,EAC5C,CACA,IAAMG,EAAWN,EAAMO,KAAK,CAACT,EAAYK,UAErCP,GAAkBU,AAAoB,IAApBA,EAASD,MAAM,EAKrCH,EAAWM,OAAO,CAACR,EAAMO,KAAK,CAACT,EAAYK,IAJzCL,EAAaK,EAAU,EAChB,CAAA,CAQX,CAEA,MAAO,CAAA,GAEPM,EAAAA,OAAAA,CAEJ,KAAK,CAAC,CACJC,UAAUV,CAAK,CAAEE,CAAU,EAIzB,IAHAF,EAAQH,EAAQG,EAChBF,EAAa,IAEH,CACR,IAAMG,EAAUD,EAAMI,OAAO,CAAC,KAAMN,GAEpC,GAAIC,EAAcC,EAAOC,EAASC,GAChC,SAGF,GAAID,AAAY,KAAZA,EAEF,MAIF,IAAIU,EAAcV,CACS,CAAA,OAAvBD,CAAK,CAACC,EAAU,EAAE,EACpBU,IAGF,IAAML,EAAWN,EAAMO,KAAK,CAACT,EAAYa,GAEzC,GAAIf,GAAkBU,AAAoB,IAApBA,EAASD,MAAM,CAAQ,CAC3CP,EAAaG,EAAU,EACvB,QACF,CAEAC,EAAWM,OAAO,CAACF,GACnBR,EAAaG,EAAU,CAEzB,CAEAJ,EAAQG,EAAMO,KAAK,CAACT,EACtB,EACAc,MAAMV,CAAU,EACVL,EAAMQ,MAAM,CAAG,IAEbV,GAAWE,AAA4B,OAA5BA,CAAK,CAACA,EAAMQ,MAAM,CAAG,EAAE,CACpCH,EAAWM,OAAO,CAACX,EAAMU,KAAK,CAAC,EAAG,KAElCL,EAAWM,OAAO,CAACX,GAGzB,CACF,EACF,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"wait.js","sources":["../../src/wait/index.ts"],"sourcesContent":["export function wait(ms: number): Promise<void> {\n return new Promise<void>(resolve => {\n // eslint-disable-next-line sukka/prefer-timer-id -- hang timers\n setTimeout(resolve, ms);\n });\n}\n\nexport function waitWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (signal.aborted) {\n reject(signal.reason as Error);\n return;\n }\n\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n\n function onAbort() {\n clearTimeout(timer);\n signal.removeEventListener('abort', onAbort);\n reject(signal.reason as Error);\n };\n\n signal.addEventListener('abort', onAbort);\n });\n}\n"],"names":["ms","Promise","resolve","setTimeout","signal","reject","aborted","reason","timer","removeEventListener","onAbort","clearTimeout","addEventListener"],"mappings":"oEAAO,SAAcA,CAAU,EAC7B,OAAO,IAAIC,QAAcC,AAAAA,IAEvBC,WAAWD,EAASF,EACtB,EACF,wBAEO,SAAuBA,CAAU,CAAEI,CAAmB,EAC3D,OAAO,IAAIH,QAAc,CAACC,EAASG,KACjC,GAAID,EAAOE,OAAO,CAAE,CAClBD,EAAOD,EAAOG,MAAM,EACpB,MACF,CAEA,IAAMC,EAAQL,WAAW,KACvBC,EAAOK,mBAAmB,CAAC,QAASC,GACpCR,GACCF,EAAAA,GAEH,SAASU,IACPC,aAAaH,GACbJ,EAAOK,mBAAmB,CAAC,QAASC,GACpCL,EAAOD,EAAOG,MAAM,CACtB,CAEAH,EAAOQ,gBAAgB,CAAC,QAASF,EACnC,EACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-array-elements-to-set.mjs","sources":["../../src/add-array-elements-to-set/index.ts"],"sourcesContent":["import { identity } from '../identity';\n\nexport function addArrayElementsToSet<T>(set: Set<T>, arr: T[], transformer: (item: T) => T = identity): Set<T> {\n const add = (item: T) => set.add(transformer(item));\n arr.forEach(add);\n return set;\n}\n"],"names":["addArrayElementsToSet","set","arr","transformer","identity","forEach","item","add"],"mappings":"0CAEO,SAASA,EAAyBC,CAAW,CAAEC,CAAQ,CAAEC,EAA8BC,CAAQ,EAGpG,OADAF,EAAIG,OAAO,CADC,AAACC,GAAYL,EAAIM,GAAG,CAACJ,EAAYG,KAEtCL,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ahocorasick.mjs","sources":["../../src/ahocorasick/index.ts"],"sourcesContent":["class Node extends Map<string, Node> {\n constructor(\n public wordEnd: boolean,\n public fail: Node | undefined\n ) {\n super();\n }\n}\n\nexport function createAhoCorasick(keys: string[] | Set<string> | readonly string[]) {\n const root = new Node(false, undefined);\n\n // Create a trie with extra fields and information\n const put = (key: string) => {\n let node = root;\n\n for (let idx = 0, len = key.length; idx < len; idx++) {\n const char = key[idx];\n\n if (node.has(char)) {\n node = node.get(char)!;\n } else {\n const newNode = new Node(false, undefined);\n node.set(char, newNode);\n node = newNode;\n }\n }\n\n // If a new node is created, mark it as a word end when loop finish\n if (node !== root) {\n node.wordEnd = true;\n }\n };\n\n keys.forEach(put);\n\n // const build = () => {\n const queue: Node[] = [root];\n\n while (queue.length) {\n const beginNode = queue.pop()!;\n\n beginNode.forEach((node, char) => {\n let failNode = beginNode.fail;\n\n while (failNode && !failNode.has(char)) {\n failNode = failNode.fail;\n }\n\n node.fail = failNode\n ? failNode.get(char)\n : root;\n\n queue.push(node);\n });\n }\n // };\n // build();\n\n return (text: string) => {\n let node: Node | undefined = root;\n\n for (let i = 0, textLen = text.length; i < textLen; i++) {\n const char = text[i];\n\n while (node && !node.has(char)) {\n node = node.fail;\n }\n\n node = node ? node.get(char)! : root;\n\n if (node.wordEnd) {\n return true;\n }\n }\n\n return false;\n };\n}\n"],"names":["Node","Map","constructor","wordEnd","fail","createAhoCorasick","keys","root","undefined","forEach","key","node","idx","len","length","char","has","get","newNode","set","queue","beginNode","pop","failNode","push","text","i","textLen"],"mappings":"AAAA,MAAMA,UAAaC,IACjBC,YACEC,CAAuB,CAChBC,CAAsB,CAC7B,CACA,KAAK,GAAA,IAAA,CAHED,OAAAA,CAAAA,EAAAA,IAAAA,CACAC,IAAAA,CAAAA,CAGT,CACF,CAEO,SAASC,EAAkBC,CAAgD,EAChF,IAAMC,EAAO,IAAIP,EAAK,CAAA,EAAOQ,KAAAA,GAwB7BF,EAAKG,OAAO,CArBA,AAACC,IACX,IAAIC,EAAOJ,EAEX,IAAK,IAAIK,EAAM,EAAGC,EAAMH,EAAII,MAAM,CAAEF,EAAMC,EAAKD,IAAO,CACpD,IAAMG,EAAOL,CAAG,CAACE,EAAI,CAErB,GAAID,EAAKK,GAAG,CAACD,GACXJ,EAAOA,EAAKM,GAAG,CAACF,OACX,CACL,IAAMG,EAAU,IAAIlB,EAAK,CAAA,EAAOQ,KAAAA,GAChCG,EAAKQ,GAAG,CAACJ,EAAMG,GACfP,EAAOO,CACT,CACF,CAGIP,IAASJ,GACXI,CAAAA,EAAKR,OAAO,CAAG,CAAA,CAAA,CAEnB,GAKA,IAAMiB,EAAgB,CAACb,EAAK,CAE5B,KAAOa,EAAMN,MAAM,EAAE,CACnB,IAAMO,EAAYD,EAAME,GAAG,GAE3BD,EAAUZ,OAAO,CAAC,CAACE,EAAMI,KACvB,IAAIQ,EAAWF,EAAUjB,IAAI,CAE7B,KAAOmB,GAAY,CAACA,EAASP,GAAG,CAACD,IAC/BQ,EAAWA,EAASnB,IAAI,AAG1BO,CAAAA,EAAKP,IAAI,CAAGmB,EACRA,EAASN,GAAG,CAACF,GACbR,EAEJa,EAAMI,IAAI,CAACb,EACb,EACF,CAIA,OAAO,AAACc,IACN,IAAId,EAAyBJ,EAE7B,IAAK,IAAImB,EAAI,EAAGC,EAAUF,EAAKX,MAAM,CAAEY,EAAIC,EAASD,IAAK,CACvD,IAAMX,EAAOU,CAAI,CAACC,EAAE,CAEpB,KAAOf,GAAQ,CAACA,EAAKK,GAAG,CAACD,IACvBJ,EAAOA,EAAKP,IAAI,CAKlB,GAAIO,AAFJA,CAAAA,EAAOA,EAAOA,EAAKM,GAAG,CAACF,GAASR,CAAAA,EAEvBJ,OAAO,CACd,MAAO,CAAA,CAEX,CAEA,MAAO,CAAA,CACT,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"append-set-elements-to-array.mjs","sources":["../../src/append-set-elements-to-array/index.ts"],"sourcesContent":["import { identity } from '../identity';\n\nfunction innerAppendSetElementsToArray<T>(\n dest: T[],\n source: Set<T>,\n transformer: (item: T) => T\n): T[] {\n const iterator = source.values();\n let step: IteratorResult<T, undefined>;\n\n while ((step = iterator.next(), !step.done)) {\n dest.push(transformer(step.value));\n }\n\n return dest;\n}\n\nexport function appendSetElementsToArray<T>(\n dest: T[],\n source: Set<T> | Array<Set<T>>,\n transformer: (item: T) => T = identity\n) {\n if (!Array.isArray(source)) {\n return innerAppendSetElementsToArray(dest, source, transformer);\n }\n\n for (let i = 0, len = source.length; i < len; i++) {\n innerAppendSetElementsToArray(dest, source[i], transformer);\n }\n\n return dest;\n}\n"],"names":["innerAppendSetElementsToArray","dest","source","transformer","step","iterator","values","next","done","push","value","appendSetElementsToArray","identity","Array","isArray","i","len","length"],"mappings":"0CAEA,SAASA,EACPC,CAAS,CACTC,CAAc,CACdC,CAA2B,MAGvBC,EADJ,IAAMC,EAAWH,EAAOI,MAAM,GAG9B,KAAQF,CAAyBA,AAAzBA,CAAAA,EAAOC,EAASE,IAAI,IAAUC,IAAI,EACxCP,EAAKQ,IAAI,CAACN,EAAYC,EAAKM,KAAK,GAGlC,OAAOT,CACT,CAEO,SAASU,EACdV,CAAS,CACTC,CAA8B,CAC9BC,EAA8BS,CAAQ,EAEtC,GAAI,CAACC,MAAMC,OAAO,CAACZ,GACjB,OAAOF,EAA8BC,EAAMC,EAAQC,GAGrD,IAAK,IAAIY,EAAI,EAAGC,EAAMd,EAAOe,MAAM,CAAEF,EAAIC,EAAKD,IAC5Cf,EAA8BC,EAAMC,CAAM,CAACa,EAAE,CAAEZ,GAGjD,OAAOF,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"async-write-to-stream.mjs","sources":["../../src/async-write-to-stream/index.ts"],"sourcesContent":["import type { Writable } from 'node:stream';\nimport { once } from 'node:events';\n\n/**\n * A small utility function for writing chunk to a stream, and only return promise when needed (stream backpressure)\n *\n * ```ts\n * const writeStream = fs.createWriteStream(outputFile);\n * for (const line of source) {\n * const p = asyncWriteToStream(writeStream, line + '\\n');\n * if (p) {\n * // eslint-disable-next-line no-await-in-loop -- stream backpressure\n * await p;\n * }\n * }\n */\nexport function asyncWriteToStream<T>(stream: Writable, chunk: T): Promise<unknown> | null {\n const waitDrain = !stream.write(chunk);\n if (waitDrain) {\n return once(stream, 'drain'); // returns a promise only if needed\n }\n return null;\n}\n"],"names":["asyncWriteToStream","stream","chunk","write","once"],"mappings":"mCAgBO,SAASA,EAAsBC,CAAgB,CAAEC,CAAQ,SAE9D,AADmBD,EAAOE,KAAK,CAACD,GAIzB,KAFEE,EAAKH,EAAQ,QAGxB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bitwise.mjs","sources":["../../src/bitwise/index.ts"],"sourcesContent":["// From: https://stackoverflow.com/a/43122214/1185079\nexport function bitCount(n: number): number {\n n = n - ((n >> 1) & 0x55_55_55_55);\n n = (n & 0x33_33_33_33) + ((n >> 2) & 0x33_33_33_33);\n return (((n + (n >> 4)) & 0xF_0F_0F_0F) * 0x1_01_01_01) >> 24;\n}\n\nexport const getBit = (n: number, mask: number) => !!(n & mask);\nexport const missingBit = (n: number, mask: number): boolean => !(n & mask);\nexport const setBit = (n: number, mask: number) => n | mask;\nexport const deleteBit = (n: number, mask: number) => n & ~mask;\n\n/** Packs two 16-bit integers (0~65535) into one 32-bit integer */\nexport const packTwoBits = (a: number, b: number): number => (a << 16) | b;\n\nexport const unpackTwoBitsFirst = (value: number): number => (value >> 16) & 0xFFFF;\nexport const unpackTwoBitsSecond = (value: number): number => value & 0xFFFF;\n/**\n * Unpacks two 16-bit integers (0~65535) from one 32-bit integer\n *\n * @param value - The 32-bit integer to unpack\n * @param arr - An optional array to store the unpacked values, useful if you are trying to re-use arrays\n */\nexport function unpackTwoBits(value: number, arr: [a: number, b: number] = Array.from(new Array(2).keys()) as any): [a: number, b: number] {\n arr[0] = unpackTwoBitsFirst(value);\n arr[1] = unpackTwoBitsSecond(value);\n return arr;\n}\n\n/** Packs three 10-bit integers (0~1023) into one 32-bit integer */\nexport const packThreeBits = (a: number, b: number, c: number): number => (a << 20) | (b << 10) | c;\n\nexport const unpackThreeBitsFirst = (value: number): number => (value >> 20) & 0x3FF;\nexport const unpackThreeBitsSecond = (value: number): number => (value >> 10) & 0x3FF;\nexport const unpackThreeBitsThird = (value: number): number => value & 0x3FF;\n/**\n * Unpacks three 10-bit integers (0~1023) from one 32-bit integer\n *\n * @param value - The 32-bit integer to unpack\n * @param arr - An optional array to store the unpacked values, useful if you are trying to re-use arrays\n */\nexport function unpackThreeBits(value: number, arr: [a: number, b: number, c: number] = Array.from(new Array(3).keys()) as any): [a: number, b: number, c: number] {\n arr[0] = unpackThreeBitsFirst(value);\n arr[1] = unpackThreeBitsSecond(value);\n arr[2] = unpackThreeBitsThird(value);\n return arr;\n}\n"],"names":["bitCount","n","getBit","mask","missingBit","setBit","deleteBit","packTwoBits","a","b","unpackTwoBitsFirst","value","unpackTwoBitsSecond","unpackTwoBits","arr","Array","from","keys","packThreeBits","c","unpackThreeBitsFirst","unpackThreeBitsSecond","unpackThreeBitsThird","unpackThreeBits"],"mappings":"AACO,SAASA,EAASC,CAAS,EAGhC,OAFAA,GAASA,GAAM,EAAK,WAEX,AAACA,CAAAA,AADVA,CAAAA,EAAKA,AAAAA,CAAAA,AAAI,WAAJA,CAAI,EAAmBA,CAAAA,GAAK,EAAK,UAAA,CAAY,EACnCA,CAAAA,GAAK,CAAA,EAAM,SAAA,EAAgB,WAAiB,EAC7D,CAEO,IAAMC,EAAS,CAACD,EAAWE,IAAiB,CAAC,CAAEF,CAAAA,EAAIE,CAAG,EAChDC,EAAa,CAACH,EAAWE,IAA0B,CAAEF,CAAAA,EAAIE,CAAG,EAC5DE,EAAS,CAACJ,EAAWE,IAAiBF,EAAIE,EAC1CG,EAAY,CAACL,EAAWE,IAAiBF,EAAI,CAACE,EAG9CI,EAAc,CAACC,EAAWC,IAAuBD,GAAK,GAAMC,EAE5DC,EAAqB,AAACC,GAA0BA,GAAU,GAAM,MAChEC,EAAsB,AAACD,GAA0BA,AAAQ,MAARA,EAOvD,SAASE,EAAcF,CAAa,CAAEG,EAA8BC,MAAMC,IAAI,CAAC,IAAU,CAAGC,IAAI,GAAU,EAG/G,OAFAH,CAAG,CAAC,EAAE,CAAGJ,EAAmBC,GAC5BG,CAAG,CAAC,EAAE,CAAGF,EAAoBD,GACtBG,CACT,CAGaI,IAAAA,EAAgB,CAACV,EAAWC,EAAWU,IAAsBX,GAAM,GAAOC,GAAK,GAAMU,EAErFC,EAAuB,AAACT,GAA0BA,GAAU,GAAM,KAClEU,EAAwB,AAACV,GAA0BA,GAAU,GAAM,KACnEW,EAAuB,AAACX,GAA0BA,AAAQ,KAARA,EAOxD,SAASY,EAAgBZ,CAAa,CAAEG,EAAyCC,MAAMC,IAAI,CAAC,KAAU,CAAGC,IAAI,GAAU,EAI5H,OAHAH,CAAG,CAAC,EAAE,CAAGM,EAAqBT,GAC9BG,CAAG,CAAC,EAAE,CAAGO,EAAsBV,GAC/BG,CAAG,CAAC,EAAE,CAAGQ,EAAqBX,GACvBG,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-fixed-array.mjs","sources":["../../src/create-fixed-array/index.ts"],"sourcesContent":["const arrayMap = new Map<number, readonly number[]>();\n\nfunction makeArray(length: number): readonly number[] {\n return Array.from(new Array(length).keys());\n}\n\nexport function createFixedArrayWithoutGC(length: number): readonly number[] {\n if (arrayMap.has(length)) {\n return arrayMap.get(length)!;\n }\n const arr = makeArray(length);\n arrayMap.set(length, arr);\n return arr;\n}\n\nconst arrayWeakRefMap = new Map<number, WeakRef<readonly number[]>>();\n\nexport function createFixedArrayWithGC(length: number): readonly number[] {\n let ref: WeakRef<readonly number[]> | undefined;\n let array: readonly number[] | undefined;\n if (arrayWeakRefMap.has(length)) {\n ref = arrayWeakRefMap.get(length)!;\n array = ref.deref();\n }\n\n if (!array) {\n array = makeArray(length);\n\n // every time a new array is created, we create a new WeakRef and update map\n ref = new WeakRef(array);\n arrayWeakRefMap.set(length, ref);\n }\n\n return array;\n}\n\nexport const createFixedArray = typeof WeakRef === 'function' ? createFixedArrayWithGC : createFixedArrayWithoutGC;\nexport const EMPTY_ARRAY = createFixedArray(0);\n"],"names":["arrayMap","Map","makeArray","length","Array","from","keys","createFixedArrayWithoutGC","has","get","arr","set","arrayWeakRefMap","createFixedArrayWithGC","ref","array","deref","WeakRef","createFixedArray","EMPTY_ARRAY"],"mappings":"AAAA,IAAMA,EAAW,IAAIC,IAErB,SAASC,EAAUC,CAAc,EAC/B,OAAOC,MAAMC,IAAI,CAAC,AAAID,MAAMD,GAAQG,IAAI,GAC1C,CAEO,SAASC,EAA0BJ,CAAc,EACtD,GAAIH,EAASQ,GAAG,CAACL,GACf,OAAOH,EAASS,GAAG,CAACN,GAEtB,IAAMO,EAAMR,EAAUC,GAEtB,OADAH,EAASW,GAAG,CAACR,EAAQO,GACdA,CACT,CAEA,IAAME,EAAkB,IAAIX,IAErB,SAASY,EAAuBV,CAAc,EACnD,IAAIW,EACAC,EAcJ,OAbIH,EAAgBJ,GAAG,CAACL,IAEtBY,CAAAA,EAAQD,AADRA,CAAAA,EAAMF,EAAgBH,GAAG,CAACN,EAAAA,EACda,KAAK,EAAA,EAGdD,IAIHD,EAAM,IAAIG,QAHVF,EAAQb,EAAUC,IAIlBS,EAAgBD,GAAG,CAACR,EAAQW,IAGvBC,CACT,KAEaG,EAAmB,AAAmB,YAAnB,OAAOD,QAAyBJ,EAAyBN,EAC5EY,EAAcD,EAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect-eol.mjs","sources":["../../src/detect-eol/index.ts"],"sourcesContent":["export function detectEol(str: string) {\n for (let i = 0, len = str.length; i < len; i++) {\n const c = str[i];\n if (c === '\\n') return '\\n';\n if (c === '\\r' && str[i + 1] === '\\n') return '\\r\\n';\n }\n return '\\n';\n}\n"],"names":["detectEol","str","i","len","length","c"],"mappings":"AAAO,SAASA,EAAUC,CAAW,EACnC,IAAK,IAAIC,EAAI,EAAGC,EAAMF,EAAIG,MAAM,CAAEF,EAAIC,EAAKD,IAAK,CAC9C,IAAMG,EAAIJ,CAAG,CAACC,EAAE,CAChB,GAAIG,AAAM,OAANA,EAAY,MAChB,GAAIA,AAAM,OAANA,GAAcJ,AAAe,OAAfA,CAAG,CAACC,EAAI,EAAE,CAAW,MAAO,MAChD,CACA,MAAO,IACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"escape-html.mjs","sources":["../../src/escape-html/index.ts"],"sourcesContent":["const reHtmlEntity = /[\"&'<>]/;\nexport function escapeHTML(str: string) {\n const match = reHtmlEntity.exec(str);\n\n if (match === null) {\n return str;\n }\n\n let escape = '';\n let html = '';\n\n let index = match.index;\n let lastIndex = 0;\n\n // iterate from the first match\n for (const len = str.length; index < len; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '&quot;';\n break;\n case 38: // &\n escape = '&amp;';\n break;\n case 39: // '\n escape = '&#39;';\n break;\n case 60: // <\n escape = '&lt;';\n break;\n case 62: // >\n escape = '&gt;';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex === index\n ? html\n : html + str.slice(lastIndex, index);\n}\n"],"names":["reHtmlEntity","escapeHTML","str","match","exec","escape","html","index","lastIndex","len","length","charCodeAt","slice"],"mappings":"AAAA,IAAMA,EAAe,UACd,SAASC,EAAWC,CAAW,EACpC,IAAMC,EAAQH,EAAaI,IAAI,CAACF,GAEhC,GAAIC,AAAU,OAAVA,EACF,OAAOD,EAGT,IAAIG,EAAS,GACTC,EAAO,GAEPC,EAAQJ,EAAMI,KAAK,CACnBC,EAAY,EAGhB,IAAK,IAAMC,EAAMP,EAAIQ,MAAM,CAAEH,EAAQE,EAAKF,IAAS,CACjD,OAAQL,EAAIS,UAAU,CAACJ,IACrB,KAAK,GACHF,EAAS,SACT,KACF,MAAK,GACHA,EAAS,QACT,KACF,MAAK,GACHA,EAAS,QACT,KACF,MAAK,GACHA,EAAS,OACT,KACF,MAAK,GACHA,EAAS,OACT,KACF,SACE,QACJ,CAEIG,IAAcD,GAChBD,CAAAA,GAAQJ,EAAIU,KAAK,CAACJ,EAAWD,EAAAA,EAG/BC,EAAYD,EAAQ,EACpBD,GAAQD,CACV,CAEA,OAAOG,IAAcD,EACjBD,EACAA,EAAOJ,EAAIU,KAAK,CAACJ,EAAWD,EAClC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"escape-string-regexp.mjs","sources":["../../src/escape-string-regexp/index.ts"],"sourcesContent":["const r = /[$()*+.?[\\\\\\]^{|}-]/;\n\n/**\n * Escape characters with special meaning either inside or outside character sets.\n * Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n */\nexport function escapeStringRegexp(str: string) {\n const match = r.exec(str);\n\n if (match === null) {\n return str;\n }\n\n let escape = '';\n let regexp = '';\n\n let index = match.index;\n let lastIndex = 0;\n\n // iterate from the first match\n for (const len = str.length; index < len; index++) {\n /* eslint-disable sukka/unicorn/prefer-string-raw -- performance */\n switch (str.charCodeAt(index)) {\n case 92: // \\\n escape = '\\\\\\\\';\n break;\n case 94: // ^\n escape = '\\\\^';\n break;\n case 36: // $\n escape = '\\\\$';\n break;\n case 46: // .\n escape = '\\\\.';\n break;\n case 42: // *\n escape = '\\\\*';\n break;\n case 43: // +\n escape = '\\\\+';\n break;\n case 63: // ?\n escape = '\\\\?';\n break;\n case 40: // (\n escape = '\\\\(';\n break;\n case 41: // )\n escape = '\\\\)';\n break;\n case 91: // [\n escape = '\\\\[';\n break;\n case 93: // ]\n escape = '\\\\]';\n break;\n case 123: // {\n escape = '\\\\{';\n break;\n case 125: // }\n escape = '\\\\}';\n break;\n case 124: // |\n escape = '\\\\|';\n break;\n case 45: // -\n escape = '\\\\x2d';\n break;\n default:\n continue;\n }\n /* eslint-enable sukka/unicorn/prefer-string-raw */\n\n if (lastIndex !== index) {\n regexp += str.slice(lastIndex, index);\n }\n\n lastIndex = index + 1;\n regexp += escape;\n }\n\n return lastIndex === index\n ? regexp\n : regexp + str.slice(lastIndex, index);\n};\n"],"names":["r","escapeStringRegexp","str","match","exec","escape","regexp","index","lastIndex","len","length","charCodeAt","slice"],"mappings":"AAAA,IAAMA,EAAI,sBAMH,SAASC,EAAmBC,CAAW,EAC5C,IAAMC,EAAQH,EAAEI,IAAI,CAACF,GAErB,GAAIC,AAAU,OAAVA,EACF,OAAOD,EAGT,IAAIG,EAAS,GACTC,EAAS,GAETC,EAAQJ,EAAMI,KAAK,CACnBC,EAAY,EAGhB,IAAK,IAAMC,EAAMP,EAAIQ,MAAM,CAAEH,EAAQE,EAAKF,IAAS,CAEjD,OAAQL,EAAIS,UAAU,CAACJ,IACrB,KAAK,GACHF,EAAS,OACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,MACT,KACF,MAAK,IACHA,EAAS,MACT,KACF,MAAK,IACHA,EAAS,MACT,KACF,MAAK,IACHA,EAAS,MACT,KACF,MAAK,GACHA,EAAS,QACT,KACF,SACE,QACJ,CAGIG,IAAcD,GAChBD,CAAAA,GAAUJ,EAAIU,KAAK,CAACJ,EAAWD,EAAAA,EAGjCC,EAAYD,EAAQ,EACpBD,GAAUD,CACZ,CAEA,OAAOG,IAAcD,EACjBD,EACAA,EAASJ,EAAIU,KAAK,CAACJ,EAAWD,EACpC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fast-string-array-join.mjs","sources":["../../src/fast-string-array-join/index.ts"],"sourcesContent":["/**\n * A 65% faster join than the native `Array.prototype.join` for string arrays and string separator.\n */\nexport function fastStringArrayJoin(arr: string[], sep: string) {\n const len = arr.length;\n if (len === 0) {\n return '';\n }\n\n let result = arr[0];\n\n for (let i = 1; i < len; i++) {\n result += sep;\n result += arr[i];\n }\n\n return result;\n}\n"],"names":["fastStringArrayJoin","arr","sep","len","length","result","i"],"mappings":"AAGO,SAASA,EAAoBC,CAAa,CAAEC,CAAW,EAC5D,IAAMC,EAAMF,EAAIG,MAAM,CACtB,GAAID,AAAQ,IAARA,EACF,MAAO,GAGT,IAAIE,EAASJ,CAAG,CAAC,EAAE,CAEnB,IAAK,IAAIK,EAAI,EAAGA,EAAIH,EAAKG,IACvBD,GAAUH,EACVG,GAAUJ,CAAG,CAACK,EAAE,CAGlB,OAAOD,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fifo.mjs","sources":["../../src/fifo/index.ts"],"sourcesContent":["type Node<T> = [value: T, next: Node<T> | null];\n\n/** Checkout https://npm.im/fast-fifo if performance is critical */\nexport class FIFO<T> {\n private head: Node<T> | null = null;\n private tail: Node<T> | null = null;\n public $size = 0;\n\n constructor() {\n this.clear();\n }\n\n enqueue(value: T) {\n const node: Node<T> = [value, null];\n\n if (this.head) {\n this.tail![1] = node;\n this.tail = node;\n } else {\n this.head = node;\n this.tail = node;\n }\n\n this.$size++;\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method -- alias\n push = this.enqueue;\n\n dequeue() {\n const current = this.head;\n if (!current) {\n return;\n }\n\n this.head = this.head![1];\n this.$size--;\n return current[0];\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method -- alias\n shift = this.dequeue;\n\n peek() {\n return this.head?.[0];\n }\n\n clear() {\n this.head = null;\n this.tail = null;\n this.$size = 0;\n }\n\n get size() {\n return this.$size;\n }\n\n get length() {\n return this.$size;\n }\n\n *[Symbol.iterator]() {\n let current = this.head;\n\n while (current) {\n yield current[0];\n current = current[1];\n }\n }\n}\n"],"names":["Symbol","iterator","FIFO","constructor","head","tail","$size","push","enqueue","shift","dequeue","clear","value","node","current","peek","size","length","_computedKey"],"mappings":"MA6DIA,EAAAA,OAAOC,QAAQ,AA1DZ,OAAMC,EAKXC,aAAc,MAJNC,IAAuB,CAAA,UACvBC,IAAuB,CAAA,UACxBC,KAAQ,CAAA,OAqBfC,IAAO,CAAA,IAAI,CAACC,OAAO,MAcnBC,KAAQ,CAAA,IAAI,CAACC,OAAO,CAhClB,IAAI,CAACC,KAAK,EACZ,CAEAH,QAAQI,CAAQ,CAAE,CAChB,IAAMC,EAAgB,CAACD,EAAO,KAAK,AAE/B,CAAA,IAAI,CAACR,IAAI,CACX,IAAI,CAACC,IAAI,CAAE,EAAE,CAAGQ,EAGhB,IAAI,CAACT,IAAI,CAAGS,EACZ,IAAI,CAACR,IAAI,CAAGQ,EAGd,IAAI,CAACP,KAAK,EACZ,CAKAI,SAAU,CACR,IAAMI,EAAU,IAAI,CAACV,IAAI,CACzB,GAAKU,EAML,OAFA,IAAI,CAACV,IAAI,CAAG,IAAI,CAACA,IAAK,CAAC,EAAE,CACzB,IAAI,CAACE,KAAK,GACHQ,CAAO,CAAC,EAAE,AACnB,CAKAC,MAAO,CACL,OAAO,IAAI,CAACX,IAAI,EAAA,CAAG,EAAE,AACvB,CAEAO,OAAQ,CACN,IAAI,CAACP,IAAI,CAAG,KACZ,IAAI,CAACC,IAAI,CAAG,KACZ,IAAI,CAACC,KAAK,CAAG,CACf,CAEA,IAAIU,MAAO,CACT,OAAO,IAAI,CAACV,KAAK,AACnB,CAEA,IAAIW,QAAS,CACX,OAAO,IAAI,CAACX,KAAK,AACnB,CAEA,CAAA,CAAqBY,EAAA,EAAA,CACnB,IAAIJ,EAAU,IAAI,CAACV,IAAI,CAEvB,KAAOU,GACL,MAAMA,CAAO,CAAC,EAAE,CAChBA,EAAUA,CAAO,CAAC,EAAE,AAExB,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fnv1a.mjs","sources":["../../src/fnv1a/index.ts"],"sourcesContent":["export function fnv1a(s: string) {\n let h = 0x81_1C_9D_C5;\n\n for (let i = 0, l = s.length; i < l; i++) {\n h ^= s.charCodeAt(i);\n h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);\n }\n\n return (h >>> 0);\n}\n"],"names":["fnv1a","s","h","i","l","length","charCodeAt"],"mappings":"AAAO,SAASA,EAAMC,CAAS,EAC7B,IAAIC,EAAI,WAER,IAAK,IAAIC,EAAI,EAAGC,EAAIH,EAAEI,MAAM,CAAEF,EAAIC,EAAGD,IACnCD,GAAKD,EAAEK,UAAU,CAACH,GAClBD,GAAK,AAACA,CAAAA,GAAK,CAAA,EAAMA,CAAAA,GAAK,CAAA,EAAMA,CAAAA,GAAK,CAAA,EAAMA,CAAAA,GAAK,CAAA,EAAMA,CAAAA,GAAK,EAAA,EAGzD,OAAQA,IAAM,CAChB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fnv1a52.mjs","sources":["../../src/fnv1a52/index.ts"],"sourcesContent":["/**\n * FNV-1a Hash implementation\n * @author Travis Webb (tjwebb) <me@traviswebb.com>\n *\n * Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js\n *\n * Simplified, optimized and add modified for 52 bit, which provides a larger hash space\n * and still making use of Javascript's 53-bit integer space.\n */\nexport function fnv1a52(str: string) {\n const len = str.length;\n let i = 0,\n t0 = 0,\n v0 = 0x2325,\n t1 = 0,\n v1 = 0x8422,\n t2 = 0,\n v2 = 0x9CE4,\n t3 = 0,\n v3 = 0xCBF2;\n\n while (i < len) {\n v0 ^= str.charCodeAt(i++);\n t0 = v0 * 435;\n t1 = v1 * 435;\n t2 = v2 * 435;\n t3 = v3 * 435;\n t2 += v0 << 8;\n t3 += v1 << 8;\n t1 += t0 >>> 16;\n v0 = t0 & 65535;\n t2 += t1 >>> 16;\n v1 = t1 & 65535;\n v3 = (t3 + (t2 >>> 16)) & 65535;\n v2 = t2 & 65535;\n }\n\n return (\n (v3 & 15) * 281_474_976_710_656\n + v2 * 4_294_967_296\n + v1 * 65536\n + (v0 ^ (v3 >> 4))\n );\n}\n"],"names":["fnv1a52","str","len","length","i","t0","v0","t1","v1","t2","v2","t3","v3","charCodeAt"],"mappings":"AASO,SAASA,EAAQC,CAAW,EACjC,IAAMC,EAAMD,EAAIE,MAAM,CAClBC,EAAI,EACNC,EAAK,EACLC,EAAK,KACLC,EAAK,EACLC,EAAK,MACLC,EAAK,EACLC,EAAK,MACLC,EAAK,EACLC,EAAK,MAEP,KAAOR,EAAIF,GACTI,GAAML,EAAIY,UAAU,CAACT,KACrBC,EAAKC,AAAK,IAALA,EACLC,EAAKC,AAAK,IAALA,EACLC,EAAKC,AAAK,IAALA,EACLC,EAAKC,AAAK,IAALA,EACLH,GAAMH,GAAM,EACZK,GAAMH,GAAM,EACZD,GAAMF,IAAO,GACbC,EAAKD,AAAK,MAALA,EACLI,GAAMF,IAAO,GACbC,EAAKD,AAAK,MAALA,EACLK,EAAKD,EAAOF,CAAAA,IAAO,EAAA,EAAO,MAC1BC,EAAKD,AAAK,MAALA,EAGP,MACE,AAACG,CAAAA,AAAK,GAALA,GAAW,gBACVF,AAAK,YAALA,EACAF,AAAK,MAALA,EACCF,CAAAA,EAAMM,GAAM,CAAA,CAEnB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"guard.mjs","sources":["../../src/guard/index.ts"],"sourcesContent":["export function not(arg: null): <T>(i: T | null) => i is T;\nexport function not(arg: undefined): <T>(i: T | undefined) => i is T;\nexport function not(arg: false): <T>(i: T | false) => i is T;\nexport function not(arg: 'nullish'): <T>(i: T | null | undefined) => i is T;\nexport function not(arg: 'falsy'): <T>(i: T | 0 | '' | false | null | undefined) => i is T;\nexport function not(arg: null | undefined | false | 'nullish' | 'falsy') {\n switch (arg) {\n case null:\n return <T>(i: T | null): i is T => i !== null;\n case undefined:\n return <T>(i: T | undefined): i is T => i !== undefined;\n case false:\n return <T>(i: T | false): i is T => i !== false;\n case 'nullish':\n return <T>(i: T | null | undefined): i is T => i != null;\n case 'falsy':\n return <T>(i: T | 0 | '' | false | null | undefined): i is T => !!i;\n default:\n never(arg, 'argument');\n }\n}\n\nexport function is(arg: null): (i: unknown) => i is null;\nexport function is(arg: undefined): (i: unknown) => i is undefined;\nexport function is(arg: false): (i: unknown) => i is false;\nexport function is(arg: 'nullish'): (i: unknown) => i is null | undefined;\nexport function is(arg: 'falsy'): (i: unknown) => i is 0 | '' | false | null | undefined;\nexport function is(arg: 'truthy'): <T>(i: T | 0 | '' | false | null | undefined) => i is T;\nexport function is(arg: null | undefined | false | 'nullish' | 'falsy' | 'truthy') {\n switch (arg) {\n case null:\n return (i: unknown): i is null => i === null;\n case undefined:\n return (i: unknown): i is undefined => i === undefined;\n case false:\n return (i: unknown): i is false => i === false;\n case 'nullish':\n return (i: unknown): i is null | undefined => i == null;\n case 'falsy':\n return (i: unknown): i is 0 | '' | false | null | undefined => !i;\n case 'truthy':\n return <T>(i: T | 0 | '' | false | null | undefined): i is T => !!i;\n default:\n never(arg, 'argument');\n }\n}\n\nexport const isTruthy = is('truthy');\nexport const isFalsy = is('falsy');\nexport const isNonNull = not(null);\nexport const isNonNullish = not('nullish');\n\nexport function nullthrow<T>(value: T | null | undefined, message = '[foxts/invariant] \"value\" is null or undefined'): T {\n if (value === null || value === undefined) {\n throw new TypeError(message);\n }\n return value;\n}\n\nexport function invariant<T>(value: T | null | undefined, message = '[foxts/invariant] \"value\" is null or undefined'): asserts value is T {\n if (value === null || value === undefined) {\n throw new TypeError(message);\n }\n}\n\nexport function never(value: never, valueMetaName = 'value'): never {\n throw new TypeError(`Unexpected ${valueMetaName}: ${value} as ${JSON.stringify(typeof value)}, should be \"never\"`);\n}\n"],"names":["not","arg","i","undefined","never","is","isTruthy","isFalsy","isNonNull","isNonNullish","nullthrow","value","message","TypeError","invariant","valueMetaName","JSON","stringify"],"mappings":"AAKO,SAASA,EAAIC,CAAmD,EACrE,OAAQA,GACN,KAAK,KACH,OAAO,AAAIC,GAAwBA,AAAM,OAANA,CACrC,MAAKC,KAAAA,EACH,OAAO,AAAID,GAA6BA,AAAMC,KAAAA,IAAND,CAC1C,KAAK,CAAA,EACH,OAAO,AAAIA,GAAyBA,AAAM,CAAA,IAANA,CACtC,KAAK,UACH,OAAO,AAAIA,GAAoCA,AAAK,MAALA,CACjD,KAAK,QACH,OAAO,AAAIA,GAAqD,CAAC,CAACA,CACpE,SACEE,EAAMH,EAAK,WACf,CACF,CAQO,SAASI,EAAGJ,CAA8D,EAC/E,OAAQA,GACN,KAAK,KACH,OAAO,AAACC,GAA0BA,AAAM,OAANA,CACpC,MAAKC,KAAAA,EACH,OAAO,AAACD,GAA+BA,AAAMC,KAAAA,IAAND,CACzC,KAAK,CAAA,EACH,OAAO,AAACA,GAA2BA,AAAM,CAAA,IAANA,CACrC,KAAK,UACH,OAAO,AAACA,GAAsCA,AAAK,MAALA,CAChD,KAAK,QACH,OAAO,AAACA,GAAuD,CAACA,CAClE,KAAK,SACH,OAAO,AAAIA,GAAqD,CAAC,CAACA,CACpE,SACEE,EAAMH,EAAK,WACf,CACF,CAEO,IAAMK,EAAWD,EAAG,UACdE,EAAUF,EAAG,SACbG,EAAYR,EAAI,MAChBS,EAAeT,EAAI,WAEzB,SAASU,EAAaC,CAA2B,CAAEC,EAAU,gDAAgD,EAClH,GAAID,MAAAA,EACF,MAAM,AAAIE,UAAUD,GAEtB,OAAOD,CACT,CAEO,SAASG,EAAaH,CAA2B,CAAEC,EAAU,gDAAgD,EAClH,GAAID,MAAAA,EACF,MAAM,AAAIE,UAAUD,EAExB,CAEO,SAASR,EAAMO,CAAY,CAAEI,EAAgB,OAAO,EACzD,MAAM,AAAIF,UAAU,CAAC,WAAW,EAAEE,EAAc,EAAE,EAAEJ,EAAM,IAAI,EAAEK,KAAKC,SAAS,CAAC,OAAON,GAAO,mBAAmB,CAAC,CACnH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"headers-to-object.mjs","sources":["../../src/headers-to-object/index.ts"],"sourcesContent":["import type { HeadersInitLike } from '../merge-headers';\n\nexport function headersToObject(headers: HeadersInitLike | Headers): Record<string, string> {\n const obj: Record<string, string> = {};\n\n if (headers == null) {\n return obj;\n }\n\n new Headers(headers).forEach((value: string, key: string) => {\n obj[key] = value;\n });\n\n return obj;\n}\n"],"names":["headersToObject","headers","obj","Headers","forEach","value","key"],"mappings":"AAEO,SAASA,EAAgBC,CAAkC,EAChE,IAAMC,EAA8B,CAAC,SAEtB,MAAXD,GAIJ,IAAIE,QAAQF,GAASG,OAAO,CAAC,CAACC,EAAeC,KAC3CJ,CAAG,CAACI,EAAI,CAAGD,CACb,GALSH,CAQX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.mjs","sources":["../../src/identity/index.ts"],"sourcesContent":["export function identity<T = any, R = T>(item: T): R {\n return item as any;\n}\n"],"names":["identity","item"],"mappings":"AAAO,SAASA,EAAyBC,CAAO,EAC9C,OAAOA,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-probably-ip.mjs","sources":["../../src/is-probably-ip/index.ts"],"sourcesContent":["/**\n * Check if a hostname is an IP. You should be aware that this only works\n * because `hostname` is already garanteed to be a valid hostname!\n */\nexport function isProbablyIpv4(hostname: string): boolean {\n // Cannot be shorted than 1.1.1.1 or longer than 255.255.255.255\n if (hostname.length < 7 || hostname.length > 15) {\n return false;\n }\n\n let numberOfDots = 0;\n\n for (let i = 0; i < hostname.length; i += 1) {\n const code = hostname.charCodeAt(i);\n\n if (code === 46 /* '.' */) {\n numberOfDots += 1;\n } else if (code < 48 /* '0' */ || code > 57 /* '9' */) {\n return false;\n }\n }\n\n return (\n numberOfDots === 3\n && hostname.charCodeAt(0) !== 46 /* '.' */\n && hostname.charCodeAt(hostname.length - 1) !== 46 /* '.' */\n );\n}\n\nexport function isProbablyIpv6(hostname: string): boolean {\n if (hostname.length < 3) {\n return false;\n }\n\n let start = hostname[0] === '[' ? 1 : 0;\n let end = hostname.length;\n\n if (hostname[end - 1] === ']') {\n end -= 1;\n }\n\n // We only consider the maximum size of a normal IPV6. Note that this will\n // fail on so-called \"IPv4 mapped IPv6 addresses\" but this is a corner-case\n // and a proper validation library should be used for these.\n if (end - start > 39) {\n return false;\n }\n\n /* eslint-disable sukka/no-single-return -- here it goes */\n let hasColon = false;\n\n for (; start < end; start += 1) {\n const code = hostname.charCodeAt(start);\n\n if (code === 58 /* ':' */) {\n hasColon = true;\n } else if (\n (code < 48 || code > 57) // does not match 0-9\n && (code < 97 || code > 102) // and does not match a-f\n && (code < 65 || code > 90) // and does not match A-F\n ) {\n // does not contain any characters that are required in a valid IPv6\n return false;\n }\n }\n\n return hasColon;\n /* eslint-enable sukka/no-single-return -- here it goes */\n}\n"],"names":["isProbablyIpv4","hostname","length","numberOfDots","i","code","charCodeAt","isProbablyIpv6","start","end","hasColon"],"mappings":"AAIO,SAASA,EAAeC,CAAgB,EAE7C,GAAIA,EAASC,MAAM,CAAG,GAAKD,EAASC,MAAM,CAAG,GAC3C,MAAO,CAAA,EAGT,IAAIC,EAAe,EAEnB,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAASC,MAAM,CAAEE,GAAK,EAAG,CAC3C,IAAMC,EAAOJ,EAASK,UAAU,CAACF,GAEjC,GAAIC,AAAS,KAATA,EACFF,GAAgB,OACX,GAAIE,EAAO,IAAgBA,EAAO,GACvC,MAAO,CAAA,CAEX,CAEA,OACEF,AAAiB,IAAjBA,GACGF,AAA2B,KAA3BA,EAASK,UAAU,CAAC,IACpBL,AAA6C,KAA7CA,EAASK,UAAU,CAACL,EAASC,MAAM,CAAG,EAE7C,CAEO,SAASK,EAAeN,CAAgB,EAC7C,GAAIA,EAASC,MAAM,CAAG,EACpB,MAAO,CAAA,EAGT,IAAIM,EAAQP,CAAAA,CAAAA,AAAgB,MAAhBA,CAAQ,CAAC,EAAE,EACnBQ,EAAMR,EAASC,MAAM,CASzB,GAP0B,MAAtBD,CAAQ,CAACQ,EAAM,EAAE,EACnBA,CAAAA,GAAO,CAAA,EAMLA,EAAMD,EAAQ,GAChB,MAAO,CAAA,EAIT,IAAIE,EAAW,CAAA,EAEf,KAAOF,EAAQC,EAAKD,GAAS,EAAG,CAC9B,IAAMH,EAAOJ,EAASK,UAAU,CAACE,GAEjC,GAAIH,AAAS,KAATA,EACFK,EAAW,CAAA,OACN,GACL,AAACL,CAAAA,EAAO,IAAMA,EAAO,KACjBA,CAAAA,EAAO,IAAMA,EAAO,MACpBA,CAAAA,EAAO,IAAMA,EAAO,IAGxB,MAAO,CAAA,CAEX,CAEA,OAAOK,CACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-headers.mjs","sources":["../../src/merge-headers/index.ts"],"sourcesContent":["export type HeadersInitLike = string[][] | Record<string, string | readonly string[]> | Headers | null | undefined;\nexport type IncomingHttpHeadersLike = Record<string, string | string[] | undefined> | undefined | null;\nexport type OutgoingHttpHeadersLike = Record<string, number | string | string[] | undefined> | undefined | null;\n\nexport function mergeHeaders(dest: HeadersInitLike, source: HeadersInitLike): Headers {\n if (dest == null) {\n return source == null ? new Headers() : new Headers(source);\n }\n if (source == null) {\n return new Headers(dest);\n }\n\n const destHeaders = new Headers(dest);\n const sourceHeaders = new Headers(source);\n\n sourceHeaders.forEach((value: string, key: string) => {\n destHeaders.set(key, value);\n });\n\n return destHeaders;\n}\n\nexport function mergeNodeHttpHeaders(dest: IncomingHttpHeadersLike, source: IncomingHttpHeadersLike): IncomingHttpHeadersLike;\nexport function mergeNodeHttpHeaders(dest: OutgoingHttpHeadersLike, source: IncomingHttpHeadersLike | OutgoingHttpHeadersLike): OutgoingHttpHeadersLike;\nexport function mergeNodeHttpHeaders(dest: IncomingHttpHeadersLike | OutgoingHttpHeadersLike, source: IncomingHttpHeadersLike | OutgoingHttpHeadersLike): IncomingHttpHeadersLike | OutgoingHttpHeadersLike {\n if (dest == null) {\n return source == null ? {} : source;\n }\n if (source == null) {\n return dest;\n }\n return Object.assign({}, dest, source);\n}\n"],"names":["mergeHeaders","dest","source","Headers","destHeaders","sourceHeaders","forEach","value","key","set","mergeNodeHttpHeaders","Object","assign"],"mappings":"AAIO,SAASA,EAAaC,CAAqB,CAAEC,CAAuB,EACzE,GAAID,AAAQ,MAARA,EACF,OAAOC,AAAU,MAAVA,EAAiB,IAAIC,QAAY,IAAIA,QAAQD,GAEtD,GAAIA,AAAU,MAAVA,EACF,OAAO,IAAIC,QAAQF,GAGrB,IAAMG,EAAc,IAAID,QAAQF,GAOhC,OAJAI,AAFsB,IAAIF,QAAQD,GAEpBI,OAAO,CAAC,CAACC,EAAeC,KACpCJ,EAAYK,GAAG,CAACD,EAAKD,EACvB,GAEOH,CACT,CAIO,SAASM,EAAqBT,CAAuD,CAAEC,CAAyD,SACrJ,AAAID,AAAQ,MAARA,EACKC,AAAU,MAAVA,EAAiB,CAAA,EAAKA,EAE3BA,AAAU,MAAVA,EACKD,EAEFU,OAAOC,MAAM,CAAC,GAAIX,EAAMC,EACjC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"noop.mjs","sources":["../../src/noop/index.ts"],"sourcesContent":["export interface Noop<T = any> {\n (...args: any[]): T\n}\nexport const noop: Noop = () => { /* noop */ };\n\nexport const trueFn: Noop<true> = () => true;\nexport const falseFn: Noop<false> = () => false;\n\n// eslint-disable-next-line sukka/unicorn/error-message -- deliberately w/o error msg\nexport const throwFn: Noop<never> = () => { throw new Error(); };\n\nconst p = Promise.resolve();\nexport const asyncNoop: Noop<Promise<any>> = () => p;\n\nconst neverResolvedPromise = new Promise<never>(noop);\nexport const asyncNeverFn: Noop<Promise<never>> = () => neverResolvedPromise;\n"],"names":["noop","trueFn","falseFn","throwFn","Error","p","Promise","resolve","asyncNoop","neverResolvedPromise","asyncNeverFn"],"mappings":"AAGO,IAAMA,EAAa,KAAA,EAEbC,EAAqB,IAAM,CAAA,EAC3BC,EAAuB,IAAM,CAAA,EAG7BC,EAAuB,KAAQ,MAAM,AAAIC,OAAS,EAEzDC,EAAIC,QAAQC,OAAO,GACZC,EAAgC,IAAMH,EAE7CI,EAAuB,IAAIH,QAAeN,GACnCU,EAAqC,IAAMD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"once.mjs","sources":["../../src/once/index.ts"],"sourcesContent":["export function once<T>(fn: (() => T)): (() => T) {\n let called = false;\n let result: T;\n\n return (): T => {\n if (!called) {\n called = true;\n result = fn();\n }\n\n return result;\n };\n}\n"],"names":["once","fn","result","called"],"mappings":"AAAO,SAASA,EAAQC,CAAa,EACnC,IACIC,EADAC,EAAS,CAAA,EAGb,MAAO,KACAA,IACHA,EAAS,CAAA,EACTD,EAASD,KAGJC,EAEX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pick-random.mjs","sources":["../../src/pick-random/index.ts"],"sourcesContent":["import { randomInt } from 'node:crypto';\n\n/**\n * @param randomInt - a random generate function that accepts two arguments `min` and `max` and returns a random number between `min` and `max`\n */\nexport function createPickRandom(randomInt: (min: number, max: number) => number) {\n return function pickRandom<T>(data: T[] | readonly T[], count = 1) {\n if (count > data.length) {\n throw new TypeError('Count must be lower or the same as the number of picks');\n }\n\n const $data = data.slice();\n\n const pickedElements = [];\n\n while (count--) {\n if ($data.length === 1) {\n // skip randomInt since it might be expensive\n pickedElements.push($data[0]);\n } else {\n pickedElements.push($data.splice(randomInt(0, $data.length - 1), 1)[0]);\n }\n }\n\n return pickedElements;\n };\n}\n\nexport const pickRandom = createPickRandom(randomInt);\n\nexport function createPickOne(randomInt: (min: number, max: number) => number) {\n return function pickOne<T>(data: T[] | readonly T[]) {\n if (data.length === 1) {\n // skip randomInt since it might be expensive\n return data[0];\n }\n return data[randomInt(0, data.length - 1)];\n };\n}\n\nexport const pickOne = createPickOne(randomInt);\n"],"names":["createPickRandom","randomInt","data","count","length","TypeError","$data","slice","pickedElements","push","splice","pickRandom","createPickOne","pickOne"],"mappings":"wCAKO,SAASA,EAAiBC,CAA+C,EAC9E,OAAO,SAAuBC,CAAwB,CAAEC,EAAQ,CAAC,EAC/D,GAAIA,EAAQD,EAAKE,MAAM,CACrB,MAAM,AAAIC,UAAU,0DAGtB,IAAMC,EAAQJ,EAAKK,KAAK,GAElBC,EAAiB,EAAE,CAEzB,KAAOL,KACDG,AAAiB,IAAjBA,EAAMF,MAAM,CAEdI,EAAeC,IAAI,CAACH,CAAK,CAAC,EAAE,EAE5BE,EAAeC,IAAI,CAACH,EAAMI,MAAM,CAACT,EAAU,EAAGK,EAAMF,MAAM,CAAG,GAAI,EAAE,CAAC,EAAE,EAI1E,OAAOI,CACT,CACF,CAEO,IAAMG,EAAaX,EAAiBC,GAEpC,SAASW,EAAcX,CAA+C,EAC3E,OAAO,SAAoBC,CAAwB,SACjD,AAAIA,AAAgB,IAAhBA,EAAKE,MAAM,CAENF,CAAI,CAAC,EAAE,CAETA,CAAI,CAACD,EAAU,EAAGC,EAAKE,MAAM,CAAG,GAAG,AAC5C,CACF,CAEO,IAAMS,EAAUD,EAAcX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"random-int.mjs","sources":["../../src/random-int/index.ts"],"sourcesContent":["/**\n * @param random - a random generate function that returns a number between 0 and 1\n */\nexport function createRandomInt(random: () => number) {\n return (min: number, max: number): number => Math.floor(random() * (max - min + 1)) + min;\n}\n\nexport const randomInt = createRandomInt(Math.random);\n\n// function secureRandom() {\n// const buf = new Uint32Array(1);\n// getRandomValues(buf);\n// return buf[0] / (0xFF_FF_FF_FF + 1);\n// }\n\n// export const randomIntSecure = createRandomInt(secureRandom);\n"],"names":["createRandomInt","random","min","max","Math","floor","randomInt"],"mappings":"AAGO,SAASA,EAAgBC,CAAoB,EAClD,MAAO,CAACC,EAAaC,IAAwBC,KAAKC,KAAK,CAACJ,IAAYE,CAAAA,EAAMD,EAAM,CAAA,GAAMA,CACxF,KAEaI,EAAYN,EAAgBI,KAAKH,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"repool.mjs","sources":["../../src/repool/index.ts"],"sourcesContent":["export interface Reusifiable {\n next: this | null\n}\n\n/**\n * Repool is a class that allows you to reuse objects.\n *\n * Do not use this to store class instances, please use https://github.com/mcollina/reusify instead.\n */\nexport class Repool<T extends Reusifiable> {\n private head: T;\n private tail: T;\n\n constructor(private createObject: () => T) {\n const obj = createObject();\n this.tail = obj;\n this.head = obj;\n }\n\n public get(): T {\n const current = this.head;\n\n if (current.next) {\n this.head = current.next;\n } else {\n const obj = this.createObject();\n this.tail = obj;\n this.head = obj;\n }\n\n current.next = null;\n\n return current;\n }\n\n public release(obj: T): void {\n this.tail.next = obj;\n this.tail = obj;\n }\n}\n"],"names":["Repool","constructor","createObject","obj","tail","head","get","current","next","release"],"mappings":"AASO,MAAMA,EAIXC,YAAoBC,CAAqB,CAAE,MAAvBA,YAAAA,CAAAA,EAClB,IAAMC,EAAMD,GACZ,CAAA,IAAI,CAACE,IAAI,CAAGD,EACZ,IAAI,CAACE,IAAI,CAAGF,CACd,CAEOG,KAAS,CACd,IAAMC,EAAU,IAAI,CAACF,IAAI,CAEzB,GAAIE,EAAQC,IAAI,CACd,IAAI,CAACH,IAAI,CAAGE,EAAQC,IAAI,KACnB,CACL,IAAML,EAAM,IAAI,CAACD,YAAY,EAC7B,CAAA,IAAI,CAACE,IAAI,CAAGD,EACZ,IAAI,CAACE,IAAI,CAAGF,CACd,CAIA,OAFAI,EAAQC,IAAI,CAAG,KAERD,CACT,CAEOE,QAAQN,CAAM,CAAQ,CAC3B,IAAI,CAACC,IAAI,CAACI,IAAI,CAAGL,EACjB,IAAI,CAACC,IAAI,CAAGD,CACd,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"retrie.mjs","sources":["../../src/retrie/index.ts"],"sourcesContent":["// TypeScript port of [retrie](https://github.com/satyr/retrie), which is a Coco -> JS port of [@dankogai](https://x.com/dankogai)'s [RegexpTrie](https://metacpan.org/release/DANKOGAI/Regexp-Trie-0.02/view/lib/Regexp/Trie.pm).\n\nimport { falseFn } from '../noop';\n\ninterface BaseTrie {\n [key: string]: Trie\n}\n\ntype Trie = BaseTrie | {\n '': ''\n};\n\nconst shouldEscapeChars = new Set<string>([\n '.',\n '?',\n '*',\n '+',\n '^',\n '$',\n '|',\n '(',\n ')',\n '{',\n '}',\n '[',\n ']',\n '\\\\'\n]);\n\nexport function retrie(keywords: ArrayLike<string>, asPrefixes = false) {\n const tree: Trie = {};\n\n const add = (keywords: string, asPrefixes: boolean) => {\n let keyword: string;\n let ref: Trie = tree;\n\n for (let i = 0, len = keywords.length; i < len; ++i) {\n keyword = keywords.charAt(i);\n\n if (!(keyword in ref)) {\n (ref as BaseTrie)[keyword] = asPrefixes\n ? { '': '' }\n : {};\n }\n\n ref = (ref as BaseTrie)[keyword];\n }\n\n ref[''] = '';\n };\n\n for (let i = 0, len = keywords.length; i < len; ++i) {\n add(keywords[i], asPrefixes);\n }\n\n const toString = () => {\n function recur(it: Trie): string {\n let q = false;\n let re;\n let sub: string | undefined;\n let cconly = false;\n const alt: string[] = [];\n const cc: string[] = [];\n\n // eslint-disable-next-line guard-for-in -- plain object\n for (const chr in it) {\n if (!chr) {\n q = true;\n continue;\n }\n\n sub = recur((it as BaseTrie)[chr]);\n\n (sub ? alt : cc).push(\n (\n chr === '-'\n // eslint-disable-next-line sukka/unicorn/prefer-string-raw -- regexp escape\n ? '\\\\x2d'\n : (\n shouldEscapeChars.has(chr)\n ? '\\\\' + chr\n : chr\n )\n )\n + sub\n );\n }\n\n if (q && sub == null) {\n return '';\n }\n\n cconly = !alt.length;\n\n if (cc.length) {\n alt.push(\n cc[1]\n ? '[' + cc.join('') + ']'\n : cc[0]\n );\n }\n\n re = alt[1]\n ? '(?:' + alt.join('|') + ')'\n : alt[0];\n\n if (q) {\n re = cconly\n ? re + '?'\n : '(?:' + re + ')?';\n }\n\n return re || '';\n }\n return recur(tree);\n };\n\n const toRe = () => new RegExp(\n (asPrefixes ? '^' : '')\n + toString()\n );\n\n return {\n tree,\n add,\n toString,\n toRe\n };\n}\n\nexport function createRetrieKeywordFilter(keywords: ArrayLike<string>, asPrefixes = false) {\n if (keywords.length === 0) {\n return falseFn;\n }\n\n const re = retrie(keywords, asPrefixes).toRe();\n return re.test.bind(re);\n}\n"],"names":["shouldEscapeChars","Set","retrie","keywords","asPrefixes","tree","add","keyword","ref","i","len","length","charAt","toString","recur","it","re","sub","q","cconly","alt","cc","chr","push","has","join","toRe","RegExp","createRetrieKeywordFilter","falseFn","test","bind"],"mappings":"qCAYA,IAAMA,EAAoB,IAAIC,IAAY,CACxC,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACD,EAEM,SAASC,EAAOC,CAA2B,CAAEC,EAAa,CAAA,CAAK,EACpE,IAAMC,EAAa,CAAC,EAEdC,EAAM,CAACH,EAAkBC,SACzBG,EACJ,IAAIC,EAAYH,EAEhB,IAAK,IAAII,EAAI,EAAGC,EAAMP,EAASQ,MAAM,CAAEF,EAAIC,EAAK,EAAED,EAChDF,CAAAA,EAAUJ,EAASS,MAAM,CAACH,EAAAA,IAETD,GACdA,CAAAA,CAAgB,CAACD,EAAQ,CAAGH,EACzB,CAAE,GAAI,EAAG,EACT,CAAC,CAAA,EAGPI,EAAOA,CAAgB,CAACD,EAAQ,AAGlCC,CAAAA,CAAG,CAAC,GAAG,CAAG,EACZ,EAEA,IAAK,IAAIC,EAAI,EAAGC,EAAMP,EAASQ,MAAM,CAAEF,EAAIC,EAAK,EAAED,EAChDH,EAAIH,CAAQ,CAACM,EAAE,CAAEL,GAGnB,IAAMS,EAAW,IA2DRC,AA1DP,CAAA,SAASA,EAAMC,CAAQ,EACrB,IACIC,EACAC,EAFAC,EAAI,CAAA,EAGJC,EAAS,CAAA,EACPC,EAAgB,EAAE,CAClBC,EAAe,EAAE,CAGvB,IAAK,IAAMC,KAAOP,EAAI,CACpB,GAAI,CAACO,EAAK,CACRJ,EAAI,CAAA,EACJ,QACF,CAICD,AAAAA,CAAAA,AAFDA,CAAAA,EAAMH,EAAOC,CAAe,CAACO,EAAI,CAAA,EAE1BF,EAAMC,CAAAA,EAAIE,IAAI,CACnB,AACED,CAAAA,AAAQ,MAARA,EAEI,QAEAtB,EAAkBwB,GAAG,CAACF,GAClB,KAAOA,EACPA,CACN,EAEFL,EAEN,QAEA,AAAIC,GAAKD,AAAO,MAAPA,EACA,IAGTE,EAAS,CAACC,EAAIT,MAAM,CAEhBU,EAAGV,MAAM,EACXS,EAAIG,IAAI,CACNF,CAAE,CAAC,EAAE,CACD,IAAMA,EAAGI,IAAI,CAAC,IAAM,IACpBJ,CAAE,CAAC,EAAE,EAIbL,EAAKI,CAAG,CAAC,EAAE,CACP,MAAQA,EAAIK,IAAI,CAAC,KAAO,IACxBL,CAAG,CAAC,EAAE,CAENF,GACFF,CAAAA,EAAKG,EACDH,EAAK,IACL,MAAQA,EAAK,IAAA,EAGZA,GAAM,GACf,CAAA,EACaX,GAQf,MAAO,CACLA,KAAAA,EACAC,IAAAA,EACAO,SAAAA,EACAa,KATW,IAAM,IAAIC,OACrB,AAACvB,CAAAA,EAAa,IAAM,EAAA,EAClBS,IAQJ,CACF,CAEO,SAASe,EAA0BzB,CAA2B,CAAEC,EAAa,CAAA,CAAK,EACvF,GAAID,AAAoB,IAApBA,EAASQ,MAAM,CACjB,OAAOkB,EAGT,IAAMb,EAAKd,EAAOC,EAAUC,GAAYsB,IAAI,GAC5C,OAAOV,EAAGc,IAAI,CAACC,IAAI,CAACf,EACtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialized-memo.mjs","sources":["../../src/serialized-memo/index.ts"],"sourcesContent":["import { fastStringArrayJoin } from '../fast-string-array-join';\nimport { identity } from '../identity';\nimport { noop } from '../noop';\n\nexport interface MemoizeStorageProvider {\n has(key: string): boolean | Promise<boolean>,\n get(key: string): string | undefined | PromiseLike<string | undefined>,\n set(key: string, value: string, ttl: number): void | Promise<void>,\n updateTtl?: (key: string, ttl: number) => void | Promise<void>,\n delete(key: string): void | Promise<void>\n}\n\nexport interface CreateMemoizeOptions {\n /**\n * When set to true, the memoize will always try run the function first.\n * If promise resolved, it will update the cache.\n * If promise rejected, it will try to get the value from cache, and return\n * the cached value. If the cache is not available, it will throw the error.\n */\n onlyUseCachedIfFail?: boolean,\n resetTtlOnHit?: boolean,\n defaultTtl?: number,\n onCacheUpdate?: (key: string, { humanReadableName }: { humanReadableName: string, isUseCachedIfFail: boolean }) => void,\n onCacheMiss?: (key: string, { humanReadableName }: { humanReadableName: string, isUseCachedIfFail: boolean }) => void,\n onCacheHit?: (key: string, { humanReadableName }: { humanReadableName: string, isUseCachedIfFail: boolean }) => void,\n\n /** recommendation: import('hash-wasm').xxhash64 */\n keyHasher?: (key: string) => Promise<string> | string,\n /** recommendation: import('devalue').stringify */\n argHasher: (args: any[]) => Promise<string> | string\n}\n\n// https://github.com/Rich-Harris/devalue/blob/f3fd2aa93d79f21746555671f955a897335edb1b/src/stringify.js#L77\nexport type SerializableValue =\n | number\n | string\n | boolean\n | bigint\n | Date\n | RegExp\n | Set<SerializableValue>\n | SerializableValue[]\n | null\n | undefined\n | Map<SerializableValue, SerializableValue>\n | SerializableObject\n | /** TypedArray */ Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array\n | ArrayBuffer;\n\n// Has to use an interface to avoid circular reference\ninterface SerializableObject {\n [key: string]: SerializableValue\n}\n\ninterface MemoizeBaseOptions {\n /**\n * The time to live of the cache in milliseconds.\n */\n ttl?: number | null,\n temporaryBypass?: boolean\n}\n\ninterface MemoizeOptionsWithCustomSerializer<T> extends MemoizeBaseOptions {\n serializer: (value: T) => string,\n deserializer: (cached: string) => T\n}\n\nexport type MemoizeOptions<T> = T extends string ? MemoizeBaseOptions : MemoizeOptionsWithCustomSerializer<T>;\n\n/**\n * A factory function that returns a memoize function.\n *\n * Unlike common memoize function out there, this serialize the parameters and returned value\n * for easy storing with file system, SQLite, Redis, etc.\n */\nexport function createMemoize(storage: MemoizeStorageProvider, {\n onlyUseCachedIfFail = false,\n resetTtlOnHit = false,\n defaultTtl = 7 * 86400 * 1000,\n onCacheUpdate = noop,\n onCacheMiss = noop,\n onCacheHit = noop,\n keyHasher = identity,\n argHasher\n}: CreateMemoizeOptions) {\n return function memoize<Args extends SerializableValue[], R>(\n fn: (...args: Args) => R | Promise<R>,\n opt?: MemoizeOptions<R>\n ): (...args: Args) => Promise<R> {\n if (opt?.temporaryBypass) {\n return (...args: Args) => Promise.resolve(fn(...args));\n }\n\n const serializer = opt && 'serializer' in opt ? opt.serializer : identity<Awaited<R>, string>;\n const deserializer = opt && 'deserializer' in opt ? opt.deserializer : identity<string, Awaited<R>>;\n const ttl = opt?.ttl ?? defaultTtl;\n\n const fixedKey = fn.toString();\n\n const fixedKeyHashPromise = keyHasher(fixedKey);\n\n return async function cachedCb(...args: Args) {\n // Construct the complete cache key for this function invocation\n // typeson.stringify is still limited. For now we uses typescript to guard the args.\n const cacheKey = fastStringArrayJoin(\n await Promise.all([\n fixedKeyHashPromise,\n argHasher(args)\n ]),\n '|'\n );\n\n const cacheName = fn.name || fixedKey || cacheKey;\n\n let cached = storage.get(cacheKey);\n if (cached && typeof cached === 'object' && 'then' in cached) {\n cached = await cached;\n }\n\n if (onlyUseCachedIfFail) {\n try {\n const value = await fn(...args);\n\n onCacheUpdate(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: true });\n const p = storage.set(cacheKey, serializer(value), ttl);\n if (p && 'then' in p) {\n await p;\n }\n\n return value;\n } catch (e) {\n if (cached == null) {\n onCacheMiss(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: true });\n throw e;\n }\n\n if (resetTtlOnHit) {\n const p = storage.updateTtl?.(cacheKey, ttl);\n if (p && 'then' in p) {\n await p;\n }\n }\n\n onCacheHit(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: true });\n\n return deserializer(cached);\n }\n } else {\n if (cached == null) {\n onCacheMiss(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: false });\n\n const value = await fn(...args);\n\n const p = storage.set(cacheKey, serializer(value), ttl);\n if (p && 'then' in p) {\n await p;\n }\n\n return value;\n }\n\n onCacheHit(cacheKey, { humanReadableName: cacheName, isUseCachedIfFail: false });\n\n if (resetTtlOnHit) {\n const p = storage.updateTtl?.(cacheKey, ttl);\n if (p && 'then' in p) {\n await p;\n }\n }\n\n return deserializer(cached);\n }\n };\n };\n}\n"],"names":["createMemoize","storage","onlyUseCachedIfFail","resetTtlOnHit","defaultTtl","onCacheUpdate","noop","onCacheMiss","onCacheHit","keyHasher","identity","argHasher","fn","opt","temporaryBypass","args","Promise","resolve","serializer","deserializer","ttl","fixedKey","toString","fixedKeyHashPromise","cacheKey","fastStringArrayJoin","all","cacheName","name","cached","get","value","humanReadableName","isUseCachedIfFail","p","set","e","updateTtl"],"mappings":"+IA2EO,SAASA,EAAcC,CAA+B,CAAE,CAC7DC,oBAAAA,EAAsB,CAAA,CAAK,CAC3BC,cAAAA,EAAgB,CAAA,CAAK,CACrBC,WAAAA,EAAa,MAAgB,CAC7BC,cAAAA,EAAgBC,CAAI,CACpBC,YAAAA,EAAcD,CAAI,CAClBE,WAAAA,EAAaF,CAAI,CACjBG,UAAAA,EAAYC,CAAQ,CACpBC,UAAAA,CAAS,CACY,EACrB,OAAO,SACLC,CAAqC,CACrCC,CAAuB,EAEvB,GAAIA,GAAKC,gBACP,MAAO,CAAC,GAAGC,IAAeC,QAAQC,OAAO,CAACL,KAAMG,IAGlD,IAAMG,EAAaL,GAAO,eAAgBA,EAAMA,EAAIK,UAAU,CAAGR,EAC3DS,EAAeN,GAAO,iBAAkBA,EAAMA,EAAIM,YAAY,CAAGT,EACjEU,EAAMP,GAAKO,KAAOhB,EAElBiB,EAAWT,EAAGU,QAAQ,GAEtBC,EAAsBd,EAAUY,GAEtC,OAAO,eAAwB,GAAGN,CAAU,EAG1C,IAAMS,EAAWC,EACf,MAAMT,QAAQU,GAAG,CAAC,CAChBH,EACAZ,EAAUI,GACX,EACD,KAGIY,EAAYf,EAAGgB,IAAI,EAAIP,GAAYG,EAErCK,EAAS5B,EAAQ6B,GAAG,CAACN,GAKzB,GAJIK,GAAU,AAAkB,UAAlB,OAAOA,GAAuB,SAAUA,GACpDA,CAAAA,EAAS,MAAMA,CAAAA,EAGb3B,EACF,GAAI,CACF,IAAM6B,EAAQ,MAAMnB,KAAMG,GAE1BV,EAAcmB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAK,GAChF,IAAMC,EAAIjC,EAAQkC,GAAG,CAACX,EAAUN,EAAWa,GAAQX,GAKnD,OAJIc,GAAK,SAAUA,GACjB,MAAMA,EAGDH,CACT,CAAE,MAAOK,EAAG,CACV,GAAIP,AAAU,MAAVA,EAEF,MADAtB,EAAYiB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAK,GACxEG,EAGR,GAAIjC,EAAe,CACjB,IAAM+B,EAAIjC,EAAQoC,SAAS,GAAGb,EAAUJ,GACpCc,GAAK,SAAUA,GACjB,MAAMA,CAEV,CAIA,OAFA1B,EAAWgB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAK,GAEtEd,EAAaU,EACtB,KACK,CACL,GAAIA,AAAU,MAAVA,EAAgB,CAClBtB,EAAYiB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAM,GAE/E,IAAMF,EAAQ,MAAMnB,KAAMG,GAEpBmB,EAAIjC,EAAQkC,GAAG,CAACX,EAAUN,EAAWa,GAAQX,GAKnD,OAJIc,GAAK,SAAUA,GACjB,MAAMA,EAGDH,CACT,CAIA,GAFAvB,EAAWgB,EAAU,CAAEQ,kBAAmBL,EAAWM,kBAAmB,CAAA,CAAM,GAE1E9B,EAAe,CACjB,IAAM+B,EAAIjC,EAAQoC,SAAS,GAAGb,EAAUJ,GACpCc,GAAK,SAAUA,GACjB,MAAMA,CAEV,CAEA,OAAOf,EAAaU,EACtB,CACF,CACF,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"simple-string-hash.mjs","sources":["../../src/simple-string-hash/index.ts"],"sourcesContent":["import { fnv1a52 } from '../fnv1a52';\n\nexport function simpleStringHash(payload: string): string {\n return fnv1a52(payload).toString(36) + payload.length.toString(36);\n}\n"],"names":["simpleStringHash","payload","fnv1a52","toString","length"],"mappings":"wCAEO,SAASA,EAAiBC,CAAe,EAC9C,OAAOC,EAAQD,GAASE,QAAQ,CAAC,IAAMF,EAAQG,MAAM,CAACD,QAAQ,CAAC,GACjE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tagged.mjs","sources":["../../src/tagged/index.ts"],"sourcesContent":["/**\n * @example import { tagged as html } from 'foxts/tagged';\n */\nexport function tagged(string: TemplateStringsArray, ...values: any[]) {\n return string.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n // let result = '';\n // for (let i = 0, len = string.length; i < len; i++) {\n // result += string[i] + (values[i] ?? '');\n // }\n // return result;\n}\n"],"names":["tagged","string","values","reduce","acc","str","i"],"mappings":"AAGO,SAASA,EAAOC,CAA4B,CAAE,GAAGC,CAAa,EACnE,OAAOD,EAAOE,MAAM,CAAC,CAACC,EAAKC,EAAKC,IAAMF,EAAMC,EAAOH,CAAAA,CAAM,CAACI,EAAE,EAAI,EAAC,EAAI,GAMvE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-line-stream.mjs","sources":["../../src/text-line-stream/index.ts"],"sourcesContent":["// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.\n// This module is browser compatible.\n// Modified by Sukka (https://skk.moe) to increase compatibility and performance with Bun & Node.js.\n\nimport { TransformStream } from 'node:stream/web';\nimport { falseFn } from '../noop';\n\ninterface TextLineStreamOptions {\n /** Allow splitting by solo \\r */\n allowCR?: boolean,\n\n skipEmptyLines?: boolean\n}\n\n/** Transform a stream into a stream where each chunk is divided by a newline,\n * be it `\\n` or `\\r\\n`. `\\r` can be enabled via the `allowCR` option.\n *\n * ```ts\n * const res = await fetch('https://example.com');\n * const lines = res.body!\n * .pipeThrough(new TextDecoderStream())\n * .pipeThrough(new TextLineStream());\n * ```\n */\nexport class TextLineStream extends TransformStream<string, string> {\n // private __buf = '';\n constructor({\n allowCR = false,\n skipEmptyLines = false\n }: TextLineStreamOptions = {}) {\n let __buf = '';\n let chunkIndex = 0;\n\n const transformOnCR = allowCR\n ? (chunk: string, lfIndex: number, controller: TransformStreamDefaultController<string>) => {\n const crIndex = chunk.indexOf('\\r', chunkIndex);\n\n if (\n crIndex !== -1 && crIndex !== (chunk.length - 1)\n && (lfIndex === -1 || (lfIndex - 1) > crIndex)\n ) {\n const curChunk = chunk.slice(chunkIndex, crIndex);\n\n if (skipEmptyLines && curChunk.length === 0) {\n chunkIndex = crIndex + 1;\n return true;\n }\n\n controller.enqueue(chunk.slice(chunkIndex, crIndex));\n chunkIndex = crIndex + 1;\n\n // continue;\n return true;\n }\n\n return false;\n }\n : falseFn;\n\n super({\n transform(chunk, controller) {\n chunk = __buf + chunk;\n chunkIndex = 0;\n\n for (; ;) {\n const lfIndex = chunk.indexOf('\\n', chunkIndex);\n\n if (transformOnCR(chunk, lfIndex, controller)) {\n continue;\n }\n\n if (lfIndex === -1) {\n // we can no longer find a line break in the chunk, break the current loop\n break;\n }\n\n // enqueue current line, and loop again to find next line\n let crOrLfIndex = lfIndex;\n if (chunk[lfIndex - 1] === '\\r') {\n crOrLfIndex--;\n }\n\n const curChunk = chunk.slice(chunkIndex, crOrLfIndex);\n\n if (skipEmptyLines && curChunk.length === 0) {\n chunkIndex = lfIndex + 1;\n continue;\n }\n\n controller.enqueue(curChunk);\n chunkIndex = lfIndex + 1;\n continue;\n }\n\n __buf = chunk.slice(chunkIndex);\n },\n flush(controller) {\n if (__buf.length > 0) {\n // eslint-disable-next-line sukka/string/prefer-string-starts-ends-with -- performance\n if (allowCR && __buf[__buf.length - 1] === '\\r') {\n controller.enqueue(__buf.slice(0, -1));\n } else {\n controller.enqueue(__buf);\n }\n }\n }\n });\n }\n}\n"],"names":["TextLineStream","TransformStream","constructor","allowCR","skipEmptyLines","__buf","chunkIndex","transformOnCR","chunk","lfIndex","controller","crIndex","indexOf","length","curChunk","slice","enqueue","falseFn","transform","crOrLfIndex","flush"],"mappings":"sFAwBO,OAAMA,UAAuBC,EAElCC,YAAY,CACVC,QAAAA,EAAU,CAAA,CAAK,CACfC,eAAAA,EAAiB,CAAA,CAAK,CACA,CAAG,EAAE,CAAE,CAC7B,IAAIC,EAAQ,GACRC,EAAa,EAEXC,EAAgBJ,EAClB,CAACK,EAAeC,EAAiBC,KACjC,IAAMC,EAAUH,EAAMI,OAAO,CAAC,KAAMN,GAEpC,GACEK,AAAY,KAAZA,GAAkBA,IAAaH,EAAMK,MAAM,CAAG,GAC1CJ,CAAAA,AAAY,KAAZA,GAAmBA,EAAU,EAAKE,CAAM,EAC5C,CACA,IAAMG,EAAWN,EAAMO,KAAK,CAACT,EAAYK,UAErCP,GAAkBU,AAAoB,IAApBA,EAASD,MAAM,EAKrCH,EAAWM,OAAO,CAACR,EAAMO,KAAK,CAACT,EAAYK,IAJzCL,EAAaK,EAAU,EAChB,CAAA,CAQX,CAEA,MAAO,CAAA,GAEPM,EAEJ,KAAK,CAAC,CACJC,UAAUV,CAAK,CAAEE,CAAU,EAIzB,IAHAF,EAAQH,EAAQG,EAChBF,EAAa,IAEH,CACR,IAAMG,EAAUD,EAAMI,OAAO,CAAC,KAAMN,GAEpC,GAAIC,EAAcC,EAAOC,EAASC,GAChC,SAGF,GAAID,AAAY,KAAZA,EAEF,MAIF,IAAIU,EAAcV,CACS,CAAA,OAAvBD,CAAK,CAACC,EAAU,EAAE,EACpBU,IAGF,IAAML,EAAWN,EAAMO,KAAK,CAACT,EAAYa,GAEzC,GAAIf,GAAkBU,AAAoB,IAApBA,EAASD,MAAM,CAAQ,CAC3CP,EAAaG,EAAU,EACvB,QACF,CAEAC,EAAWM,OAAO,CAACF,GACnBR,EAAaG,EAAU,CAEzB,CAEAJ,EAAQG,EAAMO,KAAK,CAACT,EACtB,EACAc,MAAMV,CAAU,EACVL,EAAMQ,MAAM,CAAG,IAEbV,GAAWE,AAA4B,OAA5BA,CAAK,CAACA,EAAMQ,MAAM,CAAG,EAAE,CACpCH,EAAWM,OAAO,CAACX,EAAMU,KAAK,CAAC,EAAG,KAElCL,EAAWM,OAAO,CAACX,GAGzB,CACF,EACF,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"wait.mjs","sources":["../../src/wait/index.ts"],"sourcesContent":["export function wait(ms: number): Promise<void> {\n return new Promise<void>(resolve => {\n // eslint-disable-next-line sukka/prefer-timer-id -- hang timers\n setTimeout(resolve, ms);\n });\n}\n\nexport function waitWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (signal.aborted) {\n reject(signal.reason as Error);\n return;\n }\n\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n\n function onAbort() {\n clearTimeout(timer);\n signal.removeEventListener('abort', onAbort);\n reject(signal.reason as Error);\n };\n\n signal.addEventListener('abort', onAbort);\n });\n}\n"],"names":["wait","ms","Promise","resolve","setTimeout","waitWithAbort","signal","reject","aborted","reason","timer","removeEventListener","onAbort","clearTimeout","addEventListener"],"mappings":"AAAO,SAASA,EAAKC,CAAU,EAC7B,OAAO,IAAIC,QAAcC,AAAAA,IAEvBC,WAAWD,EAASF,EACtB,EACF,CAEO,SAASI,EAAcJ,CAAU,CAAEK,CAAmB,EAC3D,OAAO,IAAIJ,QAAc,CAACC,EAASI,KACjC,GAAID,EAAOE,OAAO,CAAE,CAClBD,EAAOD,EAAOG,MAAM,EACpB,MACF,CAEA,IAAMC,EAAQN,WAAW,KACvBE,EAAOK,mBAAmB,CAAC,QAASC,GACpCT,GACCF,EAAAA,GAEH,SAASW,IACPC,aAAaH,GACbJ,EAAOK,mBAAmB,CAAC,QAASC,GACpCL,EAAOD,EAAOG,MAAM,CACtB,CAEAH,EAAOQ,gBAAgB,CAAC,QAASF,EACnC,EACF"}