@anil-labs/collection-js 0.1.0

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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +251 -0
  3. package/dist/index.es.js +3211 -0
  4. package/dist/index.umd.cjs +8 -0
  5. package/dist/src/async/AsyncCollection.d.ts +57 -0
  6. package/dist/src/async/concurrent.d.ts +6 -0
  7. package/dist/src/async/index.d.ts +3 -0
  8. package/dist/src/collection/Collection.d.ts +274 -0
  9. package/dist/src/collection/HigherOrderProxy.d.ts +19 -0
  10. package/dist/src/collection/LazyCollection.d.ts +173 -0
  11. package/dist/src/collection/index.d.ts +5 -0
  12. package/dist/src/contracts/Arrayable.d.ts +4 -0
  13. package/dist/src/contracts/Enumerable.d.ts +17 -0
  14. package/dist/src/contracts/Jsonable.d.ts +3 -0
  15. package/dist/src/contracts/Macroable.d.ts +6 -0
  16. package/dist/src/contracts/index.d.ts +5 -0
  17. package/dist/src/exceptions/CollectionException.d.ts +3 -0
  18. package/dist/src/exceptions/ItemNotFoundException.d.ts +4 -0
  19. package/dist/src/exceptions/MultipleItemsFoundException.d.ts +5 -0
  20. package/dist/src/exceptions/UnexpectedValueException.d.ts +4 -0
  21. package/dist/src/exceptions/index.d.ts +4 -0
  22. package/dist/src/helpers/collect.d.ts +3 -0
  23. package/dist/src/helpers/index.d.ts +2 -0
  24. package/dist/src/helpers/lazy.d.ts +3 -0
  25. package/dist/src/index.d.ts +31 -0
  26. package/dist/src/io/csv.d.ts +30 -0
  27. package/dist/src/io/index.d.ts +5 -0
  28. package/dist/src/io/jsonl.d.ts +9 -0
  29. package/dist/src/io/streams.d.ts +27 -0
  30. package/dist/src/macros/Macroable.d.ts +20 -0
  31. package/dist/src/macros/index.d.ts +1 -0
  32. package/dist/src/operations/accessors.d.ts +19 -0
  33. package/dist/src/operations/aggregations.d.ts +9 -0
  34. package/dist/src/operations/chunking.d.ts +13 -0
  35. package/dist/src/operations/combine.d.ts +4 -0
  36. package/dist/src/operations/compare.d.ts +29 -0
  37. package/dist/src/operations/conditionals.d.ts +7 -0
  38. package/dist/src/operations/filters.d.ts +27 -0
  39. package/dist/src/operations/grouping.d.ts +5 -0
  40. package/dist/src/operations/index.d.ts +22 -0
  41. package/dist/src/operations/itertools.d.ts +37 -0
  42. package/dist/src/operations/joins.d.ts +17 -0
  43. package/dist/src/operations/mutations.d.ts +40 -0
  44. package/dist/src/operations/objectOps.d.ts +10 -0
  45. package/dist/src/operations/random.d.ts +2 -0
  46. package/dist/src/operations/reducers.d.ts +9 -0
  47. package/dist/src/operations/sequence.d.ts +4 -0
  48. package/dist/src/operations/setOps.d.ts +14 -0
  49. package/dist/src/operations/sliceOps.d.ts +8 -0
  50. package/dist/src/operations/sorting.d.ts +11 -0
  51. package/dist/src/operations/stats.d.ts +30 -0
  52. package/dist/src/operations/strings.d.ts +2 -0
  53. package/dist/src/operations/transformations.d.ts +9 -0
  54. package/dist/src/operations/uniqueness.d.ts +3 -0
  55. package/dist/src/support/arrayWrap.d.ts +6 -0
  56. package/dist/src/support/dataGet.d.ts +8 -0
  57. package/dist/src/support/deepClone.d.ts +1 -0
  58. package/dist/src/support/deepEqual.d.ts +11 -0
  59. package/dist/src/support/index.d.ts +8 -0
  60. package/dist/src/support/isObject.d.ts +4 -0
  61. package/dist/src/support/operatorForWhere.d.ts +4 -0
  62. package/dist/src/support/types.d.ts +15 -0
  63. package/dist/src/support/valueRetriever.d.ts +7 -0
  64. package/package.json +93 -0
@@ -0,0 +1,8 @@
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.collection={}))})(this,function(e){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},r=class extends Error{constructor(e){super(e),this.name=`CollectionException`,Object.setPrototypeOf(this,new.target.prototype)}},i=class extends r{constructor(e=`Item not found.`){super(e),this.name=`ItemNotFoundException`,Object.setPrototypeOf(this,new.target.prototype)}},a=class extends r{constructor(e=`Unexpected value encountered.`){super(e),this.name=`UnexpectedValueException`,Object.setPrototypeOf(this,new.target.prototype)}},o=new WeakMap;function s(e){let t=o.get(e);return t||(t=new Map,o.set(e,t)),t}function c(e,t){let n=e;for(;n;){let e=o.get(n)?.get(t);if(e)return e;n=Object.getPrototypeOf(n)}}function l(e,t,n){s(e).set(t,n),Object.defineProperty(e.prototype,t,{value:function(...e){return n.call(this,...e)},configurable:!0,writable:!0,enumerable:!1})}function u(e,t){return c(e,t)!==void 0}function d(e,t){return c(e,t)}function f(e){let t=o.get(e);if(t){for(let n of t.keys())delete e.prototype[n];t.clear()}}function p(e){let t=e;t.macro=(t,n)=>l(e,t,n),t.hasMacro=t=>u(e,t),t.flushMacros=()=>f(e)}var ee=class extends r{count;constructor(e=0,t){super(t??`${e} items were found.`),this.name=`MultipleItemsFoundException`,this.count=e,Object.setPrototypeOf(this,new.target.prototype)}};function m(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function h(e){return typeof e==`object`&&!!e}function te(e){return typeof e==`function`}function g(e,t,n){if(e==null)return n;let r=Array.isArray(t)?[...t]:String(t).split(`.`),i=e;for(let e=0;e<r.length;e++){let t=r[e];if(t===`*`){if(!Array.isArray(i))return n;let t=r.slice(e+1),a=[];for(let e of i){let n=t.length===0?e:g(e,t,void 0);Array.isArray(n)?a.push(...n):a.push(n)}return a}if(i==null)return n;if(Array.isArray(i)){let e=Number(t);if(Number.isInteger(e)&&e>=0&&e<i.length){i=i[e];continue}return n}if(h(i)&&t in i){i=i[t];continue}return n}return i}function ne(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];h(i[t])||(i[t]={}),i=i[t]}return i[r[r.length-1]]=n,e}function _(e,t){if(Object.is(e,t))return!0;if(!h(e)||!h(t))return!1;if(e instanceof Date||t instanceof Date)return e instanceof Date&&t instanceof Date&&e.getTime()===t.getTime();if(e instanceof RegExp||t instanceof RegExp)return e instanceof RegExp&&t instanceof RegExp&&e.source===t.source&&e.flags===t.flags;let n=Array.isArray(e),r=Array.isArray(t);if(n!==r)return!1;if(n&&r){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!_(e[n],t[n]))return!1;return!0}let i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(let n of i)if(!Object.prototype.hasOwnProperty.call(t,n)||!_(e[n],t[n]))return!1;return!0}function v(e,t){return e===t?!0:e==null||t==null?e==t:typeof e==typeof t?_(e,t):(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?e==t:!1}function y(e,t,n){switch(t){case`=`:case`==`:return v(e,n);case`===`:return e===n||_(e,n);case`!=`:case`<>`:return!v(e,n);case`!==`:return e!==n&&!_(e,n);case`<`:return e<n;case`<=`:return e<=n;case`>`:return e>n;case`>=`:return e>=n;default:throw Error(`Unsupported operator: ${String(t)}`)}}function re(e){return e===`=`||e===`==`||e===`===`||e===`!=`||e===`!==`||e===`<>`||e===`<`||e===`<=`||e===`>`||e===`>=`}function b(e,t){if(t===void 0)return e.length>0?e[0]:void 0;for(let n=0;n<e.length;n++)if(t(e[n],n))return e[n]}function ie(e,t){let n=b(e,t);if(n===void 0)throw new i;return n}function ae(e,t,n){return n<=1?{truthy:!0,operator:`=`,value:void 0}:n>=3&&re(e)?{truthy:!1,operator:e,value:t}:{truthy:!1,operator:`=`,value:e}}function oe(e,t,n){return n.truthy?e.find(e=>!!g(e,String(t))):e.find(e=>y(g(e,String(t)),n.operator,n.value))}function se(e,t){if(t===void 0)return e.length>0?e[e.length-1]:void 0;for(let n=e.length-1;n>=0;n--)if(t(e[n],n))return e[n]}function ce(e,t,n){return t<0&&Math.abs(t)<=e.length?e[e.length+t]:t>=0&&t<e.length?e[t]:n}function le(e,t){if(e.length!==0)return g(e[0],t)}function ue(e,t,n){let r;if(t===void 0)r=()=>!0;else if(typeof t==`function`)r=t;else{let e=String(t);r=t=>v(g(t,e),n)}let a=[];for(let t=0;t<e.length;t++)if(r(e[t],t)&&a.push(e[t]),a.length>1)throw new ee(a.length);if(a.length===0)throw new i;return a[0]}function de(e,t,n){return typeof t==`function`?e.findIndex(t):n?e.findIndex(e=>e===t):e.findIndex(e=>v(e,t))}function fe(e,t,n=!1){let r=de(e,t,n);if(!(r===-1||r===e.length-1))return e[r+1]}function pe(e,t,n=!1){let r=de(e,t,n);if(!(r<=0))return e[r-1]}function me(e,t){return t.every(t=>e.some(e=>h(e)&&Object.prototype.hasOwnProperty.call(e,String(t))))}function he(e,t){return t.some(t=>e.some(e=>h(e)&&Object.prototype.hasOwnProperty.call(e,String(t))))}function x(e){if(e===void 0)return e=>e;if(typeof e==`function`)return e;let t=String(e);return t.includes(`.`)||t.includes(`*`)?e=>g(e,t):e=>{if(typeof e==`object`&&e)return e[t]}}function ge(e){if(typeof e==`number`)return e;if(typeof e==`string`){let t=Number(e);return Number.isNaN(t)?0:t}return typeof e==`boolean`?+!!e:0}function _e(e,t){if(typeof e==`number`&&typeof t==`number`)return e-t;if(e instanceof Date&&t instanceof Date)return e.getTime()-t.getTime();if(typeof e==`bigint`&&typeof t==`bigint`||typeof e==`string`&&typeof t==`string`)return e<t?-1:+(e>t);let n=Number(e),r=Number(t);if(!Number.isNaN(n)&&!Number.isNaN(r))return n-r;let i=String(e),a=String(t);return i<a?-1:+(i>a)}function S(e,t){let n=x(t),r=0;for(let t=0;t<e.length;t++)r+=ge(n(e[t],t));return r}function C(e,t){return e.length===0?0:S(e,t)/e.length}function w(e,t){let n=x(t),r,i=!1;for(let t=0;t<e.length;t++){let a=n(e[t],t);a!=null&&(!i||_e(a,r)>0)&&(r=a,i=!0)}return r}function T(e,t){let n=x(t),r,i=!1;for(let t=0;t<e.length;t++){let a=n(e[t],t);a!=null&&(!i||_e(a,r)<0)&&(r=a,i=!0)}return r}function ve(e,t){if(e.length===0)return;let n=x(t),r=e.map((e,t)=>ge(n(e,t))).sort((e,t)=>e-t),i=Math.floor(r.length/2);return r.length%2==0?(r[i-1]+r[i])/2:r[i]}function ye(e,t){if(e.length===0)return;let n=x(t),r=new Map,i=0;for(let t=0;t<e.length;t++){let a=n(e[t],t),o=(r.get(a)??0)+1;r.set(a,o),o>i&&(i=o)}let a=[];for(let[e,t]of r)t===i&&a.push(e);return a}function be(e,t,n=2){if(e.length===0)return 0;let r=0;for(let n=0;n<e.length;n++)t(e[n],n)&&r++;let i=10**n;return Math.round(r/e.length*100*i)/i}function xe(e,t){let n=x(t),r=new Map;for(let t=0;t<e.length;t++){let i=n(e[t],t);r.set(i,(r.get(i)??0)+1)}return r}function Se(e,t){if(t<=0)return[];let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function Ce(e,t){if(e.length===0)return[];let n=[],r=[e[0]];for(let i=1;i<e.length;i++)t(e[i],i,r)?r.push(e[i]):(n.push(r),r=[e[i]]);return n.push(r),n}function we(e,t,n=1){if(t<=0||n<=0)return[];let r=[];for(let i=0;i+t<=e.length;i+=n)r.push(e.slice(i,i+t));return r}function E(e,t){if(t<=0||e.length===0)return[];let n=[],r=Math.floor(e.length/t),i=e.length%t,a=0;for(let o=0;o<t;o++){let t=+(i>0);n.push(e.slice(a,a+r+t)),a+=r+t,i>0&&i--}return n.filter(e=>e.length>0)}function D(e,t){if(t<=0||e.length===0)return[];let n=Math.ceil(e.length/t),r=[];for(let t=0;t<e.length;t+=n)r.push(e.slice(t,t+n));return r}function O(e,t){let n=[],r=[];for(let i=0;i<e.length;i++)t(e[i],i)?n.push(e[i]):r.push(e[i]);return[n,r]}function Te(e,t,n){if(t<1||n<=0)return[];let r=(t-1)*n;return e.slice(r,r+n)}function Ee(e,t,n=0){if(t<=0)return[];let r=[];for(let i=n;i<e.length;i+=t)r.push(e[i]);return r}function De(e,t){if(!h(e))return!1;let n=e;for(let e of Object.keys(t))if(!v(n[e],t[e]))return!1;return!0}function k(e,t,n=!1){switch(t.kind){case`predicate`:for(let n=0;n<e.length;n++)if(t.predicate(e[n],n))return!0;return!1;case`keyValue`:return e.some(e=>{let r=g(e,t.key);return n?r===t.value||_(r,t.value):v(r,t.value)});case`shape`:return e.some(e=>De(e,t.shape));case`value`:return e.some(e=>n?e===t.value:v(e,t.value))}}function Oe(e,t,n=!1){return!k(e,t,n)}function A(e,t,n){return typeof e==`function`?{kind:`predicate`,predicate:e}:n&&(typeof e==`string`||typeof e==`number`||typeof e==`symbol`)?{kind:`keyValue`,key:String(e),value:t}:h(e)&&!Array.isArray(e)?{kind:`shape`,shape:e}:{kind:`value`,value:e}}function ke(e,t){for(let n=0;n<e.length;n++)if(!t(e[n],n))return!1;return!0}function Ae(e,t){for(let n=0;n<e.length;n++)if(t(e[n],n))return!0;return!1}function je(e,t,n=!1){if(typeof t==`function`){let n=e.findIndex(t);return n===-1?!1:n}let r=e.findIndex(e=>n?e===t:v(e,t));return r===-1?!1:r}function Me(e,t){let n={},r=Math.min(e.length,t.length);for(let i=0;i<r;i++)n[e[i]]=t[i];return n}function Ne(e,t){let n=[];for(let r=0;r<e.length;r++)n.push([e[r],t[r]]);return n}function Pe(...e){if(e.length===0)return[];let t=Math.min(...e.map(e=>e.length)),n=[];for(let r=0;r<t;r++)n.push(e.map(e=>e[r]));return n}function Fe(e,t){return typeof t==`function`?!!t(e):!!t}function j(e,t,n,r){let i=Fe(e,t),a=i?n:r;if(!a)return e;let o=a(e,i);return o===void 0?e:o}function Ie(e,t){return t===void 0?e.filter(e=>!!e):e.filter((e,n)=>t(e,n))}function Le(e,t){return e.filter((e,n)=>!t(e,n))}function M(e,t){return e.length<=1?{truthy:!0,operator:`=`,value:void 0,strict:t}:e.length>=3&&re(e[1])?{truthy:!1,operator:e[1],value:e[2],strict:t}:{truthy:!1,operator:t?`===`:`=`,value:e[1],strict:t}}function Re(e,t,n){return n.truthy?e.filter(e=>!!g(e,t)):e.filter(e=>y(g(e,t),n.operator,n.value))}function ze(e,t,n,r=!1){return e.filter(e=>{let i=g(e,t);return n.some(e=>r?e===i||_(e,i):v(e,i))})}function N(e,t,n,r=!1){return e.filter(e=>{let i=g(e,t);return!n.some(e=>r?e===i||_(e,i):v(e,i))})}function Be(e,t,n){let[r,i]=n;return e.filter(e=>{let n=g(e,t);return n>=r&&n<=i})}function Ve(e,t,n){let[r,i]=n;return e.filter(e=>{let n=g(e,t);return n<r||n>i})}function He(e,t){return e.filter(e=>g(e,t)==null)}function Ue(e,t){return e.filter(e=>g(e,t)!=null)}function We(e,t){let n=t;return e.filter(e=>e instanceof n)}function P(e,t=!1){let n=``;for(let t of e)t===`%`?n+=`.*`:t===`_`?n+=`.`:n+=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`^${n}$`,t?``:`i`)}function F(e,t,n,r=!1,i=!1){let a=P(n,r);return e.filter(e=>{let n=g(e,t),r=n!=null&&a.test(String(n));return i?!r:r})}function I(e,t){let n=x(t),r={};for(let t=0;t<e.length;t++){let i=e[t],a=n(i,t),o=Array.isArray(a)?a:[a];for(let e of o)r[e]===void 0&&(r[e]=[]),r[e].push(i)}return r}function L(e,t){if(t.length===0)return e;let[n,...r]=t,i=I(e,n);if(r.length===0)return i;let a={};for(let e of Object.keys(i))a[e]=L(i[e],r);return a}function R(e,t){let n=x(t),r={};for(let t=0;t<e.length;t++)r[n(e[t],t)]=e[t];return r}function Ge(e,t,n){let r=[],i=n;for(let n=0;n<e.length;n++)i=t(i,e[n],n),r.push(i);return r}function Ke(e){if(e.length<2)return[];let t=[];for(let n=0;n<e.length-1;n++)t.push([e[n],e[n+1]]);return t}function qe(e,t=0){return e.map((e,n)=>[t+n,e])}function*Je(e,t=1/0){if(e.length!==0)for(let n=0;n<t;n++)for(let t of e)yield t}function Ye(...e){if(e.length===0)return[];let t=Math.min(...e.map(e=>e.length)),n=[];for(let r=0;r<t;r++)for(let t of e)n.push(t[r]);return n}function Xe(e,t){let n=e[Symbol.iterator](),r=Array.from({length:t},()=>[]),i=!1;function*a(e){for(;;){if(r[e].length>0){yield r[e].shift();continue}if(i)return;let a=n.next();if(a.done){i=!0;return}for(let n=0;n<t;n++)n!==e&&r[n].push(a.value);yield a.value}}return r.map((e,t)=>a(t))}function*Ze(e,t){let n=e.length,r=t===void 0?n:t;if(r>n)return;let i=Array.from({length:n},(e,t)=>t),a=Array.from({length:r},(e,t)=>n-t);for(yield i.slice(0,r).map(t=>e[t]);n>0;){let t=!0;for(let o=r-1;o>=0;o--)if(--a[o],a[o]===0){let e=i.splice(o,1)[0];i.push(e),a[o]=n-o}else{let n=a[o];[i[o],i[i.length-n]]=[i[i.length-n],i[o]],yield i.slice(0,r).map(t=>e[t]),t=!1;break}if(t)return}}function*z(e,t){let n=e.length;if(t>n||t<0)return;let r=Array.from({length:t},(e,t)=>t);for(yield r.map(t=>e[t]);;){let i=t-1;for(;i>=0&&r[i]===i+n-t;)i--;if(i<0)return;r[i]+=1;for(let e=i+1;e<t;e++)r[e]=r[e-1]+1;yield r.map(t=>e[t])}}function*Qe(e){for(let t=0;t<=e.length;t++)yield*z(e,t)}function B(e,t){let n=x(t),r=new Map;for(let t=0;t<e.length;t++){let i=n(e[t],t),a=r.get(i);a?a.push(e[t]):r.set(i,[e[t]])}return r}function $e(e,t,n,r,i){let a=B(t,r),o=x(n),s=[];for(let t=0;t<e.length;t++){let n=o(e[t],t),r=a.get(n);if(r)for(let n of r)s.push(i?i(e[t],n):[e[t],n])}return s}function et(e,t,n,r,i){let a=B(t,r),o=x(n),s=[];for(let t=0;t<e.length;t++){let n=o(e[t],t),r=a.get(n);if(r&&r.length>0)for(let n of r)s.push(i?i(e[t],n):[e[t],n]);else s.push(i?i(e[t],void 0):[e[t],void 0])}return s}function tt(e,t,n,r,i){let a=B(e,n),o=x(r),s=[];for(let e=0;e<t.length;e++){let n=o(t[e],e),r=a.get(n);if(r&&r.length>0)for(let n of r)s.push(i?i(n,t[e]):[n,t[e]]);else s.push(i?i(void 0,t[e]):[void 0,t[e]])}return s}function nt(e,t,n,r,i){let a=B(t,r),o=x(n),s=new Set,c=[];for(let t=0;t<e.length;t++){let n=o(e[t],t),r=a.get(n);if(r&&r.length>0){s.add(n);for(let n of r)c.push(i?i(e[t],n):[e[t],n])}else c.push(i?i(e[t],void 0):[e[t],void 0])}for(let[e,t]of a)if(!s.has(e))for(let e of t)c.push(i?i(void 0,e):[void 0,e]);return c}function rt(e,t){return[...e,...t]}function it(e,t){return[t,...e]}function at(e,t){return[...e,...t]}function ot(e,t=1){if(t<=0||e.length===0)return{remaining:[...e],removed:[]};let n=Math.max(0,e.length-t);return{remaining:e.slice(0,n),removed:e.slice(n).reverse()}}function st(e,t=1){if(t<=0||e.length===0)return{remaining:[...e],removed:[]};let n=Math.min(e.length,t);return{remaining:e.slice(n),removed:e.slice(0,n)}}function ct(e,t,n,r=[]){let i=[...e];return{remaining:i,removed:n===void 0?i.splice(t):i.splice(t,n,...r)}}function lt(e,t){let n=e.indexOf(t);if(n===-1)return{remaining:[...e],removed:void 0};let r=[...e],[i]=r.splice(n,1);return{remaining:r,removed:i}}function ut(e,t){let n=new Set,r=new Set;for(let e of t)typeof e==`number`?n.add(e):r.add(e);let i=e.filter((e,t)=>!n.has(t));return r.size>0&&(i=i.map(e=>{if(!m(e))return e;let t={};for(let[n,i]of Object.entries(e))r.has(n)||(t[n]=i);return t})),i}function dt(e,t,n){return e.map(e=>({...e,[t]:n}))}function ft(e,...t){let n=(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return[...e,...t];if(m(e)&&m(t)){let r={...e};for(let[e,i]of Object.entries(t))r[e]=e in r?n(r[e],i):i;return r}return e!==void 0&&t!==void 0?[e,t]:t??e},r=[...e];for(let e of t){let t=Math.max(r.length,e.length),i=[];for(let a=0;a<t;a++)a>=r.length?i.push(e[a]):a>=e.length?i.push(r[a]):i.push(n(r[a],e[a]));r=i}return r}function V(e,t){return e.length===1&&t.length===1&&m(e[0])&&m(t[0])?[{...e[0],...t[0]}]:[...e,...t]}function H(e){if(typeof e!=`object`||!e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(Array.isArray(e))return e.map(H);if(m(e)){let t={};for(let n of Object.keys(e))t[n]=H(e[n]);return t}return e}function pt(e,t,n){if(n===void 0)return e.map(e=>g(e,t));let r={};for(let i of e){let e=g(i,n);r[String(e)]=g(i,t)}return r}function mt(e,t){let n=new Set(t.map(String));return e.map(e=>{if(!h(e))return{};let t={};for(let r of n)r in e&&(t[r]=e[r]);return t})}function ht(e,t){let n=new Set(t.map(String));return e.map(e=>{if(!h(e))return e;let t={};for(let[r,i]of Object.entries(e))n.has(r)||(t[r]=i);return t})}function gt(e,t){let n=Array.isArray(t)?t:[t];return e.map(e=>{let t={};for(let r of n)t[r]=e[r];return t})}function _t(e){let t={};for(let n=0;n<e.length;n++)t[String(e[n])]=n;return t}function vt(e){if(e.length===0)return[];if(e.every(e=>m(e))){let t=new Set;for(let n of e)for(let e of Object.keys(n))t.add(e);return[...t]}return e.map((e,t)=>String(t))}function yt(e){if(e.length===0)return{};let t={},n=(e,r)=>{if(m(e)){let i=Object.entries(e);if(i.length===0){r!==``&&(t[r]=e);return}for(let[e,t]of i)n(t,r===``?e:`${r}.${e}`)}else if(Array.isArray(e)){if(e.length===0){r!==``&&(t[r]=e);return}for(let t=0;t<e.length;t++)n(e[t],r===``?String(t):`${r}.${t}`)}else r!==``&&(t[r]=e)};return e.length===1&&m(e[0])?n(e[0],``):n(e,``),t}function bt(e){let t=e.length===1&&m(e[0])?e[0]:e.reduce((e,t,n)=>{if(m(t))for(let[n,r]of Object.entries(t))e[n]=r;else e[String(n)]=t;return e},{}),n={};for(let[e,r]of Object.entries(t))ne(n,e,r);return n}function xt(e,t){let n=[...e];for(let[e,r]of Object.entries(t)){let t=Number(e);Number.isInteger(t)&&t>=0&&(n[t]=r)}return n}function St(e,t){let n=(e,t)=>{if(Array.isArray(e)&&Array.isArray(t)){let r=[...e];for(let e=0;e<t.length;e++)r[e]=n(r[e],t[e]);return r}if(m(e)&&m(t)){let r={...e};for(let[i,a]of Object.entries(t))r[i]=n(e[i],a);return r}return t===void 0?e:t};return n(H([...e]),[...t])}var Ct=(e,t)=>e===t?0:e==null?1:t==null?-1:typeof e==`number`&&typeof t==`number`?e-t:String(e).localeCompare(String(t));function wt(e,t=Ct){return[...e].sort(t)}function Tt(e){return[...e].sort((e,t)=>-Ct(e,t))}function U(e,t,n=!1){let r=(Array.isArray(t)&&!Et(t)?t:[t]).map(e=>Dt(e,n));return[...e].sort((e,t)=>{for(let n of r){let r=n(e,t);if(r!==0)return r}return 0})}function Et(e){return Array.isArray(e)&&e.length===2&&(e[1]===`asc`||e[1]===`desc`)}function Dt(e,t){if(typeof e==`function`&&e.length===2)return e;if(Et(e)){let[t,n]=e;return Ot(t,n===`desc`)}return Ot(e,t)}function Ot(e,t){let n=x(e);return(e,r)=>{let i=Ct(n(e,0),n(r,0));return t?-i:i}}function kt(e,t){return U(e,t,!0)}function W(e,t=!1){return e.map(e=>{if(typeof e!=`object`||!e)return e;let n=Object.keys(e).sort();t&&n.reverse();let r={};for(let t of n)r[t]=e[t];return r})}function At(e,t){return e.map(e=>{if(typeof e!=`object`||!e)return e;let n=Object.keys(e).sort(t),r={};for(let t of n)r[t]=e[t];return r})}function G(e,t=Math.random){let n=[...e];for(let e=n.length-1;e>0;e--){let r=Math.floor(t()*(e+1));[n[e],n[r]]=[n[r],n[e]]}return n}function jt(e){return[...e].reverse()}function Mt(e,t=Math.random){if(e.length!==0)return e[Math.floor(t()*e.length)]}function Nt(e,t,n=Math.random){if(t>e.length)throw new r(`You requested ${t} items, but the collection only contains ${e.length} items.`);return t<=0?[]:G(e,n).slice(0,t)}function Pt(e,t,n){let r=n;for(let n=0;n<e.length;n++)r=t(r,e[n],n);return r}function Ft(e,t,...n){let r=n;for(let n=0;n<e.length;n++)r=t(...r,e[n],n);return r}function It(e,t,n=1){if(n===0)throw RangeError(`range step must not be zero`);let r=n>0,i=[];if(r)for(let r=e;r<=t;r+=n)i.push(r);else for(let r=e;r>=t;r+=n)i.push(r);return i}function Lt(e,t){let n=Array(e);for(let r=0;r<e;r++)n[r]=t(r+1);return n}function K(e,t){if(t<=0)return[];let n=[];for(let r=0;r<t;r++)n.push(...e);return n}function Rt(e,t,n){let r=Math.abs(t);if(e.length>=r)return[...e];let i=Array(r-e.length).fill(n);return t<0?[...i,...e]:[...e,...i]}function zt(e,t){return e.filter(e=>!t.some(t=>v(e,t)))}function Bt(e,t){if(e.length===0)return[];let n=t[0]&&h(t[0])?Object.entries(t[0]):[];return e.filter(e=>h(e)?Object.entries(e).some(([e,t])=>{let r=n.find(([t])=>t===e);return!r||!v(r[1],t)}):!0)}function Vt(e,t,n){return e.filter(e=>!t.some(t=>n(e,t)===0))}function Ht(e,t){let n=new Set(t.map(String));return e.map(e=>{if(!h(e))return e;let t={};for(let[r,i]of Object.entries(e))n.has(r)||(t[r]=i);return t})}function Ut(e,t){return e.filter(e=>t.some(t=>v(e,t)))}function Wt(e,t,n){return e.filter(e=>t.some(t=>n(e,t)===0))}function Gt(e,t){if(e.length===0)return[];let n=t[0]&&h(t[0])?t[0]:{};return e.map(e=>{if(!h(e))return e;let t={};for(let[r,i]of Object.entries(e))Object.prototype.hasOwnProperty.call(n,r)&&v(n[r],i)&&(t[r]=i);return t})}function Kt(e,t,n){return e.length===0?[]:e.map(e=>{if(!h(e))return e;let r=e,i={};for(let[e,a]of Object.entries(r))Object.entries(t).find(([t,r])=>n(t,e)===0&&n(String(r),String(a))===0)&&(i[e]=a);return i})}function qt(e,t){let n=new Set(t.map(String));return e.map(e=>{if(!h(e))return e;let t={};for(let[r,i]of Object.entries(e))n.has(r)&&(t[r]=i);return t})}function Jt(e,t){let n=[...e];for(let e of t)n.some(t=>v(t,e))||n.push(e);return n}function Yt(e,t){if(e.length===0)return[...t];let n={...e[0]};for(let e of t)if(h(e))for(let[t,r]of Object.entries(e))t in n||(n[t]=r);return[n]}function Xt(...e){return e.length===0?[]:e.reduce((e,t)=>{let n=[];for(let r of e)for(let e of t)n.push([...r,e]);return n},[[]])}function Zt(e,t,n=!1){let r=[],i=new Map;for(let a=0;a<e.length;a++){let o=t?t(e[a]):e[a];(n?r.some(e=>e===o||_(e,o)):r.some(e=>v(e,o)))?i.set(a,e[a]):r.push(o)}return i}function Qt(e,t){return t<0?e.slice(t):e.slice(0,t)}function $t(e,t){let n=typeof t==`function`?e.findIndex(t):e.findIndex(e=>v(e,t));return n===-1?[...e]:e.slice(0,n)}function en(e,t){let n=e.findIndex((e,n)=>!t(e,n));return n===-1?[...e]:e.slice(0,n)}function tn(e,t){return e.slice(t)}function nn(e,t){let n=typeof t==`function`?e.findIndex(t):e.findIndex(e=>v(e,t));return n===-1?[]:e.slice(n)}function rn(e,t){let n=e.findIndex((e,n)=>!t(e,n));return n===-1?[]:e.slice(n)}function an(e,t,n){return n===void 0?e.slice(t):n<0?e.slice(t,e.length+n):e.slice(t,t+n)}function q(e,t){let n=x(t),r=[];for(let t=0;t<e.length;t++){let i=n(e[t],t),a=typeof i==`number`?i:Number(i);Number.isFinite(a)&&r.push(a)}return r}function on(e,t){let n=q(e,t);if(n.length===0)return;let r=n.reduce((e,t)=>e+t,0)/n.length,i=0;for(let e of n)i+=(e-r)**2;return i/n.length}function sn(e,t){let n=q(e,t);if(n.length<2)return;let r=n.reduce((e,t)=>e+t,0)/n.length,i=0;for(let e of n)i+=(e-r)**2;return i/(n.length-1)}function cn(e,t){let n=on(e,t);return n===void 0?void 0:Math.sqrt(n)}function ln(e,t){let n=sn(e,t);return n===void 0?void 0:Math.sqrt(n)}function un(e,t,n){if(t<0||t>1)throw RangeError(`quantile q must be in [0,1] (got ${t})`);let r=q(e,n).sort((e,t)=>e-t);if(r.length===0)return;if(r.length===1)return r[0];let i=t*(r.length-1),a=Math.floor(i),o=Math.ceil(i);return a===o?r[a]:r[a]+(r[o]-r[a])*(i-a)}function dn(e,t,n){return un(e,t/100,n)}function fn(e,t,n={}){if(t<=0||!Number.isInteger(t))throw RangeError(`bins must be a positive integer (got ${t})`);let r=q(e,n.by);if(r.length===0)return[];let[i,a]=n.range??[Math.min(...r),Math.max(...r)];if(i===a)return[{from:i,to:a,count:r.length}];let o=(a-i)/t,s=Array.from({length:t},(e,t)=>({from:i+t*o,to:i+(t+1)*o,count:0}));for(let e of r){if(e<i||e>a)continue;let n=e===a?t-1:Math.floor((e-i)/o);s[n].count++}return s}function pn(e,t,n){if(e.length<2)return;let r=q(e,t),i=q(e,n),a=Math.min(r.length,i.length);if(a<2)return;let o=0,s=0;for(let e=0;e<a;e++)o+=r[e],s+=i[e];let c=o/a,l=s/a,u=0,d=0,f=0;for(let e=0;e<a;e++){let t=r[e]-c,n=i[e]-l;u+=t*n,d+=t*t,f+=n*n}let p=Math.sqrt(d*f);return p===0?void 0:u/p}function J(e,t,n,r){if(typeof t==`function`){let r=n??``;return e.map((e,n)=>t(e,n)).join(r)}return r===void 0?e.map(e=>String(e??``)).join(t):e.map(e=>String(g(e,r)??``)).join(t)}function mn(e,t,n){let r=e.map(e=>String(e??``));return n===void 0||r.length<=1?r.join(t):`${r.slice(0,-1).join(t)}${n}${r[r.length-1]}`}function hn(e,t){let n=Array(e.length);for(let r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function gn(e,t){return e.map(e=>new t(e))}function _n(e,t){return e.map(e=>t(...e))}function vn(e,t){let n={};for(let r=0;r<e.length;r++){let[i,a]=t(e[r],r);n[i]===void 0&&(n[i]=[]),n[i].push(a)}return n}function yn(e,t){let n={};for(let r=0;r<e.length;r++){let[i,a]=t(e[r],r);n[i]=a}return n}function bn(e,t){let n=[];for(let r=0;r<e.length;r++){let i=t(e[r],r);Array.isArray(i)?n.push(...i):n.push(i)}return n}function xn(e,t=1/0){let n=[],r=(e,t)=>{for(let i of e)Array.isArray(i)&&t>0?r(i,t-1):typeof i==`object`&&i&&Object.getPrototypeOf(i)===Object.prototype&&t>0?r(Object.values(i),t-1):n.push(i)};return r(e,t),n}function Sn(e){let t=[];for(let n of e)Array.isArray(n)?t.push(...n):t.push(n);return t}function Y(e,t,n=!1){let r=t===void 0?e=>e:x(t),i=[],a=[];for(let t=0;t<e.length;t++){let o=r(e[t],t);(n?i.some(e=>e===o||_(e,o)):i.some(e=>v(e,o)))||(i.push(o),a.push(e[t]))}return a}function Cn(e,t){return Y(e,t,!0)}var wn=n({afterOf:()=>fe,averageOf:()=>C,beforeOf:()=>pe,buildFirstWhereSpec:()=>ae,buildWhereSpec:()=>M,chunkOf:()=>Se,chunkWhileOf:()=>Ce,collapseOf:()=>Sn,combinationsOf:()=>z,combineOf:()=>Me,concatOf:()=>at,containsOf:()=>k,correlationOf:()=>pn,countByOf:()=>xe,crossJoinOf:()=>Xt,cycleOf:()=>Je,diffAssocOf:()=>Bt,diffAssocUsingOf:()=>Vt,diffKeysOf:()=>Ht,diffOf:()=>zt,doesntContainOf:()=>Oe,dotOf:()=>yt,duplicatesOf:()=>Zt,enumerateOf:()=>qe,everyOf:()=>ke,exceptOf:()=>ht,filterOf:()=>Ie,firstOf:()=>b,firstOrFailOf:()=>ie,firstWhereOf:()=>oe,flatMapOf:()=>bn,flattenOf:()=>xn,flipOf:()=>_t,forPageOf:()=>Te,forgetOf:()=>ut,getAt:()=>ce,groupByManyOf:()=>L,groupByOf:()=>I,hasAnyKey:()=>he,hasKey:()=>me,histogramOf:()=>fn,implodeOf:()=>J,interleaveOf:()=>Ye,intersectAssocOf:()=>Gt,intersectAssocUsingOf:()=>Kt,intersectByKeysOf:()=>qt,intersectOf:()=>Ut,intersectUsingOf:()=>Wt,joinOf:()=>mn,joinOnOf:()=>$e,keyByOf:()=>R,keysOf:()=>vt,lastOf:()=>se,leftJoinOf:()=>et,likeToRegExp:()=>P,mapIntoOf:()=>gn,mapOf:()=>hn,mapSpreadOf:()=>_n,mapToGroupsOf:()=>vn,mapWithKeysOf:()=>yn,maxOf:()=>w,medianOf:()=>ve,mergeOf:()=>V,mergeRecursiveOf:()=>ft,minOf:()=>T,modeOf:()=>ye,multiplyOf:()=>K,nthOf:()=>Ee,onlyOf:()=>mt,outerJoinOf:()=>nt,padOf:()=>Rt,pairwiseOf:()=>Ke,partitionOf:()=>O,percentageOf:()=>be,percentileOf:()=>dn,permutationsOf:()=>Ze,pluckOf:()=>pt,popOf:()=>ot,powerSetOf:()=>Qe,prependOf:()=>it,pullOf:()=>lt,pushOf:()=>rt,putOf:()=>dt,quantileOf:()=>un,randomMany:()=>Nt,randomOne:()=>Mt,rangeOf:()=>It,reduceOf:()=>Pt,reduceSpreadOf:()=>Ft,rejectOf:()=>Le,replaceRecursiveOf:()=>St,replaceShallow:()=>xt,resolveCondition:()=>Fe,resolveContainsSpec:()=>A,reverseOf:()=>jt,rightJoinOf:()=>tt,sampleStddevOf:()=>ln,sampleVarianceOf:()=>sn,scanOf:()=>Ge,searchOf:()=>je,selectOf:()=>gt,shiftOf:()=>st,shuffleOf:()=>G,skipOf:()=>tn,skipUntilOf:()=>nn,skipWhileOf:()=>rn,sliceOf:()=>an,slidingOf:()=>we,soleOf:()=>ue,someOf:()=>Ae,sortByDescOf:()=>kt,sortByOf:()=>U,sortDescOf:()=>Tt,sortKeysOf:()=>W,sortKeysUsingOf:()=>At,sortOf:()=>wt,spliceOf:()=>ct,splitInOf:()=>D,splitOf:()=>E,stddevOf:()=>cn,sumOf:()=>S,takeOf:()=>Qt,takeUntilOf:()=>$t,takeWhileOf:()=>en,teeOf:()=>Xe,timesOf:()=>Lt,undotOf:()=>bt,unionObjectsOf:()=>Yt,unionOf:()=>Jt,uniqueOf:()=>Y,uniqueStrictOf:()=>Cn,valueOfFirst:()=>le,varianceOf:()=>on,whenOf:()=>j,whereBetweenOf:()=>Be,whereInOf:()=>ze,whereInstanceOfOf:()=>We,whereLikeOf:()=>F,whereNotBetweenOf:()=>Ve,whereNotInOf:()=>N,whereNotNullOf:()=>Ue,whereNullOf:()=>He,whereOf:()=>Re,zipManyOf:()=>Pe,zipOf:()=>Ne});function Tn(e){return typeof e==`object`&&!!e&&typeof e.toArray==`function`}function En(e){return Array.isArray(e)?e:Tn(e)?e.toArray():typeof e==`object`&&e&&Symbol.iterator in e||typeof e==`object`&&e&&`length`in e?Array.from(e):[e]}function Dn(e){return e==null?[]:Array.isArray(e)?e:[e]}function On(e){return Array.isArray(e)?e:Array.from(e)}function X(e){let t=function(t){return typeof t==`function`||typeof t==`string`?e(t):e()};return new Proxy(t,{get(n,r){return typeof r==`symbol`?t[r]:e(e=>g(e,r))},apply(t,n,r){let i=r[0];return typeof i==`function`||typeof i==`string`?e(i):e()}})}var Z=class e{items;constructor(e=[]){this.items=e==null?[]:On(En(e))}[Symbol.iterator](){return this.items[Symbol.iterator]()}get[Symbol.toStringTag](){return`Collection`}get length(){return this.items.length}static make(t=[]){return new e(t)}static fromJson(t){return new e(Dn(JSON.parse(t)))}static times(t,n){return new e(Lt(t,n))}static range(t,n,r=1){return new e(It(t,n,r))}static wrap(t){return t instanceof e?new e(t.toArray()):new e(Dn(t))}static unwrap(t){return t instanceof e?t.toArray():t}static empty(){return new e([])}static fromEntries(t){return new e([Object.fromEntries(t)])}static fromMap(t){return new e([...t.entries()])}static fromSet(t){return new e([...t])}get sum(){let e=this.items;return X(t=>S(e,t))}get average(){let e=this.items;return X(t=>C(e,t))}get avg(){return this.average}get max(){let e=this.items;return X(t=>w(e,t))}get min(){let e=this.items;return X(t=>T(e,t))}all(){return this.items}first(e){return b(this.items,e)}firstOrFail(e){return ie(this.items,e)}firstWhere(e,...t){let n=ae(t[0],t[1],t.length+1);return oe(this.items,e,n)}last(e){return se(this.items,e)}get(e,t){let n=ce(this.items,e);if(n!==void 0)return n;if(t!==void 0)return typeof t==`function`?t():t}value(e){return le(this.items,e)}sole(e,t){return ue(this.items,e,t)}after(e,t=!1){return fe(this.items,e,t)}before(e,t=!1){return pe(this.items,e,t)}random(t){if(t===void 0)return Mt(this.items);let n=typeof t==`function`?t(this):t;return new e(Nt(this.items,n))}contains(e,...t){let n=A(e,t[0],t.length>=1);return k(this.items,n,!1)}containsStrict(e,...t){let n=A(e,t[0],t.length>=1);return k(this.items,n,!0)}doesntContain(e,...t){return!this.contains(e,...t)}doesntContainStrict(e,...t){return!this.containsStrict(e,...t)}containsOneItem(e){return this.hasSole(e)}every(e){return ke(this.items,e)}some(e){return Ae(this.items,e)}search(e,t=!1){return je(this.items,e,t)}has(e){return me(this.items,Array.isArray(e)?e:[e])}hasAny(e){return he(this.items,e)}hasMany(e){return e?this.items.filter((t,n)=>e(t,n)).length>1:this.items.length>1}hasSole(e){return e?this.items.filter((t,n)=>e(t,n)).length===1:this.items.length===1}isEmpty(){return this.items.length===0}isNotEmpty(){return this.items.length>0}count(){return this.items.length}countBy(e){let t=xe(this.items,e),n={};for(let[e,r]of t)n[String(e)]=r;return n}filter(t){return new e(Ie(this.items,t))}reject(t){return new e(Le(this.items,t))}where(t,...n){let r=M([t,...n],!1);return new e(Re(this.items,t,r))}whereStrict(t,n){let r=M([t,n],!0);return new e(Re(this.items,t,r))}whereIn(t,n){return new e(ze(this.items,t,n,!1))}whereInStrict(t,n){return new e(ze(this.items,t,n,!0))}whereNotIn(t,n){return new e(N(this.items,t,n,!1))}whereNotInStrict(t,n){return new e(N(this.items,t,n,!0))}whereBetween(t,n){return new e(Be(this.items,t,n))}whereNotBetween(t,n){return new e(Ve(this.items,t,n))}whereNull(t){return new e(He(this.items,t))}whereNotNull(t){return new e(Ue(this.items,t))}whereLike(t,n,r=!1){return new e(F(this.items,t,n,r,!1))}whereNotLike(t,n,r=!1){return new e(F(this.items,t,n,r,!0))}compact(){return new e(this.items.filter(e=>e!=null))}whereInstanceOf(t){return new e(We(this.items,t))}map(t){return new e(hn(this.items,t))}mapInto(t){return new e(gn(this.items,t))}mapSpread(t){return new e(_n(this.items,t))}mapToGroups(e){return vn(this.items,e)}mapWithKeys(e){return yn(this.items,e)}flatMap(t){return new e(bn(this.items,t))}flatten(t=1/0){return new e(xn(this.items,t))}collapse(){return new e(Sn(this.items))}collapseWithKeys(){if(this.items.length===0)return new e([]);let t={};for(let n of this.items)if(!(typeof n!=`object`||!n))for(let[r,i]of Object.entries(n))t[r]=i instanceof e?i.toArray():i;return new e([t])}flip(){return new e([_t(this.items)])}pluck(t,n){let r=pt(this.items,t,n);return Array.isArray(r)?new e(r):r}transform(e){return this.items=hn(this.items,e),this}replace(t){return new e(xt(this.items,t))}replaceRecursive(t){return new e(St(this.items,t))}sort(t){return new e(wt(this.items,t))}sortDesc(){return new e(Tt(this.items))}sortBy(t){return new e(U(this.items,t))}sortByDesc(t){return new e(kt(this.items,t))}sortKeys(){return new e(W(this.items))}sortKeysDesc(){return new e(W(this.items,!0))}sortKeysUsing(t){return new e(At(this.items,t))}reverse(){return new e(jt(this.items))}shuffle(t){return new e(G(this.items,t))}sumBy(e){return S(this.items,e)}averageBy(e){return C(this.items,e)}avgBy(e){return C(this.items,e)}maxBy(e){return w(this.items,e)}minBy(e){return T(this.items,e)}median(e){return ve(this.items,e)}mode(e){return ye(this.items,e)}percentage(e,t=2){return be(this.items,e,t)}chunk(t){return new e(Se(this.items,t).map(t=>new e(t)))}chunkWhile(t){return new e(Ce(this.items,t).map(t=>new e(t)))}sliding(t,n=1){return new e(we(this.items,t,n).map(t=>new e(t)))}split(t){return new e(E(this.items,t).map(t=>new e(t)))}splitIn(t){return new e(D(this.items,t).map(t=>new e(t)))}partition(t){let[n,r]=O(this.items,t);return[new e(n),new e(r)]}forPage(t,n){return new e(Te(this.items,t,n))}nth(t,n=0){return new e(Ee(this.items,t,n))}groupBy(e){return I(this.items,e)}groupByMany(e){return L(this.items,e)}keyBy(e){return R(this.items,e)}take(t){return new e(Qt(this.items,t))}takeUntil(t){return new e($t(this.items,t))}takeWhile(t){return new e(en(this.items,t))}skip(t){return new e(tn(this.items,t))}skipUntil(t){return new e(nn(this.items,t))}skipWhile(t){return new e(rn(this.items,t))}slice(t,n){return new e(an(this.items,t,n))}push(...e){return this.items.push(...e),this}prepend(e){return this.items.unshift(e),this}pop(t){if(t===void 0)return this.items.pop();let{remaining:n,removed:r}=ot(this.items,t);return this.items=n,new e(r)}shift(t){if(t===void 0)return this.items.shift();let{remaining:n,removed:r}=st(this.items,t);return this.items=n,new e(r)}pull(e){let{remaining:t,removed:n}=lt(this.items,e);return this.items=t,n}forget(e){let t=Array.isArray(e)?e:[e];return this.items=ut(this.items,t),this}splice(t,n,...r){let{remaining:i,removed:a}=ct(this.items,t,n,r);return this.items=i,new e(a)}put(t,n){let r=this.items;return new e(dt(r,t,n))}concat(t){let n=t instanceof e?t.toArray():t;return new e(at(this.items,n))}merge(...t){let n=[...this.items];for(let r of t){let t=r instanceof e?r.toArray():r;n=V(n,t)}return new e(n)}mergeRecursive(...t){let n=t.map(t=>t instanceof e?t.toArray():t);return new e(ft(this.items,...n))}union(t){let n=t instanceof e?t.toArray():t;return new e(Jt(this.items,n))}diff(t){return new e(zt(this.items,t instanceof e?t.toArray():t))}diffAssoc(t){return new e(Bt(this.items,t instanceof e?t.toArray():t))}diffAssocUsing(t,n){return new e(Vt(this.items,t instanceof e?t.toArray():t,n))}diffKeys(t){return new e(Ht(this.items,t))}intersect(t){return new e(Ut(this.items,t instanceof e?t.toArray():t))}intersectUsing(t,n){return new e(Wt(this.items,t instanceof e?t.toArray():t,n))}intersectAssoc(t){return new e(Gt(this.items,t instanceof e?t.toArray():t))}intersectAssocUsing(t,n){return new e(Kt(this.items,t,n))}intersectByKeys(t){return new e(qt(this.items,t))}crossJoin(...t){return new e(Xt(this.items.slice(),...t.map(e=>[...e])))}unique(t){return new e(Y(this.items,t,!1))}uniqueStrict(t){return new e(Cn(this.items,t))}duplicates(e){let t=e===void 0?void 0:x(e),n=Zt(this.items,t?e=>t(e,0):void 0,!1),r={};for(let[e,t]of n)r[e]=t;return r}duplicatesStrict(e){let t=e===void 0?void 0:x(e),n=Zt(this.items,t?e=>t(e,0):void 0,!0),r={};for(let[e,t]of n)r[e]=t;return r}keys(){return new e(vt(this.items))}values(){return new e([...this.items])}only(t){return new e(mt(this.items,t))}except(t){return new e(ht(this.items,t))}select(t){return new e(gt(this.items,t))}dot(){return yt(this.items)}undot(){return new e([bt(this.items)])}each(e){for(let t=0;t<this.items.length&&e(this.items[t],t)!==!1;t++);return this}eachSpread(e){for(let t=0;t<this.items.length&&e(...this.items[t])!==!1;t++);return this}tapEach(e){return this.items.forEach(e),this}reduce(e,t){if(t===void 0){if(this.items.length===0)throw TypeError(`Reduce of empty collection with no initial value`);let t=this.items[0];for(let n=1;n<this.items.length;n++)t=e(t,this.items[n],n);return t}return Pt(this.items,e,t)}reduceSpread(e,...t){return Ft(this.items,e,...t)}pipe(e){return e(this)}pipeInto(e){return new e(this)}pipeThrough(e){return e.reduce((e,t)=>t(e),this)}tap(e){return e(this),this}implode(e,t){return typeof e==`function`?J(this.items,e,t??``):J(this.items,e,void 0,t)}join(e,t){return mn(this.items,e,t)}when(e,t,n){return j(this,e,t,n)}unless(e,t,n){let r=typeof e==`function`?t=>!e(t):!e;return j(this,r,t,n)}whenEmpty(e,t){return this.when(this.isEmpty(),e,t)}whenNotEmpty(e,t){return this.when(this.isNotEmpty(),e,t)}unlessEmpty(e){return this.whenNotEmpty(e)}unlessNotEmpty(e){return this.whenEmpty(e)}ensure(...e){let t=e=>e.name??`object`;for(let n of this.items)if(!e.some(e=>typeof e==`string`?typeof n===e||e===`array`&&Array.isArray(n):n instanceof e))throw new a(`Collection should only include "${e.map(e=>typeof e==`string`?e:t(e)).join(`|`)}" items, but ${typeof n} found.`);return this}pad(t,n){return new e(Rt(this.items,t,n))}multiply(t){return new e(K(this.items,t))}repeat(e){return this.multiply(e)}times(e){return this.multiply(e)}combine(t){let n=t instanceof e?t.toArray():t;return Me(this.items.map(String),n)}zip(t){let n=t instanceof e?t.toArray():t;return new e(Ne(this.items,n))}wrap(){return new e([this.items])}unwrap(){return this.items.length===1?this.items[0]:[...this.items]}range(t,n,r=1){return e.range(t,n,r)}toArray(){return[...this.items]}toJson(){return JSON.stringify(this.items)}toPrettyJson(e=2){return JSON.stringify(this.items,null,e)}toMap(e,t){let n=new Map;for(let r=0;r<this.items.length;r++)n.set(e(this.items[r],r),t(this.items[r],r));return n}toSet(){return new Set(this.items)}toJSON(){return this.items}toString(){return this.toJson()}valueOf(){return this.items}[Symbol.toPrimitive](e){return e===`number`?this.items.length:e===`string`?this.toJson():this.items}collect(){return new e([...this.items])}clone(){return new e(H(this.items))}lazy(){if(kn===null)throw Error(`LazyCollection not registered yet — internal wiring error.`);return new kn(this.items)}dump(){return console.log(this.items),this}dd(){throw this.dump(),new i(`Dump-and-die: Collection inspection terminated.`)}variance(e){return on(this.items,e)}sampleVariance(e){return sn(this.items,e)}stddev(e){return cn(this.items,e)}sampleStddev(e){return ln(this.items,e)}quantile(e,t){return un(this.items,e,t)}percentileAt(e,t){return dn(this.items,e,t)}histogram(e,t){return fn(this.items,e,t)}correlation(e,t){return pn(this.items,e,t)}joinOn(t,n,r,i){let a=t instanceof e?t.toArray():t;return new e($e(this.items,a,n,r,i))}leftJoin(t,n,r,i){let a=t instanceof e?t.toArray():t;return new e(et(this.items,a,n,r,i))}rightJoin(t,n,r,i){let a=t instanceof e?t.toArray():t;return new e(tt(this.items,a,n,r,i))}outerJoin(t,n,r,i){let a=t instanceof e?t.toArray():t;return new e(nt(this.items,a,n,r,i))}scan(t,n){return new e(Ge(this.items,t,n))}pairwise(){return new e(Ke(this.items))}enumerate(t=0){return new e(qe(this.items,t))}cycle(t=1/0){if(t===1/0)throw Error(`cycle(Infinity) on Collection materialises — use lazy().cycle() for infinite cycles`);return new e([...Je(this.items,t)])}interleave(...t){return new e(Ye(this.items.slice(),...t.map(t=>t instanceof e?t.toArray():[...t])))}permutations(t){return new e([...Ze(this.items,t)])}combinations(t){return new e([...z(this.items,t)])}powerSet(){return new e([...Qe(this.items)])}static macro=()=>{throw Error(`Collection.macro is not yet wired — internal initialisation error.`)};static hasMacro=()=>!1;static flushMacros=()=>void 0};p(Z);var kn=null;function An(e){kn=e}function jn(e=[]){return new Z(e)}function Mn(e){if(typeof e==`function`)return e;if(Array.isArray(e)||e instanceof Set||e instanceof Map)return()=>e;let t=Array.from(e);return()=>t}var Q=class e{source;constructor(e=[]){this.source=Mn(e)}[Symbol.iterator](){return this.source()[Symbol.iterator]()}get[Symbol.toStringTag](){return`LazyCollection`}static make(t=[]){return new e(t)}static empty(){return new e([])}static range(t,n,r=1){return new e(function*(){if(r===0)throw RangeError(`range step must not be zero`);if(r>0)for(let e=t;e<=n;e+=r)yield e;else for(let e=t;e>=n;e+=r)yield e})}static times(t,n){return new e(function*(){for(let e=1;e<=t;e++)yield n(e)})}static wrap(t){return t instanceof e?t:t==null?e.empty():typeof t==`object`&&t&&Symbol.iterator in t?new e(t):new e([t])}static unwrap(t){return t instanceof e?t.toArray():t}all(){return[...this.source()]}toArray(){return this.all()}toJson(){return JSON.stringify(this.all())}toJSON(){return this.all()}toMap(e,t){let n=new Map,r=0;for(let i of this.source())n.set(e(i,r),t(i,r)),r++;return n}toSet(){return new Set(this.source())}collect(){return new Z(this.all())}count(){let e=0,t=this.source()[Symbol.iterator]();for(let n=t.next();!n.done;n=t.next())e++;return e}isEmpty(){return this.source()[Symbol.iterator]().next().done===!0}isNotEmpty(){return!this.isEmpty()}countBy(e){let t=x(e),n={},r=0;for(let e of this.source()){let i=String(t(e,r));n[i]=(n[i]??0)+1,r++}return n}first(e){let t=0;for(let n of this.source()){if(e===void 0||e(n,t))return n;t++}}firstOrFail(e){let t=this.first(e);if(t===void 0)throw new i;return t}firstWhere(e,...t){let n=ae(t[0],t[1],t.length+1);for(let t of this.source()){let r=g(t,e);if(n.truthy?r:y(r,n.operator,n.value))return t}}last(e){let t,n=0;for(let r of this.source())(e===void 0||e(r,n))&&(t=r),n++;return t}sole(e,t){return ue(this.all(),e,t)}random(){return Mt(this.all())}contains(e,...t){let n=A(e,t[0],t.length>=1);return k(this.all(),n,!1)}containsStrict(e,...t){let n=A(e,t[0],t.length>=1);return k(this.all(),n,!0)}doesntContain(e,...t){return!this.contains(e,...t)}every(e){let t=0;for(let n of this.source()){if(!e(n,t))return!1;t++}return!0}some(e){let t=0;for(let n of this.source()){if(e(n,t))return!0;t++}return!1}search(e,t=!1){return je(this.all(),e,t)}has(e){return me(this.all(),Array.isArray(e)?e:[e])}sum(e){return S(this.all(),e)}average(e){return C(this.all(),e)}avg(e){return C(this.all(),e)}max(e){return w(this.all(),e)}min(e){return T(this.all(),e)}median(e){return ve(this.all(),e)}mode(e){return ye(this.all(),e)}percentage(e,t=2){return be(this.all(),e,t)}filter(t){let n=this.source;return new e(function*(){let e=0;for(let r of n())(t===void 0?r:t(r,e))&&(yield r),e++})}reject(e){return this.filter((t,n)=>!e(t,n))}where(e,...t){let n=M([e,...t],!1);return this.filter(t=>n.truthy?!!g(t,e):y(g(t,e),n.operator,n.value))}whereStrict(e,t){let n=M([e,t],!0);return this.filter(t=>y(g(t,e),n.operator,n.value))}whereIn(e,t){return this.whereInFilter(e,t,!1,!1)}whereInStrict(e,t){return this.whereInFilter(e,t,!0,!1)}whereNotIn(e,t){return this.whereInFilter(e,t,!1,!0)}whereNotInStrict(e,t){return this.whereInFilter(e,t,!0,!0)}whereInFilter(e,t,n,r){return this.filter(i=>{let a=g(i,e),o=t.some(e=>n?e===a||_(e,a):v(e,a));return r?!o:o})}whereBetween(e,t){return this.filter(n=>{let r=g(n,e);return r>=t[0]&&r<=t[1]})}whereNotBetween(e,t){return this.filter(n=>{let r=g(n,e);return r<t[0]||r>t[1]})}whereNull(e){return this.filter(t=>g(t,e)==null)}whereNotNull(e){return this.filter(t=>g(t,e)!=null)}whereLike(e,t,n=!1){let r=P(t,n);return this.filter(t=>{let n=g(t,e);return n!=null&&r.test(String(n))})}whereNotLike(e,t,n=!1){let r=P(t,n);return this.filter(t=>{let n=g(t,e);return!(n!=null&&r.test(String(n)))})}whereInstanceOf(t){let n=t,r=this.source;return new e(function*(){for(let e of r())e instanceof n&&(yield e)})}map(t){let n=this.source;return new e(function*(){let e=0;for(let r of n())yield t(r,e),e++})}mapInto(e){return this.map(t=>new e(t))}mapSpread(e){return this.map(t=>e(...t))}mapWithKeys(e){return yn(this.all(),e)}mapToGroups(e){return vn(this.all(),e)}flatMap(t){let n=this.source;return new e(function*(){let e=0;for(let r of n()){let n=t(r,e);Array.isArray(n)?yield*n:yield n,e++}})}flatten(t=1/0){let n=this.source;function*r(e,t){for(let n of e)Array.isArray(n)&&t>0?yield*r(n,t-1):m(n)&&t>0?yield*r(Object.values(n),t-1):yield n}return new e(()=>r(n(),t))}collapse(){let t=this.source;return new e(function*(){for(let e of t())Array.isArray(e)?yield*e:yield e})}pluck(t,n){if(n===void 0){let n=this.source;return new e(function*(){for(let e of n())yield g(e,t)})}let r={};for(let e of this.source())r[String(g(e,n))]=g(e,t);return r}take(t){if(t<0)return new e(this.all().slice(t));let n=this.source;return new e(function*(){if(t<=0)return;let e=n()[Symbol.iterator](),r=0;for(;r<t;){let t=e.next();if(t.done)return;yield t.value,r++}})}takeUntil(t){let n=this.source,r=typeof t==`function`;return new e(function*(){let e=0;for(let i of n()){if(r?t(i,e):v(i,t))return;yield i,e++}})}takeWhile(t){let n=this.source;return new e(function*(){let e=0;for(let r of n()){if(!t(r,e))return;yield r,e++}})}skip(t){let n=this.source;return new e(function*(){let e=0;for(let r of n())e>=t&&(yield r),e++})}skipUntil(t){let n=this.source,r=typeof t==`function`;return new e(function*(){let e=!1,i=0;for(let a of n()){if(!e)if(r?t(a,i):v(a,t))e=!0;else{i++;continue}yield a,i++}})}skipWhile(t){let n=this.source;return new e(function*(){let e=!1,r=0;for(let i of n()){if(!e&&t(i,r)){r++;continue}e=!0,yield i,r++}})}slice(t,n){return t<0||n!==void 0&&n<0?new e(an(this.all(),t,n)):this.skip(t).take(n===void 0?1/0:n)}forPage(e,t){return this.skip((e-1)*t).take(t)}nth(t,n=0){let r=this.source;return new e(function*(){let e=0;for(let i of r())e>=n&&(e-n)%t===0&&(yield i),e++})}chunk(t){let n=this.source;return new e(function*(){let r=[];for(let i of n())r.push(i),r.length===t&&(yield new e([...r]),r=[]);r.length>0&&(yield new e(r))})}chunkWhile(t){return new e(Ce(this.all(),t).map(t=>new e(t)))}partition(t){let[n,r]=O(this.all(),t);return[new e(n),new e(r)]}groupBy(e){return I(this.all(),e)}keyBy(e){return R(this.all(),e)}split(t){return new e(E(this.all(),t).map(t=>new e(t)))}splitIn(t){return new e(D(this.all(),t).map(t=>new e(t)))}sort(t){return new e(wt(this.all(),t))}sortDesc(){return new e(Tt(this.all()))}sortBy(t){return new e(U(this.all(),t))}sortByDesc(t){return new e(kt(this.all(),t))}sortKeys(){return new e(W(this.all()))}sortKeysDesc(){return new e(W(this.all(),!0))}reverse(){return new e(jt(this.all()))}shuffle(t){return new e(G(this.all(),t))}values(){return new e(this.all())}keys(){return new e(vt(this.all()))}diff(t){return new e(zt(this.all(),this.materialise(t)))}diffAssoc(t){return new e(Bt(this.all(),this.materialise(t)))}diffKeys(t){return new e(Ht(this.all(),t))}intersect(t){return new e(Ut(this.all(),this.materialise(t)))}intersectAssoc(t){return new e(Gt(this.all(),this.materialise(t)))}intersectByKeys(t){return new e(qt(this.all(),t))}union(t){return new e(Jt(this.all(),this.materialise(t)))}crossJoin(...t){return new e(Xt(this.all(),...t))}unique(t){return new e(Y(this.all(),t,!1))}uniqueStrict(t){return new e(Cn(this.all(),t))}duplicates(e){return new Z(this.all()).duplicates(e)}duplicatesStrict(e){return new Z(this.all()).duplicatesStrict(e)}only(t){return new e(mt(this.all(),t))}except(t){return new e(ht(this.all(),t))}flip(){return new e([_t(this.all())])}pad(t,n){return new e(Rt(this.all(),t,n))}multiply(t){return new e(K(this.all(),t))}combine(e){let t=this.materialise(e);return Me(this.all().map(String),t)}zip(t){return new e(Ne(this.all(),this.materialise(t)))}concat(t){let n=this.materialise(t),r=this.source;return new e(function*(){for(let e of r())yield e;for(let e of n)yield e})}merge(...t){let n=[...this.all()];for(let e of t)n=V(n,this.materialise(e));return new e(n)}each(e){let t=0;for(let n of this.source()){if(e(n,t)===!1)break;t++}return this}tapEach(t){let n=this.source;return new e(function*(){let e=0;for(let r of n())t(r,e),yield r,e++})}reduce(e,t){return Pt(this.all(),e,t)}pipe(e){return e(this)}pipeInto(e){return new e(this)}pipeThrough(e){return e.reduce((e,t)=>t(e),this)}tap(e){return e(this),this}implode(e,t){return typeof e==`function`?J(this.all(),e,t??``):J(this.all(),e,void 0,t)}join(e,t){return mn(this.all(),e,t)}when(e,t,n){return j(this,e,t,n)}unless(e,t,n){let r=typeof e==`function`?t=>!e(t):!e;return j(this,r,t,n)}whenEmpty(e,t){return this.when(this.isEmpty(),e,t)}whenNotEmpty(e,t){return this.when(this.isNotEmpty(),e,t)}unlessEmpty(e){return this.whenNotEmpty(e)}unlessNotEmpty(e){return this.whenEmpty(e)}takeUntilTimeout(t){let n=t instanceof Date?t.getTime():t,r=this.source;return new e(function*(){for(let e of r()){if(Date.now()>=n)return;yield e}})}throttle(e){let t=this.source,n=Math.max(0,e*1e3);return{[Symbol.asyncIterator](){let e=t()[Symbol.iterator](),r=!0;return{async next(){return r||await new Promise(e=>setTimeout(e,n)),r=!1,e.next()}}}}}remember(){let t=[],n=this.source()[Symbol.iterator](),r=!1;return new e(function*(){let e=0;for(;;){if(e<t.length){yield t[e],e++;continue}if(r)return;let i=n.next();if(i.done){r=!0;return}t.push(i.value),yield i.value,e++}})}withHeartbeat(t,n){let r=this.source;return new e(function*(){let e=Date.now();for(let i of r()){let r=Date.now();r-e>=t&&(n(),e=r),yield i}})}static macro=()=>{throw Error(`LazyCollection.macro is not yet wired — internal initialisation error.`)};static hasMacro=()=>!1;static flushMacros=()=>void 0;materialise(t){return t instanceof e?t.all():t instanceof Z?t.toArray():[...t]}};p(Q),An(Q);async function Nn(e,t,n){if(t<=0||!Number.isFinite(t))throw RangeError(`concurrency must be a positive finite number (got ${t})`);let r=Pn(e)?e[Symbol.asyncIterator]():Fn(e),i=[],a=new Set,o=0,s,c=!1,l=async()=>{if(c||s!==void 0)return;let e=await r.next();if(e.done){c=!0;return}let t=o++,l=Promise.resolve(n(e.value,t)).then(e=>{i[t]=e}).catch(e=>{s===void 0&&(s=e)}).finally(()=>{a.delete(l)});a.add(l)};for(;a.size<t&&!c&&s===void 0;)await l();for(;a.size>0&&(await Promise.race(a),s===void 0);)for(;a.size<t&&!c;)await l();if(await Promise.allSettled(a),s!==void 0)throw s;return i}function Pn(e){return typeof e==`object`&&!!e&&Symbol.asyncIterator in e}async function*Fn(e){for(let t of e)yield t}function In(e){return typeof e==`function`?()=>Ln(e()):()=>Ln(e)}function Ln(e){return Symbol.asyncIterator in e?e:(async function*(){for(let t of e)yield t})()}var Rn=class e{source;constructor(e=[]){this.source=In(e)}[Symbol.asyncIterator](){return this.source()[Symbol.asyncIterator]()}static from(t){return new e(t)}static fromAsyncIterable(t){return new e(t)}static range(t,n,r=1){if(r===0)throw RangeError(`range step must not be zero`);return new e(async function*(){if(r>0)for(let e=t;e<=n;e+=r)yield e;else for(let e=t;e>=n;e+=r)yield e})}static empty(){return new e([])}async toArray(){let e=[];for await(let t of this.source())e.push(t);return e}async collect(){return new Z(await this.toArray())}async toJson(){return JSON.stringify(await this.toArray())}async count(){let e=0,t=this.source()[Symbol.asyncIterator]();for(let n=await t.next();!n.done;n=await t.next())e++;return e}async first(e){let t=0;for await(let n of this.source()){if(e===void 0||await e(n,t))return n;t++}}async last(e){let t,n=0;for await(let r of this.source())(e===void 0||await e(r,n))&&(t=r),n++;return t}async every(e){let t=0;for await(let n of this.source()){if(!await e(n,t))return!1;t++}return!0}async some(e){let t=0;for await(let n of this.source()){if(await e(n,t))return!0;t++}return!1}async reduce(e,t){let n=t,r=0;for await(let t of this.source())n=await e(n,t,r),r++;return n}async forEach(e){let t=0;for await(let n of this.source())await e(n,t),t++}async eachAsync(e,t={}){let n=t.concurrency??1;await Nn(this.source(),n,async(t,n)=>{await e(t,n)})}map(t){let n=this.source;return new e(async function*(){let e=0;for await(let r of n())yield await t(r,e),e++})}mapAsync(t,n={}){let r=n.concurrency??4,i=this.source;return new e(async function*(){let e=i()[Symbol.asyncIterator](),n=new Map,a=0,o=0,s=!1,c=async()=>{if(s)return;let r=await e.next();if(r.done){s=!0;return}let i=a++;n.set(i,Promise.resolve(t(r.value,i)).then(e=>({index:i,value:e})))};for(;n.size<r&&!s;)await c();for(;n.size>0;){let e=n.get(o);if(e){let{value:t}=await e;n.delete(o),yield t,o++,s||await c()}else await Promise.race(n.values())}})}filter(t){let n=this.source;return new e(async function*(){let e=0;for await(let r of n())await t(r,e)&&(yield r),e++})}filterAsync(e,t={}){return this.mapAsync(async(t,n)=>({item:t,keep:await e(t,n)}),t).filter(e=>e.keep).map(e=>e.item)}flatMap(t){let n=this.source;return new e(async function*(){let e=0;for await(let r of n()){let n=await t(r,e);if(Symbol.asyncIterator in n)for await(let e of n)yield e;else for(let e of n)yield e;e++}})}take(t){let n=this.source;return new e(async function*(){if(t<=0)return;let e=0;for await(let r of n()){if(e>=t)return;yield r,e++}})}skip(t){let n=this.source;return new e(async function*(){let e=0;for await(let r of n())e>=t&&(yield r),e++})}takeWhile(t){let n=this.source;return new e(async function*(){let e=0;for await(let r of n()){if(!await t(r,e))return;yield r,e++}})}skipWhile(t){let n=this.source;return new e(async function*(){let e=!1,r=0;for await(let i of n()){if(!e&&await t(i,r)){r++;continue}e=!0,yield i,r++}})}chunk(t){if(t<=0)throw RangeError(`chunk size must be positive`);let n=this.source;return new e(async function*(){let e=[];for await(let r of n())e.push(r),e.length===t&&(yield e,e=[]);e.length>0&&(yield e)})}tap(t){let n=this.source;return new e(async function*(){let e=0;for await(let r of n())await t(r,e),yield r,e++})}};function zn(e=[]){return new Q(e)}function Bn(e,t={}){let n=t.delimiter??`,`,r=t.quote??`"`,i=r.length>0,a=[],o=[],s=``,c=!1,l=0;for(;l<e.length;){let t=e[l];if(c){if(i&&t===r){if(e[l+1]===r){s+=r,l+=2;continue}c=!1,l++;continue}s+=t,l++;continue}if(i&&t===r&&s===``){c=!0,l++;continue}if(t===n){o.push(s),s=``,l++;continue}if(t===`\r`){e[l+1]===`
2
+ `&&l++,o.push(s),a.push(o),o=[],s=``,l++;continue}if(t===`
3
+ `){o.push(s),a.push(o),o=[],s=``,l++;continue}s+=t,l++}if((s!==``||o.length>0)&&(o.push(s),a.push(o)),!t.header)return a;if(a.length===0)return[];let[u,...d]=a;return d.map(e=>{let n={};for(let r=0;r<u.length;r++)n[u[r]]=t.raw?e[r]??``:Vn(e[r]??``);return n})}function Vn(e){if(e===``)return``;if(e===`true`)return!0;if(e===`false`)return!1;if(e===`null`)return null;if(/^-?\d+(\.\d+)?$/.test(e)){let t=Number(e);if(Number.isFinite(t))return t}return e}function Hn(e,t={}){let n=t.delimiter??`,`,r=t.eol??`
4
+ `;if(e.length===0)return``;let i=!Array.isArray(e[0]),a=[];if(i){let r=e,i=t.columns??Un(r);t.header!==!1&&a.push(i.map(e=>$(e,n)).join(n));for(let e of r)a.push(i.map(t=>$(Wn(e[t]),n)).join(n))}else{let r=e;t.columns&&t.header!==!1&&a.push(t.columns.map(e=>$(e,n)).join(n));for(let e of r)a.push(e.map(e=>$(Wn(e),n)).join(n))}return a.join(r)}function Un(e){let t=new Set;for(let n of e)for(let e of Object.keys(n))t.add(e);return[...t]}function Wn(e){return e==null?``:typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function $(e,t){return e.includes(t)||e.includes(`"`)||e.includes(`
5
+ `)||e.includes(`\r`)?`"${e.replace(/"/g,`""`)}"`:e}function Gn(e){let t=[],n=e.split(/\r?\n/);for(let e=0;e<n.length;e++){let r=n[e];if(r.trim()!==``)try{t.push(JSON.parse(r))}catch(t){throw SyntaxError(`parseJsonl: invalid JSON on line ${e+1}: ${t.message}`,{cause:t})}}return t}function Kn(e,t=`
6
+ `){return e.map(e=>JSON.stringify(e)).join(t)}async function*qn(e){let t=``,n=0;for await(let r of e){t+=r;let e;for(;(e=t.indexOf(`
7
+ `))>=0;){n++;let r=t.slice(0,e).replace(/\r$/,``);if(t=t.slice(e+1),r.trim()!==``)try{yield JSON.parse(r)}catch(e){throw SyntaxError(`parseJsonlStream: invalid JSON on line ${n}: ${e.message}`,{cause:e})}}}if(t.trim()!==``){n++;try{yield JSON.parse(t)}catch(e){throw SyntaxError(`parseJsonlStream: invalid JSON on line ${n}: ${e.message}`,{cause:e})}}}function Jn(e,t={}){let n=t.decodeAs===!1?null:t.decodeAs??`utf-8`,r=n?new TextDecoder(n):null;return new Rn(async function*(){for await(let t of e)typeof t==`string`?yield t:r?yield r.decode(t,{stream:!0}):yield String(t);if(r){let e=r.decode();e.length>0&&(yield e)}})}function Yn(e){return new Rn(async function*(){let t=``,n=new TextDecoder(`utf-8`);for await(let r of e){t+=typeof r==`string`?r:n.decode(r,{stream:!0});let e;for(;(e=t.indexOf(`
8
+ `))>=0;)yield t.slice(0,e).replace(/\r$/,``),t=t.slice(e+1)}let r=t+n.decode();r.length>0&&(yield r)})}var Xn=[`average`,`avg`,`contains`,`doesntContain`,`each`,`every`,`filter`,`first`,`flatMap`,`groupBy`,`keyBy`,`map`,`max`,`min`,`partition`,`reject`,`skipUntil`,`skipWhile`,`some`,`sortBy`,`sortByDesc`,`sum`,`takeUntil`,`takeWhile`,`unique`];function Zn(e,t){let n=e[t];if(typeof n!=`function`)throw TypeError(`Higher-order proxy: method "${t}" not found on host.`);let r=n;return new Proxy({},{get(t,n){let i=e=>{if(e==null)return;let t=e[n];return typeof t==`function`?t.bind(e):typeof n==`string`?g(e,n):t};return new Proxy(i,{apply(t,n,a){return r.call(e,e=>{let t=i(e);return typeof t==`function`?t(...a):t})},get(t,n){return r.call(e,i)}})}})}var Qn=jn;e.AsyncCollection=Rn,e.Collection=Z,e.CollectionException=r,e.HIGHER_ORDER_TARGETS=Xn,e.ItemNotFoundException=i,e.LazyCollection=Q,e.MultipleItemsFoundException=ee,e.UnexpectedValueException=a,e.applyMacroable=p,e.collect=jn,e.createHigherOrderProxy=Zn,e.dataGet=g,e.dataSet=ne,e.deepClone=H,e.deepEqual=_,e.default=Qn,e.flushMacros=f,e.fromReadable=Jn,e.getMacro=d,e.hasMacro=u,e.isArrayable=Tn,e.isFunction=te,e.isObjectLike=h,e.isOperator=re,e.isPlainObject=m,e.lazy=zn,e.lines=Yn,e.looseEqual=v,e.mapWithConcurrency=Nn,Object.defineProperty(e,"operations",{enumerable:!0,get:function(){return wn}}),e.operatorForWhere=y,e.parseCsv=Bn,e.parseJsonl=Gn,e.parseJsonlStream=qn,e.registerMacro=l,e.toCsv=Hn,e.toJsonl=Kn,e.valueRetriever=x});
@@ -0,0 +1,57 @@
1
+ import { Collection } from '../../collection/Collection';
2
+ export type AsyncSource<T> = AsyncIterable<T> | Iterable<T> | (() => AsyncIterable<T> | Iterable<T>);
3
+ /**
4
+ * Lazy async-iterable backed collection. Mirrors LazyCollection but every
5
+ * terminal operation is async, and every transformation operates against an
6
+ * `AsyncIterable<T>`. Supports bounded-parallelism `mapAsync`/`filterAsync`.
7
+ *
8
+ * Construct one via `new AsyncCollection(...)`, `AsyncCollection.fromAsyncIterable`,
9
+ * or the `lazy()` helper bridge.
10
+ */
11
+ export declare class AsyncCollection<T> implements AsyncIterable<T> {
12
+ private readonly source;
13
+ constructor(source?: AsyncSource<T>);
14
+ [Symbol.asyncIterator](): AsyncIterator<T>;
15
+ static from<T>(source: AsyncSource<T>): AsyncCollection<T>;
16
+ static fromAsyncIterable<T>(source: AsyncIterable<T>): AsyncCollection<T>;
17
+ static range(start: number, end: number, step?: number): AsyncCollection<number>;
18
+ static empty<T>(): AsyncCollection<T>;
19
+ toArray(): Promise<T[]>;
20
+ collect(): Promise<Collection<T>>;
21
+ toJson(): Promise<string>;
22
+ count(): Promise<number>;
23
+ first(predicate?: (item: T, index: number) => boolean | Promise<boolean>): Promise<T | undefined>;
24
+ last(predicate?: (item: T, index: number) => boolean | Promise<boolean>): Promise<T | undefined>;
25
+ every(predicate: (item: T, index: number) => boolean | Promise<boolean>): Promise<boolean>;
26
+ some(predicate: (item: T, index: number) => boolean | Promise<boolean>): Promise<boolean>;
27
+ reduce<R>(fn: (carry: R, item: T, index: number) => R | Promise<R>, initial: R): Promise<R>;
28
+ forEach(fn: (item: T, index: number) => void | Promise<void>): Promise<void>;
29
+ /**
30
+ * Concurrent each. Tasks run with bounded parallelism. Use `forEach` if you
31
+ * need strict ordering; this method does not preserve completion order.
32
+ */
33
+ eachAsync(fn: (item: T, index: number) => void | Promise<void>, options?: {
34
+ concurrency?: number;
35
+ }): Promise<void>;
36
+ map<R>(fn: (item: T, index: number) => R | Promise<R>): AsyncCollection<R>;
37
+ /**
38
+ * Concurrent map: returns a NEW AsyncCollection backed by a buffered queue.
39
+ * Up to `concurrency` callbacks run in parallel; results emerge in source
40
+ * order. Memory grows with the gap between fastest and slowest task.
41
+ */
42
+ mapAsync<R>(fn: (item: T, index: number) => Promise<R> | R, options?: {
43
+ concurrency?: number;
44
+ }): AsyncCollection<R>;
45
+ filter(predicate: (item: T, index: number) => boolean | Promise<boolean>): AsyncCollection<T>;
46
+ /** Concurrent filter — predicate runs in parallel; output stays in source order. */
47
+ filterAsync(predicate: (item: T, index: number) => Promise<boolean> | boolean, options?: {
48
+ concurrency?: number;
49
+ }): AsyncCollection<T>;
50
+ flatMap<R>(fn: (item: T, index: number) => Iterable<R> | AsyncIterable<R> | Promise<Iterable<R>>): AsyncCollection<R>;
51
+ take(count: number): AsyncCollection<T>;
52
+ skip(count: number): AsyncCollection<T>;
53
+ takeWhile(predicate: (item: T, index: number) => boolean | Promise<boolean>): AsyncCollection<T>;
54
+ skipWhile(predicate: (item: T, index: number) => boolean | Promise<boolean>): AsyncCollection<T>;
55
+ chunk(size: number): AsyncCollection<T[]>;
56
+ tap(fn: (item: T, index: number) => void | Promise<void>): AsyncCollection<T>;
57
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Run `fn` against each item with bounded parallelism. Results are returned
3
+ * in source order regardless of completion order. If any task rejects, the
4
+ * remaining in-flight tasks are awaited and the first rejection is rethrown.
5
+ */
6
+ export declare function mapWithConcurrency<T, R>(source: AsyncIterable<T> | Iterable<T>, concurrency: number, fn: (item: T, index: number) => Promise<R> | R): Promise<R[]>;
@@ -0,0 +1,3 @@
1
+ export { AsyncCollection } from '../../async/AsyncCollection';
2
+ export type { AsyncSource } from '../../async/AsyncCollection';
3
+ export { mapWithConcurrency } from '../../async/concurrent';
@@ -0,0 +1,274 @@
1
+ import { Enumerable } from '../../contracts/Enumerable';
2
+ import { MacroableTarget } from '../../macros/Macroable';
3
+ import { ClassConstructor, Comparator, Operator, Predicate, SortDirection } from '../../support/types';
4
+ import { RetrieverInput } from '../../support/valueRetriever';
5
+ import * as ops from '@/operations';
6
+ type RI<T, R = unknown> = RetrieverInput<T, R>;
7
+ /**
8
+ * Callable shape for the `max`/`min` higher-order getters. With no argument the
9
+ * extent of the elements themselves is returned (`T | undefined`); a callback
10
+ * narrows to its own return type; a string key falls back to `number` since the
11
+ * field type cannot be known statically. The property form (`coll.max.votes`)
12
+ * works at runtime but is not modelled here.
13
+ */
14
+ interface ExtentFn<T> {
15
+ (): T | undefined;
16
+ <R>(by: (item: T, index: number) => R): R | undefined;
17
+ (by: string): number | undefined;
18
+ }
19
+ /**
20
+ * Eager Laravel-style collection. Holds an in-memory `T[]` and exposes
21
+ * a fluent, chainable API. All methods that return a new collection are
22
+ * non-mutating; mutating methods (`push`, `pop`, `shift`, `forget`, `pull`,
23
+ * `splice`, `transform`, `put`) update `this.items` in place to match Laravel.
24
+ */
25
+ export declare class Collection<T> implements Enumerable<T> {
26
+ protected items: T[];
27
+ constructor(items?: Iterable<T> | ArrayLike<T> | null | undefined);
28
+ [Symbol.iterator](): IterableIterator<T>;
29
+ get [Symbol.toStringTag](): string;
30
+ get length(): number;
31
+ static make<T>(items?: Iterable<T> | ArrayLike<T>): Collection<T>;
32
+ static fromJson<T>(json: string): Collection<T>;
33
+ static times<T>(count: number, factory: (n: number) => T): Collection<T>;
34
+ static range(start: number, end: number, step?: number): Collection<number>;
35
+ static wrap<T>(value: T | T[] | Collection<T> | null | undefined): Collection<T>;
36
+ static unwrap<T>(value: T | T[] | Collection<T>): T | T[];
37
+ static empty<T>(): Collection<T>;
38
+ static fromEntries<V>(entries: Iterable<readonly [string, V]>): Collection<Record<string, V>>;
39
+ static fromMap<K, V>(map: Map<K, V>): Collection<[K, V]>;
40
+ static fromSet<T>(set: Set<T>): Collection<T>;
41
+ get sum(): (by?: RI<T, number> | string) => number;
42
+ get average(): (by?: RI<T, number> | string) => number;
43
+ get avg(): (by?: RI<T, number> | string) => number;
44
+ get max(): ExtentFn<T>;
45
+ get min(): ExtentFn<T>;
46
+ all(): T[];
47
+ first(predicate?: Predicate<T>): T | undefined;
48
+ firstOrFail(predicate?: Predicate<T>): T;
49
+ firstWhere(key: string, ...rest: readonly unknown[]): T | undefined;
50
+ last(predicate?: Predicate<T>): T | undefined;
51
+ get(index: number, defaultValue?: T | (() => T)): T | undefined;
52
+ value<R = unknown>(key: string): R | undefined;
53
+ sole(predicate?: Predicate<T> | string, expected?: unknown): T;
54
+ after(target: T | string | Predicate<T>, strict?: boolean): T | undefined;
55
+ before(target: T | string | Predicate<T>, strict?: boolean): T | undefined;
56
+ random(): T | undefined;
57
+ random(count: number | ((c: this) => number)): Collection<T>;
58
+ /**
59
+ * `contains(value)` — loose match on whole item.
60
+ * `contains(predicate)` — first-match callback.
61
+ * `contains(key, value)` — match on object property.
62
+ * `contains(shape)` — partial-shape match.
63
+ */
64
+ contains(target: unknown, ...rest: readonly unknown[]): boolean;
65
+ containsStrict(target: unknown, ...rest: readonly unknown[]): boolean;
66
+ doesntContain(target: unknown, ...rest: readonly unknown[]): boolean;
67
+ doesntContainStrict(target: unknown, ...rest: readonly unknown[]): boolean;
68
+ containsOneItem(predicate?: Predicate<T>): boolean;
69
+ every(predicate: Predicate<T>): boolean;
70
+ some(predicate: Predicate<T>): boolean;
71
+ search(target: T | Predicate<T>, strict?: boolean): number | false;
72
+ has(key: string | readonly string[]): boolean;
73
+ hasAny(keys: readonly string[]): boolean;
74
+ hasMany(predicate?: Predicate<T>): boolean;
75
+ hasSole(predicate?: Predicate<T>): boolean;
76
+ isEmpty(): boolean;
77
+ isNotEmpty(): boolean;
78
+ count(): number;
79
+ countBy(by?: RI<T>): Record<string, number>;
80
+ filter<S extends T>(predicate: (item: T, index: number) => item is S): Collection<S>;
81
+ filter(predicate?: (item: T, index: number) => unknown): Collection<T>;
82
+ reject<S extends T>(predicate: (item: T, index: number) => item is S): Collection<Exclude<T, S>>;
83
+ reject(predicate: (item: T, index: number) => unknown): Collection<T>;
84
+ where(key: string, ...rest: readonly unknown[]): Collection<T>;
85
+ whereStrict(key: string, value: unknown): Collection<T>;
86
+ whereIn(key: string, values: readonly unknown[]): Collection<T>;
87
+ whereInStrict(key: string, values: readonly unknown[]): Collection<T>;
88
+ whereNotIn(key: string, values: readonly unknown[]): Collection<T>;
89
+ whereNotInStrict(key: string, values: readonly unknown[]): Collection<T>;
90
+ whereBetween(key: string, range: readonly [unknown, unknown]): Collection<T>;
91
+ whereNotBetween(key: string, range: readonly [unknown, unknown]): Collection<T>;
92
+ whereNull(key: string): Collection<T>;
93
+ whereNotNull(key: string): Collection<T>;
94
+ /**
95
+ * Keep items whose `key` value matches an SQL-`LIKE` pattern, where `%`
96
+ * matches any run of characters and `_` matches a single one. Case-insensitive
97
+ * unless `caseSensitive` is `true`.
98
+ */
99
+ whereLike(key: string, pattern: string, caseSensitive?: boolean): Collection<T>;
100
+ /** Inverse of {@link whereLike}. */
101
+ whereNotLike(key: string, pattern: string, caseSensitive?: boolean): Collection<T>;
102
+ /** Strip `null`/`undefined` from the collection and narrow the element type. */
103
+ compact(): Collection<NonNullable<T>>;
104
+ whereInstanceOf<R>(Ctor: ClassConstructor<R> | (abstract new (...args: never[]) => R)): Collection<R>;
105
+ map<R>(fn: (item: T, index: number) => R): Collection<R>;
106
+ mapInto<R>(Ctor: ClassConstructor<R, [T]>): Collection<R>;
107
+ mapSpread<R>(fn: (...args: T extends readonly unknown[] ? T : never) => R): Collection<R>;
108
+ mapToGroups<K extends PropertyKey, V>(fn: (item: T, index: number) => readonly [K, V]): Record<K, V[]>;
109
+ mapWithKeys<K extends PropertyKey, V>(fn: (item: T, index: number) => readonly [K, V]): Record<K, V>;
110
+ flatMap<R>(fn: (item: T, index: number) => R | readonly R[]): Collection<R>;
111
+ flatten(depth?: number): Collection<unknown>;
112
+ collapse<U>(this: Collection<readonly U[] | U>): Collection<U>;
113
+ collapseWithKeys(): Collection<Record<string, unknown>>;
114
+ flip(): Collection<Record<string, number>>;
115
+ pluck(key: string): Collection<unknown>;
116
+ pluck(key: string, keyBy: string): Record<string, unknown>;
117
+ /** In-place variant of `map`. */
118
+ transform(fn: (item: T, index: number) => T): this;
119
+ replace(replacements: Record<number, T>): Collection<T>;
120
+ replaceRecursive(patches: readonly unknown[]): Collection<T>;
121
+ sort(comparator?: Comparator<T>): Collection<T>;
122
+ sortDesc(): Collection<T>;
123
+ sortBy(spec: ops.SortBySpec<T> | readonly ops.SortBySpec<T>[]): Collection<T>;
124
+ sortByDesc(spec: ops.SortBySpec<T>): Collection<T>;
125
+ sortKeys(): Collection<T>;
126
+ sortKeysDesc(): Collection<T>;
127
+ sortKeysUsing(comparator: (a: string, b: string) => number): Collection<T>;
128
+ reverse(): Collection<T>;
129
+ shuffle(random?: () => number): Collection<T>;
130
+ sumBy(by?: RI<T, number>): number;
131
+ averageBy(by?: RI<T, number>): number;
132
+ avgBy(by?: RI<T, number>): number;
133
+ maxBy<R = number>(by?: RI<T, R>): R | undefined;
134
+ minBy<R = number>(by?: RI<T, R>): R | undefined;
135
+ median(by?: RI<T, number>): number | undefined;
136
+ mode(by?: RI<T>): unknown[] | undefined;
137
+ percentage(predicate: Predicate<T>, precision?: number): number;
138
+ chunk(size: number): Collection<Collection<T>>;
139
+ chunkWhile(predicate: (item: T, key: number, chunk: readonly T[]) => boolean): Collection<Collection<T>>;
140
+ sliding(size: number, step?: number): Collection<Collection<T>>;
141
+ split(groups: number): Collection<Collection<T>>;
142
+ splitIn(groups: number): Collection<Collection<T>>;
143
+ partition<S extends T>(predicate: (item: T, index: number) => item is S): [Collection<S>, Collection<Exclude<T, S>>];
144
+ partition(predicate: (item: T, index: number) => unknown): [Collection<T>, Collection<T>];
145
+ forPage(page: number, perPage: number): Collection<T>;
146
+ nth(step: number, offset?: number): Collection<T>;
147
+ groupBy(by: RI<T, PropertyKey | readonly PropertyKey[]>): Record<PropertyKey, T[]>;
148
+ groupByMany(groupers: readonly RI<T>[]): Record<PropertyKey, unknown>;
149
+ keyBy(by: RI<T, PropertyKey>): Record<PropertyKey, T>;
150
+ take(count: number): Collection<T>;
151
+ takeUntil(target: T | Predicate<T>): Collection<T>;
152
+ takeWhile(predicate: Predicate<T>): Collection<T>;
153
+ skip(count: number): Collection<T>;
154
+ skipUntil(target: T | Predicate<T>): Collection<T>;
155
+ skipWhile(predicate: Predicate<T>): Collection<T>;
156
+ slice(start: number, length?: number): Collection<T>;
157
+ push(...values: T[]): this;
158
+ prepend(value: T): this;
159
+ pop(): T | undefined;
160
+ pop(count: number): Collection<T>;
161
+ shift(): T | undefined;
162
+ shift(count: number): Collection<T>;
163
+ pull(target: T): T | undefined;
164
+ forget(keys: number | string | readonly (number | string)[]): this;
165
+ splice(start: number, deleteCount?: number, ...replacements: T[]): Collection<T>;
166
+ put<K extends keyof T & string>(key: K, value: T[K]): Collection<T>;
167
+ concat<U>(other: readonly U[] | Collection<U>): Collection<T | U>;
168
+ merge<U>(...sources: readonly (readonly U[] | Collection<U>)[]): Collection<T | U>;
169
+ mergeRecursive(...sources: readonly (readonly T[] | Collection<T>)[]): Collection<T>;
170
+ /** Append items from `other` that are not already present (deep-equality dedupe). */
171
+ union(other: readonly T[] | Collection<T>): Collection<T>;
172
+ diff(other: readonly T[] | Collection<T>): Collection<T>;
173
+ diffAssoc(other: readonly Partial<T>[] | Collection<Partial<T>>): Collection<T>;
174
+ diffAssocUsing(other: readonly T[] | Collection<T>, comparator: (a: T, b: T) => number): Collection<T>;
175
+ diffKeys(otherKeys: readonly string[]): Collection<T>;
176
+ intersect(other: readonly T[] | Collection<T>): Collection<T>;
177
+ intersectUsing(other: readonly T[] | Collection<T>, comparator: (a: T, b: T) => number): Collection<T>;
178
+ intersectAssoc(other: readonly Partial<T>[] | Collection<Partial<T>>): Collection<T>;
179
+ intersectAssocUsing(other: Record<string, unknown>, comparator: (a: string, b: string) => number): Collection<T>;
180
+ intersectByKeys(keys: readonly string[]): Collection<T>;
181
+ crossJoin<U>(...others: readonly (readonly U[])[]): Collection<(T | U)[]>;
182
+ unique(by?: RI<T>): Collection<T>;
183
+ uniqueStrict(by?: RI<T>): Collection<T>;
184
+ duplicates(by?: RI<T>): Record<number, T>;
185
+ duplicatesStrict(by?: RI<T>): Record<number, T>;
186
+ keys(): Collection<string>;
187
+ values(): Collection<T>;
188
+ only(keys: readonly string[]): Collection<Partial<T>>;
189
+ except(keys: readonly string[]): Collection<Partial<T>>;
190
+ select<K extends keyof T>(keys: K | readonly K[]): Collection<Pick<T, K>>;
191
+ dot(): Record<string, unknown>;
192
+ undot(): Collection<Record<string, unknown>>;
193
+ each(callback: (item: T, index: number) => void | false): this;
194
+ eachSpread(callback: (...args: T extends readonly unknown[] ? T : never) => void | false): this;
195
+ tapEach(callback: (item: T, index: number) => void): this;
196
+ reduce<R>(fn: (carry: R, item: T, index: number) => R, initial: R): R;
197
+ reduce(fn: (carry: T, item: T, index: number) => T): T;
198
+ reduceSpread<R extends readonly unknown[]>(fn: (...args: readonly unknown[]) => R, ...initials: R): R;
199
+ pipe<R>(callback: (collection: this) => R): R;
200
+ pipeInto<R>(Ctor: ClassConstructor<R, [this]>): R;
201
+ pipeThrough(pipes: readonly ((value: unknown) => unknown)[]): unknown;
202
+ tap(callback: (collection: this) => void): this;
203
+ implode(glueOrFormatter: string | ((item: T, index: number) => string), keyOrSeparator?: string): string;
204
+ join(glue: string, finalGlue?: string): string;
205
+ when(condition: boolean | ((c: this) => boolean), callback: (c: this, value: boolean) => this | void, fallback?: (c: this, value: boolean) => this | void): this;
206
+ unless(condition: boolean | ((c: this) => boolean), callback: (c: this, value: boolean) => this | void, fallback?: (c: this, value: boolean) => this | void): this;
207
+ whenEmpty(callback: (c: this) => this | void, fallback?: (c: this) => this | void): this;
208
+ whenNotEmpty(callback: (c: this) => this | void, fallback?: (c: this) => this | void): this;
209
+ unlessEmpty(callback: (c: this) => this | void): this;
210
+ unlessNotEmpty(callback: (c: this) => this | void): this;
211
+ ensure(...types: ReadonlyArray<ClassConstructor<unknown> | string>): this;
212
+ pad(size: number, value: T): Collection<T>;
213
+ multiply(factor: number): Collection<T>;
214
+ repeat(factor: number): Collection<T>;
215
+ times(factor: number): Collection<T>;
216
+ combine<V>(values: readonly V[] | Collection<V>): Record<string, V>;
217
+ zip<U>(values: readonly U[] | Collection<U>): Collection<[T, U | undefined]>;
218
+ wrap(): Collection<T[]>;
219
+ unwrap(): T | T[];
220
+ range(start: number, end: number, step?: number): Collection<number>;
221
+ toArray(): T[];
222
+ toJson(): string;
223
+ toPrettyJson(indent?: number): string;
224
+ toMap<K, V>(keyFn: (item: T, i: number) => K, valueFn: (item: T, i: number) => V): Map<K, V>;
225
+ toSet(): Set<T>;
226
+ toJSON(): T[];
227
+ toString(): string;
228
+ valueOf(): T[];
229
+ [Symbol.toPrimitive](hint: string): string | number | T[];
230
+ collect(): Collection<T>;
231
+ clone(): Collection<T>;
232
+ /**
233
+ * Returns a LazyCollection. Wired by `setLazyConstructor` at module load
234
+ * time to avoid an ESM circular import between Collection ↔ LazyCollection.
235
+ */
236
+ lazy(): unknown;
237
+ dump(): this;
238
+ dd(): never;
239
+ variance(by?: RI<T, number>): number | undefined;
240
+ sampleVariance(by?: RI<T, number>): number | undefined;
241
+ stddev(by?: RI<T, number>): number | undefined;
242
+ sampleStddev(by?: RI<T, number>): number | undefined;
243
+ quantile(q: number, by?: RI<T, number>): number | undefined;
244
+ percentileAt(p: number, by?: RI<T, number>): number | undefined;
245
+ histogram(bins: number, options?: {
246
+ by?: RI<T, number>;
247
+ range?: readonly [number, number];
248
+ }): ops.HistogramBin[];
249
+ correlation(xBy: RI<T, number>, yBy: RI<T, number>): number | undefined;
250
+ joinOn<R, K extends PropertyKey>(right: readonly R[] | Collection<R>, leftKey: RI<T, K>, rightKey: RI<R, K>): Collection<[T, R]>;
251
+ joinOn<R, K extends PropertyKey, M>(right: readonly R[] | Collection<R>, leftKey: RI<T, K>, rightKey: RI<R, K>, merge: (l: T, r: R) => M): Collection<M>;
252
+ leftJoin<R, K extends PropertyKey>(right: readonly R[] | Collection<R>, leftKey: RI<T, K>, rightKey: RI<R, K>): Collection<[T, R | undefined]>;
253
+ leftJoin<R, K extends PropertyKey, M>(right: readonly R[] | Collection<R>, leftKey: RI<T, K>, rightKey: RI<R, K>, merge: (l: T, r: R | undefined) => M): Collection<M>;
254
+ rightJoin<R, K extends PropertyKey>(right: readonly R[] | Collection<R>, leftKey: RI<T, K>, rightKey: RI<R, K>): Collection<[T | undefined, R]>;
255
+ rightJoin<R, K extends PropertyKey, M>(right: readonly R[] | Collection<R>, leftKey: RI<T, K>, rightKey: RI<R, K>, merge: (l: T | undefined, r: R) => M): Collection<M>;
256
+ outerJoin<R, K extends PropertyKey>(right: readonly R[] | Collection<R>, leftKey: RI<T, K>, rightKey: RI<R, K>): Collection<[T | undefined, R | undefined]>;
257
+ outerJoin<R, K extends PropertyKey, M>(right: readonly R[] | Collection<R>, leftKey: RI<T, K>, rightKey: RI<R, K>, merge: (l: T | undefined, r: R | undefined) => M): Collection<M>;
258
+ scan<R>(fn: (carry: R, item: T, index: number) => R, initial: R): Collection<R>;
259
+ pairwise(): Collection<[T, T]>;
260
+ enumerate(start?: number): Collection<[number, T]>;
261
+ cycle(n?: number): Collection<T>;
262
+ interleave(...others: readonly (readonly T[] | Collection<T>)[]): Collection<T>;
263
+ permutations(r?: number): Collection<T[]>;
264
+ combinations(r: number): Collection<T[]>;
265
+ powerSet(): Collection<T[]>;
266
+ static macro: MacroableTarget['macro'];
267
+ static hasMacro: MacroableTarget['hasMacro'];
268
+ static flushMacros: MacroableTarget['flushMacros'];
269
+ }
270
+ type LazyCtor = new <U>(items: Iterable<U>) => {
271
+ all(): U[];
272
+ } & Iterable<U>;
273
+ export declare function setLazyConstructor(ctor: LazyCtor): void;
274
+ export type { Operator, SortDirection, Predicate, RetrieverInput };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Methods that support higher-order messages on a collection.
3
+ * Mirrors Laravel's `proxies` array on Collection.php.
4
+ */
5
+ export declare const HIGHER_ORDER_TARGETS: readonly ["average", "avg", "contains", "doesntContain", "each", "every", "filter", "first", "flatMap", "groupBy", "keyBy", "map", "max", "min", "partition", "reject", "skipUntil", "skipWhile", "some", "sortBy", "sortByDesc", "sum", "takeUntil", "takeWhile", "unique"];
6
+ export type HigherOrderTarget = (typeof HIGHER_ORDER_TARGETS)[number];
7
+ interface HigherOrderHost {
8
+ [key: string]: unknown;
9
+ }
10
+ /**
11
+ * Build a proxy so `collection.each.foo()` becomes
12
+ * `collection.each(item => item.foo())`, and `collection.sum.votes` becomes
13
+ * `collection.sum(item => item.votes)`.
14
+ *
15
+ * Returns a Proxy<T> — calling a method on it produces the corresponding
16
+ * shorthand callback wired into the host method.
17
+ */
18
+ export declare function createHigherOrderProxy<T extends object, H extends HigherOrderHost>(host: H, method: HigherOrderTarget): T;
19
+ export {};