UNPKG

mingo

Version:

MongoDB query language for in-memory objects

1 lines 92.9 kB
var mingo=(()=>{var pe=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var Bo=Object.getOwnPropertyNames;var Wo=Object.prototype.hasOwnProperty;var ht=(r,t)=>{for(var e in t)pe(r,e,{get:t[e],enumerable:!0})},Lo=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Bo(t))!Wo.call(r,o)&&o!==e&&pe(r,o,{get:()=>t[o],enumerable:!(n=Fo(t,o))||n.enumerable});return r};var zo=r=>Lo(pe({},"__esModule",{value:!0}),r);var rc={};ht(rc,{Aggregator:()=>gr,Context:()=>ft,ProcessingMode:()=>$t,Query:()=>xr,aggregate:()=>Do,default:()=>tc,find:()=>Po,update:()=>vo,updateMany:()=>Ro,updateOne:()=>Uo});function H(r,t){return r*16777619^t>>>0}function hn(r){if(Number.isNaN(r))return 2143289344;if(!Number.isFinite(r))return r>0?2139095040:4286578688;let t=Math.trunc(r),e=r-t,n=t|0;if(e!==0){let o=Math.floor(e*4294967296);n=H(n,o|0)}return n>>>0}function Ut(r){let t=0;for(let e=0;e<r.length;e++)t=H(t,r.charCodeAt(e));return t>>>0}function Qo(r){let t=0,e=r<0n,n=e?-r:r;if(n===0n)t=H(t,0);else for(;n>0n;){let o=Number(n&0xffn);t=H(t,o),n>>=8n}return H(t,+e)>>>0}function qo(r){let t=Ut((r.name||"")+r.toString());return t=H(t,r.length),t>>>0}function Ko(r){let t=0;for(let e=0;e<r.length;e++)t=H(t,r[e]);return t>>>0}function Yo(r){let t=Ut(r.constructor.name),e=new Uint8Array(r.buffer,r.byteOffset,r.byteLength);return t=H(t,Ko(e)),t>>>0}function Go(r,t){if(t.has(r))return 13;t.add(r);let e=1;for(let n=0;n<r.length;n++)e=H(e,ce(r[n],t));return t.delete(r),e>>>0}function Ho(r,t){if(t.has(r))return 13;t.add(r);let e=Object.keys(r).sort(),n=Ut(r?.constructor?.name);for(let o of e)n=H(n,Ut(o)),n=H(n,ce(r[o],t));return t.delete(r),n>>>0}var Xo=[3735928559,305441741].map(r=>H(3,r)),Jo=H(1,0),Zo=H(2,0);function ce(r,t){if(r===null)return Jo;switch(typeof r){case"undefined":return Zo;case"boolean":return Xo[+r];case"number":return H(4,hn(r));case"string":return H(5,Ut(r));case"bigint":return H(6,Qo(r));case"function":return H(7,qo(r));default:{if(ArrayBuffer.isView(r)&&!(r instanceof DataView))return H(12,Yo(r));if(r instanceof Date)return H(10,hn(r.getTime()));if(r instanceof RegExp){let n=Ut(r.source);return H(11,H(n,Ut(r.flags)))}return Array.isArray(r)?H(8,Go(r,t)):H(9,Ho(r,t))}}}function ct(r){return ce(r,new WeakSet)>>>0}var Vt=class extends Error{},Xt=Symbol("missing"),ts="mingo: cycle detected while processing object/array",Mt=r=>typeof r!="object"&&typeof r!="function"||r===null,$n=r=>Mt(r)||R(r)||nt(r),jr={undefined:1,null:2,number:3,string:4,symbol:5,object:6,array:7,arraybuffer:8,boolean:9,date:10,regexp:11,function:12},jn=Object.keys(jr).length*2,yt=(r,t)=>r<t?-1:r>t?1:0,rs=(r,t)=>{let e=new Uint8Array(r.buffer,r.byteOffset,r.byteLength),n=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),o=Math.min(e.length,n.length);for(let s=0;s<o;s++){let i=yt(e[s],n[s]);if(i!==0)return i}return yt(e.length,n.length)};function jt(r,t,e=!1){let n=0;if(r===Xt&&(r=void 0),t===Xt&&(t=void 0),r===t||Object.is(r,t))return 0;let o=ue(r)?"arraybuffer":ut(r),s=ue(t)?"arraybuffer":ut(t);if(o!==s){if(o=="undefined")return-1;if(s=="undefined")return 1;if(e&&o=="array"&&!r.length)return-1;if(e&&s=="array"&&!t.length)return 1;if(e){if(f(r)){let p=r.slice().sort(jt);n=1;for(let c of p)if((n=Math.min(n,jt(c,t)))<0)return n;return n}else if(f(t)){let p=t.slice().sort(jt);n=-1;for(let c of p)if((n=Math.max(n,jt(r,c)))>0)return n;return n}}let i=jr[o]??jn,a=jr[s]??jn;if(i!==a)return yt(i,a)}switch(o){case"number":case"string":return yt(r,t);case"boolean":case"date":return yt(+r,+t);case"regexp":return(n=yt(r.source,t.source))||(n=yt(r.flags,t.flags))?n:0;case"arraybuffer":return rs(r,t);case"array":{let i=r.slice().sort(jt),a=t.slice().sort(jt),p=Math.min(i.length,a.length);for(let c=0;c<p;c++)if(n=jt(i[c],a[c]))return n;return yt(i.length,a.length)}default:{if(o!=="object"){if(r?.constructor===t?.constructor&&In(r))return yt(r.toString(),t.toString());if(n=yt(r?.constructor?.name,t?.constructor?.name))return n}let i=Object.keys(r).sort(),a=Object.keys(t).sort();if(n=jt(i,a))return n;for(let p of i)if(n=jt(r[p],t[p]))return n;return 0}}}var M=(r,t)=>jt(r,t,!0),In=r=>r!=null&&r.toString!==Object.prototype.toString;function G(r,t){if(r===t||Object.is(r,t))return!0;if(r===null||t===null||typeof r!=typeof t||typeof r!="object"||r.constructor!==t.constructor)return!1;if(R(r))return R(t)&&+r==+t;if(nt(r))return nt(t)&&r.source===t.source&&r.flags===t.flags;if(f(r)&&f(t))return r.length===t.length&&r.every((o,s)=>G(o,t[s]));if(r?.constructor!==Object&&In(r))return r?.toString()===t?.toString();let e=Object.keys(r),n=Object.keys(t);return e.length!==n.length?!1:e.every(o=>T(t,o)&&G(r[o],t[o]))}var Z=class r extends Map{#t=new Map;#r=t=>{let e=ct(t);return[(this.#t.get(e)||[]).find(n=>G(n,t)),e]};constructor(){super()}static init(){return new r}clear(){super.clear(),this.#t.clear()}delete(t){if(Mt(t))return super.delete(t);let[e,n]=this.#r(t);return super.delete(e)?(this.#t.set(n,this.#t.get(n).filter(o=>!G(o,e))),!0):!1}get(t){if(Mt(t))return super.get(t);let[e,n]=this.#r(t);return super.get(e)}has(t){if(Mt(t))return super.has(t);let[e,n]=this.#r(t);return super.has(e)}set(t,e){if(Mt(t))return super.set(t,e);let[n,o]=this.#r(t);if(super.has(n))super.set(n,e);else{super.set(t,e);let s=this.#t.get(o)||[];s.push(t),this.#t.set(o,s)}return this}get size(){return super.size}};function m(r,t){if(!r)throw new Vt(t)}function ut(r){if(r===null)return"null";let t=typeof r;return t!=="object"&&jr[t]?t:f(r)?"array":R(r)?"date":nt(r)?"regexp":r?.constructor?.name?.toLowerCase()??"object"}var _t=r=>typeof r=="boolean",$=r=>typeof r=="string";var x=r=>!Number.isNaN(r)&&typeof r=="number",v=Number.isInteger,f=Array.isArray,h=r=>ut(r)==="object",le=r=>!Mt(r),R=r=>r instanceof Date,nt=r=>r instanceof RegExp,fe=r=>typeof r=="function",y=r=>r==null,rt=(r,t=!0)=>!!r||t&&r==="",dt=r=>y(r)||$(r)&&!r||f(r)&&r.length===0||h(r)&&Object.keys(r).length===0,at=r=>f(r)?r:[r],T=(r,...t)=>!!r&&t.every(e=>Object.prototype.hasOwnProperty.call(r,e)),ue=r=>typeof ArrayBuffer<"u"&&ArrayBuffer.isView(r),et=(r,t)=>{if(y(r)||_t(r)||x(r)||$(r))return r;if(R(r))return new Date(r);if(nt(r))return new RegExp(r);if(ue(r)){let e=r.constructor;return new e(r)}if(t instanceof Set||(t=new Set),t.has(r))throw new Error(ts);t.add(r);try{if(f(r)){let e=new Array(r.length);for(let n=0;n<r.length;n++)e[n]=et(r[n],t);return e}if(h(r)){let e={};for(let n of Object.keys(r))e[n]=et(r[n],t);return e}}finally{t.delete(r)}return r};function Ft(r){if(r.length===0)return[];if(r.some(e=>e.length===0))return[];if(r.length===1)return r[0].slice();let t=[Z.init(),Z.init()];r[r.length-1].forEach(e=>t[0].set(e,!0));for(let e=r.length-2;e>-1;e--){if(r[e].forEach(n=>{t[0].has(n)&&t[1].set(n,!0)}),t[1].size===0)return[];t.reverse(),t[1].clear()}return Array.from(t[0].keys())}function pt(r,t=1){let e=new Array;function n(o,s){for(let i=0,a=o.length;i<a;i++)f(o[i])&&(s>0||s<0)?n(o[i],Math.max(-1,s-1)):e.push(o[i])}return n(r,t),e}function Et(r){let t=Z.init();return r.forEach(e=>t.set(e,!0)),Array.from(t.keys())}function Bt(r,t){if(r.length<1)return new Map;let e=Z.init();for(let n=0;n<r.length;n++){let o=r[n],s=t(o,n)??null,i=e.get(s);i?i.push(o):(i=[o],e.set(s,i))}return e}function me(r,t){return le(r)?r[t]:void 0}function es(r,t){if(t<1)return r;for(;t--&&r.length===1&&f(r[0]);)r=r[0];return r}function P(r,t,e){let n=0;function o(i,a){let p=i;for(let c=0;c<a.length;c++){let l=a[c];if(/^\d+$/.exec(l)===null&&f(p)){if(c===0&&n>0)break;n+=1;let A=a.slice(c);p=p.reduce((b,d)=>{let g=o(d,A);return g!==void 0&&b.push(g),b},[]);break}else p=me(p,l);if(p===void 0)break}return p}let s=$n(r)?r:o(r,t.split("."));return f(s)&&e?.unwrapArray?es(s,n):s}function It(r,t,e){let n=t.indexOf("."),o=n==-1?t:t.substring(0,n),s=t.substring(n+1),i=n!=-1;if(f(r)){let c=/^\d+$/.test(o),l=c&&e?.preserveIndex?r.slice():[];if(c){let O=parseInt(o),A=me(r,O);i&&(A=It(A,s,e)),e?.preserveIndex?l[O]=A:l.push(A)}else for(let O of r){let A=It(O,t,e);e?.preserveMissing?l.push(A??Xt):(A!=null||e?.preserveIndex)&&l.push(A)}return l}let a=e?.preserveKeys?{...r}:{},p=me(r,o);if(i&&(p=It(p,s,e)),p!==void 0)return a[o]=p,a}function Er(r){if(f(r))for(let t=r.length-1;t>=0;t--)r[t]===Xt?r.splice(t,1):Er(r[t]);else if(h(r))for(let t of Object.keys(r))T(r,t)&&Er(r[t])}var En=/^\d+$/;function Jt(r,t,e,n){let o=t.split("."),s=o[0],i=o.slice(1).join(".");if(o.length===1)(h(r)||f(r)&&En.test(s))&&e(r,s);else{n?.buildGraph&&y(r[s])&&(r[s]={});let a=r[s];if(!a)return;let p=!!(o.length>1&&En.test(o[1]));f(a)&&n?.descendArray&&!p?a.forEach((c=>Jt(c,i,e,n))):Jt(a,i,e,n)}}function lt(r,t,e){Jt(r,t,(n,o)=>n[o]=e,{buildGraph:!0})}function Wt(r,t,e){Jt(r,t,((n,o)=>{f(n)?n.splice(parseInt(o),1):h(n)&&delete n[o]}),e)}var ot=r=>r&&r[0]==="$"&&/^\$[a-zA-Z0-9_]+$/.test(r);function Lt(r){if($n(r))return nt(r)?{$regex:r}:{$eq:r};if(le(r)){if(!Object.keys(r).some(ot))return{$eq:r};if(T(r,"$regex")){let t={...r};return t.$regex=new RegExp(r.$regex,r.$options),delete t.$options,t}}return r}function zt(r,t,e=M){let n=0,o=r.length-1;for(;n<=o;){let s=Math.round(n+(o-n)/2);if(e(t,r[s])<0)o=s-1;else if(e(t,r[s])>0)n=s+1;else return s}return n}var Tt=class{constructor(){this.root={children:new Map,isTerminal:!1}}add(t){let e=t.split("."),n=this.root;for(let o of e){if(n.isTerminal)return!1;n.children.has(o)||n.children.set(o,{children:new Map,isTerminal:!1}),n=n.children.get(o)}return n.isTerminal||n.children.size?!1:n.isTerminal=!0}};var $t=(o=>(o[o.CLONE_OFF=0]="CLONE_OFF",o[o.CLONE_INPUT=1]="CLONE_INPUT",o[o.CLONE_OUTPUT=2]="CLONE_OUTPUT",o[o.CLONE_ALL=3]="CLONE_ALL",o))($t||{}),S=class r{constructor(t,e){this.options=t;this.#t=e?{...e}:{}}#t;static init(t){return t instanceof r?new r(t.options,t.#t):new r({idKey:"_id",scriptEnabled:!0,useStrictMode:!0,failOnError:!0,processingMode:0,...t,context:t?.context?ft.from(t?.context):ft.init()})}update(t){return Object.assign(this.#t,t,{timestamp:this.#t.timestamp,variables:{...this.#t?.variables,...t?.variables}}),this}get local(){return this.#t}get now(){return this.#t?.timestamp||Object.assign(this.#t,{timestamp:Date.now()}),new Date(this.#t.timestamp)}get idKey(){return this.options.idKey}get collation(){return this.options?.collation}get processingMode(){return this.options?.processingMode}get useStrictMode(){return this.options?.useStrictMode}get scriptEnabled(){return this.options?.scriptEnabled}get failOnError(){return this.options?.failOnError}get collectionResolver(){return this.options?.collectionResolver}get jsonSchemaValidator(){return this.options?.jsonSchemaValidator}get variables(){return this.options?.variables}get context(){return this.options?.context}},Pt=(i=>(i.ACCUMULATOR="accumulator",i.EXPRESSION="expression",i.PIPELINE="pipeline",i.PROJECTION="projection",i.QUERY="query",i.WINDOW="window",i))(Pt||{}),ft=class r{#t=new Map(Object.values(Pt).map(t=>[t,{}]));constructor(){}static init(t={}){let e=new r;for(let[n,o]of Object.entries(t))e.#t.has(n)&&o&&e.addOps(n,o);return e}static from(...t){let e=new r;for(let n of t)for(let o of Object.values(Pt))e.addOps(o,n.#t.get(o));return e}addOps(t,e){return this.#t.set(t,Object.assign({},e,this.#t.get(t))),this}getOperator(t,e){return this.#t.get(t)[e]??null}addAccumulatorOps(t){return this.addOps("accumulator",t)}addExpressionOps(t){return this.addOps("expression",t)}addQueryOps(t){return this.addOps("query",t)}addPipelineOps(t){return this.addOps("pipeline",t)}addProjectionOps(t){return this.addOps("projection",t)}addWindowOps(t){return this.addOps("window",t)}};function u(r,t,e,n){let o=!(n instanceof S)||y(n.local.root)?S.init(n).update({root:r}):n;return ot(e)?Tn(r,t,e,o):$r(r,t,o)}var ns=["$$ROOT","$$CURRENT","$$REMOVE","$$NOW"];function $r(r,t,e){if($(t)&&t.length>0&&t[0]==="$"){if(t==="$$KEEP"||t==="$$PRUNE"||t==="$$DESCEND")return t;let n=e.local.root,o=t.split(".");if(ns.includes(o[0])){switch(o[0]){case"$$ROOT":break;case"$$CURRENT":n=r;break;case"$$REMOVE":n=void 0;break;case"$$NOW":n=new Date(e.now);break}t=t.slice(o[0].length+1)}else if(o[0].slice(0,2)==="$$"){n=Object.assign({},e.variables,{this:r},e?.local?.variables);let s=o[0].slice(2);m(T(n,s),`Use of undefined variable: ${s}`),t=t.slice(2)}else t=t.slice(1);return t===""?n:P(n,t)}if(f(t))return t.map(n=>$r(r,n,e));if(h(t)){let n={},o=Object.entries(t);for(let[s,i]of o){if(ot(s))return m(o.length===1,`Expression must contain a single operator. got [${Object.keys(t).join(",")}]`),Tn(r,i,s,e);n[s]=$r(r,i,e)}return n}return t}function Tn(r,t,e,n){let o=n.context,s=o.getOperator("expression",e);if(s)return s(r,t,n);let i=o.getOperator("accumulator",e);return m(!!i,`accumulator '${e}' is not registered.`),f(r)||(r=$r(r,t,n),t=null),m(f(r),`arguments must resolve to array for ${e}.`),i(r,t,n)}function _(r){return r instanceof Zt?r:new Zt(r)}function Nt(...r){let t=0;return _(()=>{for(;t<r.length;){let e=r[t].next();if(!e.done)return e;t++}return{done:!0,value:void 0}})}function os(r){return!!r&&typeof r=="object"&&typeof r?.next=="function"}function ss(r){return!!r&&(typeof r=="object"||typeof r=="function")&&typeof r[Symbol.iterator]=="function"}var Zt=class{#t=[];#r=[];#e;#o=!1;constructor(t){let e=ss(t)?t[Symbol.iterator]():os(t)?t:typeof t=="function"?{next:t}:null;m(!!e,"Iterator must be initialized with an iterable or function.");let n=-1,o={done:!1};this.#e=()=>{for(;!o.done&&(o=e.next(),!o.done);){let s=o.value;if(n++,this.#t.every(({op:a,fn:p})=>{let c=p(s,n);return a==="map"?!!(s=c)||!0:c}))return{value:s,done:!1}}return{done:!0}}}push(t,e){return this.#t.push({op:t,fn:e}),this}next(){return this.#e()}map(t){return this.push("map",t)}filter(t){return this.push("filter",t)}take(t){return m(t>=0,"value must be a non\u2011negative integer"),this.filter(e=>t-- >0)}drop(t){return m(t>=0,"value must be a non\u2011negative integer"),this.filter(e=>t--<=0)}transform(t){let e=this,n;return _(()=>(n||(n=_(t(e.collect()))),n.next()))}collect(){for(;!this.#o;){let{done:t,value:e}=this.#e();t||this.#r.push(e),this.#o=t}return this.#r}each(t){for(let e=this.next();e.done!==!0;e=this.next())t(e.value)}reduce(t,e){let n=this.next();for(e===void 0&&!n.done&&(e=n.value,n=this.next());!n.done;)e=t(e,n.value),n=this.next();return e}size(){return this.collect().length}[Symbol.iterator](){return this}};var Ot=class{#t;#r;constructor(t,e){this.#t=t,this.#r=S.init(e)}stream(t,e){let n=_(t),o=e??this.#r,s=o.processingMode;return s&1&&n.map(i=>et(i)),n=this.#t.map((i,a)=>{let p=Object.keys(i);m(p.length===1,`aggregation stage must have single operator, got ${p.toString()}.`);let c=p[0];m(c!=="$documents"||a==0,"$documents must be first stage in pipeline.");let l=o.context.getOperator("pipeline",c);return m(!!l,`unregistered pipeline operator ${c}.`),[l,i[c]]}).reduce((i,[a,p])=>a(i,p,o),n),s&2&&n.map(i=>et(i)),n}run(t,e){return this.stream(t,e).collect()}};var ge={};ht(ge,{$accumulator:()=>is,$addToSet:()=>as,$avg:()=>ps,$bottom:()=>ms,$bottomN:()=>ye,$count:()=>ls,$covariancePop:()=>fs,$covarianceSamp:()=>ys,$first:()=>Oe,$firstN:()=>wr,$last:()=>Ae,$lastN:()=>Sr,$max:()=>Os,$maxN:()=>Cr,$median:()=>be,$mergeObjects:()=>de,$min:()=>As,$minN:()=>kr,$percentile:()=>pr,$push:()=>N,$stdDevPop:()=>bs,$stdDevSamp:()=>ds,$sum:()=>xs,$top:()=>gs,$topN:()=>xe});var N=(r,t,e)=>{if(y(t))return r;let n=S.init(e);return r.map(o=>u(o,t,null,n.update({root:o}))??null)};var is=(r,t,e)=>{m(e.scriptEnabled,"$accumulator requires 'scriptEnabled' option to be true");let n=S.init(e),o=u(n?.local?.groupId,t.initArgs||[],null,n.update({root:n?.local?.groupId})),s=N(r,t.accumulateArgs,n);s.forEach(p=>p.forEach((c,l)=>p[l]=c??null));let i=t.init.apply(null,o),a=s.reduce((p,c)=>t.accumulate.apply(null,[p,...c]),i);return t.finalize?t.finalize.call(null,a):a};var as=(r,t,e)=>Et(N(r,t,e));var ps=(r,t,e)=>{let n=N(r,t,e).filter(x);return n.length===0?null:n.reduce((s,i)=>s+i,0)/n.length};var st=(r,t,e)=>{if(dt(t)||!h(t))return r;m(h(t)&&Object.keys(t).length>0,"$sort specification is invalid");let n=M,o=e.collation;return h(o)&&$(o.locale)&&(n=us(o)),r.transform(s=>{let i=Object.keys(t);for(let a of i.reverse()){let p=Bt(s,A=>P(A,a)),c=Array.from(p.keys()),l=!1;if(n===M){let A=!0,b=!0;l=c.every(d=>+(A&&=$(d))^+(b&&=x(d))),A?c.sort():b&&new Float64Array(c).sort().forEach((d,g)=>c[g]=d)}l||c.sort(n),t[a]===-1&&c.reverse();let O=0;for(let A of c)for(let b of p.get(A))s[O++]=b;m(O==s.length,"bug: counter must match collection size.")}return s})},cs={1:"base",2:"accent",3:"variant"};function us(r){let t={sensitivity:cs[r.strength||3],caseFirst:r.caseFirst==="off"?"false":r.caseFirst||"false",numeric:r.numericOrdering||!1,ignorePunctuation:r.alternate==="shifted"};r.caseLevel===!0&&(t.sensitivity==="base"&&(t.sensitivity="case"),t.sensitivity==="accent"&&(t.sensitivity="variant"));let e=new Intl.Collator(r.locale,t);return(n,o)=>{if(!$(n)||!$(o))return M(n,o);let s=e.compare(n,o);return s<0?-1:s>0?1:0}}var ye=(r,t,e)=>{let n=e,o=u(n?.local?.groupId,t.n,null,n),s=st(_(r),t.sortBy,e).collect(),i=s.length;return N(i<=o?s:s.slice(i-o),t.output,n)};var ms=(r,t,e)=>ye(r,{...t,n:1},e);var ls=(r,t,e)=>r.length;function Ir(r,t=!0){let e=r.reduce((s,i)=>s+i,0),n=Math.max(r.length,1),o=e/n;return Math.sqrt(r.reduce((s,i)=>s+Math.pow(i-o,2),0)/(n-Number(t)))}function Tr(r,t=!0){if(r.length<2)return t?null:0;let e=0,n=0;for(let[s,i]of r)e+=s,n+=i;e/=r.length,n/=r.length;let o=0;for(let[s,i]of r)o+=(s-e)*(i-n);return o/(r.length-Number(t))}var fs=(r,t,e)=>Tr(N(r,t,e),!1);var ys=(r,t,e)=>Tr(N(r,t,e),!0);var Oe=(r,t,e)=>{let n=r[0],o=S.init(e).update({root:n});return u(n,t,null,o)??null};var B={int:{int:!0},pos:{min:1,int:!0},index:{min:0,int:!0},nzero:{min:0,max:0,int:!0}},Nn={int:{type:"integers"},obj:{type:"objects"}};function K(r,t){return m(!r,t),null}function Nr(r,t){let e=`${t} expression must resolve to object`;return m(!r,e),null}function X(r,t){let e=`${t} expression must resolve to string`;return m(!r,e),null}function I(r,t,e){let n=e?.int?"integer":"number",o=e?.min??-1/0,s=e?.max??1/0,i;return o===0&&s===0?i=`${t} expression must resolve to non-zero ${n}`:o===0&&s===1/0?i=`${t} expression must resolve to non-negative ${n}`:o!==-1/0&&s!==1/0?i=`${t} expression must resolve to ${n} in range [${o}, ${s}]`:o>0?i=`${t} expression must resolve to positive ${n}`:i=`${t} expression must resolve to ${n}`,m(!r,i),null}function E(r,t,e){let n="array";!y(e?.size)&&e?.size>=0&&(n=e.size===0?"non-zero array":`array(${e.size})`),e?.type&&(n=`array of ${e.type}`);let o=`${t} expression must resolve to ${n}`;return m(!r,o),null}var wr=(r,t,e)=>{let n=e.failOnError,o=e,s=r.length,i=u(o?.local?.groupId,t.n,null,o);return!v(i)||i<1?I(n,"$firstN 'n'",B.pos):N(s<=i?r:r.slice(0,i),t.input,e)};var Ae=(r,t,e)=>{let n=r[r.length-1],o=S.init(e).update({root:n});return u(n,t,null,o)??null};var Sr=(r,t,e)=>{let n=e,o=r.length,s=u(n?.local?.groupId,t.n,null,n),i=e.failOnError;return!v(s)||s<1?I(i,"$lastN 'n'",B.pos):N(o<=s?r:r.slice(o-s),t.input,e)};var Os=(r,t,e)=>{let n=N(r,t,e).filter(o=>!y(o));return n.length?n.reduce((o,s)=>M(o,s)>=0?o:s):null};var Cr=(r,t,e)=>{let n=e,o=r.length,s=u(n?.local?.groupId,t.n,null,n);if(!v(s)||s<1)return I(e.failOnError,"$maxN 'n'",B.pos);let i=N(r,t.input,e).filter(a=>!y(a));return i.sort((a,p)=>-1*M(a,p)),o<=s?i:i.slice(0,s)};var pr=(r,t,e)=>{m(h(t)&&T(t,"input","p")&&f(t.p),"$percentile expects object { input, p }");let n=N(r,t.input,e).filter(x).sort(),o=N(t.p,"$$CURRENT",e),s=t.method||"approximate";for(let i of o)if(!x(i)||i<0||i>1)return K(e.failOnError,"$percentile 'p' must resolve to array of numbers between [0.0, 1.0]");return o.map(i=>{let a=i*(n.length-1)+1,p=Math.floor(a),c=a===p?n[a-1]:n[p-1]+a%1*(n[p]-n[p-1]||0);switch(s){case"exact":return c;case"approximate":{let l=zt(n,c);return l/n.length>=i?n[Math.max(l-1,0)]:n[l]}}})};var be=(r,t,e)=>pr(r,{...t,p:[.5]},e).pop();var de=(r,t,e)=>{let n={};for(let o of r)if(!y(o))for(let s of Object.keys(o))o[s]!==void 0&&(n[s]=o[s]);return n};var As=(r,t,e)=>{let n=N(r,t,e).filter(o=>!y(o));return n.length?n.reduce((o,s)=>M(o,s)<=0?o:s):null};var kr=(r,t,e)=>{let n=e,o=r.length,s=u(n?.local?.groupId,t.n,null,n);if(!v(s)||s<1)return I(e.failOnError,"$minN 'n'",B.pos);let i=N(r,t.input,e).filter(a=>!y(a));return i.sort(M),o<=s?i:i.slice(0,s)};var bs=(r,t,e)=>Ir(N(r,t,e).filter(x),!1);var ds=(r,t,e)=>Ir(N(r,t,e).filter(x),!0);var xs=(r,t,e)=>x(t)?r.length*t:N(r,t,e).filter(x).reduce((o,s)=>o+s,0);var xe=(r,t,e)=>{let n=e,{n:o,sortBy:s}=u(n?.local?.groupId,t,null,n),i=st(_(r),s,e).take(o).collect();return N(i,t.output,n)};var gs=(r,t,e)=>xe(r,{...t,n:1},e);var Ze={};ht(Ze,{$abs:()=>hs,$acos:()=>Ta,$acosh:()=>Na,$add:()=>js,$allElementsTrue:()=>Gi,$and:()=>Cn,$anyElementTrue:()=>Hi,$arrayElemAt:()=>Us,$arrayToObject:()=>Vs,$asin:()=>wa,$asinh:()=>Sa,$atan:()=>Ca,$atan2:()=>ka,$atanh:()=>Ma,$bitAnd:()=>oi,$bitNot:()=>si,$bitOr:()=>ii,$bitXor:()=>ai,$ceil:()=>Es,$cmp:()=>_n,$concat:()=>ea,$concatArrays:()=>Fs,$cond:()=>Ai,$convert:()=>da,$cos:()=>_a,$cosh:()=>Pa,$dateAdd:()=>qt,$dateDiff:()=>$i,$dateFromParts:()=>Ni,$dateFromString:()=>Mi,$dateSubtract:()=>_i,$dateToParts:()=>Pi,$dateToString:()=>vi,$dateTrunc:()=>Vi,$dayOfMonth:()=>Pe,$dayOfWeek:()=>De,$dayOfYear:()=>ve,$degreesToRadians:()=>va,$divide:()=>$s,$eq:()=>zn,$exp:()=>Is,$filter:()=>Bs,$first:()=>Ws,$firstN:()=>Ls,$floor:()=>Ts,$function:()=>Ce,$getField:()=>Li,$gt:()=>Qn,$gte:()=>qn,$hour:()=>Re,$ifNull:()=>Se,$in:()=>zs,$indexOfArray:()=>Qs,$indexOfBytes:()=>na,$isArray:()=>qs,$isNumber:()=>xa,$isoDayOfWeek:()=>Ue,$isoWeek:()=>Ve,$isoWeekYear:()=>Fi,$last:()=>Ks,$lastN:()=>Ys,$let:()=>La,$literal:()=>Bi,$ln:()=>Ns,$log:()=>ws,$log10:()=>Ss,$lt:()=>Kn,$lte:()=>Yn,$ltrim:()=>sa,$map:()=>Gs,$maxN:()=>Hs,$median:()=>Wi,$mergeObjects:()=>Qe,$millisecond:()=>Fe,$minN:()=>Xs,$minute:()=>Be,$mod:()=>Cs,$month:()=>We,$multiply:()=>ks,$ne:()=>Gn,$not:()=>kn,$objectToArray:()=>qi,$or:()=>Mn,$percentile:()=>Yi,$pow:()=>Ms,$radiansToDegrees:()=>Ua,$rand:()=>zi,$range:()=>Js,$reduce:()=>Zs,$regexFind:()=>ia,$regexFindAll:()=>aa,$regexMatch:()=>pa,$replaceAll:()=>ca,$replaceOne:()=>ua,$reverseArray:()=>ti,$round:()=>_s,$rtrim:()=>ma,$sampleRate:()=>Qi,$second:()=>Le,$setDifference:()=>Xi,$setEquals:()=>Ji,$setField:()=>qe,$setIntersection:()=>Zi,$setIsSubset:()=>ta,$setUnion:()=>ra,$sigmoid:()=>Ps,$sin:()=>Va,$sinh:()=>Fa,$size:()=>ri,$slice:()=>je,$sortArray:()=>ei,$split:()=>la,$sqrt:()=>Ds,$strLenBytes:()=>ya,$strLenCP:()=>Oa,$strcasecmp:()=>fa,$substr:()=>Aa,$substrBytes:()=>Ye,$substrCP:()=>ba,$subtract:()=>vs,$switch:()=>bi,$tan:()=>Ba,$tanh:()=>Wa,$toBool:()=>Ge,$toDate:()=>He,$toDecimal:()=>ga,$toDouble:()=>Or,$toHashedIndexKey:()=>Ia,$toInt:()=>Xe,$toLong:()=>Je,$toLower:()=>ja,$toString:()=>Yt,$toUpper:()=>Ea,$trim:()=>$a,$trunc:()=>Rs,$type:()=>ha,$unsetField:()=>Ki,$week:()=>ze,$year:()=>Jr,$zip:()=>ni});var hs=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:typeof n!="number"?I(e.failOnError,"$abs"):Math.abs(n)};var wn="$add expression must resolve to array of numbers.",js=(r,t,e)=>{let n=u(r,t,null,e),o=e.failOnError,s=!1,i=0;if(!f(n))return K(o,wn);for(let a of n){if(y(a))return null;if(typeof a=="number")i+=a;else if(R(a)){if(s)return K(o,"$add must only have one date");s=!0,i+=+a}else return K(o,wn)}return s?new Date(i):i};var Es=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:typeof n!="number"?I(e.failOnError,"$ceil"):Math.ceil(n)};var $s=(r,t,e)=>{m(f(t),"$divide expects array(2)");let n=u(r,t,null,e),o=e.failOnError;if(n.some(y))return null;if(!n.every(x))return E(o,"$divide",{size:2,type:"number"});let[s,i]=n;return i===0?K(o,"$divide cannot divide by zero"):s/i};var Is=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:typeof n!="number"?I(e.failOnError,"$exp"):Math.exp(n)};var Ts=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:typeof n!="number"?I(e.failOnError,"$floor"):Math.floor(n)};var Ns=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:typeof n!="number"?I(e.failOnError,"$ln"):Math.log(n)};var ws=(r,t,e)=>{let n=u(r,t,null,e);if(f(n)&&n.length==2){if(n.some(y))return null;if(n.every(o=>typeof o=="number"))return Math.log10(n[0])/Math.log10(n[1])}return E(e.failOnError,"$log",{size:2,type:"number"})};var Ss=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:typeof n=="number"?Math.log10(n):I(e.failOnError,"$log10")};var Cs=(r,t,e)=>{let n=u(r,t,null,e),o=!f(n)||n.length!=2;return o||=!n.every(s=>typeof s=="number"),o?E(e.failOnError,"$mod",{size:2,type:"number"}):n[0]%n[1]};var ks=(r,t,e)=>{m(f(t),"$multiply expects array");let n=u(r,t,null,e),o=e.failOnError;if(n.some(y))return null;let s=1;for(let i of n){if(!x(i))return E(o,"$multiply",{type:"number"});s*=i}return s};var Ms=(r,t,e)=>{m(f(t)&&t.length===2,"$pow expects array(2)");let n=u(r,t,null,e),o=e.failOnError;if(n.some(y))return null;if(!n.every(x))return E(o,"$pow",{size:2,type:"number"});let[s,i]=n;return s===0&&i<0?K(o,"$pow cannot raise 0 to a negative exponent"):Math.pow(s,i)};function Mr(r,t,e){let{name:n,roundOff:o,failOnError:s}=e;if(y(r))return null;if(Number.isNaN(r)||Math.abs(r)===1/0)return r;if(!x(r))return I(s,`${n} arg1 <number>`);if(!v(t)||t<-20||t>100)return I(s,`${n} arg2 <precision>`,{min:-20,max:100,int:!0});let i=Math.abs(r)===r?1:-1;r=Math.abs(r);let a=Math.trunc(r),p=parseFloat((r-a).toFixed(Math.abs(t)+1));if(t===0){let c=Math.trunc(10*p);o&&((a&1)===1&&c>=5||c>5)&&a++}else if(t>0){let c=Math.pow(10,t),l=Math.trunc(p*c),O=Math.trunc(p*c*10)%10;o&&O>5&&(l+=1),a=(a*c+l)/c}else if(t<0){let c=Math.pow(10,-1*t),l=a%c;if(a=Math.max(0,a-l),o&&i===-1){for(;l>10;)l-=l/10;a>0&&l>=5&&(a+=c)}}return a*i}var _s=(r,t,e)=>{m(f(t),"$round expects array(2)");let[n,o]=u(r,t,null,e);return Mr(n,o??0,{name:"$round",roundOff:!0,failOnError:e.failOnError})};var Sn=1e10,Ps=(r,t,e)=>{if(y(t))return null;let n=u(r,t,null,e),{input:o,onNull:s}=h(n)?n:{input:n};if(y(o))return x(s)?s:null;if(x(o)){let i=1/(1+Math.exp(-o));return Math.round(i*Sn)/Sn}return I(e.failOnError,"$sigmoid")};var Ds=(r,t,e)=>{let n=u(r,t,null,e),o=!e.failOnError;return y(n)?null:typeof n!="number"||n<0?(m(o,"$sqrt expression must resolve to non-negative number."),null):Math.sqrt(n)};var vs=(r,t,e)=>{m(f(t),"$subtract expects array(2)");let n=u(r,t,null,e);if(n.some(y))return null;let o=e.failOnError,[s,i]=n;return R(s)&&x(i)?new Date(+s-Math.round(i)):R(s)&&R(i)?+s-+i:n.every(a=>typeof a=="number")?s-i:x(s)&&R(i)?K(o,"$subtract cannot subtract date from number"):E(o,"$subtract",{size:2,type:"number|date"})};var Rs=(r,t,e)=>{m(f(t),"$trunc expects array(2)");let[n,o]=u(r,t,null,e);return Mr(n,o??0,{name:"$trunc",roundOff:!1,failOnError:e.failOnError})};var he="$arrayElemAt",Us=(r,t,e)=>{m(f(t)&&t.length===2,`${he} expects array(2)`);let n=u(r,t,null,e);if(n.some(y))return null;let o=e.failOnError,[s,i]=n;if(!f(s))return E(o,`${he} arg1 <array>`);if(!v(i))return I(o,`${he} arg2 <index>`,B.int);if(i<0&&Math.abs(i)<=s.length)return s[(i+s.length)%s.length];if(i>=0&&i<s.length)return s[i]};var _r={generic:{type:"key-value pairs"},array:{type:"[k,v]"},object:{type:"{k,v}"}},Vs=(r,t,e)=>{let n=e.failOnError,o=u(r,t,null,e);if(y(o))return null;if(!f(o))return E(n,"$arrayToObject",_r.generic);let s=0,i={};for(let a of o)if(f(a)){let p=pt(a);if(s||(s=1),s!==1)return E(n,"$arrayToObject",_r.object);let[c,l]=p;i[c]=l}else if(h(a)&&T(a,"k")&&T(a,"v")){if(s||(s=2),s!==2)return E(n,"$arrayToObject",_r.array);let{k:p,v:c}=a;i[p]=c}else return E(n,"$arrayToObject",_r.generic);return i};var Fs=(r,t,e)=>{let n=u(r,t,null,e),o=e.failOnError;if(y(n))return null;if(!f(n))return E(o,"$concatArrays");let s=0;for(let p of n){if(y(p))return null;if(!f(p))return E(o,"$concatArrays");s+=p.length}let i=new Array(s),a=0;for(let p of n)for(let c of p)i[a++]=c;return i};var Bs=(r,t,e)=>{m(h(t)&&T(t,"input","cond"),"$filter expects object { input, as, cond, limit }");let n=u(r,t.input,null,e),o=e.failOnError;if(y(n))return null;if(!f(n))return E(o,"$filter 'input'");let s=t.limit??Math.max(n.length,1);if(!v(s)||s<1)return I(o,"$filter 'limit'",{min:1,int:!0});if(n.length===0)return[];let i=S.init(e),a=t?.as||"this",p={variables:{[a]:null}},c=[];for(let l=0,O=0;l<n.length&&O<s;l++){p.variables[a]=n[l];let A=u(r,t.cond,null,i.update(p));rt(A,e.useStrictMode)&&(c.push(n[l]),O++)}return c};var Ws=(r,t,e)=>{if(f(r))return Oe(r,t,e);let n=u(r,t,null,e);return y(n)?null:f(n)?pt(n)[0]:E(e.failOnError,"$first")};var Ls=(r,t,e)=>{if(m(h(t)&&T(t,"input","n"),"$firstN expects object { input, n }"),f(r))return wr(r,t,e);let{input:n,n:o}=u(r,t,null,e);return y(n)?null:f(n)?wr(n,{n:o,input:"$$this"},e):E(e.failOnError,"$firstN 'input'")};var zs=(r,t,e)=>{m(f(t)&&t.length===2,"$in expects array(2)");let n=u(r,t,null,e),[o,s]=n;return f(s)?s.some(i=>G(i,o)):K(e.failOnError,"$in arg2 <array>")};var Pr="$indexOfArray",Qs=(r,t,e)=>{m(f(t)&&t.length>1&&t.length<5,`${Pr} expects array(4)`);let n=u(r,t,null,e),o=e.failOnError,s=n[0];if(y(s))return null;if(!f(s))return E(o,`${Pr} arg1 <array>`);let i=n[1],a=n[2]??0,p=n[3]??s.length;return!v(a)||a<0?I(o,`${Pr} arg3 <start>`,B.pos):!v(p)||p<0?I(o,`${Pr} arg4 <end>`,B.pos):a>p?-1:(a>0||p<s.length?s.slice(a,p):s).findIndex(l=>G(l,i))+a};var qs=(r,t,e)=>{let n=t;return f(t)&&(m(t.length===1,"$isArray expects array(1)"),n=t[0]),f(u(r,n,null,e))};var Ks=(r,t,e)=>{if(f(r))return Ae(r,t,e);let n=u(r,t,null,e);return y(n)?null:!f(n)||n.length===0?E(e.failOnError,"$last",{size:0}):pt(n)[n.length-1]};var Ys=(r,t,e)=>{if(m(h(t)&&T(t,"input","n"),"$lastN expects object { input, n }"),f(r))return Sr(r,t,e);let{input:n,n:o}=u(r,t,null,e);return y(n)?null:f(n)?Sr(n,{n:o,input:"$$this"},e):E(e.failOnError,"$lastN 'input'")};var Gs=(r,t,e)=>{m(h(t)&&T(t,"input","in"),"$map expects object { input, as, in }");let n=u(r,t.input,null,e),o=e.failOnError;if(y(n))return null;if(!f(n))return E(o,"$map 'input'");if(!y(t.as)&&!$(t.as))return X(o,"$map 'as'");let s=S.init(e),i=t.as||"this",a={variables:{[i]:null}};return n.map(p=>(a.variables[i]=p,u(r,t.in,null,s.update(a))))};var Hs=(r,t,e)=>{if(m(h(t)&&T(t,"input","n"),"$maxN expects object { input, n }"),f(r))return Cr(r,t,e);let{input:n,n:o}=u(r,t,null,e);return y(n)?null:f(n)?Cr(n,{n:o,input:"$$this"},e):E(e.failOnError,"$maxN 'input'")};var Xs=(r,t,e)=>{if(m(h(t)&&T(t,"input","n"),"$minN expects object { input, n }"),f(r))return kr(r,t,e);let{input:n,n:o}=u(r,t,null,e);return y(n)?null:f(n)?kr(n,{n:o,input:"$$this"},e):E(e.failOnError,"$minN 'input'")};var Js=(r,t,e)=>{m(f(t)&&t.length>1&&t.length<4,"$range expects array(3)");let[n,o,s]=u(r,t,null,e),i=e.failOnError,a=s??1;if(!v(n))return I(i,"$range arg1 <start>",B.int);if(!v(o))return I(i,"$range arg2 <end>",B.int);if(!v(a)||a===0)return I(i,"$range arg3 <step>",B.nzero);let p=new Array,c=n;for(;c<o&&a>0||c>o&&a<0;)p.push(c),c+=a;return p};var Zs=(r,t,e)=>{m(h(t)&&T(t,"input","initialValue","in"),"$reduce expects object { input, initialValue, in }");let n=u(r,t.input,null,e),o=u(r,t.initialValue,null,e),s=t.in;if(y(n))return null;if(!f(n))return E(e.failOnError,"$reduce 'input'");let i=S.init(e),a={variables:{value:null}};return n.reduce((p,c)=>(a.variables.value=p,u(c,s,null,i.update(a))),o)};var ti=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:f(n)?n.slice().reverse():E(e.failOnError,"$reverseArray")};var ri=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:f(n)?n.length:I(e.failOnError,"$size")};var je=(r,t,e)=>{m(f(t)&&t.length>1&&t.length<4,"$slice expects array(3)");let n=e.failOnError,o=u(r,t,null,e),s=o[0],i=o[1],a=o[2];if(!f(s))return E(n,"$slice arg1 <array>");if(!v(i))return I(n,"$slice arg2 <n>",B.int);if(!y(a)&&!v(a))return I(n,"$slice arg3 <n>",B.int);if(y(a))i<0?i=Math.max(0,s.length+i):(a=i,i=0);else{if(i<0&&(i=Math.max(0,s.length+i)),a<1)return I(n,"$slice arg3 <n>",B.pos);a+=i}return s.slice(i,a)};var ei=(r,t,e)=>{m(h(t)&&"input"in t&&"sortBy"in t,"$sortArray expects object { input, sortBy }");let{input:n,sortBy:o}=u(r,t,null,e);if(y(n))return null;if(!f(n))return E(e.failOnError,"$sortArray 'input'");if(h(o))return st(_(n),o,e).collect();let s=n.slice().sort(M);return o===-1&&s.reverse(),s};var ni=(r,t,e)=>{m(h(t)&&T(t,"inputs"),"$zip received invalid arguments");let n=u(r,t.inputs,null,e),o=u(r,t.defaults,null,e)??[],s=t.useLongestLength??!1,i=e.failOnError;if(y(n))return null;if(!f(n))return E(i,"$zip 'inputs'");let a=0;for(let l of n){if(y(l))return null;f(l)||a++}if(a)return E(i,"$zip elements of 'inputs'");_t(s)||K(i,"$zip 'useLongestLength' must be boolean"),f(o)&&o.length>0&&m(s&&o.length===n.length,"$zip 'useLongestLength' must be set to true to use 'defaults'");let p=0;for(let l of n)p=s?Math.max(p,l.length):Math.min(p||l.length,l.length);let c=[];for(let l=0;l<p;l++){let O=n.map((A,b)=>y(A[l])?o[b]??null:A[l]);c.push(O)}return c};function tr(r,t,e,n,o){m(f(t),`${n} expects array as argument`);let s=u(r,t,null,e);return s.some(y)?null:s.every(x)?o(s):K(e.failOnError,`${n} array elements must resolve to integers`)}var oi=(r,t,e)=>tr(r,t,e,"$bitAnd",n=>n.reduce((o,s)=>o&s,-1));var si=(r,t,e)=>{let n=u(r,t,null,e);return y(n)?null:v(n)?~n:I(e.failOnError,"$bitNot",B.int)};var ii=(r,t,e)=>tr(r,t,e,"$bitOr",n=>n.reduce((o,s)=>o|s,0));var ai=(r,t,e)=>tr(r,t,e,"$bitXor",n=>n.reduce((o,s)=>o^s,0));var cr={};ht(cr,{$and:()=>Cn,$not:()=>kn,$or:()=>Mn});var Cn=(r,t,e)=>{m(f(t),"$and expects array");let n=e.useStrictMode;return t.every(o=>rt(u(r,o,null,e),n))};var kn=(r,t,e)=>{let n=at(t);return n.length===0?!1:n.length>1?E(e.failOnError,"$not",{size:1}):!u(r,n[0],null,e)};var Mn=(r,t,e)=>{m(f(t),"$or expects array of expressions");let n=e.useStrictMode;return t.some(o=>rt(u(r,o,null,e),n))};var mr={};ht(mr,{$cmp:()=>_n,$eq:()=>zn,$gt:()=>Qn,$gte:()=>qn,$lt:()=>Kn,$lte:()=>Yn,$ne:()=>Gn});var _n=(r,t,e)=>{m(f(t)&&t.length===2,"$cmp expects array(2)");let[n,o]=u(r,t,null,e);return M(n,o)};var Ee=(r,t,e)=>r.take(t);var $e=(r,t,e)=>{let n=u(null,t,null,e);m(f(n),"$documents: expression must resolve to an array.");let o=_(n);return e.processingMode&3?o.map(i=>et(i)):o};function Dr(r,t){let e=!!r&&r[0]?.$documents;return e?{documents:$e(null,e,t).collect(),pipeline:r.slice(1)}:{pipeline:r}}function Ie(r,t,e=!0){let n={exclusions:[],inclusions:[],positional:0},o=Object.keys(r);m(o.length,"Invalid empty sub-projection");let s=t?.idKey,i=!1;for(let a of o){if(a.startsWith("$"))return m(!e&&o.length===1,`FieldPath field names may not start with '$', given '${a}'.`),n;a.endsWith(".$")&&n.positional++;let p=r[a];if(p===!1||x(p)&&p===0)a===s?i=!0:n.exclusions.push(a);else if(!h(p))n.inclusions.push(a);else{let c=Ie(p,t,!1);!c.inclusions.length&&!c.exclusions.length?n.inclusions.includes(a)||n.inclusions.push(a):(c.inclusions.forEach(l=>n.inclusions.push(`${a}.${l}`)),c.exclusions.forEach(l=>n.exclusions.push(`${a}.${l}`))),n.positional+=c.positional}m(!(n.exclusions.length&&n.inclusions.length),"Cannot do exclusion and inclusion in projection."),m(n.positional<=1,"Cannot specify more than one positional projection.")}if(i&&n.exclusions.push(s),e){let a=new Tt;n.exclusions.forEach(p=>m(a.add(p),`Path collision at ${p}.`)),n.inclusions.forEach(p=>m(a.add(p),`Path collision at ${p}.`)),n.exclusions.sort(),n.inclusions.sort()}return n}var Qt=(r,t,e)=>{if(dt(t))return r;let n=Ie(t,e),o=pi(t,S.init(e),n);return r.map(o)};function pi(r,t,e){let n=t.idKey,{exclusions:o,inclusions:s}=e,i={},a={preserveMissing:!0};for(let A of o)i[A]=(b,d)=>{Wt(b,A,{descendArray:!0})};for(let A of s){let b=P(r,A)??r[A];if(A.endsWith(".$")&&b===1){let d=t?.local?.condition;m(d,"positional operator '.$' couldn't find matching element in the array.");let g=A.slice(0,-2);i[g]=mi(g,d,t);continue}if(f(b))i[A]=(d,g)=>{t.update({root:g});let j=b.map(k=>u(g,k,null,t)??null);lt(d,A,j)};else if(x(b)||b===!0)i[A]=(d,g)=>{t.update({root:g});let j=It(g,A,a);Dn(d,j)};else if(h(b)==!1)i[A]=(d,g)=>{t.update({root:g});let j=u(g,b,null,t);lt(d,A,j)};else{let d=Object.keys(b);m(d.length===1&&ot(d[0]),"Not a valid operator");let g=d[0],j=b[g],k=t.context.getOperator("projection",g);!k||g==="$slice"&&!at(j).every(x)?i[A]=(D,U)=>{t.update({root:U});let w=u(U,j,g,t);lt(D,A,w)}:i[A]=(D,U)=>{t.update({root:U});let w=k(U,j,A,t);lt(D,A,w)}}}let p=o.length===1&&o.includes(n),c=!o.includes(n),l=!s.length,O=l&&p||l&&o.length&&!p;return A=>{let b={};O&&Object.assign(b,A);for(let d in i)i[d](b,A);return l||Er(b),c&&!T(b,n)&&T(A,n)&&(b[n]=P(A,n)),b}}var Pn=(r,t,e,n)=>{let o=P(r,t);f(o)||(o=P(o,e)),m(f(o),"must resolve to array");let s=[];return o.forEach((i,a)=>n({[e]:[i]})&&s.push(a)),s},ci=r=>t=>!r(t),ui={$and:1,$or:1,$nor:1};function mi(r,t,e){let n=Object.entries(t).slice(),o={$and:[],$or:[]};for(let p=0;p<n.length;p++){let[c,l,O]=n[p];if(c===r||c.startsWith(r+".")){let[A,b]=Object.entries(Lt(l)).pop(),d=e.context.getOperator("query",A),g=c.substring(c.lastIndexOf(".")+1),j=d(g,b,e);!O||O==="$and"?o.$and.push([c,j,g]):O==="$nor"?o.$and.push([c,ci(j),g]):O==="$or"&&o.$or.push([c,j,g])}else if(ot(c)){m(ui[c],`${c} is not allowed in this context`);for(let A of l)Object.entries(A).forEach(([b,d])=>n.push([b,d,c]))}}let s=r.lastIndexOf("."),i=r.substring(0,s)||r,a=r.substring(s+1);return(p,c)=>{let l=[];for(let[b,d,g]of o.$and)l.push(Pn(c,b,g,d));if(o.$or.length){let b=[];for(let[d,g,j]of o.$or)b.push(...Pn(c,d,j,g));l.push(Et(b))}let O=Ft(l).sort()[0],A=P(c,r)[O];i!=a&&!h(A)&&(A={[a]:A}),lt(p,i,[A])}}function Dn(r,t){if(r===Xt||y(r))return t;if(y(t))return r;for(let e of Object.keys(t))r[e]=Dn(r[e],t[e]);return r}var Te=(r,t,e)=>(m(t>=0,"$skip value must be a non-negative integer"),r.drop(t));var li={$sort:st,$skip:Te,$limit:Ee},vr=class{#t;#r;#e;#o;#i={};#n=null;#s=[];constructor(t,e,n,o){this.#t=t,this.#r=e,this.#e=n,this.#o=o}fetch(){if(this.#n)return this.#n;this.#n=_(this.#t).filter(this.#r);let t=this.#o.processingMode;t&1&&this.#n.map(e=>et(e));for(let e of["$sort","$skip","$limit"])T(this.#i,e)&&(this.#n=li[e](this.#n,this.#i[e],this.#o));return Object.keys(this.#e).length&&(this.#n=Qt(this.#n,this.#e,this.#o)),t&2&&this.#n.map(e=>et(e)),this.#n}fetchAll(){let t=_(Array.from(this.#s));return this.#s.length=0,Nt(t,this.fetch())}all(){return this.fetchAll().collect()}skip(t){return this.#i.$skip=t,this}limit(t){return this.#i.$limit=t,this}sort(t){return this.#i.$sort=t,this}collation(t){return this.#o={...this.#o,collation:t},this}next(){if(this.#s.length>0)return this.#s.pop();let t=this.fetch().next();if(!t.done)return t.value}hasNext(){if(this.#s.length>0)return!0;let t=this.fetch().next();return t.done?!1:(this.#s.push(t.value),!0)}[Symbol.iterator](){return this.fetchAll()}};var fi=/^\$(and|or|nor|expr|jsonSchema)$/,J=class{#t;#r;#e;constructor(t,e){this.#r=et(t),this.#e=S.init(e).update({condition:t}),this.#t=[],this.compile()}compile(){m(h(this.#r),`query criteria must be an object: ${JSON.stringify(this.#r)}`);let t={},e=Object.entries(this.#r);for(let[n,o]of e){if(n==="$where")m(this.#e.scriptEnabled,"$where operator requires 'scriptEnabled' option to be true."),Object.assign(t,{field:n,expr:o});else if(fi.test(n))this.processOperator(n,n,o);else{m(!ot(n),`unknown top level operator: ${n}`);for(let[s,i]of Object.entries(Lt(o)))this.processOperator(n,s,i)}t.field&&this.processOperator(t.field,t.field,t.expr)}}processOperator(t,e,n){let o=this.#e.context.getOperator("query",e);m(!!o,`unknown query operator ${e}`),this.#t.push(o(t,n,this.#e))}test(t){return this.#t.every(e=>e(t))}find(t,e){return new vr(t,n=>this.test(n),e||{},this.#e)}};function F(r,t,e,n){let o={unwrapArray:!0},s=Math.max(1,r.split(".").length-1),i=S.init(e).update({depth:s});return a=>{let p=P(a,r,o);return n(p,t,i)}}function At(r,t,e,n){m(f(t)&&t.length===2,`${n.name} expects array(2)`);let[o,s]=u(r,t,null,e);return n(o,s,e)}function ur(r,t,e){if(G(r,t)||y(r)&&y(t))return!0;if(f(r)){let n=e?.local?.depth??1;return r.some(o=>G(o,t))||pt(r,n).some(o=>G(o,t))}return!1}function Rr(r,t,e){return!ur(r,t,e)}function Ne(r,t,e){return y(r)?t.some(n=>n===null):Ft([at(r),t]).length>0}function Un(r,t,e){return!Ne(r,t,e)}function Ur(r,t,e){return Wr(r,t,(n,o)=>M(n,o)<0)}function Vr(r,t,e){return Wr(r,t,(n,o)=>M(n,o)<=0)}function Fr(r,t,e){return Wr(r,t,(n,o)=>M(n,o)>0)}function Br(r,t,e){return Wr(r,t,(n,o)=>M(n,o)>=0)}function Vn(r,t,e){return at(r).some((n=>t.length===2&&n%t[0]===t[1]))}function Fn(r,t,e){let n=at(r),o=s=>$(s)&&rt(t.exec(s),e?.useStrictMode);return n.some(o)||pt(n,1).some(o)}function Bn(r,t,e){if(!f(r)||!f(t)||!r.length||!t.length)return!1;let n=!0;for(let o of t){if(!n)break;h(o)&&Object.keys(o).includes("$elemMatch")?n=we(r,o.$elemMatch,e):nt(o)?n=r.some(s=>typeof s=="string"&&o.test(s)):n=r.some(s=>G(o,s))}return n}function Wn(r,t,e){return Array.isArray(r)&&r.length===t}function yi(r){return ot(r)&&["$and","$or","$nor"].indexOf(r)===-1}function we(r,t,e){if(f(r)&&!dt(r)){let n=i=>i,o=t;Object.keys(t).every(yi)&&(o={temp:t},n=i=>({temp:i}));let s=new J(o,e);for(let i=0,a=r.length;i<a;i++)if(s.test(n(r[i])))return!0}return!1}var vn=r=>r===null,Oi={array:f,boolean:_t,bool:_t,date:R,number:x,int:x,long:x,double:x,decimal:x,null:vn,object:h,regexp:nt,regex:nt,string:$,undefined:y,1:x,2:$,3:h,4:f,6:y,8:_t,9:R,10:vn,11:nt,16:x,18:x,19:x};function Rn(r,t,e){let n=Oi[t];return n?n(r):!1}function Ln(r,t,e){return f(t)?t.findIndex(n=>Rn(r,n,e))>=0:Rn(r,t,e)}function Wr(r,t,e){return at(r).some(n=>ut(n)===ut(t)&&e(n,t))}var zn=(r,t,e)=>At(r,t,e,ur);var Qn=(r,t,e)=>At(r,t,e,Fr);var qn=(r,t,e)=>At(r,t,e,Br);var Kn=(r,t,e)=>At(r,t,e,Ur);var Yn=(r,t,e)=>At(r,t,e,Vr);var Gn=(r,t,e)=>At(r,t,e,Rr);var Hn="$cond expects array(3) or object with 'if-then-else' expressions",Ai=(r,t,e)=>{let n,o,s;f(t)?(m(t.length===3,Hn),n=t[0],o=t[1],s=t[2]):(m(h(t),Hn),n=t.if,o=t.then,s=t.else);let i=rt(u(r,n,null,e),e.useStrictMode);return u(r,i?o:s,null,e)};var Se=(r,t,e)=>{m(f(t),"$ifNull expects an array");let n;for(let o of t)if(n=u(r,o,null,e),!y(n))return n;return n};var bi=(r,t,e)=>{m(h(t),"$switch received invalid arguments");for(let{case:n,then:o}of t.branches)if(rt(u(r,n,null,e),e.useStrictMode))return u(r,o,null,e);return u(r,t.default,null,e)};var Ce=(r,t,e)=>{m(e.scriptEnabled,"$function requires 'scriptEnabled' option to be true");let n=u(r,t,null,e);return n.body.apply(null,n.args)};var fr=["year","quarter","month","week","day","hour","minute","second","millisecond"],di={mon:1,tue:2,wed:3,thu:4,fri:5,sat:6,sun:7},xi=-1e9,rr=7,ke=r=>(r&3)==0&&(r%100!=0||r%400==0);var gi=[365,366],hi=[[0,31,59,90,120,151,181,212,243,273,304,334],[0,31,60,91,121,152,182,213,244,274,305,335]],lr=r=>hi[+ke(r.getUTCFullYear())][r.getUTCMonth()]+r.getUTCDate(),Lr=(r,t)=>{let e=r.getUTCDay()||7,n=t.toLowerCase().substring(0,3);return(e-di[n]+rr)%rr},Xn=r=>(r+Math.floor(r/4)-Math.floor(r/100)+Math.floor(r/400))%7,Jn=r=>52+ +(Xn(r)==4||Xn(r-1)==3);function er(r){let t=r.getUTCDay()||7,e=Math.floor((10+lr(r)-t)/7);return e<1?Jn(r.getUTCFullYear()-1):e>Jn(r.getUTCFullYear())?1:e}function Qr(r){return r.getUTCFullYear()-+(r.getUTCMonth()===0&&r.getUTCDate()==1&&r.getUTCDay()<1)}var Dt=60,xt={week:6048e5,day:864e5,hour:36e5,minute:6e4,second:1e3,millisecond:1},qr="%Y-%m-%dT%H:%M:%S.%LZ",Me=[["year",0,9999],["month",1,12],["day",1,31],["hour",0,23],["minute",0,59],["second",0,59],["millisecond",0,999]],_e={jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12},nr={"%b":{name:"abbr_month",padding:3,re:/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/i},"%B":{name:"full_month",padding:0,re:/(January|February|March|April|May|June|July|August|September|October|November|December)/i},"%Y":{name:"year",padding:4,re:/([0-9]{4})/},"%G":{name:"year",padding:4,re:/([0-9]{4})/},"%m":{name:"month",padding:2,re:/(0[1-9]|1[012])/},"%d":{name:"day",padding:2,re:/(0[1-9]|[12][0-9]|3[01])/},"%j":{name:"day_of_year",padding:3,re:/(0[0-9][1-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])/},"%H":{name:"hour",padding:2,re:/([01][0-9]|2[0-3])/},"%M":{name:"minute",padding:2,re:/([0-5][0-9])/},"%S":{name:"second",padding:2,re:/([0-5][0-9]|60)/},"%L":{name:"millisecond",padding:3,re:/([0-9]{3})/},"%w":{name:"day_of_week",padding:1,re:/([0-6])/},"%u":{name:"day_of_week_iso",padding:1,re:/([1-7])/},"%U":{name:"week_of_year",padding:2,re:/([1-4][0-9]?|5[0-3]?)/},"%V":{name:"week_of_year_iso",padding:2,re:/([1-4][0-9]?|5[0-3]?)/},"%z":{name:"timezone",padding:2,re:/(([+-][01][0-9]|2[0-3]):?([0-5][0-9])?)/},"%Z":{name:"minute_offset",padding:3,re:/([+-][0-9]{3})/},"%%":{name:"percent_literal",padding:1,re:/%%/}},Kr=/(%[bBYGmdjHMSLwuUVzZ%])/g,ro=/%[bBYGmdjHMSLwuUVzZ%]/,ji=/^[a-zA-Z_]+\/[a-zA-Z_]+$/;function mt(r,t){if(y(r))return 0;if(ji.test(r)){let s=new Date(t.toLocaleString("en-US",{timeZone:"UTC"})),i=new Date(t.toLocaleString("en-US",{timeZone:r}));return Math.round((i.getTime()-s.getTime())/6e4)}let e=nr["%z"].re.exec(r);m(!!e,`timezone '${r}' is invalid or not supported.`);let n=parseInt(e[2])||0,o=parseInt(e[3])||0;return(Math.abs(n*Dt)+o)*(n<0?-1:1)}function eo(r){return(r<0?"-":"+")+zr(Math.abs(Math.floor(r/Dt)),2)+zr(Math.abs(r)%Dt,2)}function bt(r,t){r.setUTCMinutes(r.getUTCMinutes()+t)}function L(r,t,e){if(R(r))return r;let n=u(r,t,null,e);if(R(n))return new Date(n);if(x(n))return new Date(n*1e3);m(!!n?.date,`cannot convert ${JSON.stringify(t)} to date`);let o=R(n.date)?new Date(n.date):new Date(n.date*1e3);return n.timezone&&bt(o,mt(n.timezone,o)),o}function zr(r,t){return new Array(Math.max(t-String(r).length+1,0)).join("0")+r.toString()}var Zn=r=>{let t=r-xi;return Math.trunc(t/4)-Math.trunc(t/100)+Math.trunc(t/400)};function Ei(r,t){return Math.trunc(Zn(t-1)-Zn(r-1)+(t-r)*gi[0])}var or=(r,t)=>t.getUTCFullYear()-r.getUTCFullYear(),Yr=(r,t)=>t.getUTCMonth()-r.getUTCMonth()+or(r,t)*12,Gr=(r,t)=>{let e=Math.trunc(r.getUTCMonth()/3);return Math.trunc(t.getUTCMonth()/3)-e+or(r,t)*4},sr=(r,t)=>lr(t)-lr(r)+Ei(r.getUTCFullYear(),t.getUTCFullYear()),Hr=(r,t,e)=>{let n=(e||"sun").substring(0,3);return Math.trunc((sr(r,t)+Lr(r,n)-Lr(t,n))/rr)},no=(r,t)=>t.getUTCHours()-r.getUTCHours()+sr(r,t)*24,to=(r,t)=>{let e=r.getUTCMonth()+t,n=Math.floor(e/12);if(e<0){let o=e%12+12;r.setUTCFullYear(r.getUTCFullYear()+n,o,r.getUTCDate())}else r.setUTCFullYear(r.getUTCFullYear()+n,e%12,r.getUTCDate())},Xr=(r,t,e,n)=>{let o=new Date(r);switch(t){case"year":o.setUTCFullYear(o.getUTCFullYear()+e);break;case"quarter":to(o,3*e);break;case"month":to(o,e);break;default:o.setTime(o.getTime()+xt[t]*e)}return o};var qt=(r,t,e)=>{let n=u(r,t,null,e);return Xr(n.startDate,n.unit,n.amount,n.timezone)};var $i=(r,t,e)=>{let{startDate:n,endDate:o,unit:s,timezone:i,startOfWeek:a}=u(r,t,null,e),p=new Date(n),c=new Date(o);switch(bt(p,mt(i,p)),bt(c,mt(i,c)),s){case"year":return or(p,c);case"quarter":return Gr(p,c);case"month":return Yr(p,c);case"week":return Hr(p,c,a);case"day":return sr(p,c);case"hour":return no(p,c);case"minute":return p.setUTCSeconds(0),p.setUTCMilliseconds(0),c.setUTCSeconds(0),c.setUTCMilliseconds(0),Math.round((c.getTime()-p.getTime())/xt[s]);default:return Math.round((c.getTime()-p.getTime())/xt[s])}};var Ii=[31,28,31,30,31,30,31,31,30,31,30,31],Ti=r=>r.month==2&&ke(r.year)?29:Ii[r.month-1],Ni=(r,t,e)=>{let n=u(r,t,null,e),o=mt(n.timezone,new Date);for(let s=Me.length-1,i=0;s>=0;s--){let a=Me[s],p=a[0],c=a[1],l=a[2],O=(n[p]||0)+i;i=0;let A=l+1;if(p=="hour"&&(O+=Math.floor(o/Dt)*-1),p=="minute"&&(O+=o%Dt*-1),O<c){let b=c-O;i=-1*Math.ceil(b/A),O=A-b%A}else O>l&&(O+=c,i=Math.trunc(O/A),O%=A);n[p]=O}return n.day=Math.min(n.day,Ti(n)),new Date(Date.UTC(n.year,n.month-1,n.day,n.hour,n.minute,n.second,n.millisecond))};function wi(r){return r==="Z"?0:r>="A"&&r<"N"?r.charCodeAt(0)-64:77-r.charCodeAt(0)}var Si=r=>r.replace(/^\//,"").replace(/\/$/,"").replace(/\/i/,""),Ci=["^",".","-","*","?","$"];function ki(r){return Ci.forEach(t=>{r=r.replace(t,`\\${t}`)}),r}var Mi=(r,t,e)=>{let n=u(r,t,null,e);n.format=n.format||qr,n.onNull=n.onNull||null;let o=n.dateString;if(y(o))return n.onNull;let s=n.format.split(ro);s.reverse();let i=n.format.match(Kr),a={},p="";for(let A=0,b=i.length;A<b;A++){let d=i[A],g=nr[d];if(h(g)){let j=g.re.exec(o),k=s.pop()||"";j!==null?(a[g.name]=/^\d+$/.exec(j[0])?parseInt(j[0]):j[0],o=o.substring(j.index+j[0].length+1),p+=ki(k)+Si(g.re.toString())):a[g.name]=null}}if(y(a.month)){let A=(a.full_month?.slice(0,3)??a.abbr_month??"").toLowerCase();_e[A]&&(a.month=_e[A])}if(y(a.year)||y(a.month)||y(a.day)||!new RegExp("^"+p+"[A-Z]?$").test(n.dateString))return n.onError;let c=n.dateString.match(/([A-Z])$/);m(!(c&&n.timezone),`$dateFromString: you cannot pass in a date/time string with time zone information ('${c&&c[0]}') together with a timezone argument`);let l=c?wi(c[0])*Dt:mt(n.timezone,new Date),O=new Date(Date.UTC(a.year,a.month-1,a.day,0,0,0));return y(a.hour)||O.setUTCHours(a.hour),y(a.minute)||O.setUTCMinutes(a.minute),y(a.second)||O.setUTCSeconds(a.second),y(a.millisecond)||O.setUTCMilliseconds(a.millisecond),bt(O,-l),O};var _i=(r,t,e)=>{let n=u(r,t?.amount,null,e);return qt(r,{...t,amount:-1*n},e)};var Pi=(r,t,e)=>{let n=u(r,t,null,e),o=new Date(n.date);bt(o,mt(n.timezone,o));let s={hour:o.getUTCHours(),minute:o.getUTCMinutes(),second:o.getUTCSeconds(),millisecond:o.getUTCMilliseconds()};return n.iso8601==!0?Object.assign(s,{isoWeekYear:Qr(o),isoWeek:er(o),isoDayOfWeek:o.getUTCDay()||7}):Object.assign(s,{year:o.getUTCFullYear(),month:o.getUTCMonth()+1,day:o.getUTCDate()})};var Pe=(r,t,e)=>L(r,t,e).getUTCDate();var De=(r,t,e)=>L(r,t,e).getUTCDay()+1;var ve=(r,t,e)=>lr(L(r,t,e));var Re=(r,t,e)=>L(r,t,e).getUTCHours();var Ue=(r,t,e)=>L(r,t,e).getUTCDay()||7;var Ve=(r,t,e)=>er(L(r,t,e));var Fe=(r,t,e)=>L(r,t,e).getUTCMilliseconds();var Be=(r,t,e)=>L(r,t,e).getUTCMinutes();var We=(r,t,e)=>L(r,t,e).getUTCMonth()+1;var Le=(r,t,e)=>L(r,t,e).getUTCSeconds();var ze=(r,t,e)=>{let n=L(r,t,e),o=er(n);return n.getUTCDay()>0&&n.getUTCDate()==1&&n.getUTCMonth()==0?0:n.getUTCDay()==0?o+1:o};var Jr=(r,t,e)=>L(r,t,e).getUTCFullYear();var Di={"%Y":Jr,"%G":Jr,"%m":We,"%d":Pe,"%H":Re,"%M":Be,"%S":Le,"%L":Fe,"%u":Ue,"%U":ze,"%V":Ve,"%j":ve,"%w":(r,t,e)=>De(r,t,e)-1},vi=(r,t,e)=>{let n=u(r,t,null,e);if(y(n.onNull)&&(n.onNull=null),y(n.date))return n.onNull;let o=L(r,n.date,e),s=n.format||qr,i=mt(n.timezone,o),