es-toolkit 1.52.0-dev.2136 → 1.52.0-dev.2139

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.
@@ -1,4 +1,4 @@
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._={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(...e){if(e.length===0)return[[]];let t=1;for(let n=0;n<e.length;n++)t*=e[n].length;if(t===0)return[];let n=e.length,r=Array(t);for(let i=0;i<t;i++){let t=Array(n),a=i;for(let r=n-1;r>=0;r--){let n=e[r],i=n.length;t[r]=n[a%i],a=Math.floor(a/i)}r[i]=t}return r}function n(e,t){if(!Number.isInteger(t)||t<=0)throw Error(`Size must be an integer greater than zero.`);let n=Math.ceil(e.length/t),r=Array(n);for(let i=0;i<n;i++){let n=i*t,a=n+t;r[i]=e.slice(n,a)}return r}function r(e,t){let n=[],r;for(let i=0;i<e.length;i++){let a=t(e[i]);i===0||a!==r?n.push([e[i]]):n[n.length-1].push(e[i]),r=a}return n}function i(e,t){if(!Number.isInteger(t)||t<0)throw Error(`r must be a non-negative integer.`);let n=e.length;if(t>n)return[];if(t===0)return[[]];let r=Array(t);for(let e=0;e<t;e++)r[e]=e;let i=[];for(;;){let a=Array(t);for(let n=0;n<t;n++)a[n]=e[r[n]];i.push(a);let o=t-1;for(;o>=0&&r[o]===o+n-t;)o--;if(o<0)return i;r[o]++;for(let e=o+1;e<t;e++)r[e]=r[e-1]+1}}function a(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];r&&t.push(r)}return t}function o(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function s(e,t,n){let r=new Set(t.map(e=>n(e)));return e.filter(e=>!r.has(n(e)))}function c(e,t,n){return e.filter(e=>t.every(t=>!n(e,t)))}function l(e,t){return t=Math.max(t,0),e.slice(t)}function u(e,t){return t=Math.min(-t,0),t===0?e.slice():e.slice(0,t)}function d(e,t){for(let n=e.length-1;n>=0;n--)if(!t(e[n],n,e))return e.slice(0,n+1);return[]}function f(e,t){let n=e.findIndex((e,n,r)=>!t(e,n,r));return n===-1?[]:e.slice(n)}function p(e,t,n=0,r=e.length){let i=e.length,a=Math.max(n>=0?n:i+n,0),o=Math.min(r>=0?r:i+r,i);for(let n=a;n<o;n++)e[n]=t;return e}var m=class{capacity;available;deferredTasks=[];constructor(e){this.capacity=e,this.available=e}async acquire(){if(this.available>0){this.available--;return}return new Promise(e=>{this.deferredTasks.push(e)})}release(){let e=this.deferredTasks.shift();if(e!=null){e();return}this.available<this.capacity&&this.available++}};function h(e,t){let n=new m(t);return async function(...t){try{return await n.acquire(),await e.apply(this,t)}finally{n.release()}}}async function ee(e,t,n){n?.concurrency!=null&&(t=h(t,n.concurrency));let r=await Promise.all(e.map(t));return e.filter((e,t)=>r[t])}function te(e,t=1){let n=[],r=Math.floor(t),i=(e,t)=>{for(let a=0;a<e.length;a++){let o=e[a];Array.isArray(o)&&t<r?i(o,t+1):n.push(o)}};return i(e,0),n}async function ne(e,t,n){return n?.concurrency!=null&&(t=h(t,n.concurrency)),te(await Promise.all(e.map(t)))}async function re(e,t,n){n?.concurrency!=null&&(t=h(t,n.concurrency)),await Promise.all(e.map(t))}function ie(e){return e[0]}function ae(e){return e.slice(0,-1)}function oe(e,t){let n=new Set(t);return e.filter(e=>n.has(e))}function se(e,t,n){let r=[],i=new Set(t.map(n));for(let t=0;t<e.length;t++){let a=e[t],o=n(a);i.has(o)&&(r.push(a),i.delete(o))}return r}function ce(e,t,n){return e.filter(e=>t.some(t=>n(e,t)))}function le(e,t){return o(t,e).length===0}function ue(e,t,n){return c(t,e,n).length===0}function de(e){return e[e.length-1]}function fe(e,t,n){return n?.concurrency!=null&&(t=h(t,n.concurrency)),Promise.all(e.map(t))}function pe(e,t){let n=new Set(t),r=0;for(let t=0;t<e.length;t++)if(!n.has(e[t])){if(!Object.hasOwn(e,t)){delete e[r++];continue}e[r++]=e[t]}return e.length=r,e}async function me(e,t,n){let r=0;n??(n=e[0],r=1);let i=n;for(let n=r;n<e.length;n++)i=await t(i,e[n],n,e);return i}function he(e,t){let n=e.slice(),r=[],i=0;for(let a=0;a<e.length;a++){if(t(e[a],a,n)){r.push(e[a]);continue}if(!Object.hasOwn(e,a)){delete e[i++];continue}e[i++]=e[a]}return e.length=i,r}function ge(e){return e[Math.floor(Math.random()*e.length)]}function _e(e,t){if(t??(t=e,e=0),e>=t)throw Error(`Invalid input: The maximum value must be greater than the minimum value.`);return Math.random()*(t-e)+e}function ve(e,t){return Math.floor(_e(e,t))}function ye(e,t){if(t>e.length)throw Error(`Size must be less than or equal to the length of array.`);let n=Array(t),r=new Set;for(let i=e.length-t,a=0;i<e.length;i++,a++){let t=ve(0,i+1);r.has(t)&&(t=i),r.add(t),n[a]=e[t]}return n}function be(e){let t=e.slice();for(let e=t.length-1;e>=1;e--){let n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}function xe(e){return e.slice(1)}function Se(e,t){return e.slice(0,t)}function Ce(e,t){return t<=0||e.length===0?[]:e.slice(-t)}function we(e,t,n=0,r=e.length){let i=e.length,a=Math.max(n>=0?n:i+n,0),o=Math.min(r>=0?r:i+r,i),s=e.slice();for(let e=a;e<o;e++)s[e]=t;return s}function g(e){return[...new Set(e)]}function Te(e,t){let n=new Map;for(let r=0;r<e.length;r++){let i=e[r],a=t(i,r,e);n.has(a)||n.set(a,i)}return Array.from(n.values())}function Ee(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r];n.every(e=>!t(e,i))&&n.push(i)}return n}function De(e){let t=0;for(let n=0;n<e.length;n++)e[n].length>t&&(t=e[n].length);let n=Array(t);for(let r=0;r<t;r++){n[r]=Array(e.length);for(let t=0;t<e.length;t++)n[r][t]=e[t][r]}return n}function Oe(e,t,n=1,{partialWindows:r=!1}={}){if(t<=0||!Number.isInteger(t))throw Error(`Size must be a positive integer.`);if(n<=0||!Number.isInteger(n))throw Error(`Step must be a positive integer.`);let i=[],a=r?e.length:e.length-t+1;for(let r=0;r<a;r+=n)i.push(e.slice(r,r+t));return i}function ke(...e){let t=0;for(let n=0;n<e.length;n++)e[n].length>t&&(t=e[n].length);let n=e.length,r=Array(t);for(let i=0;i<t;++i){let t=Array(n);for(let r=0;r<n;++r)t[r]=e[r][i];r[i]=t}return r}let Ae=typeof globalThis==`object`&&globalThis||typeof window==`object`&&window||typeof self==`object`&&self||typeof global==`object`&&global||(function(){return this})(),je=Ae.DOMException===void 0?Error:Ae.DOMException;var Me=class extends je{constructor(e=`The operation was aborted`){super(e)}},Ne=class extends je{constructor(e=`The operation was timed out`){super(e)}};function Pe(e,t){if(!Number.isInteger(e)||e<0)throw Error(`n must be a non-negative integer.`);let n=0;return(...r)=>{if(++n>=e)return t(...r)}}function Fe(e,t){return function(...n){return e.apply(this,n.slice(0,t))}}async function Ie(){}function Le(e,t,{signal:n,edges:r}={}){let i,a=null,o=r!=null&&r.includes(`leading`),s=r==null||r.includes(`trailing`),c=()=>{a!==null&&(e.apply(i,a),i=void 0,a=null)},l=()=>{s&&c(),p()},u=null,d=()=>{u!=null&&clearTimeout(u),u=setTimeout(()=>{u=null,l()},t)},f=()=>{u!==null&&(clearTimeout(u),u=null)},p=()=>{f(),i=void 0,a=null},m=()=>{c()},h=function(...e){if(n?.aborted)return;i=this,a=e;let t=u==null;d(),o&&t&&c()};return h.schedule=d,h.cancel=p,h.flush=m,n?.addEventListener(`abort`,p,{once:!0}),h}function Re(...e){return function(...t){let n=e.length?e[0].apply(this,t):t[0];for(let t=1;t<e.length;t++)n=e[t].call(this,n);return n}}function ze(...e){return Re(...e.reverse())}function _(e){return e}function Be(e){return((...t)=>!e(...t))}function Ve(){}function He(e){let t=!1,n;return function(...r){return t||(t=!0,n=e.apply(this,r)),n}}function Ue(e,...t){return We(e,Ge,...t)}function We(e,t,...n){let r=function(...r){let i=0,a=n.slice().map(e=>e===t?r[i++]:e),o=r.slice(i);return e.apply(this,a.concat(o))};return e.prototype&&(r.prototype=Object.create(e.prototype)),r}let Ge=Symbol(`partial.placeholder`);Ue.placeholder=Ge;function Ke(e,...t){return qe(e,Je,...t)}function qe(e,t,...n){let r=function(...r){let i=n.filter(e=>e===t).length,a=Math.max(r.length-i,0),o=r.slice(0,a),s=a,c=n.slice().map(e=>e===t?r[s++]:e);return e.apply(this,o.concat(c))};return e.prototype&&(r.prototype=Object.create(e.prototype)),r}let Je=Symbol(`partialRight.placeholder`);Ke.placeholder=Je;function Ye(e,t=e.length-1){return function(...n){let r=n.slice(t),i=n.slice(0,t);for(;i.length<t;)i.push(void 0);return e.apply(this,[...i,r])}}function Xe(e,{signal:t}={}){return new Promise((n,r)=>{let i=()=>{r(new Me)},a=()=>{clearTimeout(o),i()};if(t?.aborted)return i();let o=setTimeout(()=>{t?.removeEventListener(`abort`,a),n()},e);t?.addEventListener(`abort`,a,{once:!0})})}let Ze=()=>!0;async function Qe(e,t){let n,r,i,a;typeof t==`number`?(n=0,r=t,i=void 0,a=Ze):(n=t?.delay??0,r=t?.retries??1/0,i=t?.signal,a=t?.shouldRetry??Ze);let o;for(let t=0;t<=r;t++){if(i?.aborted)throw o??Error(`The retry operation was aborted due to an abort signal.`);try{return await e()}catch(e){if(o=e,!a(e,t))throw e;t<r&&await Xe(typeof n==`function`?n(t,o):n)}}throw o}function $e(e,t,n){return e===t?0:(n-e)/(t-e)}function et(e,t,n){return n===1?t:e+(t-e)*n}function tt(e){if(e.length===0)return NaN;let t=e.slice().sort((e,t)=>e-t),n=Math.floor(t.length/2);return t.length%2==0?(t[n-1]+t[n])/2:t[n]}function nt(e,t){return tt(e.map(e=>t(e)))}function rt(e,t){if(Number.isNaN(Number(t)))throw Error(`Expected percentile to be a number but got "${t}".`);if(t<0)throw Error(`Expected percentile to be >= 0 but got "${t}".`);if(t>100)throw Error(`Expected percentile to be <= 100 but got "${t}".`);if(e.length===0)return NaN;let n=e.slice().sort((e,t)=>(Number.isNaN(e)?-1/0:e)-(Number.isNaN(t)?-1/0:t));return t===0?n[0]:n[Math.ceil(n.length*(t/100))-1]}function v(e,t,n=1){if(t??(t=e,e=0),!Number.isInteger(n)||n===0)throw Error(`The step value must be a non-zero integer.`);let r=Math.max(Math.ceil((t-e)/n),0),i=Array(r);for(let t=0;t<r;t++)i[t]=e+t*n;return i}function it(e){return e==null||typeof e!=`object`&&typeof e!=`function`}function at(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ot(e){if(it(e))return e;if(Array.isArray(e)||at(e)||e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)return e.slice(0);let t=Object.getPrototypeOf(e);if(t==null)return Object.assign(Object.create(t),e);let n=t.constructor;if(e instanceof Date||e instanceof Map||e instanceof Set)return new n(e);if(e instanceof RegExp){let t=new n(e);return t.lastIndex=e.lastIndex,t}if(e instanceof DataView)return new n(e.buffer.slice(0));if(e instanceof Error){let t;return t=e instanceof AggregateError?new n(e.errors,e.message,{cause:e.cause}):new n(e.message,{cause:e.cause}),t.stack=e.stack,Object.assign(t,e),t}return typeof File<`u`&&e instanceof File?new n([e],e.name,{type:e.type,lastModified:e.lastModified}):typeof e==`object`?Object.assign(Object.create(t),e):e}function st(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function y(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}let ct=`[object RegExp]`,lt=`[object String]`,ut=`[object Number]`,dt=`[object Boolean]`,ft=`[object Arguments]`,pt=`[object Symbol]`,mt=`[object Date]`,ht=`[object Map]`,gt=`[object Set]`,_t=`[object Array]`,vt=`[object ArrayBuffer]`,yt=`[object Object]`,bt=`[object DataView]`,xt=`[object Uint8Array]`,St=`[object Uint8ClampedArray]`,Ct=`[object Uint16Array]`,wt=`[object Uint32Array]`,Tt=`[object Int8Array]`,Et=`[object Int16Array]`,Dt=`[object Int32Array]`,Ot=`[object Float32Array]`,kt=`[object Float64Array]`;function b(e){return Ae.Buffer!==void 0&&Ae.Buffer.isBuffer(e)}function At(e,t){return x(e,void 0,e,new Map,t)}function x(e,t,n,r=new Map,i=void 0){let a=i?.(e,t,n,r);if(a!==void 0)return a;if(it(e))return e;if(r.has(e))return r.get(e);if(Array.isArray(e)){let t=Array(e.length);r.set(e,t);for(let a=0;a<e.length;a++)t[a]=x(e[a],a,n,r,i);return Object.hasOwn(e,`index`)&&(t.index=e.index),Object.hasOwn(e,`input`)&&(t.input=e.input),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp){let t=new RegExp(e.source,e.flags);return t.lastIndex=e.lastIndex,t}if(e instanceof Map){let t=new Map;r.set(e,t);for(let[a,o]of e)t.set(a,x(o,a,n,r,i));return t}if(e instanceof Set){let t=new Set;r.set(e,t);for(let a of e)t.add(x(a,void 0,n,r,i));return t}if(b(e))return e.subarray();if(at(e)){let t=new(Object.getPrototypeOf(e)).constructor(e.length);r.set(e,t);for(let a=0;a<e.length;a++)t[a]=x(e[a],a,n,r,i);return t}if(e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)return e.slice(0);if(e instanceof DataView){let t=new DataView(e.buffer.slice(0),e.byteOffset,e.byteLength);return r.set(e,t),S(t,e,n,r,i),t}if(typeof File<`u`&&e instanceof File){let t=new File([e],e.name,{type:e.type});return r.set(e,t),S(t,e,n,r,i),t}if(typeof Blob<`u`&&e instanceof Blob){let t=new Blob([e],{type:e.type});return r.set(e,t),S(t,e,n,r,i),t}if(e instanceof Error){let t=structuredClone(e);return r.set(e,t),t.message=e.message,t.name=e.name,t.stack=e.stack,t.cause=e.cause,t.constructor=e.constructor,S(t,e,n,r,i),t}if(e instanceof Boolean){let t=new Boolean(e.valueOf());return r.set(e,t),S(t,e,n,r,i),t}if(e instanceof Number){let t=new Number(e.valueOf());return r.set(e,t),S(t,e,n,r,i),t}if(e instanceof String){let t=new String(e.valueOf());return r.set(e,t),S(t,e,n,r,i),t}if(typeof e==`object`&&jt(e)){let t=Object.create(Object.getPrototypeOf(e));return r.set(e,t),S(t,e,n,r,i),t}return e}function S(e,t,n=e,r,i){let a=[...Object.keys(t),...st(t)];for(let o=0;o<a.length;o++){let s=a[o],c=Object.getOwnPropertyDescriptor(e,s);(c==null||c.writable)&&(e[s]=x(t[s],s,n,r,i))}}function jt(e){switch(y(e)){case ft:case _t:case vt:case bt:case dt:case mt:case Ot:case kt:case Tt:case Et:case Dt:case ht:case ut:case yt:case ct:case gt:case lt:case pt:case xt:case St:case Ct:case wt:return!0;default:return!1}}function Mt(e){return x(e,void 0,e,new Map,void 0)}function Nt(e){if(typeof e!=`object`||!e)return e;Object.freeze(e);let t=Object.keys(e);for(let n=0;n<t.length;n++){let r=e[t[n]];typeof r==`object`&&r&&!Object.isFrozen(r)&&Nt(r)}return e}function Pt(e,t){return Object.keys(e).find(n=>t(e[n],n,e))}function C(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype||Object.getPrototypeOf(t)===null?Object.prototype.toString.call(e)===`[object Object]`:!1}function Ft(e,{delimiter:t=`.`,preserveArrays:n=!1}={}){return It(e,``,t,n)}function It(e,t,n,r){let i={},a=Object.keys(e);for(let o=0;o<a.length;o++){let s=a[o],c=e[s],l=t?`${t}${n}${s}`:s;if(C(c)&&Object.keys(c).length>0){Object.assign(i,It(c,l,n,r));continue}if(Array.isArray(c)&&!r&&c.length>0){Object.assign(i,It(c,l,n,r));continue}i[l]=c}return i}function Lt(e){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=e[i];t[a]=i}return t}function Rt(e,t){let n={},r=Object.keys(e);for(let i=0;i<r.length;i++){let a=r[i],o=e[a];n[t(o,a,e)]=o}return n}async function zt(e,t,n){let r={},i=Object.keys(e);return n?.concurrency&&(t=h(t,n.concurrency)),await Promise.all(i.map(async n=>{let i=e[n];r[await t(i,n,e)]=i})),r}function Bt(e,t){let n={},r=Object.keys(e);for(let i=0;i<r.length;i++){let a=r[i],o=e[a];n[a]=t(o,a,e)}return n}async function Vt(e,t,n){let r={},i=Object.keys(e);return n?.concurrency&&(t=h(t,n.concurrency)),await Promise.all(i.map(async n=>{r[n]=await t(e[n],n,e)})),r}function Ht(e){return C(e)||Array.isArray(e)}function w(e){return e===`__proto__`}function Ut(e,t,n){let r=Object.keys(t);for(let i=0;i<r.length;i++){let a=r[i];if(w(a))continue;let o=t[a],s=e[a],c=n(s,o,a,e,t);c===void 0?Ht(o)&&Ht(s)?e[a]=Ut(s,o,n):Array.isArray(o)?e[a]=Ut([],o,n):C(o)?e[a]=Ut({},o,n):(s===void 0||o!==void 0)&&(e[a]=o):e[a]=c}return e}function Wt(e,t){let n=Object.keys(e).sort(t),r={};for(let t=0;t<n.length;t++){let i=n[t];r[i]=e[i]}return r}function T(e){return Array.isArray(e)}function Gt(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}let Kt=/\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;function qt(e){return Array.from(e.match(Kt)??[])}function Jt(e){let t=qt(e);if(t.length===0)return``;let[n,...r]=t;return`${n.toLowerCase()}${r.map(e=>Gt(e)).join(``)}`}function Yt(e){if(T(e))return e.map(e=>Yt(e));if(C(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=Jt(i);t[a]=Yt(e[i])}return t}return e}function E(e){if(typeof e!=`object`||!e)return!1;if(Object.getPrototypeOf(e)===null)return!0;if(Object.prototype.toString.call(e)!==`[object Object]`){let t=e[Symbol.toStringTag];return t==null||!Object.getOwnPropertyDescriptor(e,Symbol.toStringTag)?.writable?!1:e.toString()===`[object ${t}]`}let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function Xt(e){return qt(e).map(e=>e.toUpperCase()).join(`_`)}function Zt(e){if(T(e))return e.map(e=>Zt(e));if(E(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=Xt(i);t[a]=Zt(e[i])}return t}return e}function Qt(e){return qt(e).map(e=>e.toLowerCase()).join(`-`)}function $t(e){if(T(e))return e.map(e=>$t(e));if(E(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=Qt(i);t[a]=$t(e[i])}return t}return e}function en(e,t){return Ut(Mt(e),t,function e(t,n){if(Ht(n)&&Ht(t))return Ut(ot(t),n,e);if(Array.isArray(n))return Ut([],n,e);if(C(n))return Ut({},n,e)})}function tn(e){return qt(e).map(e=>Gt(e)).join(``)}function nn(e){if(T(e))return e.map(e=>nn(e));if(E(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=tn(i);t[a]=nn(e[i])}return t}return e}function rn(e){return qt(e).map(e=>e.toLowerCase()).join(`_`)}function an(e){if(T(e))return e.map(e=>an(e));if(E(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=rn(i);t[a]=an(e[i])}return t}return e}function on(e){return e instanceof ArrayBuffer}function sn(e){return typeof Blob>`u`?!1:e instanceof Blob}function cn(){return typeof window<`u`&&window?.document!=null}function ln(e){return e instanceof Date}function un(e){return C(e)&&Object.keys(e).length===0}function D(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function dn(e,t,n){return fn(e,t,void 0,void 0,void 0,void 0,n)}function fn(e,t,n,r,i,a,o){let s=o(e,t,n,r,i,a);if(s!==void 0)return s;if(typeof e==typeof t)switch(typeof e){case`bigint`:case`string`:case`boolean`:case`symbol`:case`undefined`:return e===t;case`number`:return e===t||Object.is(e,t);case`function`:return e===t;case`object`:return pn(e,t,a,o)}return pn(e,t,a,o)}function pn(e,t,n,r){if(Object.is(e,t))return!0;let i=y(e),a=y(t);if(i===`[object Arguments]`&&(i=yt),a===`[object Arguments]`&&(a=yt),i!==a)return!1;switch(i){case lt:return e.toString()===t.toString();case ut:return D(e.valueOf(),t.valueOf());case dt:case mt:case pt:return Object.is(e.valueOf(),t.valueOf());case ct:return e.source===t.source&&e.flags===t.flags;case`[object Function]`:return e===t}n??=new Map;let o=n.get(e),s=n.get(t);if(o!=null&&s!=null)return o===t;n.set(e,t),n.set(t,e);try{switch(i){case ht:if(e.size!==t.size)return!1;for(let[i,a]of e.entries())if(!t.has(i)||!fn(a,t.get(i),i,e,t,n,r))return!1;return!0;case gt:{if(e.size!==t.size)return!1;let i=Array.from(e.values()),a=Array.from(t.values());for(let o=0;o<i.length;o++){let s=i[o],c=a.findIndex(i=>fn(s,i,void 0,e,t,n,r));if(c===-1)return!1;a.splice(c,1)}return!0}case _t:case xt:case St:case Ct:case wt:case`[object BigUint64Array]`:case Tt:case Et:case Dt:case`[object BigInt64Array]`:case Ot:case kt:if(b(e)!==b(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!fn(e[i],t[i],i,e,t,n,r))return!1;return!0;case vt:return e.byteLength===t.byteLength?pn(new Uint8Array(e),new Uint8Array(t),n,r):!1;case bt:return e.byteLength!==t.byteLength||e.byteOffset!==t.byteOffset?!1:pn(new Uint8Array(e),new Uint8Array(t),n,r);case`[object Error]`:return e.name===t.name&&e.message===t.message;case yt:{if(!(pn(e.constructor,t.constructor,n,r)||C(e)&&C(t)))return!1;let i=[...Object.keys(e),...st(e)],a=[...Object.keys(t),...st(t)];if(i.length!==a.length)return!1;for(let a=0;a<i.length;a++){let o=i[a],s=e[o];if(!Object.hasOwn(t,o))return!1;let c=t[o];if(!fn(s,c,o,e,t,n,r))return!1}return!0}default:return!1}}finally{n.delete(e),n.delete(t)}}function mn(e,t){return dn(e,t,Ve)}function hn(e){return e instanceof Error}function gn(e){return typeof File>`u`?!1:sn(e)&&e instanceof File}function O(e){return typeof e==`function`}function _n(e){return e!=null&&typeof e[Symbol.iterator]==`function`}function vn(e){if(typeof e!=`string`)return!1;try{return JSON.parse(e),!0}catch{return!1}}function yn(e){switch(typeof e){case`object`:return e===null||bn(e)||xn(e);case`string`:case`number`:case`boolean`:return!0;default:return!1}}function bn(e){return Array.isArray(e)?e.every(e=>yn(e)):!1}function xn(e){if(!C(e))return!1;let t=Reflect.ownKeys(e);for(let n=0;n<t.length;n++){let r=t[n],i=e[r];if(typeof r!=`string`||!yn(i))return!1}return!0}function Sn(e){return Number.isSafeInteger(e)&&e>=0}function Cn(e){return e instanceof Map}function wn(e){return e==null}function Tn(){return typeof process<`u`&&process?.versions?.node!=null}function En(e){return e!=null}function Dn(e){return e===null}function On(e){return e instanceof Promise}function kn(e){return e instanceof RegExp}function An(e){return e instanceof Set}function jn(e){return typeof e==`symbol`}function Mn(e){return e===void 0}function Nn(e){return e instanceof WeakMap}function Pn(e){return e instanceof WeakSet}async function Fn(e){let t=Object.keys(e),n=await Promise.all(t.map(t=>e[t])),r={};for(let e=0;e<t.length;e++)r[t[e]]=n[e];return r}var In=class{semaphore=new m(1);get isLocked(){return this.semaphore.available===0}async acquire(){return this.semaphore.acquire()}release(){this.semaphore.release()}};function Ln(e,{signal:t}={}){return new Promise((n,r)=>{let i=()=>{clearTimeout(a)};if(t?.aborted)return;let a=setTimeout(()=>{t?.removeEventListener(`abort`,i),r(new Ne)},e);t?.addEventListener(`abort`,i,{once:!0})})}async function Rn(e,t,{signal:n}={}){return Promise.race([e(),Ln(t,{signal:n})])}let zn=new Map([[`Æ`,`Ae`],[`Ð`,`D`],[`Ø`,`O`],[`Þ`,`Th`],[`ß`,`ss`],[`æ`,`ae`],[`ð`,`d`],[`ø`,`o`],[`þ`,`th`],[`Đ`,`D`],[`đ`,`d`],[`Ħ`,`H`],[`ħ`,`h`],[`ı`,`i`],[`IJ`,`IJ`],[`ij`,`ij`],[`ĸ`,`k`],[`Ŀ`,`L`],[`ŀ`,`l`],[`Ł`,`L`],[`ł`,`l`],[`ʼn`,`'n`],[`Ŋ`,`N`],[`ŋ`,`n`],[`Œ`,`Oe`],[`œ`,`oe`],[`Ŧ`,`T`],[`ŧ`,`t`],[`ſ`,`s`]]);function Bn(e){let t=``;for(let n=0;n<e.length;n++)t+=Vn(e[n]);return t}function Vn(e){let t=e.charCodeAt(0);if(t<128)return e;if(Un(t))return``;let n=zn.get(e);if(n!=null)return n;if(!Hn(t))return e;let r=e.normalize(`NFD`),i=``;for(let e=0;e<r.length;e++)Un(r.charCodeAt(e))||(i+=zn.get(r[e])??r[e]);return i}function Hn(e){return e>=192&&e<=563||e>=7680&&e<=7929||e===8490||e===8491}function Un(e){return e>=768&&e<=879||e>=8400&&e<=8447||e>=65056&&e<=65071}function Wn(e,...t){switch(typeof e){case`function`:return function(t,...n){return e(Gn(t),...n)};case`string`:return Jn(e);default:{let n=Kn(e),r=n[0];for(let e=0;e<t.length;e++)r+=String(t[e])+n[e+1];return r}}}function Gn(e){let t=Kn(e);return Object.assign(t,{raw:t})}function Kn(e){qn(e);let t=Array.from(e);if(t.length===1)return[Jn(t[0])];let n=`\0`,r=t.join(``);for(;r.includes(n);)n+=`\0`;return Jn(t.join(n)).split(n)}function qn(e){let t=e[0],n=t.indexOf(`
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._={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(...e){if(e.length===0)return[[]];let t=1;for(let n=0;n<e.length;n++)t*=e[n].length;if(t===0)return[];let n=e.length,r=Array(t);for(let i=0;i<t;i++){let t=Array(n),a=i;for(let r=n-1;r>=0;r--){let n=e[r],i=n.length;t[r]=n[a%i],a=Math.floor(a/i)}r[i]=t}return r}function n(e,t){if(!Number.isInteger(t)||t<=0)throw Error(`Size must be an integer greater than zero.`);let n=Math.ceil(e.length/t),r=Array(n);for(let i=0;i<n;i++){let n=i*t,a=n+t;r[i]=e.slice(n,a)}return r}function r(e,t){let n=[],r;for(let i=0;i<e.length;i++){let a=t(e[i]);i===0||a!==r?n.push([e[i]]):n[n.length-1].push(e[i]),r=a}return n}function i(e,t){if(!Number.isInteger(t)||t<0)throw Error(`r must be a non-negative integer.`);let n=e.length;if(t>n)return[];if(t===0)return[[]];let r=Array(t);for(let e=0;e<t;e++)r[e]=e;let i=[];for(;;){let a=Array(t);for(let n=0;n<t;n++)a[n]=e[r[n]];i.push(a);let o=t-1;for(;o>=0&&r[o]===o+n-t;)o--;if(o<0)return i;r[o]++;for(let e=o+1;e<t;e++)r[e]=r[e-1]+1}}function a(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];r&&t.push(r)}return t}function o(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function s(e,t,n){let r=new Set(t.map(e=>n(e)));return e.filter(e=>!r.has(n(e)))}function c(e,t,n){return e.filter(e=>t.every(t=>!n(e,t)))}function l(e,t){return t=Math.max(t,0),e.slice(t)}function u(e,t){return t=Math.min(-t,0),t===0?e.slice():e.slice(0,t)}function d(e,t){for(let n=e.length-1;n>=0;n--)if(!t(e[n],n,e))return e.slice(0,n+1);return[]}function f(e,t){let n=e.findIndex((e,n,r)=>!t(e,n,r));return n===-1?[]:e.slice(n)}function p(e,t,n=0,r=e.length){let i=e.length,a=Math.max(n>=0?n:i+n,0),o=Math.min(r>=0?r:i+r,i);for(let n=a;n<o;n++)e[n]=t;return e}var m=class{capacity;available;deferredTasks=[];constructor(e){this.capacity=e,this.available=e}async acquire(){if(this.available>0){this.available--;return}return new Promise(e=>{this.deferredTasks.push(e)})}release(){let e=this.deferredTasks.shift();if(e!=null){e();return}this.available<this.capacity&&this.available++}};function h(e,t){let n=new m(t);return async function(...t){try{return await n.acquire(),await e.apply(this,t)}finally{n.release()}}}async function ee(e,t,n){n?.concurrency!=null&&(t=h(t,n.concurrency));let r=await Promise.all(e.map(t));return e.filter((e,t)=>r[t])}function te(e,t=1){let n=[],r=Math.floor(t),i=(e,t)=>{for(let a=0;a<e.length;a++){let o=e[a];Array.isArray(o)&&t<r?i(o,t+1):n.push(o)}};return i(e,0),n}async function ne(e,t,n){return n?.concurrency!=null&&(t=h(t,n.concurrency)),te(await Promise.all(e.map(t)))}async function re(e,t,n){n?.concurrency!=null&&(t=h(t,n.concurrency)),await Promise.all(e.map(t))}function ie(e){return e[0]}function ae(e){return e.slice(0,-1)}function oe(e,t){let n=new Set(t);return e.filter(e=>n.has(e))}function se(e,t,n){let r=[],i=new Set(t.map(n));for(let t=0;t<e.length;t++){let a=e[t],o=n(a);i.has(o)&&(r.push(a),i.delete(o))}return r}function ce(e,t,n){return e.filter(e=>t.some(t=>n(e,t)))}function le(e,t){return o(t,e).length===0}function ue(e,t,n){return c(t,e,n).length===0}function de(e){return e[e.length-1]}function fe(e,t,n){return n?.concurrency!=null&&(t=h(t,n.concurrency)),Promise.all(e.map(t))}function pe(e,t){let n=new Set(t),r=0;for(let t=0;t<e.length;t++)if(!n.has(e[t])){if(!Object.hasOwn(e,t)){delete e[r++];continue}e[r++]=e[t]}return e.length=r,e}async function me(e,t,n){let r=0;n??(n=e[0],r=1);let i=n;for(let n=r;n<e.length;n++)i=await t(i,e[n],n,e);return i}function he(e,t){let n=e.slice(),r=[],i=0;for(let a=0;a<e.length;a++){if(t(e[a],a,n)){r.push(e[a]);continue}if(!Object.hasOwn(e,a)){delete e[i++];continue}e[i++]=e[a]}return e.length=i,r}function ge(e){return e[Math.floor(Math.random()*e.length)]}function _e(e,t){if(t??(t=e,e=0),e>=t)throw Error(`Invalid input: The maximum value must be greater than the minimum value.`);return Math.random()*(t-e)+e}function ve(e,t){return Math.floor(_e(e,t))}function ye(e,t){if(t>e.length)throw Error(`Size must be less than or equal to the length of array.`);let n=Array(t),r=new Set;for(let i=e.length-t,a=0;i<e.length;i++,a++){let t=ve(0,i+1);r.has(t)&&(t=i),r.add(t),n[a]=e[t]}return n}function be(e){let t=e.slice();for(let e=t.length-1;e>=1;e--){let n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}function xe(e){return e.slice(1)}function Se(e,t){return e.slice(0,t)}function Ce(e,t){return t<=0||e.length===0?[]:e.slice(-t)}function we(e,t,n=0,r=e.length){let i=e.length,a=Math.max(n>=0?n:i+n,0),o=Math.min(r>=0?r:i+r,i),s=e.slice();for(let e=a;e<o;e++)s[e]=t;return s}function g(e){return[...new Set(e)]}function Te(e,t){let n=new Map;for(let r=0;r<e.length;r++){let i=e[r],a=t(i,r,e);n.has(a)||n.set(a,i)}return Array.from(n.values())}function Ee(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r];n.every(e=>!t(e,i))&&n.push(i)}return n}function De(e){let t=0;for(let n=0;n<e.length;n++)e[n].length>t&&(t=e[n].length);let n=Array(t);for(let r=0;r<t;r++){n[r]=Array(e.length);for(let t=0;t<e.length;t++)n[r][t]=e[t][r]}return n}function Oe(e,t,n=1,{partialWindows:r=!1}={}){if(t<=0||!Number.isInteger(t))throw Error(`Size must be a positive integer.`);if(n<=0||!Number.isInteger(n))throw Error(`Step must be a positive integer.`);let i=[],a=r?e.length:e.length-t+1;for(let r=0;r<a;r+=n)i.push(e.slice(r,r+t));return i}function ke(...e){let t=0;for(let n=0;n<e.length;n++)e[n].length>t&&(t=e[n].length);let n=e.length,r=Array(t);for(let i=0;i<t;++i){let t=Array(n);for(let r=0;r<n;++r)t[r]=e[r][i];r[i]=t}return r}let Ae=typeof globalThis==`object`&&globalThis||typeof window==`object`&&window||typeof self==`object`&&self||typeof global==`object`&&global||(function(){return this})(),je=Ae.DOMException===void 0?Error:Ae.DOMException;var Me=class extends je{constructor(e=`The operation was aborted`){super(e)}},Ne=class extends je{constructor(e=`The operation was timed out`){super(e)}};function Pe(e,t){if(!Number.isInteger(e)||e<0)throw Error(`n must be a non-negative integer.`);let n=0;return(...r)=>{if(++n>=e)return t(...r)}}function Fe(e,t){return function(...n){return e.apply(this,n.slice(0,t))}}async function Ie(){}function Le(e,t,{signal:n,edges:r}={}){let i,a=null,o=r!=null&&r.includes(`leading`),s=r==null||r.includes(`trailing`),c=()=>{a!==null&&(e.apply(i,a),i=void 0,a=null)},l=()=>{s&&c(),p()},u=null,d=()=>{u!=null&&clearTimeout(u),u=setTimeout(()=>{u=null,l()},t)},f=()=>{u!==null&&(clearTimeout(u),u=null)},p=()=>{f(),i=void 0,a=null},m=()=>{c()},h=function(...e){if(n?.aborted)return;i=this,a=e;let t=u==null;d(),o&&t&&c()};return h.schedule=d,h.cancel=p,h.flush=m,n?.addEventListener(`abort`,p,{once:!0}),h}function Re(...e){return function(...t){let n=e.length?e[0].apply(this,t):t[0];for(let t=1;t<e.length;t++)n=e[t].call(this,n);return n}}function ze(...e){return Re(...e.reverse())}function _(e){return e}function Be(e){return((...t)=>!e(...t))}function Ve(){}function He(e){let t=!1,n;return function(...r){return t||(t=!0,n=e.apply(this,r)),n}}function Ue(e,...t){return We(e,Ge,...t)}function We(e,t,...n){let r=function(...r){let i=0,a=n.slice().map(e=>e===t?r[i++]:e),o=r.slice(i);return e.apply(this,a.concat(o))};return e.prototype&&(r.prototype=Object.create(e.prototype)),r}let Ge=Symbol(`partial.placeholder`);Ue.placeholder=Ge;function Ke(e,...t){return qe(e,Je,...t)}function qe(e,t,...n){let r=function(...r){let i=n.filter(e=>e===t).length,a=Math.max(r.length-i,0),o=r.slice(0,a),s=a,c=n.slice().map(e=>e===t?r[s++]:e);return e.apply(this,o.concat(c))};return e.prototype&&(r.prototype=Object.create(e.prototype)),r}let Je=Symbol(`partialRight.placeholder`);Ke.placeholder=Je;function Ye(e,t=e.length-1){return function(...n){let r=n.slice(t),i=n.slice(0,t);for(;i.length<t;)i.push(void 0);return e.apply(this,[...i,r])}}function Xe(e,{signal:t}={}){return new Promise((n,r)=>{let i=()=>{r(new Me)},a=()=>{clearTimeout(o),i()};if(t?.aborted)return i();let o=setTimeout(()=>{t?.removeEventListener(`abort`,a),n()},e);t?.addEventListener(`abort`,a,{once:!0})})}let Ze=()=>!0;async function Qe(e,t){let n,r,i,a;typeof t==`number`?(n=0,r=t,i=void 0,a=Ze):(n=t?.delay??0,r=t?.retries??1/0,i=t?.signal,a=t?.shouldRetry??Ze);let o;for(let t=0;t<=r;t++){if(i?.aborted)throw o??Error(`The retry operation was aborted due to an abort signal.`);try{return await e()}catch(e){if(o=e,!a(e,t))throw e;t<r&&await Xe(typeof n==`function`?n(t,o):n)}}throw o}function $e(e,t,n){return e===t?0:(n-e)/(t-e)}function et(e,t,n){return n===1?t:e+(t-e)*n}function tt(e){if(e.length===0)return NaN;let t=e.slice().sort((e,t)=>e-t),n=Math.floor(t.length/2);return t.length%2==0?(t[n-1]+t[n])/2:t[n]}function nt(e,t){return tt(e.map(e=>t(e)))}function rt(e,t){if(Number.isNaN(Number(t)))throw Error(`Expected percentile to be a number but got "${t}".`);if(t<0)throw Error(`Expected percentile to be >= 0 but got "${t}".`);if(t>100)throw Error(`Expected percentile to be <= 100 but got "${t}".`);if(e.length===0)return NaN;let n=e.slice().sort((e,t)=>(Number.isNaN(e)?-1/0:e)-(Number.isNaN(t)?-1/0:t));return t===0?n[0]:n[Math.ceil(n.length*(t/100))-1]}function v(e,t,n=1){if(t??(t=e,e=0),!Number.isInteger(n)||n===0)throw Error(`The step value must be a non-zero integer.`);let r=Math.max(Math.ceil((t-e)/n),0),i=Array(r);for(let t=0;t<r;t++)i[t]=e+t*n;return i}function it(e){return e==null||typeof e!=`object`&&typeof e!=`function`}function at(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ot(e){if(it(e))return e;if(Array.isArray(e)||at(e)||e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)return e.slice(0);let t=Object.getPrototypeOf(e);if(t==null)return Object.assign(Object.create(t),e);let n=t.constructor;if(e instanceof Date||e instanceof Map||e instanceof Set)return new n(e);if(e instanceof RegExp){let t=new n(e);return t.lastIndex=e.lastIndex,t}if(e instanceof DataView)return new n(e.buffer.slice(0));if(e instanceof Error){let t;return t=e instanceof AggregateError?new n(e.errors,e.message,{cause:e.cause}):new n(e.message,{cause:e.cause}),t.stack=e.stack,Object.assign(t,e),t}return typeof File<`u`&&e instanceof File?new n([e],e.name,{type:e.type,lastModified:e.lastModified}):typeof e==`object`?Object.assign(Object.create(t),e):e}function st(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function y(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}let ct=`[object RegExp]`,lt=`[object String]`,ut=`[object Number]`,dt=`[object Boolean]`,ft=`[object Arguments]`,pt=`[object Symbol]`,mt=`[object Date]`,ht=`[object Map]`,gt=`[object Set]`,_t=`[object Array]`,vt=`[object ArrayBuffer]`,yt=`[object Object]`,bt=`[object DataView]`,xt=`[object Uint8Array]`,St=`[object Uint8ClampedArray]`,Ct=`[object Uint16Array]`,wt=`[object Uint32Array]`,Tt=`[object Int8Array]`,Et=`[object Int16Array]`,Dt=`[object Int32Array]`,Ot=`[object Float32Array]`,kt=`[object Float64Array]`;function b(e){return Ae.Buffer!==void 0&&Ae.Buffer.isBuffer(e)}function At(e,t){return x(e,void 0,e,new Map,t)}function x(e,t,n,r=new Map,i=void 0){let a=i?.(e,t,n,r);if(a!==void 0)return a;if(it(e))return e;if(r.has(e))return r.get(e);if(Array.isArray(e)){let t=Array(e.length);r.set(e,t);for(let a=0;a<e.length;a++)t[a]=x(e[a],a,n,r,i);return Object.hasOwn(e,`index`)&&(t.index=e.index),Object.hasOwn(e,`input`)&&(t.input=e.input),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp){let t=new RegExp(e.source,e.flags);return t.lastIndex=e.lastIndex,t}if(e instanceof Map){let t=new Map;r.set(e,t);for(let[a,o]of e)t.set(a,x(o,a,n,r,i));return t}if(e instanceof Set){let t=new Set;r.set(e,t);for(let a of e)t.add(x(a,void 0,n,r,i));return t}if(b(e))return e.subarray();if(at(e)){let t=new(Object.getPrototypeOf(e)).constructor(e.length);r.set(e,t);for(let a=0;a<e.length;a++)t[a]=x(e[a],a,n,r,i);return t}if(e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)return e.slice(0);if(e instanceof DataView){let t=new DataView(e.buffer.slice(0),e.byteOffset,e.byteLength);return r.set(e,t),S(t,e,n,r,i),t}if(typeof File<`u`&&e instanceof File){let t=new File([e],e.name,{type:e.type});return r.set(e,t),S(t,e,n,r,i),t}if(typeof Blob<`u`&&e instanceof Blob){let t=new Blob([e],{type:e.type});return r.set(e,t),S(t,e,n,r,i),t}if(e instanceof Error){let t=structuredClone(e);return r.set(e,t),t.message=e.message,t.name=e.name,t.stack=e.stack,t.cause=e.cause,t.constructor=e.constructor,S(t,e,n,r,i),t}if(e instanceof Boolean){let t=new Boolean(e.valueOf());return r.set(e,t),S(t,e,n,r,i),t}if(e instanceof Number){let t=new Number(e.valueOf());return r.set(e,t),S(t,e,n,r,i),t}if(e instanceof String){let t=new String(e.valueOf());return r.set(e,t),S(t,e,n,r,i),t}if(typeof e==`object`&&jt(e)){let t=Object.create(Object.getPrototypeOf(e));return r.set(e,t),S(t,e,n,r,i),t}return e}function S(e,t,n=e,r,i){let a=[...Object.keys(t),...st(t)];for(let o=0;o<a.length;o++){let s=a[o],c=Object.getOwnPropertyDescriptor(e,s);(c==null||c.writable)&&(e[s]=x(t[s],s,n,r,i))}}function jt(e){switch(y(e)){case ft:case _t:case vt:case bt:case dt:case mt:case Ot:case kt:case Tt:case Et:case Dt:case ht:case ut:case yt:case ct:case gt:case lt:case pt:case xt:case St:case Ct:case wt:return!0;default:return!1}}function Mt(e){return x(e,void 0,e,new Map,void 0)}function Nt(e){if(typeof e!=`object`||!e)return e;Object.freeze(e);let t=Reflect.ownKeys(e);for(let n=0;n<t.length;n++){let r=e[t[n]];typeof r==`object`&&r&&!Object.isFrozen(r)&&Nt(r)}return e}function Pt(e,t){return Object.keys(e).find(n=>t(e[n],n,e))}function C(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype||Object.getPrototypeOf(t)===null?Object.prototype.toString.call(e)===`[object Object]`:!1}function Ft(e,{delimiter:t=`.`,preserveArrays:n=!1}={}){return It(e,``,t,n)}function It(e,t,n,r){let i={},a=Object.keys(e);for(let o=0;o<a.length;o++){let s=a[o],c=e[s],l=t?`${t}${n}${s}`:s;if(C(c)&&Object.keys(c).length>0){Object.assign(i,It(c,l,n,r));continue}if(Array.isArray(c)&&!r&&c.length>0){Object.assign(i,It(c,l,n,r));continue}i[l]=c}return i}function Lt(e){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=e[i];t[a]=i}return t}function Rt(e,t){let n={},r=Object.keys(e);for(let i=0;i<r.length;i++){let a=r[i],o=e[a];n[t(o,a,e)]=o}return n}async function zt(e,t,n){let r={},i=Object.keys(e);return n?.concurrency&&(t=h(t,n.concurrency)),await Promise.all(i.map(async n=>{let i=e[n];r[await t(i,n,e)]=i})),r}function Bt(e,t){let n={},r=Object.keys(e);for(let i=0;i<r.length;i++){let a=r[i],o=e[a];n[a]=t(o,a,e)}return n}async function Vt(e,t,n){let r={},i=Object.keys(e);return n?.concurrency&&(t=h(t,n.concurrency)),await Promise.all(i.map(async n=>{r[n]=await t(e[n],n,e)})),r}function Ht(e){return C(e)||Array.isArray(e)}function w(e){return e===`__proto__`}function Ut(e,t,n){let r=Object.keys(t);for(let i=0;i<r.length;i++){let a=r[i];if(w(a))continue;let o=t[a],s=e[a],c=n(s,o,a,e,t);c===void 0?Ht(o)&&Ht(s)?e[a]=Ut(s,o,n):Array.isArray(o)?e[a]=Ut([],o,n):C(o)?e[a]=Ut({},o,n):(s===void 0||o!==void 0)&&(e[a]=o):e[a]=c}return e}function Wt(e,t){let n=Object.keys(e).sort(t),r={};for(let t=0;t<n.length;t++){let i=n[t];r[i]=e[i]}return r}function T(e){return Array.isArray(e)}function Gt(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}let Kt=/\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;function qt(e){return Array.from(e.match(Kt)??[])}function Jt(e){let t=qt(e);if(t.length===0)return``;let[n,...r]=t;return`${n.toLowerCase()}${r.map(e=>Gt(e)).join(``)}`}function Yt(e){if(T(e))return e.map(e=>Yt(e));if(C(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=Jt(i);t[a]=Yt(e[i])}return t}return e}function E(e){if(typeof e!=`object`||!e)return!1;if(Object.getPrototypeOf(e)===null)return!0;if(Object.prototype.toString.call(e)!==`[object Object]`){let t=e[Symbol.toStringTag];return t==null||!Object.getOwnPropertyDescriptor(e,Symbol.toStringTag)?.writable?!1:e.toString()===`[object ${t}]`}let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function Xt(e){return qt(e).map(e=>e.toUpperCase()).join(`_`)}function Zt(e){if(T(e))return e.map(e=>Zt(e));if(E(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=Xt(i);t[a]=Zt(e[i])}return t}return e}function Qt(e){return qt(e).map(e=>e.toLowerCase()).join(`-`)}function $t(e){if(T(e))return e.map(e=>$t(e));if(E(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=Qt(i);t[a]=$t(e[i])}return t}return e}function en(e,t){return Ut(Mt(e),t,function e(t,n){if(Ht(n)&&Ht(t))return Ut(ot(t),n,e);if(Array.isArray(n))return Ut([],n,e);if(C(n))return Ut({},n,e)})}function tn(e){return qt(e).map(e=>Gt(e)).join(``)}function nn(e){if(T(e))return e.map(e=>nn(e));if(E(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=tn(i);t[a]=nn(e[i])}return t}return e}function rn(e){return qt(e).map(e=>e.toLowerCase()).join(`_`)}function an(e){if(T(e))return e.map(e=>an(e));if(E(e)){let t={},n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=rn(i);t[a]=an(e[i])}return t}return e}function on(e){return e instanceof ArrayBuffer}function sn(e){return typeof Blob>`u`?!1:e instanceof Blob}function cn(){return typeof window<`u`&&window?.document!=null}function ln(e){return e instanceof Date}function un(e){return C(e)&&Object.keys(e).length===0}function D(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function dn(e,t,n){return fn(e,t,void 0,void 0,void 0,void 0,n)}function fn(e,t,n,r,i,a,o){let s=o(e,t,n,r,i,a);if(s!==void 0)return s;if(typeof e==typeof t)switch(typeof e){case`bigint`:case`string`:case`boolean`:case`symbol`:case`undefined`:return e===t;case`number`:return e===t||Object.is(e,t);case`function`:return e===t;case`object`:return pn(e,t,a,o)}return pn(e,t,a,o)}function pn(e,t,n,r){if(Object.is(e,t))return!0;let i=y(e),a=y(t);if(i===`[object Arguments]`&&(i=yt),a===`[object Arguments]`&&(a=yt),i!==a)return!1;switch(i){case lt:return e.toString()===t.toString();case ut:return D(e.valueOf(),t.valueOf());case dt:case mt:case pt:return Object.is(e.valueOf(),t.valueOf());case ct:return e.source===t.source&&e.flags===t.flags;case`[object Function]`:return e===t}n??=new Map;let o=n.get(e),s=n.get(t);if(o!=null&&s!=null)return o===t;n.set(e,t),n.set(t,e);try{switch(i){case ht:if(e.size!==t.size)return!1;for(let[i,a]of e.entries())if(!t.has(i)||!fn(a,t.get(i),i,e,t,n,r))return!1;return!0;case gt:{if(e.size!==t.size)return!1;let i=Array.from(e.values()),a=Array.from(t.values());for(let o=0;o<i.length;o++){let s=i[o],c=a.findIndex(i=>fn(s,i,void 0,e,t,n,r));if(c===-1)return!1;a.splice(c,1)}return!0}case _t:case xt:case St:case Ct:case wt:case`[object BigUint64Array]`:case Tt:case Et:case Dt:case`[object BigInt64Array]`:case Ot:case kt:if(b(e)!==b(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!fn(e[i],t[i],i,e,t,n,r))return!1;return!0;case vt:return e.byteLength===t.byteLength?pn(new Uint8Array(e),new Uint8Array(t),n,r):!1;case bt:return e.byteLength!==t.byteLength||e.byteOffset!==t.byteOffset?!1:pn(new Uint8Array(e),new Uint8Array(t),n,r);case`[object Error]`:return e.name===t.name&&e.message===t.message;case yt:{if(!(pn(e.constructor,t.constructor,n,r)||C(e)&&C(t)))return!1;let i=[...Object.keys(e),...st(e)],a=[...Object.keys(t),...st(t)];if(i.length!==a.length)return!1;for(let a=0;a<i.length;a++){let o=i[a],s=e[o];if(!Object.hasOwn(t,o))return!1;let c=t[o];if(!fn(s,c,o,e,t,n,r))return!1}return!0}default:return!1}}finally{n.delete(e),n.delete(t)}}function mn(e,t){return dn(e,t,Ve)}function hn(e){return e instanceof Error}function gn(e){return typeof File>`u`?!1:sn(e)&&e instanceof File}function O(e){return typeof e==`function`}function _n(e){return e!=null&&typeof e[Symbol.iterator]==`function`}function vn(e){if(typeof e!=`string`)return!1;try{return JSON.parse(e),!0}catch{return!1}}function yn(e){switch(typeof e){case`object`:return e===null||bn(e)||xn(e);case`string`:case`number`:case`boolean`:return!0;default:return!1}}function bn(e){return Array.isArray(e)?e.every(e=>yn(e)):!1}function xn(e){if(!C(e))return!1;let t=Reflect.ownKeys(e);for(let n=0;n<t.length;n++){let r=t[n],i=e[r];if(typeof r!=`string`||!yn(i))return!1}return!0}function Sn(e){return Number.isSafeInteger(e)&&e>=0}function Cn(e){return e instanceof Map}function wn(e){return e==null}function Tn(){return typeof process<`u`&&process?.versions?.node!=null}function En(e){return e!=null}function Dn(e){return e===null}function On(e){return e instanceof Promise}function kn(e){return e instanceof RegExp}function An(e){return e instanceof Set}function jn(e){return typeof e==`symbol`}function Mn(e){return e===void 0}function Nn(e){return e instanceof WeakMap}function Pn(e){return e instanceof WeakSet}async function Fn(e){let t=Object.keys(e),n=await Promise.all(t.map(t=>e[t])),r={};for(let e=0;e<t.length;e++)r[t[e]]=n[e];return r}var In=class{semaphore=new m(1);get isLocked(){return this.semaphore.available===0}async acquire(){return this.semaphore.acquire()}release(){this.semaphore.release()}};function Ln(e,{signal:t}={}){return new Promise((n,r)=>{let i=()=>{clearTimeout(a)};if(t?.aborted)return;let a=setTimeout(()=>{t?.removeEventListener(`abort`,i),r(new Ne)},e);t?.addEventListener(`abort`,i,{once:!0})})}async function Rn(e,t,{signal:n}={}){return Promise.race([e(),Ln(t,{signal:n})])}let zn=new Map([[`Æ`,`Ae`],[`Ð`,`D`],[`Ø`,`O`],[`Þ`,`Th`],[`ß`,`ss`],[`æ`,`ae`],[`ð`,`d`],[`ø`,`o`],[`þ`,`th`],[`Đ`,`D`],[`đ`,`d`],[`Ħ`,`H`],[`ħ`,`h`],[`ı`,`i`],[`IJ`,`IJ`],[`ij`,`ij`],[`ĸ`,`k`],[`Ŀ`,`L`],[`ŀ`,`l`],[`Ł`,`L`],[`ł`,`l`],[`ʼn`,`'n`],[`Ŋ`,`N`],[`ŋ`,`n`],[`Œ`,`Oe`],[`œ`,`oe`],[`Ŧ`,`T`],[`ŧ`,`t`],[`ſ`,`s`]]);function Bn(e){let t=``;for(let n=0;n<e.length;n++)t+=Vn(e[n]);return t}function Vn(e){let t=e.charCodeAt(0);if(t<128)return e;if(Un(t))return``;let n=zn.get(e);if(n!=null)return n;if(!Hn(t))return e;let r=e.normalize(`NFD`),i=``;for(let e=0;e<r.length;e++)Un(r.charCodeAt(e))||(i+=zn.get(r[e])??r[e]);return i}function Hn(e){return e>=192&&e<=563||e>=7680&&e<=7929||e===8490||e===8491}function Un(e){return e>=768&&e<=879||e>=8400&&e<=8447||e>=65056&&e<=65071}function Wn(e,...t){switch(typeof e){case`function`:return function(t,...n){return e(Gn(t),...n)};case`string`:return Jn(e);default:{let n=Kn(e),r=n[0];for(let e=0;e<t.length;e++)r+=String(t[e])+n[e+1];return r}}}function Gn(e){let t=Kn(e);return Object.assign(t,{raw:t})}function Kn(e){qn(e);let t=Array.from(e);if(t.length===1)return[Jn(t[0])];let n=`\0`,r=t.join(``);for(;r.includes(n);)n+=`\0`;return Jn(t.join(n)).split(n)}function qn(e){let t=e[0],n=t.indexOf(`
2
2
  `);if(n===-1||t.slice(0,n).trim()!==``)throw TypeError(`Invalid opening line.`);let r=e[e.length-1],i=r.lastIndexOf(`
3
3
  `);if(i===-1||r.slice(i+1).trim()!==``)throw TypeError(`Invalid closing line.`)}function Jn(e){e=e.replace(/\r\n/g,`
4
4
  `);let t=e.split(`
@@ -24,9 +24,15 @@ function intersectionBy(secondArray, mapper) {
24
24
  function intersectionByEager(array) {
25
25
  return require_intersectionBy.intersectionBy(array, secondArray, mapper);
26
26
  }
27
- const intersectionByLazy = require_lazy.createLazyFunction((value, _index, emit) => {
28
- if (mappedSecondSet.has(mapper(value))) emit(value);
29
- });
27
+ const intersectionByLazy = (emit) => {
28
+ const unmatched = new Set(mappedSecondSet);
29
+ return (value) => {
30
+ const mappedValue = mapper(value);
31
+ if (!unmatched.has(mappedValue)) return true;
32
+ unmatched.delete(mappedValue);
33
+ return emit(value);
34
+ };
35
+ };
30
36
  return require_lazy.combineEagerAndLazyFunctions(intersectionByEager, intersectionByLazy);
31
37
  }
32
38
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import { intersectionBy as intersectionBy$1 } from "../../array/intersectionBy.mjs";
2
- import { combineEagerAndLazyFunctions, createLazyFunction } from "../_internal/lazy.mjs";
2
+ import { combineEagerAndLazyFunctions } from "../_internal/lazy.mjs";
3
3
  //#region src/fp/array/intersectionBy.ts
4
4
  /**
5
5
  * Creates a function that keeps values whose mapped identity appears in another array.
@@ -24,9 +24,16 @@ function intersectionBy(secondArray, mapper) {
24
24
  function intersectionByEager(array) {
25
25
  return intersectionBy$1(array, secondArray, mapper);
26
26
  }
27
- return combineEagerAndLazyFunctions(intersectionByEager, createLazyFunction((value, _index, emit) => {
28
- if (mappedSecondSet.has(mapper(value))) emit(value);
29
- }));
27
+ const intersectionByLazy = (emit) => {
28
+ const unmatched = new Set(mappedSecondSet);
29
+ return (value) => {
30
+ const mappedValue = mapper(value);
31
+ if (!unmatched.has(mappedValue)) return true;
32
+ unmatched.delete(mappedValue);
33
+ return emit(value);
34
+ };
35
+ };
36
+ return combineEagerAndLazyFunctions(intersectionByEager, intersectionByLazy);
30
37
  }
31
38
  //#endregion
32
39
  export { intersectionBy };
@@ -18,7 +18,7 @@
18
18
  function deepFreeze(obj) {
19
19
  if (obj === null || typeof obj !== "object") return obj;
20
20
  Object.freeze(obj);
21
- const keys = Object.keys(obj);
21
+ const keys = Reflect.ownKeys(obj);
22
22
  for (let i = 0; i < keys.length; i++) {
23
23
  const value = obj[keys[i]];
24
24
  if (value !== null && typeof value === "object" && !Object.isFrozen(value)) deepFreeze(value);
@@ -18,7 +18,7 @@
18
18
  function deepFreeze(obj) {
19
19
  if (obj === null || typeof obj !== "object") return obj;
20
20
  Object.freeze(obj);
21
- const keys = Object.keys(obj);
21
+ const keys = Reflect.ownKeys(obj);
22
22
  for (let i = 0; i < keys.length; i++) {
23
23
  const value = obj[keys[i]];
24
24
  if (value !== null && typeof value === "object" && !Object.isFrozen(value)) deepFreeze(value);
@@ -0,0 +1,18 @@
1
+ //#region src/types/IsAny.d.ts
2
+ /**
3
+ * Resolves to `true` when `T` is `any`, `false` otherwise.
4
+ *
5
+ * `any` is the only type that `1 & T` can turn into something `0` is
6
+ * assignable to, which is what makes it possible to tell `any` apart from
7
+ * `unknown` and from every other type.
8
+ *
9
+ * @template T - The type to check.
10
+ *
11
+ * @example
12
+ * type A = IsAny<any>; // true
13
+ * type B = IsAny<unknown>; // false
14
+ * type C = IsAny<never>; // false
15
+ */
16
+ type IsAny<T> = 0 extends 1 & T ? true : false;
17
+ //#endregion
18
+ export { IsAny };
@@ -0,0 +1,18 @@
1
+ //#region src/types/IsAny.d.ts
2
+ /**
3
+ * Resolves to `true` when `T` is `any`, `false` otherwise.
4
+ *
5
+ * `any` is the only type that `1 & T` can turn into something `0` is
6
+ * assignable to, which is what makes it possible to tell `any` apart from
7
+ * `unknown` and from every other type.
8
+ *
9
+ * @template T - The type to check.
10
+ *
11
+ * @example
12
+ * type A = IsAny<any>; // true
13
+ * type B = IsAny<unknown>; // false
14
+ * type C = IsAny<never>; // false
15
+ */
16
+ type IsAny<T> = 0 extends 1 & T ? true : false;
17
+ //#endregion
18
+ export { IsAny };
@@ -0,0 +1,20 @@
1
+ import { IsAny } from "./IsAny.mjs";
2
+
3
+ //#region src/types/IsUnknown.d.ts
4
+ /**
5
+ * Resolves to `true` when `T` is `unknown`, `false` otherwise.
6
+ *
7
+ * A plain `unknown extends T` check is also `true` for `any`, so this type
8
+ * rules `any` out first. Useful when a type-level helper should treat an
9
+ * `unknown` input differently from a concrete type.
10
+ *
11
+ * @template T - The type to check.
12
+ *
13
+ * @example
14
+ * type A = IsUnknown<unknown>; // true
15
+ * type B = IsUnknown<any>; // false
16
+ * type C = IsUnknown<string>; // false
17
+ */
18
+ type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false;
19
+ //#endregion
20
+ export { IsUnknown };
@@ -0,0 +1,20 @@
1
+ import { IsAny } from "./IsAny.js";
2
+
3
+ //#region src/types/IsUnknown.d.ts
4
+ /**
5
+ * Resolves to `true` when `T` is `unknown`, `false` otherwise.
6
+ *
7
+ * A plain `unknown extends T` check is also `true` for `any`, so this type
8
+ * rules `any` out first. Useful when a type-level helper should treat an
9
+ * `unknown` input differently from a concrete type.
10
+ *
11
+ * @template T - The type to check.
12
+ *
13
+ * @example
14
+ * type A = IsUnknown<unknown>; // true
15
+ * type B = IsUnknown<any>; // false
16
+ * type C = IsUnknown<string>; // false
17
+ */
18
+ type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false;
19
+ //#endregion
20
+ export { IsUnknown };
@@ -1,3 +1,7 @@
1
+ import { IsAny } from "./IsAny.mjs";
2
+ import { IsEqual } from "./IsEqual.mjs";
3
+ import { IsUnknown } from "./IsUnknown.mjs";
4
+ import { Primitive } from "./Primitive.mjs";
1
5
  import { Simplify } from "./Simplify.mjs";
2
6
 
3
7
  //#region src/types/Merge.d.ts
@@ -5,15 +9,29 @@ import { Simplify } from "./Simplify.mjs";
5
9
  * The result of deeply merging the source type `S` into the target type `T`,
6
10
  * matching what `merge(target, source)` returns at runtime.
7
11
  *
8
- * Keys present on only one side are kept as-is. When both sides have a plain
9
- * object at the same key, the merge recurses; tuples merge index by index, and
10
- * other arrays merge into an array of both element types. If the source value
11
- * can be `undefined`, the target type is kept because `merge` skips
12
- * `undefined` source values. Values that are not plain objects or arrays
13
- * (functions, `Date`, `RegExp`, `Map`, `Set`, etc.) are not merged into;
14
- * the source value replaces the target value. When an array meets a plain
15
- * object, `merge` keeps the target and assigns the source's properties onto
16
- * it, so both property sets are kept (`T & S`).
12
+ * Merging a type with itself gives back the same type, so a union such as
13
+ * `string | string[] | string[][]` stays intact instead of expanding into a
14
+ * merge of every pair of its members.
15
+ *
16
+ * Plain objects are merged key by key: keys present on only one side are
17
+ * kept, and keys present on both sides are merged the same way. A key that
18
+ * exists only on the source is kept even when the source is a subtype of
19
+ * the target.
20
+ *
21
+ * A source value that is not a plain object or an array (primitives, `Date`,
22
+ * `RegExp`, `Map`, `Set`, functions, ...) replaces the target value, so the
23
+ * source type is used.
24
+ *
25
+ * When a source array fits the target's array type, the target type is kept:
26
+ * overriding `string[] | string[][]` with `string[]` stays
27
+ * `string[] | string[][]`. If instead the target fits the source type, the
28
+ * source type is kept. Otherwise, tuples merge index by index and other
29
+ * arrays merge into an array of both element types.
30
+ *
31
+ * A source value that can be `undefined` keeps the target
32
+ * type as well, because `merge` skips `undefined` source values. When an
33
+ * array meets a plain object, `merge` keeps the target and assigns the
34
+ * source's properties onto it, so both property sets are kept (`T & S`).
17
35
  *
18
36
  * @template T - Type of the target object.
19
37
  * @template S - Type of the source object.
@@ -23,6 +41,15 @@ import { Simplify } from "./Simplify.mjs";
23
41
  * type Source = { b: { y: string; z: boolean }; c: string };
24
42
  * type Result = Merge<Target, Source>;
25
43
  * // => { a: number; b: { x: number; y: string; z: boolean }; c: string }
44
+ *
45
+ * @example
46
+ * type Options = { color: string | string[] | string[][] };
47
+ * type Same = Merge<Options, Options>;
48
+ * // => Options
49
+ * type Override = Merge<Options, { color: string[] }>;
50
+ * // => Options
51
+ * type Extra = Merge<{ a: number }, { a: number; b: string }>;
52
+ * // => { a: number; b: string }
26
53
  */
27
54
  type Merge<T, S> = undefined extends S ? T | MergeDefined<T, Exclude<S, undefined>> : MergeDefined<T, S>;
28
55
  /**
@@ -30,8 +57,17 @@ type Merge<T, S> = undefined extends S ? T | MergeDefined<T, Exclude<S, undefine
30
57
  * or an array. The source value replaces the target value instead.
31
58
  */
32
59
  type NonMergeable = ((...args: any[]) => unknown) | Date | RegExp | Error | Promise<unknown> | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> | WeakMap<object, unknown> | WeakSet<object>;
33
- type MergeDefined<T, S> = S extends readonly unknown[] ? (T extends readonly unknown[] ? MergeArrays<T, S> : T extends NonMergeable ? S : T extends object ? T & S : S) : S extends NonMergeable ? S : S extends object ? (T extends readonly unknown[] ? T & S : T extends NonMergeable ? S : T extends object ? MergeRecords<T, S> : S) : S;
60
+ /**
61
+ * `true` when every member of `T` is a plain object type that `merge`
62
+ * recurses into. Primitives are excluded explicitly because an intersection
63
+ * like `string & {}` satisfies `extends object` even though it is a string at
64
+ * runtime.
65
+ */
66
+ type IsPlainRecord<T> = T extends Primitive ? false : T extends readonly unknown[] ? false : T extends NonMergeable ? false : T extends object ? true : false;
67
+ type MergeDefined<T, S> = IsEqual<T, S> extends true ? T : IsAny<T> extends true ? any : IsAny<S> extends true ? any : IsUnknown<T> extends true ? S : [T] extends [never] ? S : [S] extends [never] ? T : IsPlainRecord<T> extends true ? (IsPlainRecord<S> extends true ? MergeRecords<T, S> : MergeAssignable<T, S>) : MergeAssignable<T, S>;
68
+ type MergeAssignable<T, S> = [S] extends [Primitive | NonMergeable] ? S : [S] extends [T] ? T : [T] extends [S] ? S : MergeFallback<T, S>;
69
+ type MergeFallback<T, S> = S extends Primitive ? S : S extends readonly unknown[] ? (T extends readonly unknown[] ? MergeArrays<T, S> : T extends Primitive | NonMergeable ? S : T extends object ? T & S : S) : S extends NonMergeable ? S : S extends object ? (T extends readonly unknown[] ? T & S : T extends Primitive | NonMergeable ? S : T extends object ? MergeRecords<T, S> : S) : S;
34
70
  type MergeArrays<T extends readonly unknown[], S extends readonly unknown[]> = T extends readonly [] ? S : S extends readonly [] ? T : T extends readonly [infer TH, ...infer TR] ? S extends readonly [infer SH, ...infer SR] ? [Merge<TH, SH>, ...MergeArrays<TR, SR>] : Array<T[number] | S[number]> : Array<T[number] | S[number]>;
35
- type MergeRecords<T extends object, S extends object> = Simplify<Omit<T, keyof S> & Omit<S, keyof T> & { [K in keyof T & keyof S]: Merge<T[K], S[K]> }>;
71
+ type MergeRecords<T, S> = Simplify<Omit<T, keyof S> & Omit<S, keyof T> & { [K in keyof T & keyof S]: Merge<T[K], S[K]> }>;
36
72
  //#endregion
37
73
  export { Merge };
@@ -1,3 +1,7 @@
1
+ import { IsAny } from "./IsAny.js";
2
+ import { IsEqual } from "./IsEqual.js";
3
+ import { IsUnknown } from "./IsUnknown.js";
4
+ import { Primitive } from "./Primitive.js";
1
5
  import { Simplify } from "./Simplify.js";
2
6
 
3
7
  //#region src/types/Merge.d.ts
@@ -5,15 +9,29 @@ import { Simplify } from "./Simplify.js";
5
9
  * The result of deeply merging the source type `S` into the target type `T`,
6
10
  * matching what `merge(target, source)` returns at runtime.
7
11
  *
8
- * Keys present on only one side are kept as-is. When both sides have a plain
9
- * object at the same key, the merge recurses; tuples merge index by index, and
10
- * other arrays merge into an array of both element types. If the source value
11
- * can be `undefined`, the target type is kept because `merge` skips
12
- * `undefined` source values. Values that are not plain objects or arrays
13
- * (functions, `Date`, `RegExp`, `Map`, `Set`, etc.) are not merged into;
14
- * the source value replaces the target value. When an array meets a plain
15
- * object, `merge` keeps the target and assigns the source's properties onto
16
- * it, so both property sets are kept (`T & S`).
12
+ * Merging a type with itself gives back the same type, so a union such as
13
+ * `string | string[] | string[][]` stays intact instead of expanding into a
14
+ * merge of every pair of its members.
15
+ *
16
+ * Plain objects are merged key by key: keys present on only one side are
17
+ * kept, and keys present on both sides are merged the same way. A key that
18
+ * exists only on the source is kept even when the source is a subtype of
19
+ * the target.
20
+ *
21
+ * A source value that is not a plain object or an array (primitives, `Date`,
22
+ * `RegExp`, `Map`, `Set`, functions, ...) replaces the target value, so the
23
+ * source type is used.
24
+ *
25
+ * When a source array fits the target's array type, the target type is kept:
26
+ * overriding `string[] | string[][]` with `string[]` stays
27
+ * `string[] | string[][]`. If instead the target fits the source type, the
28
+ * source type is kept. Otherwise, tuples merge index by index and other
29
+ * arrays merge into an array of both element types.
30
+ *
31
+ * A source value that can be `undefined` keeps the target
32
+ * type as well, because `merge` skips `undefined` source values. When an
33
+ * array meets a plain object, `merge` keeps the target and assigns the
34
+ * source's properties onto it, so both property sets are kept (`T & S`).
17
35
  *
18
36
  * @template T - Type of the target object.
19
37
  * @template S - Type of the source object.
@@ -23,6 +41,15 @@ import { Simplify } from "./Simplify.js";
23
41
  * type Source = { b: { y: string; z: boolean }; c: string };
24
42
  * type Result = Merge<Target, Source>;
25
43
  * // => { a: number; b: { x: number; y: string; z: boolean }; c: string }
44
+ *
45
+ * @example
46
+ * type Options = { color: string | string[] | string[][] };
47
+ * type Same = Merge<Options, Options>;
48
+ * // => Options
49
+ * type Override = Merge<Options, { color: string[] }>;
50
+ * // => Options
51
+ * type Extra = Merge<{ a: number }, { a: number; b: string }>;
52
+ * // => { a: number; b: string }
26
53
  */
27
54
  type Merge<T, S> = undefined extends S ? T | MergeDefined<T, Exclude<S, undefined>> : MergeDefined<T, S>;
28
55
  /**
@@ -30,8 +57,17 @@ type Merge<T, S> = undefined extends S ? T | MergeDefined<T, Exclude<S, undefine
30
57
  * or an array. The source value replaces the target value instead.
31
58
  */
32
59
  type NonMergeable = ((...args: any[]) => unknown) | Date | RegExp | Error | Promise<unknown> | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> | WeakMap<object, unknown> | WeakSet<object>;
33
- type MergeDefined<T, S> = S extends readonly unknown[] ? (T extends readonly unknown[] ? MergeArrays<T, S> : T extends NonMergeable ? S : T extends object ? T & S : S) : S extends NonMergeable ? S : S extends object ? (T extends readonly unknown[] ? T & S : T extends NonMergeable ? S : T extends object ? MergeRecords<T, S> : S) : S;
60
+ /**
61
+ * `true` when every member of `T` is a plain object type that `merge`
62
+ * recurses into. Primitives are excluded explicitly because an intersection
63
+ * like `string & {}` satisfies `extends object` even though it is a string at
64
+ * runtime.
65
+ */
66
+ type IsPlainRecord<T> = T extends Primitive ? false : T extends readonly unknown[] ? false : T extends NonMergeable ? false : T extends object ? true : false;
67
+ type MergeDefined<T, S> = IsEqual<T, S> extends true ? T : IsAny<T> extends true ? any : IsAny<S> extends true ? any : IsUnknown<T> extends true ? S : [T] extends [never] ? S : [S] extends [never] ? T : IsPlainRecord<T> extends true ? (IsPlainRecord<S> extends true ? MergeRecords<T, S> : MergeAssignable<T, S>) : MergeAssignable<T, S>;
68
+ type MergeAssignable<T, S> = [S] extends [Primitive | NonMergeable] ? S : [S] extends [T] ? T : [T] extends [S] ? S : MergeFallback<T, S>;
69
+ type MergeFallback<T, S> = S extends Primitive ? S : S extends readonly unknown[] ? (T extends readonly unknown[] ? MergeArrays<T, S> : T extends Primitive | NonMergeable ? S : T extends object ? T & S : S) : S extends NonMergeable ? S : S extends object ? (T extends readonly unknown[] ? T & S : T extends Primitive | NonMergeable ? S : T extends object ? MergeRecords<T, S> : S) : S;
34
70
  type MergeArrays<T extends readonly unknown[], S extends readonly unknown[]> = T extends readonly [] ? S : S extends readonly [] ? T : T extends readonly [infer TH, ...infer TR] ? S extends readonly [infer SH, ...infer SR] ? [Merge<TH, SH>, ...MergeArrays<TR, SR>] : Array<T[number] | S[number]> : Array<T[number] | S[number]>;
35
- type MergeRecords<T extends object, S extends object> = Simplify<Omit<T, keyof S> & Omit<S, keyof T> & { [K in keyof T & keyof S]: Merge<T[K], S[K]> }>;
71
+ type MergeRecords<T, S> = Simplify<Omit<T, keyof S> & Omit<S, keyof T> & { [K in keyof T & keyof S]: Merge<T[K], S[K]> }>;
36
72
  //#endregion
37
73
  export { Merge };
@@ -1,4 +1,8 @@
1
1
  import { ObjectKeys } from "./ObjectKeys.mjs";
2
+ import { IsAny } from "./IsAny.mjs";
3
+ import { IsEqual } from "./IsEqual.mjs";
4
+ import { IsUnknown } from "./IsUnknown.mjs";
5
+ import { Primitive } from "./Primitive.mjs";
2
6
  import { Simplify } from "./Simplify.mjs";
3
7
  import { Merge } from "./Merge.mjs";
4
8
  import { ToCamelCaseKeys } from "./ToCamelCaseKeys.mjs";
@@ -6,12 +10,10 @@ import { ToConstantCaseKeys } from "./ToConstantCaseKeys.mjs";
6
10
  import { ToKebabCaseKeys } from "./ToKebabCaseKeys.mjs";
7
11
  import { ToPascalCaseKeys } from "./ToPascalCaseKeys.mjs";
8
12
  import { ToSnakeCaseKeys } from "./ToSnakeCaseKeys.mjs";
9
- import { Primitive } from "./Primitive.mjs";
10
13
  import { DeepPartial } from "./DeepPartial.mjs";
11
14
  import { DeepReadonly } from "./DeepReadonly.mjs";
12
15
  import { DistributiveOmit } from "./DistributiveOmit.mjs";
13
16
  import { EmptyObject } from "./EmptyObject.mjs";
14
- import { IsEqual } from "./IsEqual.mjs";
15
17
  import { JSONValue } from "./JSONValue.mjs";
16
18
  import { NonEmptyArray } from "./NonEmptyArray.mjs";
17
19
  import { SetOptional } from "./SetOptional.mjs";
@@ -19,4 +21,4 @@ import { SetRequired } from "./SetRequired.mjs";
19
21
  import { UnknownRecord } from "./UnknownRecord.mjs";
20
22
  import { ValueOf } from "./ValueOf.mjs";
21
23
  import { Writable } from "./Writable.mjs";
22
- export { type DeepPartial, type DeepReadonly, type DistributiveOmit, type EmptyObject, type IsEqual, type JSONValue, type Merge, type NonEmptyArray, type ObjectKeys, type Primitive, type SetOptional, type SetRequired, type Simplify, type ToCamelCaseKeys, type ToConstantCaseKeys, type ToKebabCaseKeys, type ToPascalCaseKeys, type ToSnakeCaseKeys, type UnknownRecord, type ValueOf, type Writable };
24
+ export { type DeepPartial, type DeepReadonly, type DistributiveOmit, type EmptyObject, type IsAny, type IsEqual, type IsUnknown, type JSONValue, type Merge, type NonEmptyArray, type ObjectKeys, type Primitive, type SetOptional, type SetRequired, type Simplify, type ToCamelCaseKeys, type ToConstantCaseKeys, type ToKebabCaseKeys, type ToPascalCaseKeys, type ToSnakeCaseKeys, type UnknownRecord, type ValueOf, type Writable };
@@ -1,4 +1,8 @@
1
1
  import { ObjectKeys } from "./ObjectKeys.js";
2
+ import { IsAny } from "./IsAny.js";
3
+ import { IsEqual } from "./IsEqual.js";
4
+ import { IsUnknown } from "./IsUnknown.js";
5
+ import { Primitive } from "./Primitive.js";
2
6
  import { Simplify } from "./Simplify.js";
3
7
  import { Merge } from "./Merge.js";
4
8
  import { ToCamelCaseKeys } from "./ToCamelCaseKeys.js";
@@ -6,12 +10,10 @@ import { ToConstantCaseKeys } from "./ToConstantCaseKeys.js";
6
10
  import { ToKebabCaseKeys } from "./ToKebabCaseKeys.js";
7
11
  import { ToPascalCaseKeys } from "./ToPascalCaseKeys.js";
8
12
  import { ToSnakeCaseKeys } from "./ToSnakeCaseKeys.js";
9
- import { Primitive } from "./Primitive.js";
10
13
  import { DeepPartial } from "./DeepPartial.js";
11
14
  import { DeepReadonly } from "./DeepReadonly.js";
12
15
  import { DistributiveOmit } from "./DistributiveOmit.js";
13
16
  import { EmptyObject } from "./EmptyObject.js";
14
- import { IsEqual } from "./IsEqual.js";
15
17
  import { JSONValue } from "./JSONValue.js";
16
18
  import { NonEmptyArray } from "./NonEmptyArray.js";
17
19
  import { SetOptional } from "./SetOptional.js";
@@ -19,4 +21,4 @@ import { SetRequired } from "./SetRequired.js";
19
21
  import { UnknownRecord } from "./UnknownRecord.js";
20
22
  import { ValueOf } from "./ValueOf.js";
21
23
  import { Writable } from "./Writable.js";
22
- export { type DeepPartial, type DeepReadonly, type DistributiveOmit, type EmptyObject, type IsEqual, type JSONValue, type Merge, type NonEmptyArray, type ObjectKeys, type Primitive, type SetOptional, type SetRequired, type Simplify, type ToCamelCaseKeys, type ToConstantCaseKeys, type ToKebabCaseKeys, type ToPascalCaseKeys, type ToSnakeCaseKeys, type UnknownRecord, type ValueOf, type Writable };
24
+ export { type DeepPartial, type DeepReadonly, type DistributiveOmit, type EmptyObject, type IsAny, type IsEqual, type IsUnknown, type JSONValue, type Merge, type NonEmptyArray, type ObjectKeys, type Primitive, type SetOptional, type SetRequired, type Simplify, type ToCamelCaseKeys, type ToConstantCaseKeys, type ToKebabCaseKeys, type ToPascalCaseKeys, type ToSnakeCaseKeys, type UnknownRecord, type ValueOf, type Writable };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "es-toolkit",
3
- "version": "1.52.0-dev.2136+c92f2b62",
3
+ "version": "1.52.0-dev.2139+ab7f2d6f",
4
4
  "description": "A state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.",
5
5
  "homepage": "https://es-toolkit.dev",
6
6
  "bugs": "https://github.com/toss/es-toolkit/issues",