fig-tree-evaluator 3.0.0-preview.12 → 3.0.0-preview.14

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 +1 @@
1
- import{F as e,i as t,l as r,f as a,d as n,D as o,E as s,g as i,c as l,o as c,q as u,h as d,S as f,e as p,p as m,s as h,j as v,n as y,u as g,v as b,k,w,x as $,r as x,t as j,b as O,m as A,R as P,a as D,W as C,y as N,G as S}from"./shared.js";const z=(t,r,a)=>{const[n]=r,o=r.length-1;return new e({code:t,message:o>0?`${n.message} (+ ${o} more issue${1===o?"":"s"})`:n.message,path:n.path,operator:a,issues:r})},E=()=>{},M=e=>"object"==typeof e&&null!==e&&"function"==typeof e.then,q=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),F=(e,t,r)=>{if(e===t)return 0;const a=e.length,n=t.length;if(Math.abs(a-n)>r)return r+1;let o=new Array(n+1),s=new Array(n+1);for(let e=0;e<=n;e++)o[e]=e;for(let i=1;i<=a;i++){s[0]=i;let a=i;const l=e.charCodeAt(i-1);for(let e=1;e<=n;e++){const r=o[e-1]+(l===t.charCodeAt(e-1)?0:1),n=Math.min(o[e]+1,s[e-1]+1,r);s[e]=n,n<a&&(a=n)}if(a>r)return r+1;const c=o;o=s,s=c}return o[n]},T=(e,t)=>{let r,a=3;for(const n of t){const t=F(e,n,a-1);if(t<a&&(r=n,a=t,0===t))break}return r},V=e=>e?` — did you mean '${e}'?`:"",I=e=>e.length<2?e.join(""):`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`,R=e=>{let t;return()=>(void 0===t&&(t=(async()=>e())()),t)},L=(e,t,r)=>{const a=[],n=new Set,o=new Set,s=e=>{const i=a.indexOf(e);if(-1!==i){const e=a.slice(i),t=[...e].sort().join("\0");return void(o.has(t)||(o.add(t),r(e)))}if(!n.has(e)){a.push(e);for(const r of t(e)??[])s(r);a.pop(),n.add(e)}};for(const t of e)s(t);return 0===o.size},W={ok:!0},B=e=>null===e?"null":Array.isArray(e)?"array":typeof e,J=(e,t)=>({ok:!1,expected:e,actual:B(t)}),U=(e,t)=>{switch(t){case"any":return!0;case"string":return"string"==typeof e;case"number":return"number"==typeof e;case"integer":return"number"==typeof e&&Number.isInteger(e);case"boolean":return"boolean"==typeof e;case"array":return Array.isArray(e);case"object":return q(e);case"null":return null===e;default:return!1}},G=e=>"null"===e||"any"===e||!!Array.isArray(e)&&(e.includes("null")||e.includes("any")),K=e=>!e.required&&!G(e.type),_=/*#__PURE__*/new Set(["any","string","number","boolean","array","object","null","integer"]),H=e=>{if("string"==typeof e)return _.has(e);if(Array.isArray(e))return e.length>0&&e.every(e=>"string"==typeof e&&_.has(e));if(q(e)&&"literal"in e){const t=e.literal;return Array.isArray(t)&&t.length>0&&t.every(e=>["string","number","boolean"].includes(typeof e))}return!1},Q=(e,r)=>{if(t(r)){if(-1!==r.literal.indexOf(e))return W;const t=r.literal.map(e=>JSON.stringify(e)).join(", ");return J(`one of ${t}`,e)}return"string"==typeof r?U(e,r)?W:J(r,e):r.some(t=>U(e,t))?W:J(r.join(" | "),e)},X=(e,t)=>{if(void 0!==t.length){if(!Array.isArray(e))return J("array",e);if(e.length!==t.length)return{ok:!1,expected:`array of length ${t.length}`,actual:`array of length ${e.length}`}}if(t.homogeneous){if(!Array.isArray(e))return J("array",e);const r=t.homogeneous;if(e.length>0){if(void 0===r.find(t=>e.every(e=>U(e,t))))return{ok:!1,expected:`homogeneous array of ${r.join(" | ")}`,actual:Y(e)}}}if(t.elementShape){if(!Array.isArray(e))return J("array",e);for(let r=0;r<e.length;r++){const a=te(e[r],t.elementShape);if(!a.ok)return a}}return W},Y=e=>{const t=B(e[0]),r=e.find(e=>B(e)!==t);return void 0===r?`array of ${t}`:`${B(r)} beside ${t}`},Z=["length","homogeneous","elementShape"],ee=e=>{if(!q(e))return J("a constraints object",e);for(const t of Object.keys(e))if(!Z.includes(t))return{ok:!1,expected:`one of ${Z.join(", ")}`,actual:t};const{length:t,homogeneous:r,elementShape:a}=e;if(void 0!==t&&(!Number.isInteger(t)||t<0))return J("a non-negative integer length",t);if(!(void 0===r||Array.isArray(r)&&H(r)))return J("a non-empty array of basic types",r);if(void 0!==a){if(!q(a))return J("an object of declarations",a);for(const[e,t]of Object.entries(a)){if(!q(t))return J(`a declaration for "${e}"`,t);if(void 0!==t.type&&!H(t.type))return J(`a vocabulary type for "${e}"`,t.type);if(void 0!==t.required&&"boolean"!=typeof t.required)return J(`a boolean "required" for "${e}"`,t.required);if(void 0!==t.constraints){const e=ee(t.constraints);if(!e.ok)return e}}}return W},te=(e,t)=>{if(!q(e))return J("object",e);const r=Object.keys(t);for(let a=0;a<r.length;a++){const n=r[a],o=t[n],s=Object.prototype.hasOwnProperty.call(e,n),i=!1!==o.required;if(!s){if(i)return{ok:!1,expected:`property "${n}"`,actual:"missing"};continue}const l=ne(e[n],o);if(!l.ok)return l}return W},re=(e,t,r)=>{if(!r||!Array.isArray(e))return X(e,t);const{length:a,...n}=t;if(void 0!==a){const t=X(e,{length:a});if(!t.ok)return t}return X(e.filter(e=>null!==e),n)},ae=(e,t)=>null===e||void 0===t.constraints?W:re(e,t.constraints,void 0!==t.elementNullPolicy),ne=(e,t)=>{if(void 0!==t.type){const r=Q(e,t.type);if(!r.ok)return r}return ae(e,t)},oe=["logic","comparison","math","string","array","data","io","other"],se=Symbol("fig-tree:EvaluationData"),ie=Symbol("fig-tree:validated-operator"),le=e=>"object"==typeof e&&null!==e&&!0===e[ie],ce=[!1,null,0,""],ue=e=>-1===ce.indexOf(e),de=(e,t)=>"number"==typeof e&&"number"==typeof t?e<t?-1:e>t?1:0:fe(String(e),String(t)),fe=(e,t)=>{const r=Array.from(e),a=Array.from(t),n=Math.min(r.length,a.length);for(let e=0;e<n;e++){const t=r[e].codePointAt(0),n=a[e].codePointAt(0);if(t!==n)return t<n?-1:1}return r.length===a.length?0:r.length<a.length?-1:1},pe="<array>",me="<object>",he=e=>null===e?"":"string"==typeof e?e:"number"==typeof e?String(e):"boolean"==typeof e?e?"true":"false":Array.isArray(e)?pe:me,ve=e=>null!==e&&"object"==typeof e,ye="a composite element renders as a placeholder, never as text — drill in, or join it explicitly",ge=e=>e.trim(),be=/\s+$/,ke=/^\s+/,we=e=>e.replace(be,""),$e=e=>e.replace(ke,""),xe=e=>Array.from(e),je=(e,t)=>{const[r,a]=String(e).split("e"),n=void 0!==a?Number(a)+t:t;return Number(`${r}e${n}`)},Oe=Object.prototype.hasOwnProperty,Ae=(e,t)=>{for(const r of e.keys())if(Pe(r,t))return r},Pe=(e,t)=>{let r,a,n;if(e===t)return!0;if(e&&t&&(r=e.constructor)===t.constructor){if(r===Date)return e.getTime()===t.getTime();if(r===RegExp)return e.toString()===t.toString();if(r===Array){if((a=e.length)===t.length)for(;a--&&Pe(e[a],t[a]););return-1===a}if(r===Set){if(e.size!==t.size)return!1;for(a of e){if(n=a,n&&"object"==typeof n&&(n=Ae(t,n),!n))return!1;if(!t.has(n))return!1}return!0}if(r===Map){if(e.size!==t.size)return!1;for(a of e){if(n=a[0],n&&"object"==typeof n&&(n=Ae(t,n),!n))return!1;if(!Pe(a[1],t.get(n)))return!1}return!0}if(r===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(r===DataView){if((a=e.byteLength)===t.byteLength)for(;a--&&e.getInt8(a)===t.getInt8(a););return-1===a}if(ArrayBuffer.isView(e)){if((a=e.byteLength)===t.byteLength)for(;a--&&e[a]===t[a];);return-1===a}if(!r||"object"==typeof e){for(r in a=0,e){if(Oe.call(e,r)&&++a&&!Oe.call(t,r))return!1;if(!(r in t)||!Pe(e[r],t[r]))return!1}return Object.keys(t).length===a}}return e!=e&&t!=t},De=e=>!e.includes("{")&&!e.includes("}")&&(e.startsWith("$")?e.length>1:r(e).ok),Ce=e=>{const t=[];let r="";const a=()=>{""!==r&&(t.push({kind:"text",text:r}),r="")};let n=0;for(;n<e.length;){const o=e[n];if("%"===o){let s=n+1;for(;s<e.length&&e[s]>="0"&&e[s]<="9";)s++;if(s>n+1){const r=e.slice(n,s);a(),t.push({kind:"positional",raw:r,index:Number(r.slice(1))}),n=s;continue}r+=o,n++;continue}if("{"===o&&"{"===e[n+1]){const o=e.indexOf("}}",n+2);if(-1!==o){const r=e.slice(n+2,o);if(De(r)){a(),t.push({kind:"named",raw:e.slice(n,o+2),body:r}),n=o+2;continue}}r+="{{",n+=2;continue}r+=o,n++}return a(),t},Ne=e=>{const t={maxDepth:0};return{constant:ze(t,e,0),depth:t.maxDepth}},Se=e=>{const t={maxDepth:0};if(ze(t,e,0,[]))return void 0===t.reads?{value:e}:{value:e,reads:t.reads}},ze=(e,t,r,s)=>{if(r>o)return!1;if(r>e.maxDepth&&(e.maxDepth=r),void 0===t)return!1;if("string"==typeof t){const r=a(t);return"reference"===r.kind&&"error"===r.namespace&&void 0!==s?((e.reads??=[]).push({at:s,segments:r.segments}),!0):"plain"===r.kind||"unrecognized"===r.kind}if(Array.isArray(t)){for(let a=0;a<t.length;a++)if(!ze(e,t[a],r+1,s&&[...s,a]))return!1;return!0}if(n(t)){for(const e in t){if("operator"===e||"fragment"===e||"vars"===e||"//"===e)return!1;if(e.startsWith("$"))return!1}for(const a in t)if(!ze(e,t[a],r+1,s&&[...s,a]))return!1;return!0}return!0},Ee=(e,t)=>({parent:e,key:t}),Me=e=>{const t=[];for(let r=e;null!==r;r=r.parent)t.push(r.key);return t.reverse()},qe=e=>{switch(e.kind){case"constant":case"reference":case"invalid":return[];case"skeleton":return[...e.holes.map(e=>e.node),...Object.values(e.vars??{})];case"elements":return e.nodes;case"entries":return[...Object.values(e.entries),...Object.values(e.vars??{})];case"operator":case"fragmentCall":{const t="operator"===e.kind?Object.values(e.params):void 0===e.parameters?[]:"dynamic"===e.argumentsMode?[e.parameters]:Object.values(e.parameters);return void 0!==e.fallback&&t.push(e.fallback),[...t,...Object.values(e.vars??{})]}}return e},Fe=e=>{e.sort((e,t)=>e.order-t.order)},Te=(e,t,r,a,n,o,s={})=>{const i={severity:t,code:r,message:a,path:Me(n)};void 0!==s.operator&&(i.operator=s.operator),void 0!==s.fragment&&(i.fragment=s.fragment),void 0!==s.parameter&&(i.parameter=s.parameter),void 0!==s.suggestion&&(i.suggestion=s.suggestion);const l={issue:i,order:o};return e.push(l),l},Ve=e=>e.some(({issue:e})=>"error"===e.severity),Ie=e=>{const t=e.entry.definition.parameters.as;if("structural"!==t?.evaluation)return null;const r=e.params.as;return"constant"===r?.kind&&"string"==typeof r.value?r.value:null},Re=(e,t,r)=>void 0===r?null===e:("element"===t?e:`${e??""}Index`)===r,Le=(e,t,r)=>{"__proto__"===t?Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}):e[t]=r},We=(e,t,r)=>{const a=new Set;let n=e;return t.forEach((e,t)=>{n=Be(n,e.at,r[t],a)}),n},Be=(e,t,r,a)=>{const n=Je(e,a),[o,...s]=t;return Le(n,o,0===s.length?r:Be(n[o],s,r,a)),n},Je=(e,t)=>{if(t.has(e))return e;const r=Array.isArray(e)?[...e]:{...e};return t.add(r),r},Ue=(e,t,r={})=>{const a={registry:t,recognizes:e=>((e,t)=>"literal"===t||void 0!==Yr(e,t)||e.fragments.has(t))(t,e),issues:[],order:0,nodeCount:0,maxDepth:0,dataPaths:new Map,dynamic:!1,operators:new Set,fragmentNames:new Set,fragmentCalls:[],dataReads:[],identityOnly:!1,scope:{bindings:[]},asNames:new Set,unrecognized:[],unknownNodes:0,hasNoCache:!1},n=(r.basePath??[]).reduce(Ee,null),o=He(a,e,n,0);Ke(a);const s=Rt(o);Fe(a.issues);const i=Ve(a.issues),l={nodeCount:a.nodeCount,maxDepth:a.maxDepth,dependencies:{dataPaths:a.dataPaths,dynamic:a.dynamic,operators:[...a.operators],fragments:[...a.fragmentNames]},identityOnly:a.identityOnly};return{root:o,holes:s,issues:a.issues,hasErrors:i,timeoutShielded:s.every(e=>void 0!==e.timeoutFallback),own:l,...Ge(l,a.fragmentCalls,t.fragments),fragmentCalls:a.fragmentCalls,dataReads:a.dataReads,hasNoCache:a.hasNoCache}},Ge=(e,t,r)=>{if(0===t.length)return e;const a=new Map(e.dependencies.dataPaths),n=new Set(e.dependencies.operators),o=new Set(e.dependencies.fragments);let{nodeCount:s,maxDepth:i,identityOnly:l}=e,c=e.dependencies.dynamic;for(const e of t){const t=r.get(e.name);if(void 0!==t){s+=t.nodeCount,i=Math.max(i,e.depth+t.maxDepth),l||=t.identityOnly,c||=t.dependencies.dynamic;for(const[e,r]of t.dependencies.dataPaths)a.set(e,r);for(const e of t.dependencies.operators)n.add(e);for(const e of t.dependencies.fragments)o.add(e)}}return{nodeCount:s,maxDepth:i,identityOnly:l,dependencies:{dataPaths:a,dynamic:c,operators:[...n],fragments:[...o]}}},Ke=e=>{if(0!==e.asNames.size)for(const{token:t,issue:r,raw:a}of e.unrecognized)e.asNames.has(t)&&(r.issue={...r.issue,severity:"error",code:s.unresolvedBinding,message:`'${a}' names an iterator binding, but no enclosing iterator binds it here`})},_e=(e,t,r,a,n,o,s)=>Te(e.issues,t,r,a,n,o,s),He=(e,t,r,a)=>{const n=e.order++;if(a>e.maxDepth&&(e.maxDepth=a),a>o)return _e(e,"error",s.depthCeiling,`the expression nests deeper than the engine's ceiling of ${o} levels — descent stopped here`,r,n),e.nodeCount++,Ye(t,r,n);const i=Qe(e,t,r,a,n);return"operator"!==i.kind&&"fragmentCall"!==i.kind&&"reference"!==i.kind&&"invalid"!==i.kind||e.nodeCount++,i},Qe=(e,t,r,a,o)=>null==t?Xe(t??null,r,o):"number"==typeof t||"boolean"==typeof t?Xe(t,r,o):"string"==typeof t?Ze(e,t,r,o):Array.isArray(t)?tt(e,t,r,a,o):n(t)?rt(e,t,r,a,o):(e.identityOnly=!0,Xe(t,r,o)),Xe=(e,t,r)=>({kind:"constant",value:e,path:t,order:r}),Ye=(e,t,r)=>({kind:"invalid",raw:e,path:t,order:r}),Ze=(e,t,r,n)=>{const o=a(t,e.scope);switch(o.kind){case"plain":return Xe(t,r,n);case"unrecognized":{const a=_e(e,"warning",s.unrecognizedIdentifier,`'${t}' matches no reference namespace and will pass through as data`,r,n),o=i(t);return null!==o&&0===e.unknownNodes&&e.unrecognized.push({token:o.token,issue:a,raw:t}),Xe(t,r,n)}case"invalid":return _e(e,"error",o.code??s.invalidReference,`'${t}': ${o.reason}`,r,n),Ye(t,r,n);case"reference":{const{namespace:a,segments:s,drill:i,binding:l}=o,c={kind:"reference",namespace:a,segments:s,raw:t,path:r,order:n};return void 0!==l?c.binding=l:"data"===a&&(0===s.length?e.dynamic=!0:vt(e,s,i.startsWith(".")?i.slice(1):void 0,r)),e.unknownNodes>0&&et(a)&&(c.scopeUnknown=!0),c}}},et=e=>"element"===e||"index"===e||"error"===e,tt=(e,t,r,a,n)=>{const o=kt(e,t,r,0,a);return It(e,t,o,!0,!1,void 0,r,n)},rt=(e,t,r,a,n)=>{const o=l(t,e.recognizes);switch(o.kind){case"malformed":return _e(e,"error",s.malformedNode,o.message,r,n),Ye(t,r,n);case"operator":return at(e,t,r,a,n);case"fragment":return St(e,t,r,a,n);case"shorthand":return jt(e,t,o.key,r,a,n);case"plain":return Ft(e,t,r,a,n)}},at=(e,t,r,a,n)=>{const o=t.operator;if("string"!=typeof o)return nt(e,t,"operator",r,n);if("literal"===o)return Nt(e,t,t.value,"value"in t,r,n);const i=Yr(e.registry,o);if(void 0===i){const a=T(o,Ut(e));return _e(e,"error",s.unknownOperator,`'${o}' names no registered operator${V(a)}`,r,n,{suggestion:a}),Ye(t,r,n)}const l=ot(e,i,r,n),c=[];return st(e,l,t,"operator",a,(t,a)=>{"parameters"===t?_e(e,"error",s.malformedNode,"'parameters' is reserved and unused on operator nodes",Ee(r,t),n,{operator:l.name}):lt(e,l,c,t,a,Ee(r,t),n)}),ct(e,l,c,a,n),l},nt=(e,t,r,a,n)=>(_e(e,"error",s.malformedNode,`the '${r}' value must be a literal string`,a,n),Ye(t,a,n)),ot=(e,t,r,a)=>(e.operators.add(t.definition.name),{kind:"operator",name:t.definition.name,entry:t,params:{},path:r,order:a}),st=(e,t,r,a,n,o)=>{const{path:s,order:i}=t;for(const l in r){const c=r[l];l!==a&&"//"!==l&&void 0!==c&&("fallback"===l?t.fallback=He(e,c,Ee(s,l),n+1):"noCache"===l?it(e,t,c,s,i):"vars"===l?t.vars=qt(e,c,s,n,i):o?.(l,c))}},it=(e,t,r,a,n)=>{!0===r?(t.noCache=!0,e.hasNoCache=!0):_e(e,"error",s.malformedNode,"'noCache' takes only the literal true — it is settled before the subtree runs",Ee(a,"noCache"),n,"operator"===t.kind?{operator:t.name}:{})},lt=(e,t,r,a,n,o,i)=>{if(void 0===t.entry.definition.parameters[a]){const r=T(a,Object.keys(t.entry.definition.parameters));return void _e(e,"error",s.unknownNodeKey,`'${a}' is not a parameter of '${t.name}'${V(r)}`,o,i,{operator:t.name,parameter:a,suggestion:r})}r.push({name:a,kind:"value",value:n,path:o})},ct=(e,t,r,a,n)=>{const o=t.entry.definition,s=o.resolution.perElement.length>0;let i;if("get"===t.name&&ut(e,t,r),s&&"structural"===o.parameters.as?.evaluation){const a=r.find(e=>"as"===e.name);"value"===a?.kind&&(i=xt(e,t,a.value,a.path,n))}for(const n of r){const r=o.parameters[n.name]?.evaluation;"perElement"!==r&&(t.params[n.name]=gt(e,n,r,a))}if(s){void 0!==i&&e.scope.bindings.push(i);for(const n of r){const r=o.parameters[n.name]?.evaluation;"perElement"===r&&(t.params[n.name]=gt(e,n,r,a))}void 0!==i&&e.scope.bindings.pop()}yt(e,t),ft(e,t)},ut=(e,t,r)=>{const a=r.findIndex(e=>"from"===e.name),n=r[a];if("value"!==n?.kind||"string"!=typeof n.value)return;const o=v(n.value);if("data"===o&&r.splice(a,1),"vars"!==o&&"params"!==o)return;const i=r.find(e=>"path"===e.name),l="value"===i?.kind?dt(e,i.value):null;if(null===l||"value"!==i?.kind){if("vars"!==o)return;const i=e.order++;return _e(e,"error",s.bareVars,`'${n.value}': with 'from: ${n.value}' the path's first key names the var, so the path must be written out and start with a key`,n.path,i,{operator:"get",parameter:"from"}),r.splice(a,1),void(t.params.from=Ye(n.value,n.path,i))}const[c,...u]=l;n.value=y(o,[c]),i.value=Array.isArray(i.value)?u:d(u)},dt=(e,t)=>{const r=t=>{if("string"!=typeof t)return w(t);const{kind:r}=a(t,e.scope);return"plain"===r||"unrecognized"===r};try{const e=Array.isArray(t)?t.every(r)&&t:"string"==typeof t&&r(t)&&k(t);return e&&"string"==typeof e[0]?e:null}catch{return null}},ft=(e,t)=>{if("buildString"!==t.name)return;((e,t)=>{const r=t.params.substitutions;if(void 0===r)return;const a="constant"===r.kind?r.value:"skeleton"===r.kind?r.skeleton:void 0;(Array.isArray(a)||n(a))&&Object.values(a).some(ve)&&_e(e,"error",s.operatorValidate,ye,r.path,r.order,{operator:t.name,parameter:"substitutions"})})(e,t);const r=t.params.template;if("constant"!==r?.kind||"string"!=typeof r.value)return;const a=(e=>Ce(e).filter(e=>"text"!==e.kind))(r.value);if(0===a.length)return;const o=t.params.substitutions,i=(e=>{if(void 0===e)return{mode:"absent"};if("constant"===e.kind)return Array.isArray(e.value)?{mode:"array",length:e.value.length}:n(e.value)?{mode:"object",keys:new Set(Object.keys(e.value))}:{mode:"dynamic"};if("skeleton"===e.kind){const{skeleton:t,holes:r}=e;if(Array.isArray(t))return{mode:"array",length:t.length};const a=new Set(Object.keys(t));for(const e of r)a.add(String(e.at[0]));return{mode:"object",keys:a}}return{mode:"dynamic"}})(o);if(mt(e,t,r,a,i),"absent"!==i.mode&&"object"!==i.mode)return;const l=[],c=new Set;for(const t of a){if("named"!==t.kind||!t.body.startsWith("$"))continue;if(c.has(t.body))continue;const a=Ze(e,t.body,r.path,e.order++);"reference"===a.kind&&(e.nodeCount++,c.add(t.body),l.push({path:r.path,at:[t.body],node:a}))}0!==l.length&&(t.params.substitutions=pt(e,t,o,l))},pt=(e,t,r,a)=>"skeleton"===r?.kind?(r.holes.push(...a),r):{kind:"skeleton",skeleton:"constant"===r?.kind?r.value:{},holes:a,path:r?.path??Ee(t.path,"substitutions"),order:r?.order??e.order++},mt=(e,t,r,a,n)=>{const o=(a,n)=>_e(e,"warning",a,n,r.path,r.order,{operator:t.name}),i=(e,t)=>o(s.unboundToken,`'${e}' binds to nothing and renders as its own text${t}`),l=e=>{for(const t of e)o(s.unusedSubstitution,`substitution ${t} is never named by the template`)};if("array"!==n.mode&&"dynamic"!==n.mode||a.some(e=>"named"===e.kind&&e.body.startsWith("$"))&&o(s.inertReferenceToken,`a reference token needs the named face — beside ${"array"===n.mode?"positional substitutions":"a dynamically supplied map"} it is not recognized and renders as its own text`),"array"===n.mode){const e=new Set,t=[];for(const r of a)"positional"===r.kind&&(r.index>=1&&r.index<=n.length?e.add(r.index):t.push(r));const r=[];for(let t=1;t<=n.length;t++)e.has(t)||r.push(String(t));if(0===t.length)return void l(r);const o=0===n.length?"there are no substitutions":1===n.length?"there is only 1 substitution":`there are only ${n.length} substitutions`;for(const e of t)i(e.raw,` — ${e.index<1?"numbering starts at %1":o}${ht(r)}`);return}if("object"===n.mode){const e=new Set,t=[];for(const r of a)"named"===r.kind&&(n.keys.has(r.body)?e.add(r.body):r.body.startsWith("$")||t.push(r.raw));const r=[...n.keys].filter(t=>!e.has(t)).map(e=>`'${e}'`);0===t.length&&l(r);for(const e of t)i(e,ht(r))}},ht=e=>0===e.length?"":1===e.length?`, and substitution ${e[0]} is unused`:`, and substitutions ${I(e)} are unused`,vt=(e,t,r,a)=>{let n,o;void 0!==r&&c(r)?(n=r,o=t):(o=u(t),n=d(o)),e.dataPaths.set(n,o),e.dataReads.push({kind:"path",key:n,segments:o,path:a})},yt=(e,t)=>{if("get"!==t.name||void 0!==t.params.from)return;const r=t.params.path;if(void 0!==r)if("constant"===r.kind)try{const a="string"==typeof r.value?k(r.value):r.value;if(!Array.isArray(a)||!a.every(w))return void(e.dynamic=!0);if(0===a.length)return void(e.dynamic=!0);vt(e,a,"string"==typeof r.value?r.value:void 0,t.path)}catch{e.dynamic=!0}else e.dynamic=!0},gt=(e,t,r,a)=>{const n="lazyElements"===r||"race"===r;if("slice"===t.kind)return wt(e,t.elements,t.basePath,t.offset,a,n);if(n&&Array.isArray(t.value))return wt(e,t.value,t.path,0,a,!0);if("lazyEntries"===r){const r=$t(e,t,a);if(null!==r)return r}return He(e,t.value,t.path,a+1)},bt=(e,t)=>{const r=e.order++,a=t+1;return a>e.maxDepth&&(e.maxDepth=a),{order:r,containerDepth:a}},kt=(e,t,r,a,n)=>Array.from(t,(t,o)=>({key:o,rawChild:t,node:He(e,t,Ee(r,a+o),n+1)})),wt=(e,t,r,a,n,o)=>{const{order:s,containerDepth:i}=bt(e,n),l=kt(e,t,r,a,i);if(o&&!l.every(e=>"constant"===e.node.kind)){return{kind:"elements",nodes:l.map(e=>e.node),path:r,order:s}}return It(e,t,l,!0,!1,void 0,r,s)},$t=(e,t,r)=>{const a=t.value;if(!n(a)||p(a,e.recognizes))return null;const{order:o,containerDepth:s}=bt(e,r),{entries:i,vars:l,changed:c}=Tt(e,a,t.path,s,o,!0);if(i.every(e=>"constant"===e.node.kind))return It(e,a,i,!1,c,l,t.path,o);const u={};for(const{key:e,node:t}of i)u[String(e)]=t;const d={kind:"entries",entries:u,path:t.path,order:o};return void 0!==l&&(d.vars=l),d},xt=(e,t,n,o,i)=>{const l=r=>{_e(e,"error",s.invalidAs,r,o,i,{operator:t.name})};if("string"!=typeof n||"plain"!==a(n).kind)return l("'as' must be a literal name — a dynamic value cannot be statically resolved");const c=r(n);if(!c.ok)return l(`'${n}' is not a legal binding name — ${c.reason}`);const u=[n,$(n)];for(const t of u){if(void 0!==g(t))return l(`'${n}' collides with the reserved namespace word '${t}'`);if(null!==b(t,e.scope.bindings))return l(`'${n}' collides with an enclosing 'as' binding ('${t}')`)}for(const t of u)e.asNames.add(t);return n},jt=(e,t,r,a,n,o)=>{const i=r.slice(1),l="literal"===i,c=!l&&e.registry.fragments.has(i);for(const n in t)if(n!==r&&!f.has(n))return _e(e,"error",s.malformedNode,`'${n}' may not sit beside the shorthand key '${r}' — reserved modifiers only`,Ee(a,n),o),Ye(t,a,o);const u=t[r],d=Ee(a,r);if(l)return Nt(e,t,u,!0,a,o);if(c)return zt(e,t,i,u,a,n,o);const p=Yr(e.registry,i),m=ot(e,p,a,o);st(e,m,t,r,n);const h=[];return Ot(e,m,h,u,d,o),ct(e,m,h,n,o),m},Ot=(e,t,r,a,o,s)=>{if(Array.isArray(a))Pt(e,t,r,a,o,s);else if(!n(a)||p(a,e.recognizes))At(e,t,r,a,o,s);else for(const n in a){const i=a[n];"//"!==n&&void 0!==i&&lt(e,t,r,n,i,Ee(o,n),s)}},At=(e,t,r,a,n,o)=>{const s=h(t.entry.definition);null!==s?r.push({name:s,kind:"value",value:a,path:n}):Dt(e,t,n,o)},Pt=(e,t,r,a,n,o)=>{const s=t.entry.definition,i=m(s,a.length);if(null===i)return void Ct(e,t,a,n,o);const l=s.positionalParams;for(let e=0;e<i.bound;e++)r.push({name:l[e],kind:"value",value:a[e],path:Ee(n,e)});const{restAt:c}=i;null!==c&&r.push({name:s.restParam,kind:"slice",elements:0===c?a:a.slice(c),basePath:n,offset:c})},Dt=(e,t,r,a)=>_e(e,"error",s.positionalArity,`'${t.name}' takes no positional arguments — use the named form`,r,a,{operator:t.name}),Ct=(e,t,r,a,n)=>{const o=t.entry.definition.positionalParams;if(void 0===o)return void Dt(e,t,a,n);const i=o.length;_e(e,"error",s.positionalArity,`'${t.name}' takes at most ${i} positional argument${1===i?"":"s"} (${o.join(", ")}), got ${r.length}`,a,n,{operator:t.name})},Nt=(e,t,r,a,n,o)=>{for(const r in t)"operator"!==r&&"value"!==r&&"//"!==r&&"$literal"!==r&&("fallback"===r||"vars"===r||"noCache"===r?_e(e,"warning",s.uselessModifier,`'${r}' on 'literal' is dead — contents are never evaluated`,Ee(n,r),o):_e(e,"error",s.unknownNodeKey,`'${r}' is not a key of 'literal' — content goes in 'value'`,Ee(n,r),o,{operator:"literal"}));return a?Xe(r,n,o):(_e(e,"error",s.malformedNode,"'literal' requires its content in 'value'",n,o,{operator:"literal"}),Ye(t,n,o))},St=(e,t,r,a,n)=>{const o=t.fragment;if("string"!=typeof o)return nt(e,t,"fragment",r,n);const i=Et(e,o,r,a,n);return st(e,i,t,"fragment",a,(t,o)=>{"parameters"===t?Mt(e,i,o,Ee(r,t),a,n):_e(e,"error",s.unknownNodeKey,`'${t}' is not a key of a fragment call — arguments live only in 'parameters'`,Ee(r,t),n)}),i},zt=(e,t,r,a,o,i,l)=>{const c=Et(e,r,o,i,l);return st(e,c,t,`$${r}`,i),n(a)?Mt(e,c,a,Ee(o,`$${r}`),i,l):_e(e,"error",s.malformedNode,`fragments have no single-value or positional form — '$${r}' takes a named-arguments object`,Ee(o,`$${r}`),l),c},Et=(e,t,r,a,n)=>{const o={kind:"fragmentCall",name:t,argumentsMode:"static",path:r,order:n};e.fragmentNames.add(t);const i=e.registry.fragments.get(t);if(void 0===i){const a=T(t,e.registry.fragments.keys());return _e(e,"error",s.unknownFragment,`'${t}' names no registered fragment${V(a)}`,r,n,{suggestion:a}),o}return o.entry=i,e.fragmentCalls.push({name:t,depth:a}),e.dataReads.push({kind:"call",fragment:i,path:r}),o},Mt=(e,t,r,o,i,l)=>{if(p(r,e.recognizes)||"string"==typeof r&&"reference"===a(r,e.scope).kind)return t.argumentsMode="dynamic",t.parameters=He(e,r,o,i+1),void(e.dynamic=!0);if(n(r)){const a={};for(const t in r){const n=r[t];"//"!==t&&void 0!==n&&(a[t]=He(e,n,Ee(o,t),i+1))}return void(t.parameters=a)}_e(e,"error",s.malformedNode,"a fragment's 'parameters' must be a named-arguments object or a node computing one",o,l)},qt=(e,t,a,o,i)=>{const l=Ee(a,"vars");if(!n(t))return void _e(e,"error",s.invalidVars,"a 'vars' block must be an object of name → expression entries",l,i);const c={};for(const a in t){const n=t[a];if("//"===a||void 0===n)continue;const u=Ee(l,a),d=r(a);d.ok?c[a]=He(e,n,u,o+1):_e(e,"error",s.invalidName,`'${a}' is not a legal var name — ${d.reason}`,u,i)}return c},Ft=(e,t,r,a,n)=>{const{entries:o,vars:s,changed:i}=Tt(e,t,r,a,n);return It(e,t,o,!1,i,s,r,n)},Tt=(e,t,r,a,n,o=!1)=>{let i,l=!1;const c=[],u=!o&&Vt(t);u&&e.unknownNodes++;for(const u in t){const d=t[u];if("//"!==u)if("vars"!==u)if(void 0!==d){if(u.startsWith("$")){const t=T(u.slice(1),Ut(e)),a=void 0!==t?V(`$${t}`):o?"":" — data with a '$' key goes inside 'literal'";_e(e,o?"warning":"error",s.unrecognizedIdentifier,`'${u}' is not a registered operator or fragment${o?", so it is a plain key":""}${a}`,Ee(r,u),n,{suggestion:void 0===t?void 0:`$${t}`})}c.push({key:u,rawChild:d,node:He(e,d,Ee(r,u),a+1)})}else l=!0;else i=qt(e,d,r,a,n),l=!0;else l=!0}return u&&e.unknownNodes--,{entries:c,vars:i,changed:l}},Vt=e=>{for(const t in e)if(t.startsWith("$")&&void 0!==e[t])return!0;return!1},It=(e,t,r,a,n,o,i,l)=>{const c=[],u=a?new Array(r.length):{};let d=n;for(const{key:e,rawChild:t,node:a}of r)"constant"!==a.kind?(d=!0,"skeleton"!==a.kind||void 0!==a.vars?c.push({path:a.path,at:[e],node:a}):(Le(u,e,a.skeleton),c.push(...a.holes.map(t=>({...t,at:[e,...t.at]}))))):(Le(u,e,a.value),a.value!==t&&(d=!0));if(0===c.length)return void 0!==o&&Object.keys(o).length>0&&_e(e,"warning",s.unreferencedVar,"this vars block declares names nothing in its scope references",Ee(i,"vars"),l),Xe(d||void 0!==o?u:t,i,l);const f={kind:"skeleton",skeleton:u,holes:c,path:i,order:l};return void 0!==o&&(f.vars=o),f},Rt=(e,t=[])=>{if("skeleton"===e.kind)for(const r of e.holes)Rt(r.node,t);else if("constant"!==e.kind){const r=Lt(e);t.push(void 0===r?{node:e}:{node:e,timeoutFallback:r})}return t},Lt=e=>{if("operator"===e.kind||"fragmentCall"===e.kind)return void 0!==e.fallback?Wt(e.fallback):"operator"===e.kind?e.entry.defaultFallback:e.entry?.timeoutFallback},Wt=e=>{if("constant"===e.kind)return{value:e.value};const t=[],r=Bt(e,[],t);return void 0===r?void 0:{value:r,reads:t}},Bt=(e,t,r)=>{if("reference"===e.kind){if("error"!==e.namespace)return;return r.push({at:t,segments:e.segments}),e.raw}if("skeleton"!==e.kind)return;const a=[];for(const n of e.holes){const e=Bt(n.node,[...t,...n.at],r);if(void 0===e)return;a.push(e)}return We(e.skeleton,e.holes,a)},Jt=new WeakMap,Ut=e=>{const t=Jt.get(e.registry);if(void 0!==t)return t;const r=[...e.registry.operators.keys(),...e.registry.aliases.keys(),...e.registry.fragments.keys()];return Jt.set(e.registry,r),r},Gt=e=>{switch(e.kind){case"operator":return e.entry.definition.returns;case"fragmentCall":return e.entry?.returns??"any";case"skeleton":return Array.isArray(e.skeleton)?"array":"object";case"constant":return Kt(e.value);default:return"any"}},Kt=e=>{if(null===e)return"null";if(Array.isArray(e))return"array";if(q(e))return"object";switch(typeof e){case"string":return"string";case"number":return"number";case"boolean":return"boolean";default:return"any"}},_t=/*#__PURE__*/Object.freeze({parsePath:k,resolvePath:x,checkType:Q,checkConstraints:X,describeType:B,renderText:he,isTruthy:ue}),Ht=(e,t={})=>{Xt({artifact:e,context:t,varsFrames:[],iteratorFrames:[],fallbackFrames:[]},e.root),Fe(e.issues),e.hasErrors=Ve(e.issues)},Qt=(e,t,r,a,n,o,s)=>{Te(e.artifact.issues,t,r,a,n,o,s)},Xt=(e,t)=>{switch(t.kind){case"constant":case"invalid":return;case"reference":return void pr(e,t);case"skeleton":{const r=gr(e,t.vars,t.path);for(const r of t.holes)Xt(e,r.node);return void br(e,r)}case"fragmentCall":return void dr(e,t);case"elements":for(const r of t.nodes)Xt(e,r);return;case"entries":{const r=gr(e,t.vars,t.path);for(const r in t.entries)Xt(e,t.entries[r]);return void br(e,r)}case"operator":return void Zt(e,t)}return t},Yt=(e,t,r)=>{const a={referenced:!1};e.fallbackFrames.push(a),Xt(e,r),e.fallbackFrames.pop(),a.referenced&&(t.fallbackReadsError=!0)},Zt=(e,t)=>{const r=gr(e,t.vars,t.path);void 0!==t.fallback&&Yt(e,t,t.fallback);const a=t.entry.definition,n=ur(t);for(const[r,o]of a.resolution.entries){const a=t.params[r];void 0!==a?tr(e,n,r,o,a,er(t,r)):o.required&&Qt(e,"error",s.missingRequired,`'${t.name}' requires '${r}'`,t.path,t.order,{operator:t.name,parameter:r})}fr(e,t);const o=[];for(const r in t.params){const n=t.params[r];"perElement"===a.parameters[r]?.evaluation?o.push([r,n]):Xt(e,n)}if(o.length>0){const r={as:Ie(t),referenced:!1};e.iteratorFrames.push(r);for(const[,t]of o)Xt(e,t);e.iteratorFrames.pop(),r.referenced||Qt(e,"warning",s.deadBinding,`'${t.name}' binds ${null===r.as?"$element / $index":`$${r.as}`} but its 'each' references neither`,t.path,t.order,{operator:t.name})}br(e,r)},er=(e,t)=>{const{definition:r,hostDefaults:a}=e.entry;if(void 0!==r.parameters[t]?.elementNullPolicy)return!1;for(const[n,o]of r.resolution.entries){if(!o.replacesNullAt?.includes(t))continue;const r=e.params[n];if(void 0===r){if(void 0!==a&&Object.hasOwn(a,n)&&null!==a[n])return!0}else if("constant"!==r.kind||null!==r.value)return!0}return!1},tr=(e,t,r,a,n,o=!1)=>{const i={...t.extra,parameter:r};if("elements"===n.kind){const o=a.constraints?.length;return void(void 0!==o&&n.nodes.length!==o&&Qt(e,"error",s.typeCheck,`'${t.label}.${r}': expected ${o} element${1===o?"":"s"}, received ${n.nodes.length}`,n.path,n.order,i))}if("constant"!==n.kind&&"structural"===a.evaluation&&"as"!==r)return void Qt(e,"error",s.typeCheck,`'${t.label}.${r}' is structural — it requires a literal value`,n.path,n.order,i);const l=`'${t.label}.${r}'`,c=ar(a,n,o);void 0!==c&&Qt(e,"error",c.code,c.code===s.returnsMismatch?`${c.reason} — it can never satisfy ${l}`:`${l}: ${c.reason}`,n.path,n.order,i);let u=n;for(;"operator"===u.kind||"fragmentCall"===u.kind;){const n=u.fallback;if(void 0===n)return void("operator"===u.kind&&rr(e,t,r,a,u,o));const c=ar(a,n,o);void 0!==c&&Qt(e,"warning",s.fallbackMismatch,`this fallback can never satisfy ${l}: ${c.reason}`,n.path,n.order,i),u=n}},rr=(e,t,r,a,n,o)=>{const i=n.entry.defaultFallback;if(void 0===i)return;const l=nr(a,i,o);void 0!==l&&Qt(e,"warning",s.fallbackMismatch,`'${n.name}' falls back to its operatorDefaults fallback, which can never satisfy '${t.label}.${r}': ${l.reason}`,n.path,n.order,{...t.extra,parameter:r})},ar=(e,t,r)=>{switch(t.kind){case"constant":return cr(e,t.value,r);case"operator":case"fragmentCall":{if("fragmentCall"===t.kind&&void 0===t.entry)return;const r=Gt(t);if(j(r,e.type))return;const a="operator"===t.kind?`'${t.name}'`:`fragment '${t.name}'`;return{code:s.returnsMismatch,reason:`${a} returns ${JSON.stringify(r)}`}}case"skeleton":return sr(e,Array.isArray(t.skeleton)?[]:{});case"reference":return"error"===t.namespace?or(e,t.segments):void 0;default:return}},nr=(e,{value:t,reads:r},a)=>void 0===r?cr(e,t,a):0===r[0].at.length?or(e,r[0].segments):sr(e,Array.isArray(t)?[]:{}),or=(e,t)=>{const r=lr(t);if(void 0!==r&&!j(r,e.type))return sr(e,ir[r])},sr=(e,t)=>{const r=Q(t,e.type);if(!r.ok)return{code:s.typeCheck,reason:`expected ${r.expected}, received ${r.actual}`}},ir={object:{},array:[],string:"",number:0,boolean:!1},lr=e=>{const[t,...r]=e;if(void 0===t)return"object";if(r.length>0||!Object.hasOwn(O,t))return;const a=O[t];return"string"==typeof a?a:void 0},cr=(e,t,r)=>{if(null===t&&(r||K(e)))return;const a=ne(t,e);return a.ok?void 0:{code:s.typeCheck,reason:`expected ${a.expected}, received ${a.actual}`}},ur=e=>({label:e.name,extra:{operator:e.name}}),dr=(e,t)=>{const r=gr(e,t.vars,t.path);void 0!==t.fallback&&Yt(e,t,t.fallback);const a=t.entry?.parameters,n="static"===t.argumentsMode?t.parameters:void 0;if(void 0!==a&&"static"===t.argumentsMode){const r={label:t.name,extra:{fragment:t.name}};for(const o in a){const i=a[o],l=n?.[o];void 0!==l?tr(e,r,o,i,l):i.required&&Qt(e,"error",s.missingRequired,`fragment '${t.name}' – requires '${o}'`,t.path,t.order,{fragment:t.name,parameter:o})}if(void 0!==n)for(const r in n){const o=n[r];if(void 0===a[r]){const n=T(r,Object.keys(a));Qt(e,"error",s.unknownNodeKey,`fragment '${t.name}' declares no parameter '${r}'${V(n)}`,o.path,o.order,{parameter:r,suggestion:n})}}}if(void 0!==n)for(const t in n)Xt(e,n[t]);else void 0!==t.parameters&&Xt(e,t.parameters);br(e,r)},fr=(e,t)=>{const r=t.entry.definition.validate;if(void 0===r)return;const a={};for(const e in t.params){const r=t.params[e];"constant"===r.kind&&(a[e]=r.value)}let n;try{n=r(a,_t)}catch(r){return void Qt(e,"error",s.operatorValidate,`'${t.name}' validate hook threw: ${r.message}`,t.path,t.order,{operator:t.name})}for(const r of n){const a=void 0!==r.parameter?t.params[r.parameter]:void 0;Qt(e,r.severity,s.operatorValidate,r.message,a?.path??t.path,t.order,{operator:t.name,parameter:r.parameter})}},pr=(e,t)=>{const{namespace:r}=t;switch(r){case"data":return;case"vars":return void mr(e,t);case"params":return void hr(e,t);case"element":case"index":return void vr(e,t,r);case"error":return void yr(e,t)}return r},mr=(e,t)=>{const r=t.segments[0],a="string"==typeof r?r:void 0;if(void 0!==a)for(let t=e.varsFrames.length-1;t>=0;t--){const r=e.varsFrames[t],n=r.names.get(a);if(void 0!==n){if(n.referenced=!0,null!==r.currentVar){const e=r.edges.get(r.currentVar)??new Set;e.add(a),r.edges.set(r.currentVar,e)}return}}Qt(e,"error",s.unresolvedVar,`'${t.raw}': no var '${a??""}' is declared in scope`,t.path,t.order)},hr=(e,t)=>{const r=e.context.fragmentParams;if(void 0===r)return void Qt(e,"error",s.unresolvedParam,`'${t.raw}': $params is only available inside a fragment body`,t.path,t.order);if(0===t.segments.length)return;const a=t.segments[0];"string"==typeof a&&r.has(a)||Qt(e,"error",s.unresolvedParam,`'${t.raw}': the fragment declares no parameter '${String(a)}'`,t.path,t.order)},vr=(e,t,r)=>{for(let a=e.iteratorFrames.length-1;a>=0;a--){const n=e.iteratorFrames[a];if(Re(n.as,r,t.binding))return void(n.referenced=!0)}t.scopeUnknown||Qt(e,"error",s.unresolvedBinding,`'${t.raw}' resolves against no enclosing iterator here`,t.path,t.order)},yr=(e,t)=>{const r=e.fallbackFrames.at(-1);void 0===r?t.scopeUnknown||Qt(e,"error",s.unresolvedBinding,`'${t.raw}' is only available inside the fallback of an operator node or fragment call`,t.path,t.order):r.referenced=!0},gr=(e,t,r)=>{if(void 0===t)return null;const a={names:new Map,currentVar:null,edges:new Map},n=Ee(r,"vars");for(const r in t){const o=t[r],i=Ee(n,r);for(const t of e.varsFrames)if(t.names.has(r)){Qt(e,"warning",s.shadowedVar,`'${r}' shadows a var of the same name from an enclosing scope`,i,o.order);break}a.names.set(r,{node:o,declaredAt:i,order:o.order,referenced:!1})}e.varsFrames.push(a);for(const[t,r]of a.names)a.currentVar=t,Xt(e,r.node),a.currentVar=null;return a},br=(e,t)=>{if(null!==t){e.varsFrames.pop();for(const[r,a]of t.names)a.referenced||Qt(e,"warning",s.unreferencedVar,`'${r}' is declared but never referenced in its scope`,a.declaredAt,a.order);kr(e,t)}},kr=(e,t)=>{const r=new Map([...t.names.keys()].map((e,t)=>[e,t]));L(t.names.keys(),e=>t.edges.get(e),a=>{const n=a.sort((e,t)=>r.get(e)-r.get(t)),o=n.map(e=>`'${e}'`),i=1===o.length?`${o[0]} depends on itself`:`${I(o)} form a vars cycle — a var may not depend on itself`,l=t.names.get(n[0]);Qt(e,"error",s.varCycle,i,l.declaredAt,l.order)})},wr={capable:!1,effective:!1,disabled:[]},$r={capable:!0,effective:!0,disabled:[]},xr=e=>{const{effective:t}=jr(e,e.root,!1);return Fe(e.issues),t},jr=(e,t,r)=>{switch(t.kind){case"constant":case"reference":return wr;case"invalid":return $r;case"skeleton":case"elements":case"entries":return Dr(e,qe(t),r);case"operator":return Or(e,t,_r(t.entry),r);case"fragmentCall":return Or(e,t,t.entry?.caches??!0,r)}return t},Or=(e,t,r,a)=>{const n=!0===t.noCache,o=Dr(e,qe(t),a||n),s=r||o.capable,i=Ar(t),l=void 0===i?o.disabled:[i,...o.disabled];return n&&a?Cr(e,t,"'noCache' is redundant — an enclosing node already sets it"):n&&!s&&Cr(e,t,l.length>0?`'noCache' is redundant — caching is already disabled for ${Pr(l)}`:"'noCache' is dead — nothing beneath this node caches"),{capable:s,effective:!n&&(r||o.effective),disabled:l}},Ar=e=>"operator"===e.kind&&e.entry.definition.cache&&!_r(e.entry)?e.entry.definition.name:void 0,Pr=e=>I([...new Set(e)].map(e=>`'${e}'`)),Dr=(e,t,r)=>{const a={capable:!1,effective:!1,disabled:[]};for(const n of t){const{capable:t,effective:o,disabled:s}=jr(e,n,r);a.capable||=t,a.effective||=o,a.disabled.push(...s)}return a},Cr=(e,t,r)=>{Te(e.issues,"warning",s.uselessModifier,r,Ee(t.path,"noCache"),t.order,"operator"===t.kind?{operator:t.name}:{fragment:t.name})};class Nr{max;entries=new Map;constructor(e){this.max=e}get size(){return this.entries.size}get(e){if(!this.entries.has(e))return;const t=this.entries.get(e);return this.entries.delete(e),this.entries.set(e,t),t}set(e,t){this.entries.delete(e),this.entries.set(e,t),this.entries.size>this.max&&this.evictOldest()}delete(e){this.entries.delete(e)}clear(){this.entries.clear()}resize(e){for(this.max=e;this.entries.size>this.max;)this.evictOldest()}evictOldest(){const e=this.entries.keys().next();!0!==e.done&&this.entries.delete(e.value)}}const Sr=Symbol("fig-tree:lazy-handle"),zr="~",Er=(e,t)=>{if(t>o)return"refused";switch(typeof e){case"boolean":return"json";case"string":return e.length>4096?"serializer":"json";case"number":return Number.isFinite(e)&&!Object.is(e,-0)?"json":"serializer";case"undefined":return"serializer";case"object":break;default:return"refused"}if(null===e)return"json";if(Array.isArray(e)){for(let r=0;r<e.length;r++){const a=Er(e[r],t+1);if("json"!==a)return a}return"json"}if(!n(e))return"refused";for(const r in e){if(r.length>4096)return"serializer";const a=Er(e[r],t+1);if("json"!==a)return a}return"json"},Mr=(e,t)=>qr(e,0,t)?t.join(""):void 0,qr=(e,t,r)=>{if(t>o)return!1;if(null===e)return Tr(r,"n");if(void 0===e)return Tr(r,"u");switch(typeof e){case"boolean":return Tr(r,e?"t":"f");case"number":return Fr(e,r);case"string":return Tr(r,`s${e.length}:${e}`);case"object":break;default:return!1}if(Array.isArray(e)){r.push("[");for(const a of e)if(!qr(a,t+1,r))return!1;return Tr(r,"]")}if(!n(e)||Sr in e)return!1;r.push("{");for(const a in e)if(r.push(`s${a.length}:${a}`),!qr(e[a],t+1,r))return!1;return Tr(r,"}")},Fr=(e,t)=>Number.isNaN(e)?Tr(t,"N"):e===1/0?Tr(t,"I"):e===-1/0?Tr(t,"J"):Object.is(e,-0)?Tr(t,"#-0"):Tr(t,`#${String(e)}`),Tr=(e,t)=>(e.push(t),!0);class Vr{deps;identity=new WeakMap;content=new Nr(200);constructor(e){this.deps=e}resolve(e){const t="object"==typeof e&&null!==e?e:void 0;if(void 0!==t){const e=this.identity.get(t);if(void 0!==e)return e}const r=this.deps.probe(e);if(r.constant){const e={kind:"inert",depth:r.depth};return void 0!==t&&this.identity.set(t,e),e}const a=void 0===t?void 0:(e=>{const t=Er(e,0);return"json"===t?JSON.stringify(e):"serializer"===t?Mr(e,[zr]):void 0})(e),n=void 0===a?void 0:this.content.get(a),o=n??this.deps.compile(e),s={kind:"artifact",artifact:o};return void 0!==t&&this.identity.set(t,s),void 0!==a&&void 0===n&&!o.identityOnly&&o.holes.length>0&&this.content.set(a,o),s}}const Ir=/*#__PURE__*/new Set(["type","required","default","description","metadata","constraints"]),Rr=/*#__PURE__*/new Set(["expression","parameters","description","metadata"]),Lr=(e,t,a)=>{const n=(...t)=>["fragments",e,...t],o=r(e);if(!o.ok)return void a(s.invalidName,`'${e}' is not a legal fragment name: ${o.reason}`,n());if(A(e))return void a(s.reservedName,`'${e}' is a reserved name and may not name a fragment`,n());if(!q(t))return void a(s.invalidDefinition,`fragment '${e}' must be a wrapper object: { expression, parameters?, description?, metadata? }`,n());if(!("expression"in t))return void a(s.invalidDefinition,`fragment '${e}' has no 'expression'`,n());for(const e of Object.keys(t))Rr.has(e)||a(s.invalidDefinition,`'${e}' is not a key of a fragment definition`,n(e));const i={name:e,parameters:{},body:{kind:"constant",value:null,path:null,order:0},returns:"any",warnings:[],nodeCount:0,maxDepth:0,dependencies:{dataPaths:new Map,dynamic:!1,operators:[],fragments:[]},identityOnly:!1,caches:!1};if(void 0!==t.description&&("string"!=typeof t.description?a(s.invalidDefinition,"'description' must be a string",n("description")):i.description=t.description),void 0!==t.metadata&&(q(t.metadata)?i.metadata=t.metadata:a(s.invalidDefinition,"'metadata' must be a plain object",n("metadata"))),void 0!==t.parameters)if(q(t.parameters))for(const[e,r]of Object.entries(t.parameters)){const t=Wr(e,r,n,a);void 0!==t&&(i.parameters[e]=t)}else a(s.invalidDefinition,"'parameters' must be a plain object",n("parameters"));return i},Wr=(e,t,a,n)=>{const o=a("parameters",e),i=r(e);if(!i.ok)return void n(s.invalidName,`'${e}' is not a legal parameter name: ${i.reason}`,o);if(P.has(e))return void n(s.reservedName,`'${e}' is a reserved node key and may not name a parameter`,o);if(!q(t))return void n(s.invalidDefinition,`the declaration of '${e}' must be an object`,o);for(const e of Object.keys(t))Ir.has(e)||n(s.invalidDefinition,`'${e}' is not a key of a parameter declaration`,[...o,e]);const l=t.type??"any";if(!H(l))return void n(s.invalidDefinition,`'${e}' declares an unknown type`,[...o,"type"]);if(void 0!==t.required&&"boolean"!=typeof t.required)return void n(s.invalidDefinition,"'required' must be a boolean",[...o,"required"]);let c;if(void 0!==t.constraints){const r=ee(t.constraints);if(!r.ok)return void n(s.invalidDefinition,`'${e}' declares invalid constraints: expected ${r.expected}, got ${r.actual}`,[...o,"constraints"]);c=t.constraints}const u="default"in t;if(u&&!0===t.required)return void n(s.invalidDefinition,`'${e}' is declared required and also declares a default — the default could never apply`,[...o,"default"]);if(u){const r=Q(t.default,l);if(!r.ok)return void n(s.typeCheck,`the default for '${e}' does not satisfy its declared type: expected ${r.expected}, got ${r.actual}`,[...o,"default"]);const a=ae(t.default,{constraints:c});if(!a.ok)return void n(s.typeCheck,`the default for '${e}' violates its declared constraints: expected ${a.expected}, got ${a.actual}`,[...o,"default"])}const d={type:l,required:t.required??!u};return u&&(d.default=t.default),"string"==typeof t.description&&(d.description=t.description),q(t.metadata)&&(d.metadata=t.metadata),void 0!==c&&(d.constraints=c),d},Br=e=>{const t=new Set,r=new Set,a=e=>{if(r.has(e.name)||t.has(e.name))return;t.add(e.name);const n=e.body;"fragmentCall"===n.kind&&void 0!==n.entry&&a(n.entry),e.returns=Gt(n),t.delete(e.name),r.add(e.name)};for(const t of e.fragments.values())a(t)},Jr=(e,t)=>L(e.keys(),t=>e.get(t)?.fragmentCalls.map(e=>e.name),([e,...r])=>t(s.fragmentCycle,`fragment '${e}' reaches itself: ${[e,...r,e].join(" → ")} — recursion is not supported`,["fragments",e])),Ur=(e,t)=>{const r=new Set,a=n=>{if(r.has(n))return;r.add(n);const o=e.fragments.get(n),s=t.get(n);if(void 0===o||void 0===s)return;for(const e of s.fragmentCalls)a(e.name);const i=Ge(s.own,s.fragmentCalls,e.fragments);o.nodeCount=i.nodeCount,o.maxDepth=i.maxDepth,o.dependencies=i.dependencies,o.identityOnly=i.identityOnly,o.caches=xr(s),o.timeoutFallback=Gr(n,s,e.fragments)};for(const e of t.keys())a(e)},Gr=(e,t,r)=>{const{root:a,holes:n}=t;if(0===n.length)return;const o=[];for(const e of n){const t=Kr(e,r);if(void 0===t)return;o.push(t)}const s=[];let i=0;const l=(t,r)=>{if("skeleton"===t.kind)return We(t.skeleton,t.holes,t.holes.map(e=>l(e.node,[...r,...e.at])));const{value:a,reads:n=[]}=o[i++],c={..."operator"===t.kind?{operator:t.name}:{},fragment:e,fragmentPath:Me(t.path)};for(const e of n)s.push({...e,at:[...r,...e.at],within:e.within??c});return a},c=l(a,[]);return 0===s.length?{value:c}:{value:c,reads:s}},Kr=(e,t)=>{if(void 0!==e.timeoutFallback)return e.timeoutFallback;const{node:r}=e;return"fragmentCall"===r.kind&&void 0===r.fallback?t.get(r.name)?.timeoutFallback:void 0},_r=e=>e.definition.cache&&!0!==e.hostDefaults?.noCache,Hr=["fallback","noCache"],Qr=e=>{const t=[],r=(e,r,a,n)=>{t.push({severity:"error",code:e,message:r,path:a,...void 0!==n?{operator:n}:{}})},a={operators:new Map,aliases:new Map,fragments:new Map},{operators:n,aliases:o}=a,i=new Map,l=(e,t,a)=>{const n=i.get(e);return void 0!==n?(r(s.duplicateOperator,`'${e}' is already registered (by '${n}') — one namespace, no silent precedence`,t,a),!1):(i.set(e,a),!0)},c=(e,t)=>{if("function"==typeof e)return void r(s.invalidOptions,`operators[${t[1]}]${t.length>2?`[${t[2]}]`:""} is a function — factories must be called: httpOperators(client)`,t);if(!le(e))return void r(s.invalidOptions,"every operators entry must be built with defineOperator() — a plain definition object is not accepted",t);const{name:a,alias:i}=e,c=l(a,t,a),u=void 0===i||l(i,t,a);c&&u&&(n.set(a,{definition:e}),void 0!==i&&o.set(i,a))};if(Array.isArray(e.operators)?e.operators.forEach((e,t)=>{Array.isArray(e)?e.forEach((e,a)=>{Array.isArray(e)?r(s.invalidOptions,"'operators' is flattened one level only — arrays may not nest deeper",["operators",t,a]):c(e,["operators",t,a])}):c(e,["operators",t])}):r(s.invalidOptions,"'operators' must be an array",["operators"]),void 0!==e.operatorDefaults&&Xr(e.operatorDefaults,n,o,r),((e,t,r,a)=>{if(void 0===e)return;if(!q(e))return void a(s.invalidOptions,"'fragments' must be a plain object",["fragments"]);for(const[n,o]of Object.entries(e)){const e=Lr(n,o,a);void 0!==e&&r(n,["fragments",n])&&t.fragments.set(n,e)}const n=new Map;for(const[r,a]of t.fragments){const o=e[r],s=Ue(o.expression,t,{basePath:["expression"]});a.body=s.root,n.set(r,s)}Br(t);for(const[e,r]of t.fragments){const t=n.get(e);Ht(t,{fragmentParams:new Set(Object.keys(r.parameters))});for(const{issue:r}of t.issues)"error"===r.severity&&a(r.code,`fragment '${e}': ${r.message}`,["fragments",e,...r.path])}Jr(n,a)&&Ur(t,n);for(const[e,r]of t.fragments)for(const{issue:t}of n.get(e).issues)if("error"!==t.severity){const e={...t,path:[...t.path]};Object.freeze(e.path),r.warnings.push(Object.freeze(e))}})(e.fragments,a,(e,t)=>l(e,t,e),r),t.length>0)throw z(s.invalidOptions,t,t[0].operator);return a},Xr=(e,t,r,a)=>{if(q(e))for(const[n,o]of Object.entries(e)){const e=["operatorDefaults",n],i=t.get(n);if(void 0===i){const t=r.get(n);void 0!==t?a(s.invalidOptions,`'operatorDefaults' keys are canonical names — use '${t}', not its alias '${n}'`,e,t):a(s.unknownOperator,`'${n}' names no registered operator`,e);continue}if(!q(o)){a(s.invalidOptions,`the defaults for '${n}' must be a plain object`,e,n);continue}let l,c=!0;for(const[t,r]of Object.entries(o)){const o=[...e,t];if(Hr.includes(t)){"fallback"===t&&(l=Se(r),void 0===l&&(a(s.invalidOptions,`the default fallback for '${n}' must be static, built only from literals and $error reads — it is never evaluated`,o,n),c=!1)),"noCache"===t&&(!0!==r?(a(s.invalidOptions,"the 'noCache' modifier takes only the literal true",o,n),c=!1):i.definition.cache||(a(s.invalidOptions,`'noCache' on '${n}', which never caches — its definition does not declare 'cache: true'`,o,n),c=!1));continue}const u=i.definition.parameters[t];if(void 0===u){a(s.invalidOptions,`'${t}' names no declared parameter of '${n}' (nor 'fallback'/'noCache')`,o,n),c=!1;continue}if(u.required){a(s.invalidOptions,`'${t}' is a required parameter of '${n}' — operatorDefaults may only target optional parameters`,o,n),c=!1;continue}const d=Q(r,u.type);if(!d.ok){a(s.typeCheck,`the default for '${n}.${t}' does not satisfy its declared type: expected ${d.expected}, got ${d.actual}`,o,n),c=!1;continue}const f=ae(r,u);f.ok||(a(s.typeCheck,`the default for '${n}.${t}' violates its declared constraints: expected ${f.expected}, got ${f.actual}`,o,n),c=!1)}c&&(i.hostDefaults=Object.freeze({...o}),void 0!==l&&(i.defaultFallback=l))}else a(s.invalidOptions,"'operatorDefaults' must be a plain object",["operatorDefaults"])},Yr=(e,t)=>{const r=e.operators.get(t);if(void 0!==r)return r;const a=e.aliases.get(t);return void 0!==a?e.operators.get(a):void 0},Zr="fig-tree:scope-settled",ea="fig-tree:request-expired",ta="fig-tree:evaluation-timeout";class ra{parent;controller;upstream;forward;settled=!1;verified=-1;clock;constructor(e){this.parent=e,this.clock=void 0===e?{epoch:0}:e.clock}get aborted(){return void 0!==this.controller?this.controller.signal.aborted:!!this.settled||this.verified!==this.clock.epoch&&(!(void 0===this.parent||!this.parent.aborted)||(this.verified=this.clock.epoch,!1))}get reason(){return void 0!==this.controller?this.controller.signal.reason:this.settled?Zr:this.parent?.reason}get signal(){if(void 0===this.controller){const e=new AbortController;if(this.controller=e,this.settled)e.abort(Zr);else if(void 0!==this.parent){const t=this.parent.signal;t.aborted?e.abort(t.reason):(this.upstream=t,this.forward=()=>e.abort(t.reason),t.addEventListener("abort",this.forward,{once:!0}))}}return this.controller.signal}settle(){this.settled||(this.settled=!0,this.clock.epoch+=1,void 0!==this.controller&&(void 0!==this.upstream&&void 0!==this.forward&&this.upstream.removeEventListener("abort",this.forward),this.controller.abort(Zr)))}}const aa=(e,t,r=E)=>({get aborted(){return e.aborted},get reason(){return e.reason},signal:e,clock:t,settle:r}),na=(e,t,r)=>{const a=new AbortController,{signal:n}=a,o=()=>a.abort(e?.reason);let s;e?.aborted?o():e?.addEventListener("abort",o,{once:!0});const i=new Promise((e,t)=>{s=t});i.catch(E);const l=()=>s(n.reason);n.aborted?l():n.addEventListener("abort",l,{once:!0});const c=void 0===t?void 0:setTimeout(()=>a.abort(r),Math.min(t,2147483647));return{signal:n,expiry:i,settle:()=>{void 0!==c&&clearTimeout(c),n.removeEventListener("abort",l),e?.removeEventListener("abort",o),a.abort(Zr)}}},oa=(e,t)=>na(e,t,ea),sa=(e,t)=>(r,a)=>{const n=(o=[e.operator,e.fingerprint,r],Mr(o,[]));var o;return void 0===n?a():(async(e,t,r,a)=>{const n=e.generation,o=await e.lookup(t);if(a?.({type:"cache",hit:o.hit}),o.hit)return o.value;const s=await r();return await e.write(t,s,n),s})(t,n,a,e.note)},ia=/*#__PURE__*/Object.freeze({}),la=(e,t)=>!0!==t||!0===e.noCache?e:{...e,noCache:t};class ca{options;cache;trace;#e;constructor(e,t,r,a){this.options=t,this.cache=r,this.trace=a,this.#e=e}get signal(){return this.#e.signal}}const ua={memo:(e,t)=>t()},da={note:E},fa=Symbol("fig-tree:internal-error"),pa=e=>ja(`[fig-tree internal] ${e}`,fa),ma=e=>pa(`${e} reached evaluation — the static gate should have refused it`),ha=(t,r,a,n)=>new e({code:r,message:`${t.name} – ${a}`,path:Me(t.path),operator:t.name,errorData:n}),va=e=>Aa(e,fa),ya=Symbol("fig-tree:cancelled"),ga=()=>ja("[fig-tree] evaluation cancelled",ya),ba=e=>Aa(e,ya),ka=(e,t,r)=>e.rootScope.aborted?wa(e.rootScope.reason,t,r):e.abortScope.aborted?ga():void 0,wa=(e,t,r)=>e===Zr?ga():$a(e,Me(t),{operator:r}),$a=(t,r,a={})=>{const{operator:n,ms:o}=a,i=t===ta,l=void 0===o?"":`${o}ms `;return new e({code:i?s.timeout:s.aborted,message:i?`evaluation exceeded its ${l}timeout`:"evaluation was aborted by the caller",path:r,...void 0!==n?{operator:n}:{}})},xa=e=>va(e)||ba(e)||(e=>D(e)&&(e.code===s.aborted||e.code===s.timeout))(e),ja=(e,t)=>{const r=new Error(e);return Oa(r,t),r},Oa=(e,t)=>{e[t]=!0},Aa=(e,t)=>e instanceof Error&&!0===e[t],Pa=()=>performance.now(),Da=e=>{const t=new Map,r=new WeakMap,a=new WeakSet;let n;const o=(e,r,n)=>{const o=t.get(e);if(void 0===o)return;t.delete(e),a.has(e)||("fallback"!==e.status&&(e.status=r),void 0!==n.error&&void 0===e.error&&(e.error=n.error),"failed"!==r&&"cancelled"!==r&&(e.value=n.value),void 0!==n.elapsed&&(e.elapsed=n.elapsed));const s=[...o.children,...Ca(o)];s.length>0&&(e.children=s.sort((e,t)=>e.order-t.order||e.index-t.index).map(e=>e.entry))},s=(e,t)=>{(e.events??=[]).push(t)},i=(e,a,o,s)=>{const i=Ma(e),l=qa(e),c={path:Me(e.path),kind:za(e),status:"value",...void 0!==o?{source:o}:{},...void 0!==i?{operator:i}:{},...void 0!==l?{ref:l}:{},...void 0!==s?.var?{var:s.var}:{}};return t.set(c,{node:e,children:[],seen:new Set,started:Pa()}),r.set(e,c),((e,r,a)=>{if(void 0===e)return void(n=r.entry);const o=t.get(e);void 0!==o&&(o.children.push(r),o.seen.add(a))})(a,{entry:c,order:e.order,index:s?.index??0},e),c};return{enter:(e,t,r,a)=>i(e,t,void 0!==r?{fragment:r.fragment}:void 0,a),settle:o,markFallback:(e,t)=>{e.status="fallback",e.error=t},note:s,markShielded:(e,n,l)=>{const c=r.get(e),u=void 0===c?void 0:t.get(c);if(void 0===c||void 0===u)return;a.add(c),c.status="fallback",c.error=n,c.value=l,c.elapsed=Pa()-u.started,s(c,{type:"shielded-fallback"});const d=Ea(e);void 0!==d&&o(i(d,c,c.source,void 0),"value",{value:l})},finish:()=>{for(const e of[...t.keys()].reverse())o(e,"cancelled",{});return void 0!==n&&e.length>0&&(n.warnings=e),n}}},Ca=e=>Na(e.node).filter(t=>!e.seen.has(t)).map(e=>({entry:{path:Me(e.path),kind:za(e),status:"skipped"},order:e.order,index:0})),Na=e=>{const t=qe(e).flatMap(Sa);return"fragmentCall"===e.kind&&void 0!==e.entry&&t.push(e.entry.body),t},Sa=e=>"elements"===e.kind||"entries"===e.kind?Na(e):[e],za=e=>{switch(e.kind){case"operator":return"operator";case"fragmentCall":return"fragment";case"reference":return"reference";case"skeleton":return"skeleton";default:return"literal"}},Ea=e=>"operator"===e.kind||"fragmentCall"===e.kind?e.fallback:void 0,Ma=e=>"operator"===e.kind||"fragmentCall"===e.kind?e.name:void 0,qa=e=>"reference"===e.kind?e.raw:void 0,Fa=async(e,t,r,a,n)=>{let o;try{o=await e()}catch(e){if(xa(e))throw e;if(!r){const r=a(e);throw D(r)&&r!==t&&void 0===r.cause&&(r.cause=t),r}o=null}return void 0!==n.trace&&void 0!==n.traceParent&&D(t)&&n.trace.markFallback(n.traceParent,t),o},Ta=(e,t)=>{if(void 0===t)return e;const r={parent:e.scope,vars:new Map},a={...e,scope:r};for(const[e,n]of Object.entries(t))r.vars.set(e,R(()=>Cn(n,a,{var:e})));return a},Va=async(e,t,r,a,n)=>{const o={...r,params:"dynamic"===e.argumentsMode?await Ra(e,t,a):Ia(e,t,a),frame:n};delete o.scope,delete o.bindings,delete o.caught;const s=await Cn(t.body,o);return void 0===s?null:s},Ia=(e,t,r)=>{const a=e.parameters??{},n=new Map;for(const[o,s]of Object.entries(t.parameters)){const t=a[o],i=R(async()=>{if(void 0===t)return La(e,o,s,r);let a;try{a=await Cn(t,r)}catch(e){throw Ua(e,r.frame)}return Wa(e,o,s,a,t.path,r)});n.set(o,()=>{const e=i();return e.catch(E),e})}return n},Ra=async(e,t,r)=>{const a=e.parameters;let n;try{n=await Cn(a,r)}catch(e){throw Ua(e,r.frame)}if(!q(n))throw Ua(Ba(e,s.typeCheck,`'parameters' must evaluate to an object, received ${B(n)}`,a.path),r.frame);const o=new Map;for(const[s,i]of Object.entries(t.parameters)){const t=Object.hasOwn(n,s)?Wa(e,s,i,n[s],a.path,r):La(e,s,i,r,a.path);o.set(s,()=>Promise.resolve(t))}return o},La=(e,t,r,a,n=e.path)=>{if(!r.required)return r.default??null;throw Ua(Ba(e,s.missingRequired,`requires '${t}'`,n),a.frame)},Wa=(e,t,r,a,n,o)=>{const i=void 0===a?null:a;if(null===i&&K(r))return r.default??null;const l=ne(i,r);if(!l.ok)throw Ua(Ba(e,s.typeCheck,`parameter '${t}': expected ${l.expected}, received ${l.actual}`,n),o.frame);return i},Ba=(t,r,a,n)=>new e({code:r,message:`fragment '${t.name}' – ${a}`,path:Me(n)}),Ja=Symbol("fig-tree:anchored"),Ua=(e,t)=>!D(e)||Aa(e,Ja)?e:(Oa(e,Ja),void 0===t?e:Object.assign(e,Ga(e,t))),Ga=(e,t)=>({fragment:t.fragment,fragmentPath:e.path,path:Me(t.callPath)}),Ka=(e,t)=>{const r=void 0===t||Aa(e,Ja)?e:Ga(e,t),a={code:e.code,message:e.message,path:r.path};return void 0!==e.operator&&(a.operator=e.operator),void 0!==r.fragment&&(a.fragment=r.fragment),void 0!==r.fragmentPath&&(a.fragmentPath=r.fragmentPath),void 0!==e.errorData&&(a.errorData=e.errorData),a};class _a extends Error{constructor(e,t={}){super(e),this.name="OperatorFailure",void 0!==t.code&&(this.code=t.code),void 0!==t.errorData&&(this.errorData=t.errorData)}}const Ha=e=>e instanceof _a,Qa=(e,t,r)=>Ya(Array.from({length:e},(e,a)=>Xa(a,()=>t(a),r)),e),Xa=async(e,t,r)=>{try{return{index:e,ok:!0,value:r(await t())}}catch(t){return{index:e,ok:!1,error:t}}},Ya=(e,t)=>{const r=new Map(e.map((e,t)=>[t,e]));return{[Sr]:!0,length:t,async*[Symbol.asyncIterator](){for(;r.size>0;){const e=await Promise.race(r.values());r.delete(e.index),yield e}}}},Za=e=>({[Sr]:!0,evaluate:R(e)}),en=e=>({[Sr]:!0,evaluate:()=>Promise.resolve(e)}),tn=(e,t,r,a,n)=>Za(async()=>rn(await Cn(e,n),t,r,a)),rn=(e,t,r,a)=>{const n=ne(e,a);if(!n.ok)throw ln(t,r,n);return a.truthiness?fn(e,a.type):e},an=(e,t,r,a,n,o)=>{const s=Array.isArray(t)?t:[],i=Ie(r),l=new Map,c=t=>{const c=l.get(t);if(void 0!==c)return c;const u=(async()=>rn(await Cn(e,((e,t,r,a)=>({...e,bindings:{parent:e.bindings,as:t,element:r,index:a}}))(o,i,s[t],t),{index:t}),r,a,n))();return u.catch(E),l.set(t,u),u};return{[Sr]:!0,evaluate:c,settle:()=>Qa(s.length,c,e=>e)}},nn=(e,t)=>t.truthiness?ue(e):e,on=(e,t,r)=>{if("lazyElements"===t.evaluation&&"elements"===e.kind)return e.nodes.map((e,a)=>Za(async()=>nn(await Cn(e,r,{index:a}),t)));if("race"===t.evaluation&&"elements"===e.kind)return((e,t,r)=>Qa(e.length,r=>Cn(e[r],t,{index:r}),r))(e.nodes,r,e=>nn(e,t));if("lazyEntries"===t.evaluation&&"entries"===e.kind){const a=Ta(r,e.vars),n={};for(const[r,o]of Object.entries(e.entries))n[r]=Za(async()=>nn(await Cn(o,a),t));return n}},sn=(e,t)=>{switch(t.evaluation){case"lazyElements":return e.map(e=>en(nn(e,t)));case"race":return((e,t)=>Qa(e.length,t=>Promise.resolve(e[t]),t))(e,e=>nn(e,t));case"lazyEntries":{const r={};for(const[a,n]of Object.entries(e))r[a]=en(nn(n,t));return r}case"lazy":return en(e);default:return e}},ln=(e,t,r)=>ha(e,s.typeCheck,`parameter '${t}': expected ${r.expected}, received ${r.actual}`),cn=(e,t,r)=>{if("string"==typeof t.nullPolicy)return t.nullPolicy;const a=t.nullPolicy,n=e.entry.definition.parameters[a.selector],o=r[a.selector],s=Q(o,n.type);if(!s.ok)throw ln(e,a.selector,s);return a.table.find(e=>e.value===o).policy},un=async(e,t,r)=>{if(void 0!==t.elementNullPolicy){if(Array.isArray(e)&&e.includes(null)){const t=await r();return e.map(e=>null===e?t:e)}if(q(e)&&Object.values(e).includes(null)){const t=await r(),a={};for(const[r,n]of Object.entries(e))a[r]=null===n?t:n;return a}return e}return null===e?r():e},dn=e=>Array.isArray(e)?e.includes(null):!!q(e)&&Object.values(e).includes(null),fn=(e,t)=>{if((e=>!("object"==typeof e&&!Array.isArray(e))&&(Array.isArray(e)?e:[e]).every(e=>"array"===e||"object"===e))(t)){if(Array.isArray(e))return e.map(ue);if(q(e)){const t={};for(const[r,a]of Object.entries(e))t[r]=ue(a);return t}}return ue(e)},pn=(e,t)=>0===e.segments.length?t.data:kn(t.data,e.segments,e,t,"is absent from the evaluation data"),mn=async(e,t)=>{const[r,...a]=e.segments,n="string"==typeof r?((e,t)=>{for(let r=e;void 0!==r;r=r.parent){const e=r.vars.get(t);if(void 0!==e)return e}})(t.scope,r):void 0;if("string"!=typeof r||void 0===n)throw ma(`'${e.raw}'`);const o=await n();return 0===a.length?wn(o):kn(o,a,e,t,`is absent from the value of '$vars.${r}'`)},hn=async(e,t)=>{const r=t.params;if(void 0===r)throw ma(`'${e.raw}'`);const[a,...n]=e.segments;if(void 0===a){const e={};return await Promise.all([...r].map(async([t,r])=>{e[t]=wn(await r())})),e}const o="string"==typeof a?r.get(a):void 0;if(void 0===o)throw ma(`'${e.raw}'`);const s=await o();return 0===n.length?wn(s):kn(s,n,e,t,`is absent from the value of '$params.${String(a)}'`)},vn=(e,t)=>{const r=e.namespace,a=((e,t,r)=>{for(let a=e;void 0!==a;a=a.parent)if(Re(a.as,t,r))return a})(t.bindings,r,e.binding);if(void 0===a)throw ma(`'${e.raw}'`);return"index"===r?a.index:0===e.segments.length?wn(a.element):kn(a.element,e.segments,e,t,`is absent from '${e.raw.split(".")[0]}'`)},yn=(e,t)=>{if(void 0===t.caught)throw ma(`'${e.raw}'`);return gn(Ka(t.caught,t.frame),e.segments)},gn=(e,t)=>{if(0===t.length)return e;const r=x(e,t);return r.found?wn(r.value):null},bn=(e,t,r)=>{const{value:a,reads:n}=e;if(void 0===n)return a;const o=Ka(t,r),s=n.map(({segments:e,within:t})=>gn(void 0===t?o:{...o,...t},e));return 0===n[0].at.length?s[0]:We(a,n,s)},kn=(t,r,a,n,o)=>{const i=x(t,r);if(i.found)return wn(i.value);if(!n.strictDataPaths)return null;throw new e({code:s.missingDataPath,message:`'${a.raw}' ${o} (strictDataPaths)`,path:Me(a.path)})},wn=e=>void 0===e?null:e,$n=async(e,t)=>{const{params:r,propagate:a}=await(async(e,t)=>{const{definition:r,hostDefaults:a}=e.entry,{entries:n,whole:o,perElement:s}=r.resolution,i=[],l=[],c={};let u;const d={};for(const[r,o]of n){const n=e.params[r];switch(o.evaluation){case"eager":void 0!==n&&(i.push(r),l.push(Cn(n,t)));break;case"structural":"constant"===n?.kind&&(c[r]=n.value);break;case"lazy":if(void 0!==o.replacesNullAt){const e=void 0!==n?R(()=>Cn(n,t)):void 0!==a&&Object.hasOwn(a,r)?R(()=>a[r]):void 0;if(void 0!==e)for(const t of o.replacesNullAt)(u??={})[t]=e;break}void 0!==n&&(d[r]=tn(n,e,r,o,t));break;case"lazyElements":case"lazyEntries":case"race":{if(void 0===n)break;const e=on(n,o,t);if(void 0!==e){d[r]=e;break}i.push(r),l.push(Cn(n,t));break}case"perElement":break;default:o.evaluation}}if(l.length>0)if(1===l.length){const e=l[0];c[i[0]]=M(e)?await e:e}else{const e=await Promise.all(l);i.forEach((t,r)=>{c[t]=e[r]})}for(const[e,r]of o){if(Object.hasOwn(d,e))continue;const n=c[e];(void 0===n||null===n&&K(r))&&(void 0!==a&&Object.hasOwn(a,e)?c[e]=a[e]:"default"in r?c[e]=r.default===se?t.data:r.default:delete c[e])}for(const[t,r]of o){if(Object.hasOwn(d,t))continue;let a=c[t];if(void 0===a)continue;const n=u?.[t];void 0!==n&&(a=await un(a,r,n));const o="eager"!==r.evaluation&&"structural"!==r.evaluation;if(null===a&&G(r.type)&&!o&&"propagate"===cn(e,r,c))return{params:d,propagate:!0};if("propagate"===r.elementNullPolicy&&dn(a))return{params:d,propagate:!0};a=rn(a,e,t,r),d[t]=sn(a,r)}for(const[r,a]of s){const n=e.params[r];void 0!==n&&(d[r]=an(n,d[a.over],e,r,a,t))}return{params:d,propagate:!1}})(e,t);if(a)return null;const{definition:n}=e.entry,o=!0!==t.noCache&&_r(e.entry),s=jn(n,r),i=void 0===s?void 0:oa(t.abortScope.signal,s),l=void 0===i?t:{...t,abortScope:aa(i.signal,t.abortScope.clock)},c=(e=>{const{trace:t,traceParent:r}=e;if(void 0!==t&&void 0!==r)return e=>{t.note(r,e)}})(t),u=((e,t,r,a)=>new ca(e.abortScope,e.options,r?{memo:sa({operator:t.name,fingerprint:t.fingerprint,note:a},e.cache)}:ua,void 0===a?da:{note:a}))(l,n,o,c);try{return await xn(e,t,r,u,i)}catch(r){throw On(r,e,t,i,s)}finally{i?.settle()}},xn=async(e,t,r,a,n)=>{const o=ka(t,e.path,e.name);if(void 0!==o)throw o;const s=Promise.resolve(e.entry.definition.evaluate(r,a));return void 0===n?Pn(await s,e):(s.catch(E),Pn(await Promise.race([s,n.expiry]),e))},jn=(e,t)=>{const r=e.timeoutParam;if(null===r)return;const a=t[r];return"number"==typeof a&&a>0?a:void 0},On=(e,t,r,a,n)=>{if(va(e)||ba(e))return e;const o=ka(r,t.path,t.name);return void 0!==o?o:a?.signal.reason===ea?new _a(`request exceeded its ${String(n)}ms timeout`,{code:s.requestTimeout}):e},An=(e,t,r)=>{const a=e.fallback;if(void 0!==a)return()=>Cn(a,{...t,caught:r});const n=e.entry.defaultFallback;return void 0!==n?()=>bn(n,r,t.frame):void 0},Pn=(e,t)=>{if(void 0===e)return null;if("number"==typeof e&&!Number.isFinite(e))throw ha(t,s.nonFiniteResult,`produced a non-finite number (${String(e)})`);if("object"==typeof(r=e)&&null!==r&&!0===r[Sr])throw ha(t,s.escapedHandle,"returned a lazy handle instead of evaluating it");var r;return e},Dn=(e,t)=>{if(D(e))return e;const r=Ha(e)?e:void 0;return ha(t,r?.code??s.operatorFailure,e instanceof Error?e.message:String(e),r?.errorData)},Cn=(e,t,r)=>void 0!==t.trace?Nn(e,t,t.trace,r):t.abortScope.aborted?Promise.reject(ka(t,e.path)):Sn(e,t),Nn=async(e,t,r,a)=>{const n=r.enter(e,t.traceParent,t.frame,a),o=Pa();try{if(t.abortScope.aborted)throw ka(t,e.path);const a=await Sn(e,{...t,traceParent:n});return r.settle(n,"value",{value:a,elapsed:Pa()-o}),a}catch(e){throw r.settle(n,ba(e)?"cancelled":"failed",{...D(e)?{error:e}:{},elapsed:Pa()-o}),e}},Sn=(e,t)=>{try{switch(e.kind){case"constant":return e.value;case"reference":return((e,t)=>{switch(e.namespace){case"data":return pn(e,t);case"vars":return mn(e,t);case"params":return hn(e,t);case"element":case"index":return vn(e,t);case"error":return yn(e,t)}})(e,t);case"skeleton":return zn(e,t);case"operator":return(async(e,t)=>{const r=Ta(la(t,e.noCache),e.vars),a=e.entry.definition.deliversLazily?new ra(r.abortScope):void 0,n=void 0===a?r:{...r,abortScope:a};try{try{return await $n(e,n)}finally{a?.settle()}}catch(a){if(xa(a))throw a;const n=Dn(a,e),o=An(e,r,n);if(void 0===o)throw n;return Fa(o,n,e.fallbackReadsError,t=>Dn(t,e),t)}})(e,t);case"fragmentCall":return(async(e,t)=>{const{entry:r}=e;if(void 0===r)throw ma(`fragment call '${e.name}'`);const a=Ta(la(t,e.noCache),e.vars),n=new ra(a.abortScope),o={fragment:e.name,callPath:t.frame?.callPath??e.path},s={...a,abortScope:n};try{try{return await Va(e,r,s,a,o)}finally{n.settle()}}catch(r){if(xa(r))throw r;const n=Ua(r,o),{fallback:s}=e;if(void 0===s)throw n;const i=D(n)?{...a,caught:n}:a;return Fa(()=>Cn(s,i),n,e.fallbackReadsError,e=>Ua(e,t.frame),t)}})(e,t);default:throw pa(`a '${e.kind}' node reached the node dispatch`)}}catch(e){return Promise.reject(e)}},zn=async(e,t)=>{const r=t.rootBoundary,a=void 0===r?t:{...t,rootBoundary:void 0},n=Ta(a,e.vars),o=e.holes.map(({node:e})=>void 0===r?Cn(e,n):"skeleton"===e.kind?Cn(e,{...n,rootBoundary:r}):r(()=>Cn(e,n),e)),s=o.some(M)?await Promise.all(o):o;return We(e.skeleton,e.holes,s)},En=async(e,t,r)=>{const{timeout:a,signal:n}=t,o=e.holes.length>0,s=void 0!==a||void 0!==n?na(n,a,ta):void 0,i=void 0!==s?((e,t)=>{const r={epoch:0};return e.addEventListener("abort",()=>{r.epoch+=1},{once:!0}),aa(e,r,t)})(s.signal,s.settle):new ra(void 0),l=void 0!==s&&void 0!==a&&e.timeoutShielded&&o,c=!0===t.trace?Da(e.issues.map(e=>e.issue).filter(e=>"error"!==e.severity)):void 0,u=((e,t,r,a)=>({options:e,data:e.data??ia,abortScope:r,rootScope:r,cache:t,strictDataPaths:e.strictDataPaths??!1,...void 0!==a?{trace:a}:{}}))(t,r,i,c),d=l?qn(e,s.expiry,a,c):void 0,f=void 0!==d&&"skeleton"!==e.root.kind,p=void 0===d||f?u:{...u,rootBoundary:d};try{if(i.aborted)throw $a(i.reason,[]);const t=()=>f&&void 0!==d?d(()=>Cn(e.root,p),e.root):Cn(e.root,p),r=await(l||void 0===s?t():Mn(t,s,a));return void 0!==c?{result:r,trace:c.finish()}:{result:r}}catch(e){throw void 0!==c&&D(e)&&void 0===e.trace&&(e.trace=c.finish()),e}finally{i.settle()}},Mn=(e,t,r)=>Promise.race([e(),t.expiry.catch(e=>{throw $a(e,[],{ms:r})})]),qn=(e,t,r,a)=>{const n=new Map(e.holes.map(e=>[e.node,e]));return(e,o)=>{const s=n.get(o);let i=!1;const l=Promise.resolve(e()).then(e=>(i=!0,e));return Promise.race([l,t.catch(e=>{if(e!==ta)throw $a(e,[]);if(i)return;const t=Fn(s,e,r),n=Tn(s,t);return a?.markShielded(s.node,t,n),n})])}},Fn=(e,t,r)=>{const{node:a}=e,n="operator"===a.kind?a.name:void 0;return $a(t,Me(a.path),{operator:n,ms:r})},Tn=(e,t)=>bn(e.timeoutFallback,t,void 0),Vn={hit:!1},In=e=>{if(void 0===e)return{maxSize:50,maxTime:1800};if(!n(e))throw Ln("'cache' must be an object");const{store:t,maxSize:r,maxTime:a}=e;if(void 0!==t&&!Rn(t))throw Ln("'cache.store' must provide get, set, delete and clear methods");if(void 0!==r&&(!Number.isInteger(r)||r<1))throw Ln("'cache.maxSize' must be a positive integer");if(void 0!==a&&("number"!=typeof a||a<=0||Number.isNaN(a)))throw Ln("'cache.maxTime' must be a positive number of seconds, or Infinity");return{...void 0!==t?{store:t}:{},maxSize:r??50,maxTime:a??1800}},Rn=e=>"object"==typeof e&&null!==e&&["get","set","delete","clear"].every(t=>"function"==typeof e[t]),Ln=t=>new e({code:s.invalidOptions,message:t,path:[]});class Wn{store;own;maxTime;current=0;constructor(e){void 0===e.store?(this.own=new Nr(e.maxSize),this.store=this.own):this.store=e.store,this.maxTime=e.maxTime}get generation(){return this.current}async lookup(e){let t;try{t=await this.store.get(e)}catch{return Vn}return n(r=t)&&"ft3"===r.fig&&"number"==typeof r.generation?t.generation<this.current||Bn(t)?(this.drop(e),Vn):{hit:!0,value:t.value}:Vn;var r}async write(e,t,r){if(r!==this.current)return;const a={fig:"ft3",value:t,generation:r,...Number.isFinite(this.maxTime)?{expiresAt:Date.now()+1e3*this.maxTime}:{}};try{await this.store.set(e,a)}catch{}}clear(){this.current+=1;try{Promise.resolve(this.store.clear()).catch(E)}catch{}}configure(e){void 0===e.store?(this.own??=new Nr(e.maxSize),this.store=this.own):e.store!==this.store&&(this.store=e.store,this.own=void 0),this.maxTime=e.maxTime,this.own?.resize(e.maxSize)}drop(e){try{Promise.resolve(this.store.delete(e)).catch(E)}catch{}}}const Bn=e=>void 0!==e.expiresAt&&e.expiresAt<=Date.now(),Jn=e=>e===C?0:"number"==typeof e?1:2,Un=e=>({data:{paths:[...e.dataPaths].sort(([,e],[,t])=>((e,t)=>{const r=Math.min(e.length,t.length);for(let a=0;a<r;a++){const r=e[a],n=t[a];if(r===n)continue;const o=Jn(r)-Jn(n);return 0!==o?o:"number"==typeof r&&"number"==typeof n?r-n:r<n?-1:1}return e.length-t.length})(e,t)).map(([e])=>e),dynamic:e.dynamic},operators:[...e.operators],fragments:[...e.fragments]}),Gn=(e,t)=>{const r={};for(const[a,n]of Object.entries(e)){const e={...n};void 0!==t&&Object.hasOwn(t,a)&&(e.hostDefault=t[a]),r[a]=e}return r},Kn=(e,t)=>{const r=[];return void 0!==t.maxDepth&&e.maxDepth>t.maxDepth&&r.push(Hn(e.maxDepth,t.maxDepth)),void 0!==t.maxNodes&&e.nodeCount>t.maxNodes&&r.push({severity:"error",code:s.maxNodesExceeded,message:`the expression holds ${e.nodeCount} evaluable nodes — maxNodes is ${t.maxNodes}`,path:[]}),r},_n=(e,t)=>e.hasErrors||void 0!==t.maxDepth||void 0!==t.maxNodes?[...Kn(e,t),...e.issues.map(e=>e.issue)]:[],Hn=(e,t)=>({severity:"error",code:s.maxDepthExceeded,message:`the expression nests ${e} levels deep — maxDepth is ${t}`,path:[]}),Qn=(e,t,r)=>{const a=[...Kn(e,t),...e.issues.map(r)];return void 0!==t.data&&a.push(...Xn(e.dataReads,t.data)),a},Xn=(e,t)=>{const r=new Map,a=new Map,n=[],o=(e,o,i,l)=>{let c=r.get(e);if(void 0===c&&(c=x(t,o).found,r.set(e,c)),c)return;let u=a.get(i.path);if(void 0===u&&a.set(i.path,u=new Set),u.has(e))return;u.add(e);const d=void 0===l?"":` (read by fragment '${l}')`;n.push({severity:"warning",code:s.missingDataPath,message:`'${N(o)}' is absent from the supplied sample data${d}`,path:Me(i.path)})};for(const t of e)if("path"===t.kind)o(t.key,t.segments,t,void 0);else for(const[e,r]of t.fragment.dependencies.dataPaths)o(e,r,t,t.fragment.name);return n},Yn="...",Zn=e=>e,eo=e=>{const r=Object.entries(e.parameters),a=new Map;for(const[e,{nullPolicy:n}]of r){if("function"!=typeof n)continue;const[o,{type:s}]=r.find(([,e])=>void 0!==e.type&&t(e.type)),{literal:i}=s;a.set(e,{selector:o,table:i.map(e=>({value:e,policy:n(e)}))})}return to(e,a)},to=(e,t)=>{const r={};for(const[a,n]of Object.entries(e.parameters)){const e=t.get(a),o="string"==typeof n.nullPolicy?n.nullPolicy:void 0,s=n.type??"any",i=!0===n.truthiness&&G(s)?"value":"propagate",l={type:no(s),required:n.required??!("default"in n),evaluation:n.evaluation??"eager",truthiness:n.truthiness??!1,nullPolicy:e??o??i};"default"in n&&(l.default=n.default),void 0!==n.metadata&&(l.metadata=n.metadata),void 0!==n.elementNullPolicy&&(l.elementNullPolicy=n.elementNullPolicy),void 0!==n.constraints&&(l.constraints=oo(n.constraints)),void 0!==n.over&&(l.over=n.over),void 0!==n.replacesNullAt&&(l.replacesNullAt=[...n.replacesNullAt]),r[a]=l}const a=e.positionalParams?.at(-1),n=a?.startsWith(Yn)?a.slice(3):null,o={[ie]:!0,name:e.name,category:e.category,parameters:r,resolution:so(r),restParam:n,deliversLazily:Object.values(r).some(e=>"eager"!==e.evaluation&&"structural"!==e.evaluation),timeoutParam:e.timeoutParam??null,cache:!0===e.cache,fingerprint:"",evaluate:e.evaluate,returns:void 0!==e.returns?no(e.returns):"any"};return void 0!==e.alias&&(o.alias=e.alias),void 0!==e.metadata&&(o.metadata=e.metadata),void 0!==e.positionalParams&&(o.positionalParams=[...e.positionalParams]),void 0!==e.validate&&(o.validate=e.validate),void 0!==e.analysis&&(o.analysis=oo(e.analysis)),o.fingerprint=ro(o),io(o)},ro=e=>(e=>{let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")})(JSON.stringify([e.name,Object.entries(e.parameters).map(([e,t])=>[e,ao(t)]),e.positionalParams,e.restParam,e.returns,e.cache,e.timeoutParam,e.evaluate,e.validate],(e,t)=>"function"==typeof t||"symbol"==typeof t||t instanceof RegExp?String(t):t)),ao=e=>{const t={...e};return delete t.metadata,t},no=e=>"string"==typeof e?e:t(e)?{literal:[...e.literal]}:[...e],oo=e=>{if(Array.isArray(e))return e.map(oo);if(q(e)){const t={};for(const[r,a]of Object.entries(e))t[r]=oo(a);return t}return e},so=e=>{const t=Object.entries(e);return{entries:t,whole:t.filter(([,e])=>void 0===e.replacesNullAt&&"perElement"!==e.evaluation),perElement:t.filter(([,e])=>"perElement"===e.evaluation)}},io=e=>{for(const t of Object.values(e.parameters))"string"!=typeof t.type&&Object.freeze(t.type),"object"==typeof t.type&&"literal"in t.type&&Object.freeze(t.type.literal),"object"==typeof t.nullPolicy&&(t.nullPolicy.table.forEach(e=>Object.freeze(e)),Object.freeze(t.nullPolicy.table),Object.freeze(t.nullPolicy)),void 0!==t.constraints&&lo(t.constraints),void 0!==t.replacesNullAt&&Object.freeze(t.replacesNullAt),Object.freeze(t);Object.freeze(e.parameters);for(const t of Object.values(e.resolution))t.forEach(e=>Object.freeze(e)),Object.freeze(t);return Object.freeze(e.resolution),"string"!=typeof e.returns&&Object.freeze(e.returns),void 0!==e.positionalParams&&Object.freeze(e.positionalParams),Object.freeze(e)},lo=e=>{Array.isArray(e)?(e.forEach(lo),Object.freeze(e)):q(e)&&(Object.values(e).forEach(lo),Object.freeze(e))},co=e=>{if(Array.isArray(e))return e;try{return k(e)}catch(e){throw new _a(e.message)}},uo=(e,t)=>{if("string"!=typeof e)return[];try{return k(e),[]}catch(e){return[{severity:"error",parameter:t,message:e.message}]}},fo=e=>Array.isArray(e.values)&&0===e.values.length?[{severity:"error",parameter:"values",message:"an empty values array has no result — supply at least one value"}]:[],po=e=>t=>{const r=t[e];return Array.isArray(r)&&0===r.length?[{severity:"warning",parameter:e,message:`an empty ${e} array is a dead expression — the result is always the identity`}]:[]},mo=/*#__PURE__*/po("values"),ho=/*#__PURE__*/po("input"),vo=/*#__PURE__*/po("entries"),yo=e=>Array.isArray(e.values)&&e.values.length<2?[{severity:"warning",parameter:"values",message:"fewer than two values is a dead comparison — the result never varies"}]:[],go=(e,t)=>new _a(`${e} of nothing — the values array is empty${void 0!==t?`; ${t}`:""}`,{code:s.emptyAggregate}),bo=async(e,t)=>{const r=[];for await(const a of e){if(a.ok&&a.value===t)return t;a.ok||r.push(a)}if(r.length>0)throw r.sort((e,t)=>e.index-t.index),ko(r);return!t},ko=e=>{const[t,...r]=e,a=r.map(e=>e.error).filter(D);return a.length>0&&D(t.error)&&void 0===t.error.related&&(t.error.related=a),t.error},wo=async e=>{const t=new Array(e.length);let r=0;for await(const a of e){t[a.index]=a;for(let e=t[r];void 0!==e;e=t[r]){if(!e.ok)throw e.error;r+=1}}return t.map(e=>e?.value)},$o=(e,t)=>{const r=e=>t&&"string"==typeof e?e.toLowerCase():e;if(e.length<2)return!0;const a=r(e[0]);return e.every(e=>Pe(r(e),a))},xo={values:{type:"array",elementNullPolicy:"value"},caseInsensitive:{type:"boolean",default:!1}},jo={name:"equal",alias:"=",category:"comparison",parameters:xo,positionalParams:["...values"],returns:"boolean",validate:yo,evaluate:({values:e,caseInsensitive:t})=>$o(e,t)},Oo={name:"notEqual",alias:"!=",category:"comparison",parameters:xo,positionalParams:["...values"],returns:"boolean",validate:yo,evaluate:({values:e,caseInsensitive:t})=>!$o(e,t)},Ao=(e,t,r)=>({name:e,alias:t,category:"comparison",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{length:2,homogeneous:["number","string"]}},nullValueDefault:{type:["number","string"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"boolean",evaluate:({values:e})=>{const[t,a]=e;return r(de(t,a))}}),Po=/*#__PURE__*/Ao("greaterThan",">",e=>e>0),Do=/*#__PURE__*/Ao("greaterThanOrEqual",">=",e=>e>=0),Co=/*#__PURE__*/Ao("lessThan","<",e=>e<0),No=/*#__PURE__*/Ao("lessThanOrEqual","<=",e=>e<=0),So={number:()=>0,string:()=>"",array:()=>[],object:()=>({})},zo={name:"plus",alias:"+",category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number","string","array","object"]}},expect:{type:{literal:["number","string","array","object"]},required:!1},nullValueDefault:{type:["number","string","array","object"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:["number","string","array","object"],validate:({values:e,expect:t})=>void 0!==t?mo({values:e}):fo({values:e}),evaluate:({values:e,expect:t})=>{if(0===e.length){if(void 0===t)throw go("the sum","pin the mode with 'expect' to get its identity");return So[t]()}const r=B(e[0]);if(void 0!==t&&r!==t)throw new _a(`all operands must be ${t}s — received ${r}`,{code:s.typeCheck});switch(r){case"number":return e.reduce((e,t)=>e+t,0);case"string":return e.join("");case"array":return e.flat(1);case"object":return Object.assign({},...e)}}},Eo={name:"subtract",alias:"-",category:"math",parameters:{value:{type:["number","null"]},minus:{type:["number","null"]}},positionalParams:["value","minus"],returns:"number",evaluate:({value:e,minus:t})=>e-t},Mo={name:"divide",alias:"/",category:"math",parameters:{value:{type:["number","null"]},by:{type:["number","null"]}},positionalParams:["value","by"],returns:"number",evaluate:({value:e,by:t})=>e/t},qo={name:"modulo",category:"math",parameters:{value:{type:["number","null"]},mod:{type:["number","null"]}},positionalParams:["value","mod"],returns:"number",evaluate:({value:e,mod:t})=>(e%t+t)%t},Fo={name:"multiply",alias:"*",category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number"]}},nullValueDefault:{type:"number",required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"number",validate:mo,evaluate:({values:e})=>e.reduce((e,t)=>e*t,1)},To={name:"power",alias:"^",category:"math",parameters:{base:{type:["number","null"]},exponent:{type:["number","null"]}},positionalParams:["base","exponent"],returns:"number",evaluate:({base:e,exponent:t})=>e**t},Vo={name:"round",category:"math",parameters:{value:{type:["number","null"]},decimals:{type:"integer",default:0}},positionalParams:["value","decimals"],returns:"number",evaluate:({value:e,decimals:t})=>((e,t=0)=>{if(!Number.isFinite(e))return e;const r=e<0?-1:1,a=Math.round(je(Math.abs(e),t));return r*je(a,-t)})(e,t)},Io=(e,t,r="number")=>({name:e,category:"math",parameters:{value:{type:["number","null"]}},positionalParams:["value"],returns:r,evaluate:({value:e})=>t(e)}),Ro=/*#__PURE__*/Io("floor",Math.floor,"integer"),Lo=/*#__PURE__*/Io("ceil",Math.ceil,"integer"),Wo=/*#__PURE__*/Io("abs",Math.abs),Bo=(e,t,r)=>({name:e,category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number","string"]}},nullValueDefault:{type:["number","string"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:["number","string"],validate:fo,evaluate:({values:e})=>{const a=e;if(0===a.length)throw go(t);return a.reduce((e,t)=>r(de(t,e))?t:e)}}),Jo=(e,t)=>({name:e,category:"string",parameters:{value:{type:["string","null"]}},positionalParams:["value"],returns:"string",evaluate:({value:e})=>t(e)}),Uo={name:"split",category:"string",parameters:{value:{type:["string","null"]},delimiter:{type:"string",default:" "},trim:{type:"boolean",default:!0}},positionalParams:["value","delimiter"],returns:"array",evaluate:({value:e,delimiter:t,trim:r})=>{const a=""===t?xe(e):e.split(t);return r?a.map(ge):a}},Go=e=>Array.isArray(e.values)&&e.values.some(ve)?[{severity:"error",parameter:"values",message:ye}]:[],Ko={name:"join",category:"string",parameters:{values:{type:"array",elementNullPolicy:"value"},delimiter:{type:"string",default:" "},nullValueDefault:{type:["string","number","boolean"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"string",validate:e=>[...mo(e),...Go(e)],evaluate:({values:e,delimiter:t},r)=>e.map((e,t)=>{const a=`[${t}]`;return null===e?r.trace.note({type:"render",token:a,rendered:"empty"}):ve(e)&&r.trace.note({type:"render",token:a,rendered:"placeholder"}),he(e)}).join(t)},_o=e=>{const t=new Set,r=[];for(const a of e)if("imsu".includes(a)){if(t.has(a))return`duplicate regex flag '${a}'`;t.add(a)}else r.includes(a)||r.push(a);if(0===r.length)return;const a=r.includes("g")||r.includes("y")?" — all matches is mode: 'match'":"";return`unknown regex flag${1===r.length?"":"s"}: ${r.join(", ")}${a}`},Ho={type:"array"},Qo={type:"string",required:!1,evaluation:"structural"},Xo={type:"array",required:!1,evaluation:"lazy",replacesNullAt:["input"]},Yo={type:"any",evaluation:"perElement",over:"input",truthiness:!0},Zo={name:"get",category:"data",parameters:{path:{type:["string","array","null"]},from:{type:"any",nullPolicy:"value",default:se},default:{type:"any",required:!1,evaluation:"lazy"}},positionalParams:S,returns:"any",validate:({path:e})=>uo(e,"path"),evaluate:({path:e,from:t,default:r},a)=>{const n=x(t,co(e));if(n.found)return n.value;if(void 0!==r)return r.evaluate();if(a.options.strictDataPaths)throw new _a(`'${es(e)}' is missing (strictDataPaths)`,{code:s.missingDataPath});return null}},es=e=>"string"==typeof e?e:e.map(e=>String(e)).join("."),ts={name:"buildObject",category:"data",parameters:{entries:{type:"array",constraints:{elementShape:{key:{type:["string","number","boolean"]},value:{type:"any"}}}}},positionalParams:["...entries"],returns:"object",validate:e=>[...vo(e),...rs(e)],evaluate:({entries:e},t)=>{const r={};for(const a of e){const e=he(a.key);Object.hasOwn(r,e)&&t.trace.note({type:"key-overwrite",key:e}),r[e]=a.value}return r}},rs=e=>{const t=e.entries;if(!Array.isArray(t))return[];const r=new Set,a=new Set,n=[];for(const e of t){const t=e?.key;if("string"!=typeof t&&"number"!=typeof t&&"boolean"!=typeof t)continue;const o=he(t);r.has(o)&&!a.has(o)&&(a.add(o),n.push({severity:"warning",parameter:"entries",message:`duplicate key '${o}' — the last entry wins and the earlier one is dead`})),r.add(o)}return n},as=(e,t)=>new _a(`cannot convert ${B(e)} to ${t}`),ns=/*#__PURE__*/[{name:"and",category:"logic",parameters:{values:{type:"array",truthiness:!0,evaluation:"race"}},positionalParams:["...values"],returns:"boolean",validate:mo,evaluate:({values:e})=>bo(e,!1)},{name:"or",category:"logic",parameters:{values:{type:"array",truthiness:!0,evaluation:"race"}},positionalParams:["...values"],returns:"boolean",validate:mo,evaluate:({values:e})=>bo(e,!0)},{name:"not",alias:"!",category:"logic",parameters:{value:{type:"any",truthiness:!0}},positionalParams:["value"],returns:"boolean",evaluate:({value:e})=>!e},{name:"if",alias:"?",category:"logic",parameters:{condition:{type:"any",truthiness:!0},then:{type:"any",evaluation:"lazy"},else:{type:"any",evaluation:"lazy",default:null}},positionalParams:["condition","then","else"],evaluate:({condition:e,then:t,else:r})=>e?t.evaluate():r.evaluate()},{name:"match",category:"logic",parameters:{value:{type:["string","number","boolean","null"],nullPolicy:"value"},branches:{type:"object",evaluation:"lazyEntries"},default:{type:"any",required:!1,evaluation:"lazy"}},positionalParams:["value","branches","default"],evaluate:({value:e,branches:t,default:r})=>{const a=null===e?null:he(e);if(null!==a&&Object.hasOwn(t,a))return t[a].evaluate();if(void 0!==r)return r.evaluate();throw new _a(`no branch matches ${null===a?"null":`'${a}'`}, and no default was supplied`)}},{name:"firstOf",category:"logic",parameters:{values:{type:"array",evaluation:"lazyElements"}},positionalParams:["...values"],validate:mo,evaluate:async({values:e})=>{for(const t of e){const e=await t.evaluate();if(null!==e)return e}return null}},jo,Oo,Po,Do,Co,No,zo,Eo,Fo,Mo,qo,To,Vo,Ro,Lo,Wo,/*#__PURE__*/Bo("min","the minimum",e=>e<0),/*#__PURE__*/Bo("max","the maximum",e=>e>0),{name:"buildString",category:"string",parameters:{template:{type:["string","null"]},substitutions:{type:["array","object"],default:[],elementNullPolicy:"value"},trim:{type:"boolean",default:!1},closeGaps:{type:"boolean",default:!1},nullValueDefault:{type:["string","number","boolean"],required:!1,evaluation:"lazy",replacesNullAt:["substitutions"]}},positionalParams:["template","...substitutions"],returns:"string",evaluate:({template:e,substitutions:t,trim:r,closeGaps:a},n)=>{const o=Array.isArray(t)?t:void 0,s=void 0===o?t:void 0,i=[];for(const t of Ce(e)){if("text"===t.kind){i.push({text:t.text,site:!1});continue}if(!("positional"===t.kind?void 0!==o&&t.index>=1&&t.index<=o.length:void 0!==s&&Object.hasOwn(s,t.body))){n.trace.note({type:"render",token:t.raw,rendered:"literal"}),i.push({text:t.raw,site:!1});continue}const e="positional"===t.kind?o[t.index-1]:s[t.body],a=he(e);ve(e)&&n.trace.note({type:"render",token:t.raw,rendered:"placeholder"});const l=r?ge(a):a;""===l&&n.trace.note({type:"render",token:t.raw,rendered:"empty"}),i.push({text:l,site:!0,token:t.raw})}if(a)for(const e of(e=>{const t=[];for(let r=0;r<e.length;r++){const a=e[r];if(!a.site||""!==a.text)continue;const n=e[r-1];if(void 0!==n&&!n.site){const e=we(n.text);if(e!==n.text){n.text=e,t.push(a.token);continue}}const o=e[r+1];if(void 0!==o&&!o.site){const e=$e(o.text);e!==o.text&&t.push(a.token),o.text=e}}return t})(i))n.trace.note({type:"render",token:e,rendered:"gap-closed"});return i.map(e=>e.text).join("")}},Uo,Ko,/*#__PURE__*/Jo("lower",e=>e.toLowerCase()),/*#__PURE__*/Jo("upper",e=>e.toUpperCase()),/*#__PURE__*/Jo("trim",ge),{name:"regex",category:"string",parameters:{value:{type:["string","null"]},pattern:{type:["string","null"]},flags:{type:"string",default:""},mode:{type:{literal:["test","extract","match"]},default:"test"},noMatchDefault:{type:["string","null"],default:null,nullPolicy:"value",evaluation:"lazy"}},positionalParams:["value","pattern"],returns:["boolean","string","array","null"],validate:({pattern:e,flags:t})=>{const r=[],a="string"==typeof t?_o(t):void 0;if(void 0!==a&&r.push({severity:"error",parameter:"flags",message:a}),"string"==typeof e)try{new RegExp(e,"string"==typeof t&&void 0===a?t:"")}catch(e){r.push({severity:"error",parameter:"pattern",message:`pattern does not compile: ${e.message}`})}return r},evaluate:({value:e,pattern:t,flags:r,mode:a,noMatchDefault:n})=>{const o=_o(r);if(void 0!==o)throw new _a(o);const s=e=>{try{return new RegExp(t,r+e)}catch(e){throw new _a(`pattern does not compile: ${e.message}`)}};switch(a){case"test":return s("").test(e);case"extract":{const t=s("").exec(e);return null===t?n.evaluate():t[0]}case"match":return[...e.matchAll(s("g"))].map(e=>e[0])}}},{name:"length",category:"array",parameters:{value:{type:["string","array","null"]}},positionalParams:["...value"],returns:"integer",evaluate:({value:e})=>"string"==typeof e?xe(e).length:e.length},{name:"map",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:{type:"any",evaluation:"perElement",over:"input"}},positionalParams:["input","each"],returns:"array",validate:ho,evaluate:({each:e})=>wo(e.settle())},{name:"filter",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:Yo},positionalParams:["input","each"],returns:"array",validate:ho,evaluate:async({input:e,each:t})=>{const r=await wo(t.settle());return e.filter((e,t)=>r[t])}},{name:"find",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:Yo,noMatchDefault:{type:"any",default:null,evaluation:"lazy"}},positionalParams:["input","each"],validate:ho,evaluate:async({input:e,each:t,noMatchDefault:r})=>{const a=new Array(e.length);let n=0;for await(const r of t.settle()){a[r.index]=r;for(let t=a[n];void 0!==t;t=a[n]){if(!t.ok)throw t.error;if(!0===t.value)return e[n];n+=1}}return r.evaluate()}},{name:"some",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:Yo},positionalParams:["input","each"],returns:"boolean",validate:ho,evaluate:({each:e})=>bo(e.settle(),!0)},{name:"every",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:Yo},positionalParams:["input","each"],returns:"boolean",validate:ho,evaluate:({each:e})=>bo(e.settle(),!1)},Zo,ts,{name:"convert",category:"other",parameters:{value:{type:"any",nullPolicy:e=>"boolean"===e?"value":"propagate"},to:{type:{literal:["number","string","boolean","array"]}}},positionalParams:["value","to"],returns:["number","string","boolean","array"],evaluate:({value:e,to:t})=>{switch(t){case"number":if("number"==typeof e)return e;if("boolean"==typeof e)return e?1:0;if("string"==typeof e){const t=e.trim(),r=""===t?NaN:Number(t);if(Number.isNaN(r))throw new _a(`'${e}' is not a numeric string — use regex to extract a number from text`);return r}throw as(e,"number");case"string":if(Array.isArray(e)||q(e))throw new _a(`cannot convert ${B(e)} to string — a cast is not a render; use buildString or join`);if("object"==typeof e)throw as(e,"string");return he(e);case"boolean":if("string"==typeof e){const t=e.trim().toLowerCase();if("true"===t)return!0;if("false"===t)return!1}return ue(e);case"array":return Array.isArray(e)?e:[e]}}}].map(eo),os="3.0.0-preview.12",ss=(e,t)=>{const r=((e,t)=>{const r={...e};for(const[e,a]of Object.entries(t)){if(void 0===a)continue;if(null===a){delete r[e];continue}if("data"===e||!n(a)){r[e]=a;continue}const t=r[e],o=n(t)?{...t}:{};for(const[e,t]of Object.entries(a))void 0!==t&&(null===t?delete o[e]:o[e]=t);r[e]=o}return r})(null===e?{}:e.options,t);gs(r);const a=is(r);if(null!==e&&!(e=>void 0!==e.operators||void 0!==e.fragments||void 0!==e.operatorDefaults)(t))return{options:r,evaluation:a,registry:e.registry,compileCache:e.compileCache};const o=Qr({operators:r.operators??[ns],...void 0!==r.operatorDefaults?{operatorDefaults:r.operatorDefaults}:{},...void 0!==r.fragments?{fragments:r.fragments}:{}});return{options:r,evaluation:a,registry:o,compileCache:new Vr({compile:e=>ls(e,o),probe:Ne})}},is=e=>{const t={...e};return delete t.operators,delete t.fragments,t},ls=(e,t)=>{const r=Ue(e,t);return Ht(r),r.hasNoCache&&xr(r),r};class cs{state;results;version=os;constructor(e={}){this.state=ss(null,e),this.results=new Wn(In(this.state.options.cache))}updateOptions(e={}){const t=ss(this.state,e),r=In(t.options.cache);this.state=t,this.results.configure(r)}clearCache(){this.results.clear()}getOptions(){return(e=>{const t={};for(const[r,a]of Object.entries(e))t[r]=n(a)?{...a}:a;return t})(this.state.evaluation)}getOperators(){return[...this.state.registry.operators.values()].map(e=>{const{definition:t,hostDefaults:r}=e,a={name:t.name,category:t.category,parameters:Gn(t.parameters,r),restParam:t.restParam,timeoutParam:t.timeoutParam,cache:t.cache,returns:t.returns,hasValidate:void 0!==t.validate};return void 0!==t.alias&&(a.alias=t.alias),void 0!==t.metadata&&(a.metadata=t.metadata),void 0!==t.positionalParams&&(a.positionalParams=t.positionalParams),void 0!==r&&(!0===r.noCache&&(a.hostNoCache=!0),Object.hasOwn(r,"fallback")&&(a.hostFallback=r.fallback)),a})}getFragments(){return[...this.state.registry.fragments.values()].map(e=>{const t={name:e.name,parameters:Object.fromEntries(Object.entries(e.parameters).map(([e,t])=>[e,{...t}])),returns:e.returns,warnings:[...e.warnings],dependencies:Un(e.dependencies),caches:e.caches};return void 0!==e.description&&(t.description=e.description),void 0!==e.metadata&&(t.metadata=e.metadata),t})}validate(e,t){const r=void 0===t?this.state.evaluation:vs(this.state.evaluation,t),a=ls(e,this.state.registry),n=Qn(a,r,e=>e.issue);return{valid:!n.some(e=>"error"===e.severity),issues:n}}getDependencies(e){return Un(Ue(e,this.state.registry).dependencies)}isEvaluable(e){const t=Ue(e,this.state.registry);return t.holes.length>0||t.hasErrors}evaluate(e,t){const{state:r}=this;return us(r.evaluation,this.results,e,t,()=>r.compileCache.resolve(e),()=>ls(e,r.registry))}compile(e){const{state:t}=this;return ms(e,t.compileCache.resolve(e),t.evaluation,t.registry,this.results)}}const us=async(e,t,r,a,n,o)=>{const s=void 0===a?e:vs(e,a),i=n(),l="inert"===i.kind&&!0===s.trace?{kind:"artifact",artifact:o()}:i;if("inert"===l.kind){if(void 0!==s.maxDepth&&l.depth>s.maxDepth){const e=Hn(l.depth,s.maxDepth);throw ks(e,[e])}return r}const{artifact:c}=l,u=_n(c,s),d=u.find(e=>"error"===e.severity);if(void 0!==d)throw ks(d,u);const f=await En(c,s,t);return!0===s.trace?f:f.result};let ds;const fs=(e,t)=>ds?.(e,t);class ps{#t;#r;#a;#n;#o;#s;#i;constructor(e,t,r,a,n){this.#t=e,this.#r=t,this.#a=r,this.#n=a,this.#o=n,ds??=(e,t)=>{if("object"!=typeof e||null===e||!(#r in e))return;const r=void 0===t?e.#a:vs(e.#a,t);return{expression:e.#t,artifact:e.#l(),options:r}}}get expression(){return this.#t}get issues(){return this.#i??=this.#l().issues.map(e=>e.issue)}get hasErrors(){return this.#l().hasErrors}evaluate(e){return us(this.#a,this.#o,this.#t,e,()=>this.#r,()=>this.#l())}getDependencies(){return Un(this.#l().dependencies)}#l(){return"artifact"===this.#r.kind?this.#r.artifact:this.#s??=ls(this.#t,this.#n)}}const ms=(e,t,r,a,n)=>new ps(e,t,r,a,n),hs={data:0,signal:0,timeout:0,trace:0},vs=(e,t)=>{let r;for(const a in t){const n=t[a];if(void 0!==n){if(!Object.hasOwn(hs,a))throw ys(a);r??={...e},r[a]=n}}return void 0===r?e:(gs(t),r)},ys=t=>new e({code:s.invalidOptions,message:`'${t}' is not a per-call option — a call may supply data, signal, timeout and trace; configure the rest at construction or via updateOptions()`,path:[]}),gs=t=>{const{timeout:r,signal:a}=t;if(void 0!==r&&("number"!=typeof r||!Number.isFinite(r)||r<=0))throw new e({code:s.invalidOptions,message:"'timeout' must be a positive number of milliseconds",path:[]});if(void 0!==a&&!bs(a))throw new e({code:s.invalidOptions,message:"'signal' must be an AbortSignal",path:[]})},bs=e=>"object"==typeof e&&null!==e&&"boolean"==typeof e.aborted&&"function"==typeof e.addEventListener&&"function"==typeof e.removeEventListener,ks=(t,r)=>new e({code:t.code,message:t.message,path:t.path,...void 0!==t.operator?{operator:t.operator}:{},issues:r});export{Zn as A,uo as B,os as C,Qn as D,se as E,cs as F,pe as G,me as H,de as I,Pe as J,oe as O,Yn as R,re as a,G as b,Q as c,ue as d,ns as e,Ha as f,Re as g,fs as h,q as i,_n as j,H as k,le as l,z as m,K as n,ee as o,ae as p,to as q,Ie as r,We as s,Me as t,_a as u,_t as v,co as w,he as x,B as y,eo as z};
1
+ import{F as e,i as t,l as r,f as a,d as n,D as o,E as s,g as i,c as l,o as c,q as u,h as d,W as p,S as f,e as m,p as h,s as v,j as y,n as g,u as b,v as k,k as w,w as $,x,r as j,t as O,b as A,m as P,R as D,a as N,y as C,G as S}from"./shared.js";const z=(t,r,a)=>{const[n]=r,o=r.length-1;return new e({code:t,message:o>0?`${n.message} (+ ${o} more issue${1===o?"":"s"})`:n.message,path:n.path,operator:a,issues:r})},E=()=>{},M=e=>"object"==typeof e&&null!==e&&"function"==typeof e.then,q=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),F=(e,t,r)=>{if(e===t)return 0;const a=e.length,n=t.length;if(Math.abs(a-n)>r)return r+1;let o=new Array(n+1),s=new Array(n+1);for(let e=0;e<=n;e++)o[e]=e;for(let i=1;i<=a;i++){s[0]=i;let a=i;const l=e.charCodeAt(i-1);for(let e=1;e<=n;e++){const r=o[e-1]+(l===t.charCodeAt(e-1)?0:1),n=Math.min(o[e]+1,s[e-1]+1,r);s[e]=n,n<a&&(a=n)}if(a>r)return r+1;const c=o;o=s,s=c}return o[n]},T=(e,t)=>{let r,a=3;for(const n of t){const t=F(e,n,a-1);if(t<a&&(r=n,a=t,0===t))break}return r},V=e=>e?` — did you mean '${e}'?`:"",I=e=>e.length<2?e.join(""):`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`,R=e=>{let t;return()=>(void 0===t&&(t=(async()=>e())()),t)},L=(e,t,r)=>{const a=[],n=new Set,o=new Set,s=e=>{const i=a.indexOf(e);if(-1!==i){const e=a.slice(i),t=[...e].sort().join("\0");return void(o.has(t)||(o.add(t),r(e)))}if(!n.has(e)){a.push(e);for(const r of t(e)??[])s(r);a.pop(),n.add(e)}};for(const t of e)s(t);return 0===o.size},W={ok:!0},B=e=>null===e?"null":Array.isArray(e)?"array":typeof e,J=(e,t)=>({ok:!1,expected:e,actual:B(t)}),U=(e,t)=>{switch(t){case"any":return!0;case"string":return"string"==typeof e;case"number":return"number"==typeof e;case"integer":return"number"==typeof e&&Number.isInteger(e);case"boolean":return"boolean"==typeof e;case"array":return Array.isArray(e);case"object":return q(e);case"null":return null===e;default:return!1}},_=e=>"null"===e||"any"===e||!!Array.isArray(e)&&(e.includes("null")||e.includes("any")),G=e=>!e.required&&!_(e.type),K=/*#__PURE__*/new Set(["any","string","number","boolean","array","object","null","integer"]),H=e=>{if("string"==typeof e)return K.has(e);if(Array.isArray(e))return e.length>0&&e.every(e=>"string"==typeof e&&K.has(e));if(q(e)&&"literal"in e){const t=e.literal;return Array.isArray(t)&&t.length>0&&t.every(e=>["string","number","boolean"].includes(typeof e))}return!1},Q=(e,r)=>{if(t(r)){if(-1!==r.literal.indexOf(e))return W;const t=r.literal.map(e=>JSON.stringify(e)).join(", ");return J(`one of ${t}`,e)}return"string"==typeof r?U(e,r)?W:J(r,e):r.some(t=>U(e,t))?W:J(r.join(" | "),e)},X=(e,t)=>{if(void 0!==t.length){if(!Array.isArray(e))return J("array",e);if(e.length!==t.length)return{ok:!1,expected:`array of length ${t.length}`,actual:`array of length ${e.length}`}}if(t.homogeneous){if(!Array.isArray(e))return J("array",e);const r=t.homogeneous;if(e.length>0){if(void 0===r.find(t=>e.every(e=>U(e,t))))return{ok:!1,expected:`homogeneous array of ${r.join(" | ")}`,actual:Y(e)}}}if(t.elementShape){if(!Array.isArray(e))return J("array",e);for(let r=0;r<e.length;r++){const a=te(e[r],t.elementShape);if(!a.ok)return a}}return W},Y=e=>{const t=B(e[0]),r=e.find(e=>B(e)!==t);return void 0===r?`array of ${t}`:`${B(r)} beside ${t}`},Z=["length","homogeneous","elementShape"],ee=e=>{if(!q(e))return J("a constraints object",e);for(const t of Object.keys(e))if(!Z.includes(t))return{ok:!1,expected:`one of ${Z.join(", ")}`,actual:t};const{length:t,homogeneous:r,elementShape:a}=e;if(void 0!==t&&(!Number.isInteger(t)||t<0))return J("a non-negative integer length",t);if(!(void 0===r||Array.isArray(r)&&H(r)))return J("a non-empty array of basic types",r);if(void 0!==a){if(!q(a))return J("an object of declarations",a);for(const[e,t]of Object.entries(a)){if(!q(t))return J(`a declaration for "${e}"`,t);if(void 0!==t.type&&!H(t.type))return J(`a vocabulary type for "${e}"`,t.type);if(void 0!==t.required&&"boolean"!=typeof t.required)return J(`a boolean "required" for "${e}"`,t.required);if(void 0!==t.constraints){const e=ee(t.constraints);if(!e.ok)return e}}}return W},te=(e,t)=>{if(!q(e))return J("object",e);const r=Object.keys(t);for(let a=0;a<r.length;a++){const n=r[a],o=t[n],s=Object.prototype.hasOwnProperty.call(e,n),i=!1!==o.required;if(!s){if(i)return{ok:!1,expected:`property "${n}"`,actual:"missing"};continue}const l=ne(e[n],o);if(!l.ok)return l}return W},re=(e,t,r)=>{if(!r||!Array.isArray(e))return X(e,t);const{length:a,...n}=t;if(void 0!==a){const t=X(e,{length:a});if(!t.ok)return t}return X(e.filter(e=>null!==e),n)},ae=(e,t)=>null===e||void 0===t.constraints?W:re(e,t.constraints,void 0!==t.elementNullPolicy),ne=(e,t)=>{if(void 0!==t.type){const r=Q(e,t.type);if(!r.ok)return r}return ae(e,t)},oe=["logic","comparison","math","string","array","data","io","other"],se=Symbol("fig-tree:EvaluationData"),ie=Symbol("fig-tree:validated-operator"),le=e=>"object"==typeof e&&null!==e&&!0===e[ie],ce=[!1,null,0,""],ue=e=>-1===ce.indexOf(e),de=(e,t)=>"number"==typeof e&&"number"==typeof t?e<t?-1:e>t?1:0:pe(String(e),String(t)),pe=(e,t)=>{const r=Array.from(e),a=Array.from(t),n=Math.min(r.length,a.length);for(let e=0;e<n;e++){const t=r[e].codePointAt(0),n=a[e].codePointAt(0);if(t!==n)return t<n?-1:1}return r.length===a.length?0:r.length<a.length?-1:1},fe="<array>",me="<object>",he=e=>null===e?"":"string"==typeof e?e:"number"==typeof e?String(e):"boolean"==typeof e?e?"true":"false":Array.isArray(e)?fe:me,ve=e=>null!==e&&"object"==typeof e,ye="a composite element renders as a placeholder, never as text — drill in, or join it explicitly",ge=e=>e.trim(),be=/\s+$/,ke=/^\s+/,we=e=>e.replace(be,""),$e=e=>e.replace(ke,""),xe=e=>Array.from(e),je=(e,t)=>{const[r,a]=String(e).split("e"),n=void 0!==a?Number(a)+t:t;return Number(`${r}e${n}`)},Oe=Object.prototype.hasOwnProperty,Ae=(e,t)=>{for(const r of e.keys())if(Pe(r,t))return r},Pe=(e,t)=>{let r,a,n;if(e===t)return!0;if(e&&t&&(r=e.constructor)===t.constructor){if(r===Date)return e.getTime()===t.getTime();if(r===RegExp)return e.toString()===t.toString();if(r===Array){if((a=e.length)===t.length)for(;a--&&Pe(e[a],t[a]););return-1===a}if(r===Set){if(e.size!==t.size)return!1;for(a of e){if(n=a,n&&"object"==typeof n&&(n=Ae(t,n),!n))return!1;if(!t.has(n))return!1}return!0}if(r===Map){if(e.size!==t.size)return!1;for(a of e){if(n=a[0],n&&"object"==typeof n&&(n=Ae(t,n),!n))return!1;if(!Pe(a[1],t.get(n)))return!1}return!0}if(r===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(r===DataView){if((a=e.byteLength)===t.byteLength)for(;a--&&e.getInt8(a)===t.getInt8(a););return-1===a}if(ArrayBuffer.isView(e)){if((a=e.byteLength)===t.byteLength)for(;a--&&e[a]===t[a];);return-1===a}if(!r||"object"==typeof e){for(r in a=0,e){if(Oe.call(e,r)&&++a&&!Oe.call(t,r))return!1;if(!(r in t)||!Pe(e[r],t[r]))return!1}return Object.keys(t).length===a}}return e!=e&&t!=t},De=e=>!e.includes("{")&&!e.includes("}")&&(e.startsWith("$")?e.length>1:r(e).ok),Ne=e=>{const t=[];let r="";const a=()=>{""!==r&&(t.push({kind:"text",text:r}),r="")};let n=0;for(;n<e.length;){const o=e[n];if("%"===o){let s=n+1;for(;s<e.length&&e[s]>="0"&&e[s]<="9";)s++;if(s>n+1){const r=e.slice(n,s);a(),t.push({kind:"positional",raw:r,index:Number(r.slice(1))}),n=s;continue}r+=o,n++;continue}if("{"===o&&"{"===e[n+1]){const o=e.indexOf("}}",n+2);if(-1!==o){const r=e.slice(n+2,o);if(De(r)){a(),t.push({kind:"named",raw:e.slice(n,o+2),body:r}),n=o+2;continue}}r+="{{",n+=2;continue}r+=o,n++}return a(),t},Ce=e=>{const t={maxDepth:0};return{constant:ze(t,e,0),depth:t.maxDepth}},Se=e=>{const t={maxDepth:0};if(ze(t,e,0,[]))return void 0===t.reads?{value:e}:{value:e,reads:t.reads}},ze=(e,t,r,s)=>{if(r>o)return!1;if(r>e.maxDepth&&(e.maxDepth=r),void 0===t)return!1;if("string"==typeof t){const r=a(t);return"reference"===r.kind&&"error"===r.namespace&&void 0!==s?((e.reads??=[]).push({at:s,segments:r.segments}),!0):"plain"===r.kind||"unrecognized"===r.kind}if(Array.isArray(t)){for(let a=0;a<t.length;a++)if(!ze(e,t[a],r+1,s&&[...s,a]))return!1;return!0}if(n(t)){for(const e in t){if("operator"===e||"fragment"===e||"vars"===e||"//"===e)return!1;if(e.startsWith("$"))return!1}for(const a in t)if(!ze(e,t[a],r+1,s&&[...s,a]))return!1;return!0}return!0},Ee=(e,t)=>({parent:e,key:t}),Me=e=>{const t=[];for(let r=e;null!==r;r=r.parent)t.push(r.key);return t.reverse()},qe=e=>{switch(e.kind){case"constant":case"reference":case"invalid":return[];case"skeleton":return[...e.holes.map(e=>e.node),...Object.values(e.vars??{})];case"elements":return e.nodes;case"entries":return[...Object.values(e.entries),...Object.values(e.vars??{})];case"operator":case"fragmentCall":{const t="operator"===e.kind?Object.values(e.params):void 0===e.parameters?[]:"dynamic"===e.argumentsMode?[e.parameters]:Object.values(e.parameters);return void 0!==e.fallback&&t.push(e.fallback),[...t,...Object.values(e.vars??{})]}}return e},Fe=e=>{e.sort((e,t)=>e.order-t.order)},Te=(e,t,r,a,n,o,s={})=>{const i={severity:t,code:r,message:a,path:Me(n)};void 0!==s.operator&&(i.operator=s.operator),void 0!==s.fragment&&(i.fragment=s.fragment),void 0!==s.parameter&&(i.parameter=s.parameter),void 0!==s.suggestion&&(i.suggestion=s.suggestion);const l={issue:i,order:o};return e.push(l),l},Ve=e=>e.some(({issue:e})=>"error"===e.severity),Ie=e=>{const t=e.entry.definition.parameters.as;if("structural"!==t?.evaluation)return null;const r=e.params.as;return"constant"===r?.kind&&"string"==typeof r.value?r.value:null},Re=(e,t,r)=>void 0===r?null===e:("element"===t?e:`${e??""}Index`)===r,Le=(e,t,r)=>{"__proto__"===t?Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}):e[t]=r},We=(e,t,r)=>{const a=new Set;let n=e;return t.forEach((e,t)=>{n=Be(n,e.at,r[t],a)}),n},Be=(e,t,r,a)=>{const n=Je(e,a),[o,...s]=t;return Le(n,o,0===s.length?r:Be(n[o],s,r,a)),n},Je=(e,t)=>{if(t.has(e))return e;const r=Array.isArray(e)?[...e]:{...e};return t.add(r),r},Ue=(e,t,r={})=>{const a={registry:t,recognizes:e=>((e,t)=>"literal"===t||void 0!==ta(e,t)||e.fragments.has(t))(t,e),issues:[],order:0,nodeCount:0,maxDepth:0,dataPaths:new Map,dynamic:!1,paramNames:new Set,paramsDynamic:!1,operators:new Set,fragmentNames:new Set,fragmentCalls:[],dataReads:[],identityOnly:!1,scope:{bindings:[]},asNames:new Set,unrecognized:[],unknownNodes:0,hasNoCache:!1},n=(r.basePath??[]).reduce(Ee,null),o=He(a,e,n,0);Ge(a);const s=Bt(o);Fe(a.issues);const i=Ve(a.issues),l={nodeCount:a.nodeCount,maxDepth:a.maxDepth,dependencies:{dataPaths:a.dataPaths,dynamic:a.dynamic,paramNames:[...a.paramNames],paramsDynamic:a.paramsDynamic,operators:[...a.operators],fragments:[...a.fragmentNames]},identityOnly:a.identityOnly};return{root:o,holes:s,issues:a.issues,hasErrors:i,timeoutShielded:s.every(e=>void 0!==e.timeoutFallback),own:l,..._e(l,a.fragmentCalls,t.fragments),fragmentCalls:a.fragmentCalls,dataReads:a.dataReads,hasNoCache:a.hasNoCache}},_e=(e,t,r)=>{if(0===t.length)return e;const a=new Map(e.dependencies.dataPaths),n=new Set(e.dependencies.operators),o=new Set(e.dependencies.fragments);let{nodeCount:s,maxDepth:i,identityOnly:l}=e,c=e.dependencies.dynamic;for(const e of t){const t=r.get(e.name);if(void 0!==t){s+=t.nodeCount,i=Math.max(i,e.depth+t.maxDepth),l||=t.identityOnly,c||=t.dependencies.dynamic;for(const[e,r]of t.dependencies.dataPaths)a.set(e,r);for(const e of t.dependencies.operators)n.add(e);for(const e of t.dependencies.fragments)o.add(e)}}return{nodeCount:s,maxDepth:i,identityOnly:l,dependencies:{dataPaths:a,dynamic:c,paramNames:e.dependencies.paramNames,paramsDynamic:e.dependencies.paramsDynamic,operators:[...n],fragments:[...o]}}},Ge=e=>{if(0!==e.asNames.size)for(const{token:t,issue:r,raw:a}of e.unrecognized)e.asNames.has(t)&&(r.issue={...r.issue,severity:"error",code:s.unresolvedBinding,message:`'${a}' names an iterator binding, but no enclosing iterator binds it here`})},Ke=(e,t,r,a,n,o,s)=>Te(e.issues,t,r,a,n,o,s),He=(e,t,r,a)=>{const n=e.order++;if(a>e.maxDepth&&(e.maxDepth=a),a>o)return Ke(e,"error",s.depthCeiling,`the expression nests deeper than the engine's ceiling of ${o} levels — descent stopped here`,r,n),e.nodeCount++,Ye(t,r,n);const i=Qe(e,t,r,a,n);return"operator"!==i.kind&&"fragmentCall"!==i.kind&&"reference"!==i.kind&&"invalid"!==i.kind||e.nodeCount++,i},Qe=(e,t,r,a,o)=>null==t?Xe(t??null,r,o):"number"==typeof t||"boolean"==typeof t?Xe(t,r,o):"string"==typeof t?et(e,t,r,o):Array.isArray(t)?rt(e,t,r,a,o):n(t)?at(e,t,r,a,o):(e.identityOnly=!0,Xe(t,r,o)),Xe=(e,t,r)=>({kind:"constant",value:e,path:t,order:r}),Ye=(e,t,r)=>({kind:"invalid",raw:e,path:t,order:r}),Ze=e=>/^[\p{L}_]/u.test(e),et=(e,t,r,n)=>{const o=a(t,e.scope);switch(o.kind){case"plain":return Xe(t,r,n);case"unrecognized":{const{token:a,rest:o}=i(t);if(!((e,t)=>Ze(e)||""===e&&""!==t)(a,o))return Xe(t,r,n);const l=Ke(e,"warning",s.unrecognizedIdentifier,`'${t}' matches no reference namespace and will pass through as data — wrap it in 'literal' to mark it as data`,r,n);return 0===e.unknownNodes&&e.unrecognized.push({token:a,issue:l,raw:t}),Xe(t,r,n)}case"invalid":return Ke(e,"error",o.code??s.invalidReference,`'${t}': ${o.reason}`,r,n),Ye(t,r,n);case"reference":{const{namespace:a,segments:s,drill:i,binding:l}=o,c={kind:"reference",namespace:a,segments:s,raw:t,path:r,order:n};return void 0!==l?c.binding=l:"data"===a?0===s.length?e.dynamic=!0:gt(e,s,i.startsWith(".")?i.slice(1):void 0,r):"params"===a&&bt(e,s),e.unknownNodes>0&&tt(a)&&(c.scopeUnknown=!0),c}}},tt=e=>"element"===e||"index"===e||"error"===e,rt=(e,t,r,a,n)=>{const o=xt(e,t,r,0,a);return Wt(e,t,o,!0,!1,void 0,r,n)},at=(e,t,r,a,n)=>{const o=l(t,e.recognizes);switch(o.kind){case"malformed":return Ke(e,"error",s.malformedNode,o.message,r,n),Ye(t,r,n);case"operator":return nt(e,t,r,a,n);case"fragment":return Mt(e,t,r,a,n);case"shorthand":return Pt(e,t,o.key,r,a,n);case"plain":return It(e,t,r,a,n)}},nt=(e,t,r,a,n)=>{const o=t.operator;if("string"!=typeof o)return ot(e,t,"operator",r,n);if("literal"===o)return Et(e,t,t.value,"value"in t,r,n);const i=ta(e.registry,o);if(void 0===i){const a=T(o,Kt(e));return Ke(e,"error",s.unknownOperator,`'${o}' names no registered operator${V(a)}`,r,n,{suggestion:a}),Ye(t,r,n)}const l=st(e,i,r,n),c=[];return it(e,l,t,"operator",a,(t,a)=>{"parameters"===t?Ke(e,"error",s.malformedNode,"'parameters' is reserved and unused on operator nodes",Ee(r,t),n,{operator:l.name}):ut(e,l,c,t,a,Ee(r,t),n)}),dt(e,l,c,a,n),l},ot=(e,t,r,a,n)=>(Ke(e,"error",s.malformedNode,`the '${r}' value must be a literal string`,a,n),Ye(t,a,n)),st=(e,t,r,a)=>(e.operators.add(t.definition.name),{kind:"operator",name:t.definition.name,entry:t,params:{},path:r,order:a}),it=(e,t,r,a,n,o)=>{const{path:s,order:i}=t;for(const l in r){const c=r[l];l!==a&&"//"!==l&&void 0!==c&&("fallback"===l?t.fallback=He(e,c,Ee(s,l),n+1):"noCache"===l?lt(e,t,c,s,i):"vars"===l?t.vars=Vt(e,c,s,n,i):o?.(l,c))}},lt=(e,t,r,a,n)=>{!0===r?(t.noCache=!0,e.hasNoCache=!0):Ke(e,"error",s.malformedNode,"'noCache' takes only the literal true — it is settled before the subtree runs",Ee(a,"noCache"),n,"operator"===t.kind?{operator:t.name}:{})},ct=(e,t,r,a,n=!1)=>{const o=T(t.slice(1),Kt(e)),i=void 0===o?void 0:`$${o}`,l=void 0!==i?V(i):n?"":" — data with a '$' key goes inside 'literal'";Ke(e,n?"warning":"error",s.unrecognizedIdentifier,`'${t}' is not a registered operator or fragment${n?", so it is a plain key":""}${l}`,r,a,{suggestion:i})},ut=(e,t,r,a,n,o,i)=>{if(a.startsWith("$"))ct(e,a,o,i);else{if(void 0===t.entry.definition.parameters[a]){const r=T(a,Object.keys(t.entry.definition.parameters));return void Ke(e,"error",s.unknownNodeKey,`'${a}' is not a parameter of '${t.name}'${V(r)}`,o,i,{operator:t.name,parameter:a,suggestion:r})}r.push({name:a,kind:"value",value:n,path:o})}},dt=(e,t,r,a,n)=>{const o=t.entry.definition,s=o.resolution.perElement.length>0;let i;if("get"===t.name&&pt(e,t,r),s&&"structural"===o.parameters.as?.evaluation){const a=r.find(e=>"as"===e.name);"value"===a?.kind&&(i=At(e,t,a.value,a.path,n))}for(const n of r){const r=o.parameters[n.name]?.evaluation;"perElement"!==r&&(t.params[n.name]=wt(e,n,r,a))}if(s){void 0!==i&&e.scope.bindings.push(i);for(const n of r){const r=o.parameters[n.name]?.evaluation;"perElement"===r&&(t.params[n.name]=wt(e,n,r,a))}void 0!==i&&e.scope.bindings.pop()}kt(e,t),mt(e,t)},pt=(e,t,r)=>{const a=r.findIndex(e=>"from"===e.name),n=r[a];if("value"!==n?.kind||"string"!=typeof n.value)return;const o=y(n.value);if("data"===o&&r.splice(a,1),"vars"!==o&&"params"!==o)return;const i=r.find(e=>"path"===e.name),l="value"===i?.kind?ft(e,i.value):null;if(null===l||"value"!==i?.kind){if("vars"!==o)return;const i=e.order++;return Ke(e,"error",s.bareVars,`'${n.value}': with 'from: ${n.value}' the path's first key names the var, so the path must be written out and start with a key`,n.path,i,{operator:"get",parameter:"from"}),r.splice(a,1),void(t.params.from=Ye(n.value,n.path,i))}const[c,...u]=l;n.value=g(o,[c]),i.value=Array.isArray(i.value)?u:d(u)},ft=(e,t)=>{const r=t=>{if("string"!=typeof t)return $(t);const{kind:r}=a(t,e.scope);return"plain"===r||"unrecognized"===r};try{const e=Array.isArray(t)?t.every(r)&&t:"string"==typeof t&&r(t)&&w(t);return e&&"string"==typeof e[0]?e:null}catch{return null}},mt=(e,t)=>{if("buildString"!==t.name)return;((e,t)=>{const r=t.params.substitutions;if(void 0===r)return;const a="constant"===r.kind?r.value:"skeleton"===r.kind?r.skeleton:void 0;(Array.isArray(a)||n(a))&&Object.values(a).some(ve)&&Ke(e,"error",s.operatorValidate,ye,r.path,r.order,{operator:t.name,parameter:"substitutions"})})(e,t);const r=t.params.template;if("constant"!==r?.kind||"string"!=typeof r.value)return;const a=(e=>Ne(e).filter(e=>"text"!==e.kind))(r.value);if(0===a.length)return;const o=t.params.substitutions,i=(e=>{if(void 0===e)return{mode:"absent"};if("constant"===e.kind)return Array.isArray(e.value)?{mode:"array",length:e.value.length}:n(e.value)?{mode:"object",keys:new Set(Object.keys(e.value))}:{mode:"dynamic"};if("skeleton"===e.kind){const{skeleton:t}=e;return Array.isArray(t)?{mode:"array",length:t.length}:{mode:"object",keys:new Set(Object.keys(t))}}return{mode:"dynamic"}})(o);if(vt(e,t,r,a,i),"absent"!==i.mode&&"object"!==i.mode)return;const l=[],c=new Set;for(const t of a){if("named"!==t.kind||!t.body.startsWith("$"))continue;if(c.has(t.body))continue;const a=et(e,t.body,r.path,e.order++);"reference"===a.kind&&(e.nodeCount++,c.add(t.body),l.push({path:r.path,at:[t.body],node:a}))}0!==l.length&&(t.params.substitutions=ht(e,t,o,l))},ht=(e,t,r,a)=>"skeleton"===r?.kind?(r.holes.push(...a),r):{kind:"skeleton",skeleton:"constant"===r?.kind?r.value:{},holes:a,path:r?.path??Ee(t.path,"substitutions"),order:r?.order??e.order++},vt=(e,t,r,a,n)=>{const o=(a,n)=>Ke(e,"warning",a,n,r.path,r.order,{operator:t.name}),i=(e,t)=>o(s.unboundToken,`'${e}' binds to nothing and renders as its own text${t}`),l=e=>{for(const t of e)o(s.unusedSubstitution,`substitution ${t} is never named by the template`)};if("array"!==n.mode&&"dynamic"!==n.mode||a.some(e=>"named"===e.kind&&e.body.startsWith("$"))&&o(s.inertReferenceToken,`a reference token needs the named face — beside ${"array"===n.mode?"positional substitutions":"a dynamically supplied map"} it is not recognized and renders as its own text`),"array"===n.mode){const e=new Set,t=[];for(const r of a)"positional"===r.kind&&(r.index>=1&&r.index<=n.length?e.add(r.index):t.push(r));const r=[];for(let t=1;t<=n.length;t++)e.has(t)||r.push(String(t));if(0===t.length)return void l(r);const o=0===n.length?"there are no substitutions":1===n.length?"there is only 1 substitution":`there are only ${n.length} substitutions`;for(const e of t)i(e.raw,` — ${e.index<1?"numbering starts at %1":o}${yt(r)}`);return}if("object"===n.mode){const e=new Set,t=[];for(const r of a)"named"===r.kind&&(n.keys.has(r.body)?e.add(r.body):r.body.startsWith("$")||t.push(r.raw));const r=[...n.keys].filter(t=>!e.has(t)).map(e=>`'${e}'`);0===t.length&&l(r);for(const e of t)i(e,yt(r))}},yt=e=>0===e.length?"":1===e.length?`, and substitution ${e[0]} is unused`:`, and substitutions ${I(e)} are unused`,gt=(e,t,r,a)=>{let n,o;void 0!==r&&c(r)?(n=r,o=t):(o=u(t),n=d(o)),e.dataPaths.set(n,o),e.dataReads.push({kind:"path",key:n,segments:o,path:a})},bt=(e,t)=>{const r=t[0];void 0===r||r===p?e.paramsDynamic=!0:e.paramNames.add(String(r))},kt=(e,t)=>{if("get"!==t.name||void 0!==t.params.from)return;const r=t.params.path;if(void 0!==r)if("constant"===r.kind)try{const a="string"==typeof r.value?w(r.value):r.value;if(!Array.isArray(a)||!a.every($))return void(e.dynamic=!0);if(0===a.length)return void(e.dynamic=!0);gt(e,a,"string"==typeof r.value?r.value:void 0,t.path)}catch{e.dynamic=!0}else e.dynamic=!0},wt=(e,t,r,a)=>{const n="lazyElements"===r||"race"===r;if("slice"===t.kind)return jt(e,t.elements,t.basePath,t.offset,a,n);if(n&&Array.isArray(t.value))return jt(e,t.value,t.path,0,a,!0);if("lazyEntries"===r){const r=Ot(e,t,a);if(null!==r)return r}return He(e,t.value,t.path,a+1)},$t=(e,t)=>{const r=e.order++,a=t+1;return a>e.maxDepth&&(e.maxDepth=a),{order:r,containerDepth:a}},xt=(e,t,r,a,n)=>Array.from(t,(t,o)=>({key:o,rawChild:t,node:He(e,t,Ee(r,a+o),n+1)})),jt=(e,t,r,a,n,o)=>{const{order:s,containerDepth:i}=$t(e,n),l=xt(e,t,r,a,i);if(o&&!l.every(e=>"constant"===e.node.kind)){return{kind:"elements",nodes:l.map(e=>e.node),path:r,order:s}}return Wt(e,t,l,!0,!1,void 0,r,s)},Ot=(e,t,r)=>{const a=t.value;if(!n(a)||m(a,e.recognizes))return null;const{order:o,containerDepth:s}=$t(e,r),{entries:i,vars:l,changed:c}=Rt(e,a,t.path,s,o,!0);if(i.every(e=>"constant"===e.node.kind))return Wt(e,a,i,!1,c,l,t.path,o);const u={};for(const{key:e,node:t}of i)u[String(e)]=t;const d={kind:"entries",entries:u,path:t.path,order:o};return void 0!==l&&(d.vars=l),d},At=(e,t,n,o,i)=>{const l=r=>{Ke(e,"error",s.invalidAs,r,o,i,{operator:t.name})};if("string"!=typeof n||"plain"!==a(n).kind)return l("'as' must be a literal name — a dynamic value cannot be statically resolved");const c=r(n);if(!c.ok)return l(`'${n}' is not a legal binding name — ${c.reason}`);if(!Ze(n))return l(`'${n}' is not a legal binding name — it must start with a letter or '_'`);const u=[n,x(n)];for(const t of u){if(void 0!==b(t))return l(`'${n}' collides with the reserved namespace word '${t}'`);if(null!==k(t,e.scope.bindings))return l(`'${n}' collides with an enclosing 'as' binding ('${t}')`)}for(const t of u)e.asNames.add(t);return n},Pt=(e,t,r,a,n,o)=>{const i=r.slice(1),l="literal"===i,c=!l&&e.registry.fragments.has(i);for(const n in t)if(n!==r&&!f.has(n))return Ke(e,"error",s.malformedNode,`'${n}' may not sit beside the shorthand key '${r}' — reserved modifiers only`,Ee(a,n),o),Ye(t,a,o);const u=t[r],d=Ee(a,r);if(l)return Et(e,t,u,!0,a,o);if(c)return qt(e,t,i,u,a,n,o);const p=ta(e.registry,i),m=st(e,p,a,o);it(e,m,t,r,n);const h=[];return Dt(e,m,h,u,d,o),dt(e,m,h,n,o),m},Dt=(e,t,r,a,o,s)=>{if(Array.isArray(a))Ct(e,t,r,a,o,s);else if(!n(a)||m(a,e.recognizes))Nt(e,t,r,a,o,s);else for(const n in a){const i=a[n];"//"!==n&&void 0!==i&&ut(e,t,r,n,i,Ee(o,n),s)}},Nt=(e,t,r,a,n,o)=>{const s=v(t.entry.definition);null!==s?r.push({name:s,kind:"value",value:a,path:n}):St(e,t,n,o)},Ct=(e,t,r,a,n,o)=>{const s=t.entry.definition,i=h(s,a.length);if(null===i)return void zt(e,t,a,n,o);const l=s.positionalParams;for(let e=0;e<i.bound;e++)r.push({name:l[e],kind:"value",value:a[e],path:Ee(n,e)});const{restAt:c}=i;null!==c&&r.push({name:s.restParam,kind:"slice",elements:0===c?a:a.slice(c),basePath:n,offset:c})},St=(e,t,r,a)=>Ke(e,"error",s.positionalArity,`'${t.name}' takes no positional arguments — use the named form`,r,a,{operator:t.name}),zt=(e,t,r,a,n)=>{const o=t.entry.definition.positionalParams;if(void 0===o)return void St(e,t,a,n);const i=o.length;Ke(e,"error",s.positionalArity,`'${t.name}' takes at most ${i} positional argument${1===i?"":"s"} (${o.join(", ")}), got ${r.length}`,a,n,{operator:t.name})},Et=(e,t,r,a,n,o)=>{for(const r in t)"operator"!==r&&"value"!==r&&"//"!==r&&"$literal"!==r&&("fallback"===r||"vars"===r||"noCache"===r?Ke(e,"warning",s.uselessModifier,`'${r}' on 'literal' is dead — contents are never evaluated`,Ee(n,r),o):r.startsWith("$")?ct(e,r,Ee(n,r),o):Ke(e,"error",s.unknownNodeKey,`'${r}' is not a key of 'literal' — content goes in 'value'`,Ee(n,r),o,{operator:"literal"}));return a?Xe(r,n,o):(Ke(e,"error",s.malformedNode,"'literal' requires its content in 'value'",n,o,{operator:"literal"}),Ye(t,n,o))},Mt=(e,t,r,a,n)=>{const o=t.fragment;if("string"!=typeof o)return ot(e,t,"fragment",r,n);const i=Ft(e,o,r,a,n);return it(e,i,t,"fragment",a,(t,o)=>{"parameters"===t?Tt(e,i,o,Ee(r,t),a,n):t.startsWith("$")?ct(e,t,Ee(r,t),n):Ke(e,"error",s.unknownNodeKey,`'${t}' is not a key of a fragment call — arguments live only in 'parameters'`,Ee(r,t),n)}),i},qt=(e,t,r,a,o,i,l)=>{const c=Ft(e,r,o,i,l);return it(e,c,t,`$${r}`,i),n(a)?Tt(e,c,a,Ee(o,`$${r}`),i,l):Ke(e,"error",s.malformedNode,`fragments have no single-value or positional form — '$${r}' takes a named-arguments object`,Ee(o,`$${r}`),l),c},Ft=(e,t,r,a,n)=>{const o={kind:"fragmentCall",name:t,argumentsMode:"static",path:r,order:n};e.fragmentNames.add(t);const i=e.registry.fragments.get(t);if(void 0===i){const a=T(t,e.registry.fragments.keys());return Ke(e,"error",s.unknownFragment,`'${t}' names no registered fragment${V(a)}`,r,n,{suggestion:a}),o}return o.entry=i,e.fragmentCalls.push({name:t,depth:a}),e.dataReads.push({kind:"call",fragment:i,path:r}),o},Tt=(e,t,r,o,i,l)=>{if(m(r,e.recognizes)||"string"==typeof r&&"reference"===a(r,e.scope).kind)return t.argumentsMode="dynamic",t.parameters=He(e,r,o,i+1),void(e.dynamic=!0);if(n(r)){const a={};for(const t in r){const n=r[t];"//"!==t&&void 0!==n&&(t.startsWith("$")?ct(e,t,Ee(o,t),l):a[t]=He(e,n,Ee(o,t),i+1))}return void(t.parameters=a)}Ke(e,"error",s.malformedNode,"a fragment's 'parameters' must be a named-arguments object or a node computing one",o,l)},Vt=(e,t,a,o,i)=>{const l=Ee(a,"vars");if(!n(t))return void Ke(e,"error",s.invalidVars,"a 'vars' block must be an object of name → expression entries",l,i);const c={};for(const a in t){const n=t[a];if("//"===a||void 0===n)continue;const u=Ee(l,a),d=r(a);d.ok?c[a]=He(e,n,u,o+1):Ke(e,"error",s.invalidName,`'${a}' is not a legal var name — ${d.reason}`,u,i)}return c},It=(e,t,r,a,n)=>{const{entries:o,vars:s,changed:i}=Rt(e,t,r,a,n);return Wt(e,t,o,!1,i,s,r,n)},Rt=(e,t,r,a,n,o=!1)=>{let s,i=!1;const l=[],c=!o&&Lt(t);c&&e.unknownNodes++;for(const c in t){const u=t[c];"//"!==c?"vars"!==c?void 0!==u?(c.startsWith("$")&&ct(e,c,Ee(r,c),n,o),l.push({key:c,rawChild:u,node:He(e,u,Ee(r,c),a+1)})):i=!0:(s=Vt(e,u,r,a,n),i=!0):i=!0}return c&&e.unknownNodes--,{entries:l,vars:s,changed:i}},Lt=e=>{for(const t in e)if(t.startsWith("$")&&void 0!==e[t])return!0;return!1},Wt=(e,t,r,a,n,o,i,l)=>{const c=[],u=a?new Array(r.length):{};let d=n;for(const{key:e,rawChild:t,node:n}of r)"constant"!==n.kind?(d=!0,"skeleton"!==n.kind||void 0!==n.vars?(a||Le(u,e,void 0),c.push({path:n.path,at:[e],node:n})):(Le(u,e,n.skeleton),c.push(...n.holes.map(t=>({...t,at:[e,...t.at]}))))):(Le(u,e,n.value),n.value!==t&&(d=!0));if(0===c.length)return void 0!==o&&Object.keys(o).length>0&&Ke(e,"warning",s.unreferencedVar,"this vars block declares names nothing in its scope references",Ee(i,"vars"),l),Xe(d||void 0!==o?u:t,i,l);const p={kind:"skeleton",skeleton:u,holes:c,path:i,order:l};return void 0!==o&&(p.vars=o),p},Bt=(e,t=[])=>{if("skeleton"===e.kind)for(const r of e.holes)Bt(r.node,t);else if("constant"!==e.kind){const r=Jt(e);t.push(void 0===r?{node:e}:{node:e,timeoutFallback:r})}return t},Jt=e=>{if("operator"===e.kind||"fragmentCall"===e.kind)return void 0!==e.fallback?Ut(e.fallback):"operator"===e.kind?e.entry.defaultFallback:e.entry?.timeoutFallback},Ut=e=>{if("constant"===e.kind)return{value:e.value};const t=[],r=_t(e,[],t);return void 0===r?void 0:{value:r,reads:t}},_t=(e,t,r)=>{if("reference"===e.kind){if("error"!==e.namespace)return;return r.push({at:t,segments:e.segments}),e.raw}if("skeleton"!==e.kind)return;const a=[];for(const n of e.holes){const e=_t(n.node,[...t,...n.at],r);if(void 0===e)return;a.push(e)}return We(e.skeleton,e.holes,a)},Gt=new WeakMap,Kt=e=>{const t=Gt.get(e.registry);if(void 0!==t)return t;const r=[...e.registry.operators.keys(),...e.registry.aliases.keys(),...e.registry.fragments.keys()];return Gt.set(e.registry,r),r},Ht=e=>{switch(e.kind){case"operator":return e.entry.definition.returns;case"fragmentCall":return e.entry?.returns??"any";case"skeleton":return Array.isArray(e.skeleton)?"array":"object";case"constant":return Qt(e.value);default:return"any"}},Qt=e=>{if(null===e)return"null";if(Array.isArray(e))return"array";if(q(e))return"object";switch(typeof e){case"string":return"string";case"number":return"number";case"boolean":return"boolean";default:return"any"}},Xt=/*#__PURE__*/Object.freeze({parsePath:w,resolvePath:j,checkType:Q,checkConstraints:X,describeType:B,renderText:he,isTruthy:ue}),Yt=(e,t={})=>{er({artifact:e,context:t,varsFrames:[],iteratorFrames:[],fallbackFrames:[]},e.root),Fe(e.issues),e.hasErrors=Ve(e.issues)},Zt=(e,t,r,a,n,o,s)=>{Te(e.artifact.issues,t,r,a,n,o,s)},er=(e,t)=>{switch(t.kind){case"constant":case"invalid":return;case"reference":return void vr(e,t);case"skeleton":{const r=wr(e,t.vars,t.path);for(const r of t.holes)er(e,r.node);return void $r(e,r)}case"fragmentCall":return void mr(e,t);case"elements":for(const r of t.nodes)er(e,r);return;case"entries":{const r=wr(e,t.vars,t.path);for(const r in t.entries)er(e,t.entries[r]);return void $r(e,r)}case"operator":return void rr(e,t)}return t},tr=(e,t,r)=>{const a={referenced:!1};e.fallbackFrames.push(a),er(e,r),e.fallbackFrames.pop(),a.referenced&&(t.fallbackReadsError=!0)},rr=(e,t)=>{const r=wr(e,t.vars,t.path);void 0!==t.fallback&&tr(e,t,t.fallback);const a=t.entry.definition,n=fr(t);for(const[r,o]of a.resolution.entries){const a=t.params[r];void 0!==a?nr(e,n,r,o,a,ar(t,r)):o.required&&Zt(e,"error",s.missingRequired,`'${t.name}' requires '${r}'`,t.path,t.order,{operator:t.name,parameter:r})}hr(e,t);const o=[];for(const r in t.params){const n=t.params[r];"perElement"===a.parameters[r]?.evaluation?o.push([r,n]):er(e,n)}if(o.length>0){const r={as:Ie(t),referenced:!1};e.iteratorFrames.push(r);for(const[,t]of o)er(e,t);e.iteratorFrames.pop(),r.referenced||Zt(e,"warning",s.deadBinding,`'${t.name}' binds ${null===r.as?"$element / $index":`$${r.as}`} but its 'each' references neither`,t.path,t.order,{operator:t.name})}$r(e,r)},ar=(e,t)=>{const{definition:r,hostDefaults:a}=e.entry;if(void 0!==r.parameters[t]?.elementNullPolicy)return!1;for(const[n,o]of r.resolution.entries){if(!o.replacesNullAt?.includes(t))continue;const r=e.params[n];if(void 0===r){if(void 0!==a&&Object.hasOwn(a,n)&&null!==a[n])return!0}else if("constant"!==r.kind||null!==r.value)return!0}return!1},nr=(e,t,r,a,n,o=!1)=>{const i={...t.extra,parameter:r};if("elements"===n.kind){const o=a.constraints?.length;return void(void 0!==o&&n.nodes.length!==o&&Zt(e,"error",s.typeCheck,`'${t.label}.${r}': expected ${o} element${1===o?"":"s"}, received ${n.nodes.length}`,n.path,n.order,i))}if("constant"!==n.kind&&"structural"===a.evaluation&&"as"!==r)return void Zt(e,"error",s.typeCheck,`'${t.label}.${r}' is structural — it requires a literal value`,n.path,n.order,i);const l=`'${t.label}.${r}'`,c=sr(a,n,o);void 0!==c&&Zt(e,"error",c.code,c.code===s.returnsMismatch?`${c.reason} — it can never satisfy ${l}`:`${l}: ${c.reason}`,n.path,n.order,i);let u=n;for(;"operator"===u.kind||"fragmentCall"===u.kind;){const n=u.fallback;if(void 0===n)return void("operator"===u.kind&&or(e,t,r,a,u,o));const c=sr(a,n,o);void 0!==c&&Zt(e,"warning",s.fallbackMismatch,`this fallback can never satisfy ${l}: ${c.reason}`,n.path,n.order,i),u=n}},or=(e,t,r,a,n,o)=>{const i=n.entry.defaultFallback;if(void 0===i)return;const l=ir(a,i,o);void 0!==l&&Zt(e,"warning",s.fallbackMismatch,`'${n.name}' falls back to its operatorDefaults fallback, which can never satisfy '${t.label}.${r}': ${l.reason}`,n.path,n.order,{...t.extra,parameter:r})},sr=(e,t,r)=>{switch(t.kind){case"constant":return pr(e,t.value,r);case"operator":case"fragmentCall":{if("fragmentCall"===t.kind&&void 0===t.entry)return;const r=Ht(t);if(O(r,e.type))return;const a="operator"===t.kind?`'${t.name}'`:`fragment '${t.name}'`;return{code:s.returnsMismatch,reason:`${a} returns ${JSON.stringify(r)}`}}case"skeleton":return cr(e,Array.isArray(t.skeleton)?[]:{});case"reference":return"error"===t.namespace?lr(e,t.segments):void 0;default:return}},ir=(e,{value:t,reads:r},a)=>void 0===r?pr(e,t,a):0===r[0].at.length?lr(e,r[0].segments):cr(e,Array.isArray(t)?[]:{}),lr=(e,t)=>{const r=dr(t);if(void 0!==r&&!O(r,e.type))return cr(e,ur[r])},cr=(e,t)=>{const r=Q(t,e.type);if(!r.ok)return{code:s.typeCheck,reason:`expected ${r.expected}, received ${r.actual}`}},ur={object:{},array:[],string:"",number:0,boolean:!1},dr=e=>{const[t,...r]=e;if(void 0===t)return"object";if(r.length>0||!Object.hasOwn(A,t))return;const a=A[t];return"string"==typeof a?a:void 0},pr=(e,t,r)=>{if(null===t&&(r||G(e)))return;const a=ne(t,e);return a.ok?void 0:{code:s.typeCheck,reason:`expected ${a.expected}, received ${a.actual}`}},fr=e=>({label:e.name,extra:{operator:e.name}}),mr=(e,t)=>{const r=wr(e,t.vars,t.path);void 0!==t.fallback&&tr(e,t,t.fallback);const a=t.entry?.parameters,n="static"===t.argumentsMode?t.parameters:void 0;if(void 0!==a&&"static"===t.argumentsMode){const r={label:t.name,extra:{fragment:t.name}};for(const o in a){const i=a[o],l=n?.[o];void 0!==l?nr(e,r,o,i,l):i.required&&Zt(e,"error",s.missingRequired,`fragment '${t.name}' – requires '${o}'`,t.path,t.order,{fragment:t.name,parameter:o})}if(void 0!==n)for(const r in n){const o=n[r];if(void 0===a[r]){const n=T(r,Object.keys(a));Zt(e,"error",s.unknownNodeKey,`fragment '${t.name}' declares no parameter '${r}'${V(n)}`,o.path,o.order,{parameter:r,suggestion:n})}}}if(void 0!==n)for(const t in n)er(e,n[t]);else void 0!==t.parameters&&er(e,t.parameters);$r(e,r)},hr=(e,t)=>{const r=t.entry.definition.validate;if(void 0===r)return;const a={};for(const e in t.params){const r=t.params[e];"constant"===r.kind&&(a[e]=r.value)}let n;try{n=r(a,Xt)}catch(r){return void Zt(e,"error",s.operatorValidate,`'${t.name}' validate hook threw: ${r.message}`,t.path,t.order,{operator:t.name})}for(const r of n){const a=void 0!==r.parameter?t.params[r.parameter]:void 0;Zt(e,r.severity,s.operatorValidate,r.message,a?.path??t.path,t.order,{operator:t.name,parameter:r.parameter})}},vr=(e,t)=>{const{namespace:r}=t;switch(r){case"data":return;case"vars":return void yr(e,t);case"params":return void gr(e,t);case"element":case"index":return void br(e,t,r);case"error":return void kr(e,t)}return r},yr=(e,t)=>{const r=t.segments[0],a="string"==typeof r?r:void 0;if(void 0!==a)for(let t=e.varsFrames.length-1;t>=0;t--){const r=e.varsFrames[t],n=r.names.get(a);if(void 0!==n){if(n.referenced=!0,null!==r.currentVar){const e=r.edges.get(r.currentVar)??new Set;e.add(a),r.edges.set(r.currentVar,e)}return}}Zt(e,"error",s.unresolvedVar,`'${t.raw}': no var '${a??""}' is declared in scope`,t.path,t.order)},gr=(e,t)=>{const r=e.context.fragmentParams,a=t.segments[0],n="string"==typeof a?a:void 0;if(void 0===r)return void Zt(e,"error",s.unresolvedParam,`'${t.raw}': $params is only available inside a fragment body`,t.path,t.order,{parameter:n});if(0===t.segments.length)return;if(void 0!==n&&r.has(n))return;const o=void 0===n?void 0:T(n,r);Zt(e,"error",s.unresolvedParam,`'${t.raw}': the fragment declares no parameter '${String(a)}'${V(o)}`,t.path,t.order,{parameter:n,suggestion:o})},br=(e,t,r)=>{for(let a=e.iteratorFrames.length-1;a>=0;a--){const n=e.iteratorFrames[a];if(Re(n.as,r,t.binding))return void(n.referenced=!0)}t.scopeUnknown||Zt(e,"error",s.unresolvedBinding,`'${t.raw}' resolves against no enclosing iterator here`,t.path,t.order)},kr=(e,t)=>{const r=e.fallbackFrames.at(-1);void 0===r?t.scopeUnknown||Zt(e,"error",s.unresolvedBinding,`'${t.raw}' is only available inside the fallback of an operator node or fragment call`,t.path,t.order):r.referenced=!0},wr=(e,t,r)=>{if(void 0===t)return null;const a={names:new Map,currentVar:null,edges:new Map},n=Ee(r,"vars");for(const r in t){const o=t[r],i=Ee(n,r);for(const t of e.varsFrames)if(t.names.has(r)){Zt(e,"warning",s.shadowedVar,`'${r}' shadows a var of the same name from an enclosing scope`,i,o.order);break}a.names.set(r,{node:o,declaredAt:i,order:o.order,referenced:!1})}e.varsFrames.push(a);for(const[t,r]of a.names)a.currentVar=t,er(e,r.node),a.currentVar=null;return a},$r=(e,t)=>{if(null!==t){e.varsFrames.pop();for(const[r,a]of t.names)a.referenced||Zt(e,"warning",s.unreferencedVar,`'${r}' is declared but never referenced in its scope`,a.declaredAt,a.order);xr(e,t)}},xr=(e,t)=>{const r=new Map([...t.names.keys()].map((e,t)=>[e,t]));L(t.names.keys(),e=>t.edges.get(e),a=>{const n=a.sort((e,t)=>r.get(e)-r.get(t)),o=n.map(e=>`'${e}'`),i=1===o.length?`${o[0]} depends on itself`:`${I(o)} form a vars cycle — a var may not depend on itself`,l=t.names.get(n[0]);Zt(e,"error",s.varCycle,i,l.declaredAt,l.order)})},jr={capable:!1,effective:!1,disabled:[]},Or={capable:!0,effective:!0,disabled:[]},Ar=e=>{const{effective:t}=Pr(e,e.root,!1);return Fe(e.issues),t},Pr=(e,t,r)=>{switch(t.kind){case"constant":case"reference":return jr;case"invalid":return Or;case"skeleton":case"elements":case"entries":return Sr(e,qe(t),r);case"operator":return Dr(e,t,Xr(t.entry),r);case"fragmentCall":return Dr(e,t,t.entry?.caches??!0,r)}return t},Dr=(e,t,r,a)=>{const n=!0===t.noCache,o=Sr(e,qe(t),a||n),s=r||o.capable,i=Nr(t),l=void 0===i?o.disabled:[i,...o.disabled];return n&&a?zr(e,t,"'noCache' is redundant — an enclosing node already sets it"):n&&!s&&zr(e,t,l.length>0?`'noCache' is redundant — caching is already disabled for ${Cr(l)}`:"'noCache' is dead — nothing beneath this node caches"),{capable:s,effective:!n&&(r||o.effective),disabled:l}},Nr=e=>"operator"===e.kind&&e.entry.definition.cache&&!Xr(e.entry)?e.entry.definition.name:void 0,Cr=e=>I([...new Set(e)].map(e=>`'${e}'`)),Sr=(e,t,r)=>{const a={capable:!1,effective:!1,disabled:[]};for(const n of t){const{capable:t,effective:o,disabled:s}=Pr(e,n,r);a.capable||=t,a.effective||=o,a.disabled.push(...s)}return a},zr=(e,t,r)=>{Te(e.issues,"warning",s.uselessModifier,r,Ee(t.path,"noCache"),t.order,"operator"===t.kind?{operator:t.name}:{fragment:t.name})};class Er{max;entries=new Map;constructor(e){this.max=e}get size(){return this.entries.size}get(e){if(!this.entries.has(e))return;const t=this.entries.get(e);return this.entries.delete(e),this.entries.set(e,t),t}set(e,t){this.entries.delete(e),this.entries.set(e,t),this.entries.size>this.max&&this.evictOldest()}delete(e){this.entries.delete(e)}clear(){this.entries.clear()}resize(e){for(this.max=e;this.entries.size>this.max;)this.evictOldest()}evictOldest(){const e=this.entries.keys().next();!0!==e.done&&this.entries.delete(e.value)}}const Mr=Symbol("fig-tree:lazy-handle"),qr="~",Fr=(e,t)=>{if(t>o)return"refused";switch(typeof e){case"boolean":return"json";case"string":return e.length>4096?"serializer":"json";case"number":return Number.isFinite(e)&&!Object.is(e,-0)?"json":"serializer";case"undefined":return"serializer";case"object":break;default:return"refused"}if(null===e)return"json";if(Array.isArray(e)){for(let r=0;r<e.length;r++){const a=Fr(e[r],t+1);if("json"!==a)return a}return"json"}if(!n(e))return"refused";for(const r in e){if(r.length>4096)return"serializer";const a=Fr(e[r],t+1);if("json"!==a)return a}return"json"},Tr=(e,t)=>Vr(e,0,t)?t.join(""):void 0,Vr=(e,t,r)=>{if(t>o)return!1;if(null===e)return Rr(r,"n");if(void 0===e)return Rr(r,"u");switch(typeof e){case"boolean":return Rr(r,e?"t":"f");case"number":return Ir(e,r);case"string":return Rr(r,`s${e.length}:${e}`);case"object":break;default:return!1}if(Array.isArray(e)){r.push("[");for(const a of e)if(!Vr(a,t+1,r))return!1;return Rr(r,"]")}if(!n(e)||Mr in e)return!1;r.push("{");for(const a in e)if(r.push(`s${a.length}:${a}`),!Vr(e[a],t+1,r))return!1;return Rr(r,"}")},Ir=(e,t)=>Number.isNaN(e)?Rr(t,"N"):e===1/0?Rr(t,"I"):e===-1/0?Rr(t,"J"):Object.is(e,-0)?Rr(t,"#-0"):Rr(t,`#${String(e)}`),Rr=(e,t)=>(e.push(t),!0);class Lr{deps;identity=new WeakMap;content=new Er(200);constructor(e){this.deps=e}resolve(e){const t="object"==typeof e&&null!==e?e:void 0;if(void 0!==t){const e=this.identity.get(t);if(void 0!==e)return e}const r=this.deps.probe(e);if(r.constant){const e={kind:"inert",depth:r.depth};return void 0!==t&&this.identity.set(t,e),e}const a=void 0===t?void 0:(e=>{const t=Fr(e,0);return"json"===t?JSON.stringify(e):"serializer"===t?Tr(e,[qr]):void 0})(e),n=void 0===a?void 0:this.content.get(a),o=n??this.deps.compile(e),s={kind:"artifact",artifact:o};return void 0!==t&&this.identity.set(t,s),void 0!==a&&void 0===n&&!o.identityOnly&&o.holes.length>0&&this.content.set(a,o),s}}const Wr=/*#__PURE__*/new Set(["type","required","default","description","metadata","constraints"]),Br=/*#__PURE__*/new Set(["expression","parameters","description","metadata","samples"]),Jr=(e,t,a)=>{const n=(...t)=>["fragments",e,...t],o=r(e);if(!o.ok)return void a(s.invalidName,`'${e}' is not a legal fragment name: ${o.reason}`,n());if(P(e))return void a(s.reservedName,`'${e}' is a reserved name and may not name a fragment`,n());if(!q(t))return void a(s.invalidDefinition,`fragment '${e}' must be a wrapper object: { expression, parameters?, description?, metadata?, samples? }`,n());if(!("expression"in t))return void a(s.invalidDefinition,`fragment '${e}' has no 'expression'`,n());for(const e of Object.keys(t))Br.has(e)||a(s.invalidDefinition,`'${e}' is not a key of a fragment definition`,n(e));const i={name:e,parameters:{},body:{kind:"constant",value:null,path:null,order:0},returns:"any",warnings:[],nodeCount:0,maxDepth:0,dependencies:{dataPaths:new Map,dynamic:!1,paramNames:[],paramsDynamic:!1,operators:[],fragments:[]},identityOnly:!1,caches:!1};if(void 0!==t.description&&("string"!=typeof t.description?a(s.invalidDefinition,"'description' must be a string",n("description")):i.description=t.description),void 0!==t.metadata&&(q(t.metadata)?i.metadata=t.metadata:a(s.invalidDefinition,"'metadata' must be a plain object",n("metadata"))),void 0===t.samples||q(t.samples)||a(s.invalidDefinition,"'samples' must be a plain object",n("samples")),void 0!==t.parameters)if(q(t.parameters))for(const[e,r]of Object.entries(t.parameters)){const t=Ur(e,r,n,a);void 0!==t&&(i.parameters[e]=t)}else a(s.invalidDefinition,"'parameters' must be a plain object",n("parameters"));return i},Ur=(e,t,a,n)=>{const o=a("parameters",e),i=r(e);if(!i.ok)return void n(s.invalidName,`'${e}' is not a legal parameter name: ${i.reason}`,o);if(D.has(e))return void n(s.reservedName,`'${e}' is a reserved node key and may not name a parameter`,o);if(!q(t))return void n(s.invalidDefinition,`the declaration of '${e}' must be an object`,o);for(const e of Object.keys(t))Wr.has(e)||n(s.invalidDefinition,`'${e}' is not a key of a parameter declaration`,[...o,e]);const l=t.type??"any";if(!H(l))return void n(s.invalidDefinition,`'${e}' declares an unknown type`,[...o,"type"]);if(void 0!==t.required&&"boolean"!=typeof t.required)return void n(s.invalidDefinition,"'required' must be a boolean",[...o,"required"]);let c;if(void 0!==t.constraints){const r=ee(t.constraints);if(!r.ok)return void n(s.invalidDefinition,`'${e}' declares invalid constraints: expected ${r.expected}, got ${r.actual}`,[...o,"constraints"]);c=t.constraints}const u="default"in t;if(u&&!0===t.required)return void n(s.invalidDefinition,`'${e}' is declared required and also declares a default — the default could never apply`,[...o,"default"]);if(u){const r=Q(t.default,l);if(!r.ok)return void n(s.typeCheck,`the default for '${e}' does not satisfy its declared type: expected ${r.expected}, got ${r.actual}`,[...o,"default"]);const a=ae(t.default,{constraints:c});if(!a.ok)return void n(s.typeCheck,`the default for '${e}' violates its declared constraints: expected ${a.expected}, got ${a.actual}`,[...o,"default"])}const d={type:l,required:t.required??!u};return u&&(d.default=t.default),"string"==typeof t.description&&(d.description=t.description),q(t.metadata)&&(d.metadata=t.metadata),void 0!==c&&(d.constraints=c),d},_r=e=>{const t=new Set,r=new Set,a=e=>{if(r.has(e.name)||t.has(e.name))return;t.add(e.name);const n=e.body;"fragmentCall"===n.kind&&void 0!==n.entry&&a(n.entry),e.returns=Ht(n),t.delete(e.name),r.add(e.name)};for(const t of e.fragments.values())a(t)},Gr=(e,t)=>L(e.keys(),t=>e.get(t)?.fragmentCalls.map(e=>e.name),([e,...r])=>t(s.fragmentCycle,`fragment '${e}' reaches itself: ${[e,...r,e].join(" → ")} — recursion is not supported`,["fragments",e])),Kr=(e,t)=>{const r=new Set,a=n=>{if(r.has(n))return;r.add(n);const o=e.fragments.get(n),s=t.get(n);if(void 0===o||void 0===s)return;for(const e of s.fragmentCalls)a(e.name);const i=_e(s.own,s.fragmentCalls,e.fragments);o.nodeCount=i.nodeCount,o.maxDepth=i.maxDepth,o.dependencies=i.dependencies,o.identityOnly=i.identityOnly,o.caches=Ar(s),o.timeoutFallback=Hr(n,s,e.fragments)};for(const e of t.keys())a(e)},Hr=(e,t,r)=>{const{root:a,holes:n}=t;if(0===n.length)return;const o=[];for(const e of n){const t=Qr(e,r);if(void 0===t)return;o.push(t)}const s=[];let i=0;const l=(t,r)=>{if("skeleton"===t.kind)return We(t.skeleton,t.holes,t.holes.map(e=>l(e.node,[...r,...e.at])));const{value:a,reads:n=[]}=o[i++],c={..."operator"===t.kind?{operator:t.name}:{},fragment:e,fragmentPath:Me(t.path)};for(const e of n)s.push({...e,at:[...r,...e.at],within:e.within??c});return a},c=l(a,[]);return 0===s.length?{value:c}:{value:c,reads:s}},Qr=(e,t)=>{if(void 0!==e.timeoutFallback)return e.timeoutFallback;const{node:r}=e;return"fragmentCall"===r.kind&&void 0===r.fallback?t.get(r.name)?.timeoutFallback:void 0},Xr=e=>e.definition.cache&&!0!==e.hostDefaults?.noCache,Yr=["fallback","noCache"],Zr=e=>{const t=[],r=(e,r,a,n)=>{t.push({severity:"error",code:e,message:r,path:a,...void 0!==n?{operator:n}:{}})},a={operators:new Map,aliases:new Map,fragments:new Map},{operators:n,aliases:o}=a,i=new Map,l=(e,t,a)=>{const n=i.get(e);return void 0!==n?(r(s.duplicateOperator,`'${e}' is already registered (by '${n}') — one namespace, no silent precedence`,t,a),!1):(i.set(e,a),!0)},c=(e,t)=>{if("function"==typeof e)return void r(s.invalidOptions,`operators[${t[1]}]${t.length>2?`[${t[2]}]`:""} is a function — factories must be called: httpOperators(client)`,t);if(!le(e))return void r(s.invalidOptions,"every operators entry must be built with defineOperator() — a plain definition object is not accepted",t);const{name:a,alias:i}=e,c=l(a,t,a),u=void 0===i||l(i,t,a);c&&u&&(n.set(a,{definition:e}),void 0!==i&&o.set(i,a))};if(Array.isArray(e.operators)?e.operators.forEach((e,t)=>{Array.isArray(e)?e.forEach((e,a)=>{Array.isArray(e)?r(s.invalidOptions,"'operators' is flattened one level only — arrays may not nest deeper",["operators",t,a]):c(e,["operators",t,a])}):c(e,["operators",t])}):r(s.invalidOptions,"'operators' must be an array",["operators"]),void 0!==e.operatorDefaults&&ea(e.operatorDefaults,n,o,r),((e,t,r,a)=>{if(void 0===e)return;if(!q(e))return void a(s.invalidOptions,"'fragments' must be a plain object",["fragments"]);for(const[n,o]of Object.entries(e)){const e=Jr(n,o,a);void 0!==e&&r(n,["fragments",n])&&t.fragments.set(n,e)}const n=new Map;for(const[r,a]of t.fragments){const o=e[r],s=Ue(o.expression,t,{basePath:["expression"]});a.body=s.root,n.set(r,s)}_r(t);for(const[e,r]of t.fragments){const t=n.get(e);Yt(t,{fragmentParams:new Set(Object.keys(r.parameters))});for(const{issue:r}of t.issues)"error"===r.severity&&a(r.code,`fragment '${e}': ${r.message}`,["fragments",e,...r.path])}Gr(n,a)&&Kr(t,n);for(const[e,r]of t.fragments)for(const{issue:t}of n.get(e).issues)if("error"!==t.severity){const e={...t,path:[...t.path]};Object.freeze(e.path),r.warnings.push(Object.freeze(e))}})(e.fragments,a,(e,t)=>l(e,t,e),r),t.length>0)throw z(s.invalidOptions,t,t[0].operator);return a},ea=(e,t,r,a)=>{if(q(e))for(const[n,o]of Object.entries(e)){const e=["operatorDefaults",n],i=t.get(n);if(void 0===i){const t=r.get(n);void 0!==t?a(s.invalidOptions,`'operatorDefaults' keys are canonical names — use '${t}', not its alias '${n}'`,e,t):a(s.unknownOperator,`'${n}' names no registered operator`,e);continue}if(!q(o)){a(s.invalidOptions,`the defaults for '${n}' must be a plain object`,e,n);continue}let l,c=!0;for(const[t,r]of Object.entries(o)){const o=[...e,t];if(Yr.includes(t)){"fallback"===t&&(l=Se(r),void 0===l&&(a(s.invalidOptions,`the default fallback for '${n}' must be static, built only from literals and $error reads — it is never evaluated`,o,n),c=!1)),"noCache"===t&&(!0!==r?(a(s.invalidOptions,"the 'noCache' modifier takes only the literal true",o,n),c=!1):i.definition.cache||(a(s.invalidOptions,`'noCache' on '${n}', which never caches — its definition does not declare 'cache: true'`,o,n),c=!1));continue}const u=i.definition.parameters[t];if(void 0===u){a(s.invalidOptions,`'${t}' names no declared parameter of '${n}' (nor 'fallback'/'noCache')`,o,n),c=!1;continue}if(u.required){a(s.invalidOptions,`'${t}' is a required parameter of '${n}' — operatorDefaults may only target optional parameters`,o,n),c=!1;continue}const d=Q(r,u.type);if(!d.ok){a(s.typeCheck,`the default for '${n}.${t}' does not satisfy its declared type: expected ${d.expected}, got ${d.actual}`,o,n),c=!1;continue}const p=ae(r,u);p.ok||(a(s.typeCheck,`the default for '${n}.${t}' violates its declared constraints: expected ${p.expected}, got ${p.actual}`,o,n),c=!1)}c&&(i.hostDefaults=Object.freeze({...o}),void 0!==l&&(i.defaultFallback=l))}else a(s.invalidOptions,"'operatorDefaults' must be a plain object",["operatorDefaults"])},ta=(e,t)=>{const r=e.operators.get(t);if(void 0!==r)return r;const a=e.aliases.get(t);return void 0!==a?e.operators.get(a):void 0},ra="fig-tree:scope-settled",aa="fig-tree:request-expired",na="fig-tree:evaluation-timeout";class oa{parent;controller;upstream;forward;settled=!1;verified=-1;clock;constructor(e){this.parent=e,this.clock=void 0===e?{epoch:0}:e.clock}get aborted(){return void 0!==this.controller?this.controller.signal.aborted:!!this.settled||this.verified!==this.clock.epoch&&(!(void 0===this.parent||!this.parent.aborted)||(this.verified=this.clock.epoch,!1))}get reason(){return void 0!==this.controller?this.controller.signal.reason:this.settled?ra:this.parent?.reason}get signal(){if(void 0===this.controller){const e=new AbortController;if(this.controller=e,this.settled)e.abort(ra);else if(void 0!==this.parent){const t=this.parent.signal;t.aborted?e.abort(t.reason):(this.upstream=t,this.forward=()=>e.abort(t.reason),t.addEventListener("abort",this.forward,{once:!0}))}}return this.controller.signal}settle(){this.settled||(this.settled=!0,this.clock.epoch+=1,void 0!==this.controller&&(void 0!==this.upstream&&void 0!==this.forward&&this.upstream.removeEventListener("abort",this.forward),this.controller.abort(ra)))}}const sa=(e,t,r=E)=>({get aborted(){return e.aborted},get reason(){return e.reason},signal:e,clock:t,settle:r}),ia=(e,t,r)=>{const a=new AbortController,{signal:n}=a,o=()=>a.abort(e?.reason);let s;e?.aborted?o():e?.addEventListener("abort",o,{once:!0});const i=new Promise((e,t)=>{s=t});i.catch(E);const l=()=>s(n.reason);n.aborted?l():n.addEventListener("abort",l,{once:!0});const c=void 0===t?void 0:setTimeout(()=>a.abort(r),Math.min(t,2147483647));return{signal:n,expiry:i,settle:()=>{void 0!==c&&clearTimeout(c),n.removeEventListener("abort",l),e?.removeEventListener("abort",o),a.abort(ra)}}},la=(e,t)=>ia(e,t,aa),ca=(e,t)=>(r,a)=>{const n=(o=[e.operator,e.fingerprint,r],Tr(o,[]));var o;return void 0===n?a():(async(e,t,r,a)=>{const n=e.generation,o=await e.lookup(t);if(a?.({type:"cache",hit:o.hit}),o.hit)return o.value;const s=await r();return await e.write(t,s,n),s})(t,n,a,e.note)},ua=/*#__PURE__*/Object.freeze({}),da=(e,t)=>!0!==t||!0===e.noCache?e:{...e,noCache:t};class pa{options;cache;trace;#e;constructor(e,t,r,a){this.options=t,this.cache=r,this.trace=a,this.#e=e}get signal(){return this.#e.signal}}const fa={memo:(e,t)=>t()},ma={note:E},ha=Symbol("fig-tree:internal-error"),va=e=>Pa(`[fig-tree internal] ${e}`,ha),ya=e=>va(`${e} reached evaluation — the static gate should have refused it`),ga=(t,r,a,n)=>new e({code:r,message:`${t.name} – ${a}`,path:Me(t.path),operator:t.name,errorData:n}),ba=e=>Na(e,ha),ka=Symbol("fig-tree:cancelled"),wa=()=>Pa("[fig-tree] evaluation cancelled",ka),$a=e=>Na(e,ka),xa=(e,t,r)=>e.rootScope.aborted?ja(e.rootScope.reason,t,r):e.abortScope.aborted?wa():void 0,ja=(e,t,r)=>e===ra?wa():Oa(e,Me(t),{operator:r}),Oa=(t,r,a={})=>{const{operator:n,ms:o}=a,i=t===na,l=void 0===o?"":`${o}ms `;return new e({code:i?s.timeout:s.aborted,message:i?`evaluation exceeded its ${l}timeout`:"evaluation was aborted by the caller",path:r,...void 0!==n?{operator:n}:{}})},Aa=e=>ba(e)||$a(e)||(e=>N(e)&&(e.code===s.aborted||e.code===s.timeout))(e),Pa=(e,t)=>{const r=new Error(e);return Da(r,t),r},Da=(e,t)=>{e[t]=!0},Na=(e,t)=>e instanceof Error&&!0===e[t],Ca=()=>performance.now(),Sa=e=>{const t=new Map,r=new WeakMap,a=new WeakSet;let n;const o=(e,r,n)=>{const o=t.get(e);if(void 0===o)return;t.delete(e),a.has(e)||("fallback"!==e.status&&(e.status=r),void 0!==n.error&&void 0===e.error&&(e.error=n.error),"failed"!==r&&"cancelled"!==r&&(e.value=n.value),void 0!==n.elapsed&&(e.elapsed=n.elapsed));const s=[...o.children,...za(o)];s.length>0&&(e.children=s.sort((e,t)=>e.order-t.order||e.index-t.index).map(e=>e.entry))},s=(e,t)=>{(e.events??=[]).push(t)},i=(e,a,o,s)=>{const i=Ta(e),l=Va(e),c={path:Me(e.path),kind:qa(e),status:"value",...void 0!==o?{source:o}:{},...void 0!==i?{operator:i}:{},...void 0!==l?{ref:l}:{},...void 0!==s?.var?{var:s.var}:{}};return t.set(c,{node:e,children:[],seen:new Set,started:Ca()}),r.set(e,c),((e,r,a)=>{if(void 0===e)return void(n=r.entry);const o=t.get(e);void 0!==o&&(o.children.push(r),o.seen.add(a))})(a,{entry:c,order:e.order,index:s?.index??0},e),c};return{enter:(e,t,r,a)=>i(e,t,void 0!==r?{fragment:r.fragment}:void 0,a),settle:o,markFallback:(e,t)=>{e.status="fallback",e.error=t},note:s,markShielded:(e,n,l)=>{const c=r.get(e),u=void 0===c?void 0:t.get(c);if(void 0===c||void 0===u)return;a.add(c),c.status="fallback",c.error=n,c.value=l,c.elapsed=Ca()-u.started,s(c,{type:"shielded-fallback"});const d=Fa(e);void 0!==d&&o(i(d,c,c.source,void 0),"value",{value:l})},finish:()=>{for(const e of[...t.keys()].reverse())o(e,"cancelled",{});return void 0!==n&&e.length>0&&(n.warnings=e),n}}},za=e=>Ea(e.node).filter(t=>!e.seen.has(t)).map(e=>({entry:{path:Me(e.path),kind:qa(e),status:"skipped"},order:e.order,index:0})),Ea=e=>{const t=qe(e).flatMap(Ma);return"fragmentCall"===e.kind&&void 0!==e.entry&&t.push(e.entry.body),t},Ma=e=>"elements"===e.kind||"entries"===e.kind?Ea(e):[e],qa=e=>{switch(e.kind){case"operator":return"operator";case"fragmentCall":return"fragment";case"reference":return"reference";case"skeleton":return"skeleton";default:return"literal"}},Fa=e=>"operator"===e.kind||"fragmentCall"===e.kind?e.fallback:void 0,Ta=e=>"operator"===e.kind||"fragmentCall"===e.kind?e.name:void 0,Va=e=>"reference"===e.kind?e.raw:void 0,Ia=async(e,t,r,a,n)=>{let o;try{o=await e()}catch(e){if(Aa(e))throw e;if(!r){const r=a(e);throw N(r)&&r!==t&&void 0===r.cause&&(r.cause=t),r}o=null}return void 0!==n.trace&&void 0!==n.traceParent&&N(t)&&n.trace.markFallback(n.traceParent,t),o},Ra=(e,t)=>{if(void 0===t)return e;const r={parent:e.scope,vars:new Map},a={...e,scope:r};for(const[e,n]of Object.entries(t))r.vars.set(e,R(()=>zn(n,a,{var:e})));return a},La=async(e,t,r,a,n)=>{const o={...r,params:"dynamic"===e.argumentsMode?await Ba(e,t,a):Wa(e,t,a),frame:n};delete o.scope,delete o.bindings,delete o.caught;const s=await zn(t.body,o);return void 0===s?null:s},Wa=(e,t,r)=>{const a=e.parameters??{},n=new Map;for(const[o,s]of Object.entries(t.parameters)){const t=a[o],i=R(async()=>{if(void 0===t)return Ja(e,o,s,r);let a;try{a=await zn(t,r)}catch(e){throw Ka(e,r.frame)}return Ua(e,o,s,a,t.path,r)});n.set(o,()=>{const e=i();return e.catch(E),e})}return n},Ba=async(e,t,r)=>{const a=e.parameters;let n;try{n=await zn(a,r)}catch(e){throw Ka(e,r.frame)}if(!q(n))throw Ka(_a(e,s.typeCheck,`'parameters' must evaluate to an object, received ${B(n)}`,a.path),r.frame);const o=new Map;for(const[s,i]of Object.entries(t.parameters)){const t=Object.hasOwn(n,s)?Ua(e,s,i,n[s],a.path,r):Ja(e,s,i,r,a.path);o.set(s,()=>Promise.resolve(t))}return o},Ja=(e,t,r,a,n=e.path)=>{if(!r.required)return r.default??null;throw Ka(_a(e,s.missingRequired,`requires '${t}'`,n),a.frame)},Ua=(e,t,r,a,n,o)=>{const i=void 0===a?null:a;if(null===i&&G(r))return r.default??null;const l=ne(i,r);if(!l.ok)throw Ka(_a(e,s.typeCheck,`parameter '${t}': expected ${l.expected}, received ${l.actual}`,n),o.frame);return i},_a=(t,r,a,n)=>new e({code:r,message:`fragment '${t.name}' – ${a}`,path:Me(n)}),Ga=Symbol("fig-tree:anchored"),Ka=(e,t)=>!N(e)||Na(e,Ga)?e:(Da(e,Ga),void 0===t?e:Object.assign(e,Ha(e,t))),Ha=(e,t)=>({fragment:t.fragment,fragmentPath:e.path,path:Me(t.callPath)}),Qa=(e,t)=>{const r=void 0===t||Na(e,Ga)?e:Ha(e,t),a={code:e.code,message:e.message,path:r.path};return void 0!==e.operator&&(a.operator=e.operator),void 0!==r.fragment&&(a.fragment=r.fragment),void 0!==r.fragmentPath&&(a.fragmentPath=r.fragmentPath),void 0!==e.errorData&&(a.errorData=e.errorData),a};class Xa extends Error{constructor(e,t={}){super(e),this.name="OperatorFailure",void 0!==t.code&&(this.code=t.code),void 0!==t.errorData&&(this.errorData=t.errorData)}}const Ya=e=>e instanceof Xa,Za=(e,t,r)=>tn(Array.from({length:e},(e,a)=>en(a,()=>t(a),r)),e),en=async(e,t,r)=>{try{return{index:e,ok:!0,value:r(await t())}}catch(t){return{index:e,ok:!1,error:t}}},tn=(e,t)=>{const r=new Map(e.map((e,t)=>[t,e]));return{[Mr]:!0,length:t,async*[Symbol.asyncIterator](){for(;r.size>0;){const e=await Promise.race(r.values());r.delete(e.index),yield e}}}},rn=e=>({[Mr]:!0,evaluate:R(e)}),an=e=>({[Mr]:!0,evaluate:()=>Promise.resolve(e)}),nn=(e,t,r,a,n)=>rn(async()=>on(await zn(e,n),t,r,a)),on=(e,t,r,a)=>{const n=ne(e,a);if(!n.ok)throw dn(t,r,n);return a.truthiness?hn(e,a.type):e},sn=(e,t,r,a,n,o)=>{const s=Array.isArray(t)?t:[],i=Ie(r),l=new Map,c=t=>{const c=l.get(t);if(void 0!==c)return c;const u=(async()=>on(await zn(e,((e,t,r,a)=>({...e,bindings:{parent:e.bindings,as:t,element:r,index:a}}))(o,i,s[t],t),{index:t}),r,a,n))();return u.catch(E),l.set(t,u),u};return{[Mr]:!0,evaluate:c,settle:()=>Za(s.length,c,e=>e)}},ln=(e,t)=>t.truthiness?ue(e):e,cn=(e,t,r)=>{if("lazyElements"===t.evaluation&&"elements"===e.kind)return e.nodes.map((e,a)=>rn(async()=>ln(await zn(e,r,{index:a}),t)));if("race"===t.evaluation&&"elements"===e.kind)return((e,t,r)=>Za(e.length,r=>zn(e[r],t,{index:r}),r))(e.nodes,r,e=>ln(e,t));if("lazyEntries"===t.evaluation&&"entries"===e.kind){const a=Ra(r,e.vars),n={};for(const[r,o]of Object.entries(e.entries))n[r]=rn(async()=>ln(await zn(o,a),t));return n}},un=(e,t)=>{switch(t.evaluation){case"lazyElements":return e.map(e=>an(ln(e,t)));case"race":return((e,t)=>Za(e.length,t=>Promise.resolve(e[t]),t))(e,e=>ln(e,t));case"lazyEntries":{const r={};for(const[a,n]of Object.entries(e))r[a]=an(ln(n,t));return r}case"lazy":return an(e);default:return e}},dn=(e,t,r)=>ga(e,s.typeCheck,`parameter '${t}': expected ${r.expected}, received ${r.actual}`),pn=(e,t,r)=>{if("string"==typeof t.nullPolicy)return t.nullPolicy;const a=t.nullPolicy,n=e.entry.definition.parameters[a.selector],o=r[a.selector],s=Q(o,n.type);if(!s.ok)throw dn(e,a.selector,s);return a.table.find(e=>e.value===o).policy},fn=async(e,t,r)=>{if(void 0!==t.elementNullPolicy){if(Array.isArray(e)&&e.includes(null)){const t=await r();return e.map(e=>null===e?t:e)}if(q(e)&&Object.values(e).includes(null)){const t=await r(),a={};for(const[r,n]of Object.entries(e))a[r]=null===n?t:n;return a}return e}return null===e?r():e},mn=e=>Array.isArray(e)?e.includes(null):!!q(e)&&Object.values(e).includes(null),hn=(e,t)=>{if((e=>!("object"==typeof e&&!Array.isArray(e))&&(Array.isArray(e)?e:[e]).every(e=>"array"===e||"object"===e))(t)){if(Array.isArray(e))return e.map(ue);if(q(e)){const t={};for(const[r,a]of Object.entries(e))t[r]=ue(a);return t}}return ue(e)},vn=(e,t)=>0===e.segments.length?t.data:xn(t.data,e.segments,e,t,"is absent from the evaluation data"),yn=async(e,t)=>{const[r,...a]=e.segments,n="string"==typeof r?((e,t)=>{for(let r=e;void 0!==r;r=r.parent){const e=r.vars.get(t);if(void 0!==e)return e}})(t.scope,r):void 0;if("string"!=typeof r||void 0===n)throw ya(`'${e.raw}'`);const o=await n();return 0===a.length?jn(o):xn(o,a,e,t,`is absent from the value of '$vars.${r}'`)},gn=async(e,t)=>{const r=t.params;if(void 0===r)throw ya(`'${e.raw}'`);const[a,...n]=e.segments;if(void 0===a){const e={};return await Promise.all([...r].map(async([t,r])=>{e[t]=jn(await r())})),e}const o="string"==typeof a?r.get(a):void 0;if(void 0===o)throw ya(`'${e.raw}'`);const s=await o();return 0===n.length?jn(s):xn(s,n,e,t,`is absent from the value of '$params.${String(a)}'`)},bn=(e,t)=>{const r=e.namespace,a=((e,t,r)=>{for(let a=e;void 0!==a;a=a.parent)if(Re(a.as,t,r))return a})(t.bindings,r,e.binding);if(void 0===a)throw ya(`'${e.raw}'`);return"index"===r?a.index:0===e.segments.length?jn(a.element):xn(a.element,e.segments,e,t,`is absent from '${e.raw.split(".")[0]}'`)},kn=(e,t)=>{if(void 0===t.caught)throw ya(`'${e.raw}'`);return wn(Qa(t.caught,t.frame),e.segments)},wn=(e,t)=>{if(0===t.length)return e;const r=j(e,t);return r.found?jn(r.value):null},$n=(e,t,r)=>{const{value:a,reads:n}=e;if(void 0===n)return a;const o=Qa(t,r),s=n.map(({segments:e,within:t})=>wn(void 0===t?o:{...o,...t},e));return 0===n[0].at.length?s[0]:We(a,n,s)},xn=(t,r,a,n,o)=>{const i=j(t,r);if(i.found)return jn(i.value);if(!n.strictDataPaths)return null;throw new e({code:s.missingDataPath,message:`'${a.raw}' ${o} (strictDataPaths)`,path:Me(a.path)})},jn=e=>void 0===e?null:e,On=async(e,t)=>{const{params:r,propagate:a}=await(async(e,t)=>{const{definition:r,hostDefaults:a}=e.entry,{entries:n,whole:o,perElement:s}=r.resolution,i=[],l=[],c={};let u;const d={};for(const[r,o]of n){const n=e.params[r];switch(o.evaluation){case"eager":void 0!==n&&(i.push(r),l.push(zn(n,t)));break;case"structural":"constant"===n?.kind&&(c[r]=n.value);break;case"lazy":if(void 0!==o.replacesNullAt){const e=void 0!==n?R(()=>zn(n,t)):void 0!==a&&Object.hasOwn(a,r)?R(()=>a[r]):void 0;if(void 0!==e)for(const t of o.replacesNullAt)(u??={})[t]=e;break}void 0!==n&&(d[r]=nn(n,e,r,o,t));break;case"lazyElements":case"lazyEntries":case"race":{if(void 0===n)break;const e=cn(n,o,t);if(void 0!==e){d[r]=e;break}i.push(r),l.push(zn(n,t));break}case"perElement":break;default:o.evaluation}}if(l.length>0)if(1===l.length){const e=l[0];c[i[0]]=M(e)?await e:e}else{const e=await Promise.all(l);i.forEach((t,r)=>{c[t]=e[r]})}for(const[e,r]of o){if(Object.hasOwn(d,e))continue;const n=c[e];(void 0===n||null===n&&G(r))&&(void 0!==a&&Object.hasOwn(a,e)?c[e]=a[e]:"default"in r?c[e]=r.default===se?t.data:r.default:delete c[e])}for(const[t,r]of o){if(Object.hasOwn(d,t))continue;let a=c[t];if(void 0===a)continue;const n=u?.[t];void 0!==n&&(a=await fn(a,r,n));const o="eager"!==r.evaluation&&"structural"!==r.evaluation;if(null===a&&_(r.type)&&!o&&"propagate"===pn(e,r,c))return{params:d,propagate:!0};if("propagate"===r.elementNullPolicy&&mn(a))return{params:d,propagate:!0};a=on(a,e,t,r),d[t]=un(a,r)}for(const[r,a]of s){const n=e.params[r];void 0!==n&&(d[r]=sn(n,d[a.over],e,r,a,t))}return{params:d,propagate:!1}})(e,t);if(a)return null;const{definition:n}=e.entry,o=!0!==t.noCache&&Xr(e.entry),s=Pn(n,r),i=void 0===s?void 0:la(t.abortScope.signal,s),l=void 0===i?t:{...t,abortScope:sa(i.signal,t.abortScope.clock)},c=(e=>{const{trace:t,traceParent:r}=e;if(void 0!==t&&void 0!==r)return e=>{t.note(r,e)}})(t),u=((e,t,r,a)=>new pa(e.abortScope,e.options,r?{memo:ca({operator:t.name,fingerprint:t.fingerprint,note:a},e.cache)}:fa,void 0===a?ma:{note:a}))(l,n,o,c);try{return await An(e,t,r,u,i)}catch(r){throw Dn(r,e,t,i,s)}finally{i?.settle()}},An=async(e,t,r,a,n)=>{const o=xa(t,e.path,e.name);if(void 0!==o)throw o;const s=Promise.resolve(e.entry.definition.evaluate(r,a));return void 0===n?Cn(await s,e):(s.catch(E),Cn(await Promise.race([s,n.expiry]),e))},Pn=(e,t)=>{const r=e.timeoutParam;if(null===r)return;const a=t[r];return"number"==typeof a&&a>0?a:void 0},Dn=(e,t,r,a,n)=>{if(ba(e)||$a(e))return e;const o=xa(r,t.path,t.name);return void 0!==o?o:a?.signal.reason===aa?new Xa(`request exceeded its ${String(n)}ms timeout`,{code:s.requestTimeout}):e},Nn=(e,t,r)=>{const a=e.fallback;if(void 0!==a)return()=>zn(a,{...t,caught:r});const n=e.entry.defaultFallback;return void 0!==n?()=>$n(n,r,t.frame):void 0},Cn=(e,t)=>{if(void 0===e)return null;if("number"==typeof e&&!Number.isFinite(e))throw ga(t,s.nonFiniteResult,`produced a non-finite number (${String(e)})`);if("object"==typeof(r=e)&&null!==r&&!0===r[Mr])throw ga(t,s.escapedHandle,"returned a lazy handle instead of evaluating it");var r;return e},Sn=(e,t)=>{if(N(e))return e;const r=Ya(e)?e:void 0;return ga(t,r?.code??s.operatorFailure,e instanceof Error?e.message:String(e),r?.errorData)},zn=(e,t,r)=>void 0!==t.trace?En(e,t,t.trace,r):t.abortScope.aborted?Promise.reject(xa(t,e.path)):Mn(e,t),En=async(e,t,r,a)=>{const n=r.enter(e,t.traceParent,t.frame,a),o=Ca();try{if(t.abortScope.aborted)throw xa(t,e.path);const a=await Mn(e,{...t,traceParent:n});return r.settle(n,"value",{value:a,elapsed:Ca()-o}),a}catch(e){throw r.settle(n,$a(e)?"cancelled":"failed",{...N(e)?{error:e}:{},elapsed:Ca()-o}),e}},Mn=(e,t)=>{try{switch(e.kind){case"constant":return e.value;case"reference":return((e,t)=>{switch(e.namespace){case"data":return vn(e,t);case"vars":return yn(e,t);case"params":return gn(e,t);case"element":case"index":return bn(e,t);case"error":return kn(e,t)}})(e,t);case"skeleton":return qn(e,t);case"operator":return(async(e,t)=>{const r=Ra(da(t,e.noCache),e.vars),a=e.entry.definition.deliversLazily?new oa(r.abortScope):void 0,n=void 0===a?r:{...r,abortScope:a};try{try{return await On(e,n)}finally{a?.settle()}}catch(a){if(Aa(a))throw a;const n=Sn(a,e),o=Nn(e,r,n);if(void 0===o)throw n;return Ia(o,n,e.fallbackReadsError,t=>Sn(t,e),t)}})(e,t);case"fragmentCall":return(async(e,t)=>{const{entry:r}=e;if(void 0===r)throw ya(`fragment call '${e.name}'`);const a=Ra(da(t,e.noCache),e.vars),n=new oa(a.abortScope),o={fragment:e.name,callPath:t.frame?.callPath??e.path},s={...a,abortScope:n};try{try{return await La(e,r,s,a,o)}finally{n.settle()}}catch(r){if(Aa(r))throw r;const n=Ka(r,o),{fallback:s}=e;if(void 0===s)throw n;const i=N(n)?{...a,caught:n}:a;return Ia(()=>zn(s,i),n,e.fallbackReadsError,e=>Ka(e,t.frame),t)}})(e,t);default:throw va(`a '${e.kind}' node reached the node dispatch`)}}catch(e){return Promise.reject(e)}},qn=async(e,t)=>{const r=t.rootBoundary,a=void 0===r?t:{...t,rootBoundary:void 0},n=Ra(a,e.vars),o=e.holes.map(({node:e})=>void 0===r?zn(e,n):"skeleton"===e.kind?zn(e,{...n,rootBoundary:r}):r(()=>zn(e,n),e)),s=o.some(M)?await Promise.all(o):o;return We(e.skeleton,e.holes,s)},Fn=async(e,t,r)=>{const{timeout:a,signal:n}=t,o=e.holes.length>0,s=void 0!==a||void 0!==n?ia(n,a,na):void 0,i=void 0!==s?((e,t)=>{const r={epoch:0};return e.addEventListener("abort",()=>{r.epoch+=1},{once:!0}),sa(e,r,t)})(s.signal,s.settle):new oa(void 0),l=void 0!==s&&void 0!==a&&e.timeoutShielded&&o,c=!0===t.trace?Sa(e.issues.map(e=>e.issue).filter(e=>"error"!==e.severity)):void 0,u=((e,t,r,a)=>({options:e,data:e.data??ua,abortScope:r,rootScope:r,cache:t,strictDataPaths:e.strictDataPaths??!1,...void 0!==a?{trace:a}:{}}))(t,r,i,c),d=l?Vn(e,s.expiry,a,c):void 0,p=void 0!==d&&"skeleton"!==e.root.kind,f=void 0===d||p?u:{...u,rootBoundary:d};try{if(i.aborted)throw Oa(i.reason,[]);const t=()=>p&&void 0!==d?d(()=>zn(e.root,f),e.root):zn(e.root,f),r=await(l||void 0===s?t():Tn(t,s,a));return void 0!==c?{result:r,trace:c.finish()}:{result:r}}catch(e){throw void 0!==c&&N(e)&&void 0===e.trace&&(e.trace=c.finish()),e}finally{i.settle()}},Tn=(e,t,r)=>Promise.race([e(),t.expiry.catch(e=>{throw Oa(e,[],{ms:r})})]),Vn=(e,t,r,a)=>{const n=new Map(e.holes.map(e=>[e.node,e]));return(e,o)=>{const s=n.get(o);let i=!1;const l=Promise.resolve(e()).then(e=>(i=!0,e));return Promise.race([l,t.catch(e=>{if(e!==na)throw Oa(e,[]);if(i)return;const t=In(s,e,r),n=Rn(s,t);return a?.markShielded(s.node,t,n),n})])}},In=(e,t,r)=>{const{node:a}=e,n="operator"===a.kind?a.name:void 0;return Oa(t,Me(a.path),{operator:n,ms:r})},Rn=(e,t)=>$n(e.timeoutFallback,t,void 0),Ln={hit:!1},Wn=e=>{if(void 0===e)return{maxSize:50,maxTime:1800};if(!n(e))throw Jn("'cache' must be an object");const{store:t,maxSize:r,maxTime:a}=e;if(void 0!==t&&!Bn(t))throw Jn("'cache.store' must provide get, set, delete and clear methods");if(void 0!==r&&(!Number.isInteger(r)||r<1))throw Jn("'cache.maxSize' must be a positive integer");if(void 0!==a&&("number"!=typeof a||a<=0||Number.isNaN(a)))throw Jn("'cache.maxTime' must be a positive number of seconds, or Infinity");return{...void 0!==t?{store:t}:{},maxSize:r??50,maxTime:a??1800}},Bn=e=>"object"==typeof e&&null!==e&&["get","set","delete","clear"].every(t=>"function"==typeof e[t]),Jn=t=>new e({code:s.invalidOptions,message:t,path:[]});class Un{store;own;maxTime;current;constructor(e,t=0){this.current=t,void 0===e.store?(this.own=new Er(e.maxSize),this.store=this.own):this.store=e.store,this.maxTime=e.maxTime}get generation(){return this.current}async lookup(e){let t;try{t=await this.store.get(e)}catch{return Ln}return n(r=t)&&"ft3"===r.fig&&"number"==typeof r.generation?t.generation<this.current||_n(t)?(this.drop(e),Ln):{hit:!0,value:t.value}:Ln;var r}async write(e,t,r){if(r!==this.current)return;const a={fig:"ft3",value:t,generation:r,...Number.isFinite(this.maxTime)?{expiresAt:Date.now()+1e3*this.maxTime}:{}};try{await this.store.set(e,a)}catch{}}clear(){this.current+=1;try{Promise.resolve(this.store.clear()).catch(E)}catch{}}configure(e){void 0===e.store?(this.own??=new Er(e.maxSize),this.store=this.own):e.store!==this.store&&(this.store=e.store,this.own=void 0),this.maxTime=e.maxTime,this.own?.resize(e.maxSize)}drop(e){try{Promise.resolve(this.store.delete(e)).catch(E)}catch{}}}const _n=e=>void 0!==e.expiresAt&&e.expiresAt<=Date.now(),Gn=e=>e===p?0:"number"==typeof e?1:2,Kn=e=>({data:{paths:[...e.dataPaths].sort(([,e],[,t])=>((e,t)=>{const r=Math.min(e.length,t.length);for(let a=0;a<r;a++){const r=e[a],n=t[a];if(r===n)continue;const o=Gn(r)-Gn(n);return 0!==o?o:"number"==typeof r&&"number"==typeof n?r-n:r<n?-1:1}return e.length-t.length})(e,t)).map(([e])=>e),dynamic:e.dynamic},params:{names:[...e.paramNames],dynamic:e.paramsDynamic},operators:[...e.operators],fragments:[...e.fragments]}),Hn=(e,t)=>{const r={};for(const[a,n]of Object.entries(e)){const e={...n};void 0!==t&&Object.hasOwn(t,a)&&(e.hostDefault=t[a]),r[a]=e}return r},Qn=(e,t)=>{const r=[];return void 0!==t.maxDepth&&e.maxDepth>t.maxDepth&&r.push(Yn(e.maxDepth,t.maxDepth)),void 0!==t.maxNodes&&e.nodeCount>t.maxNodes&&r.push({severity:"error",code:s.maxNodesExceeded,message:`the expression holds ${e.nodeCount} evaluable nodes — maxNodes is ${t.maxNodes}`,path:[]}),r},Xn=(e,t)=>e.hasErrors||void 0!==t.maxDepth||void 0!==t.maxNodes?[...Qn(e,t),...e.issues.map(e=>e.issue)]:[],Yn=(e,t)=>({severity:"error",code:s.maxDepthExceeded,message:`the expression nests ${e} levels deep — maxDepth is ${t}`,path:[]}),Zn=(e,t,r)=>{const a=[...Qn(e,t),...e.issues.map(r)];return void 0!==t.data&&a.push(...eo(e.dataReads,t.data)),a},eo=(e,t)=>{const r=new Map,a=new Map,n=[],o=(e,o,i,l)=>{let c=r.get(e);if(void 0===c&&(c=j(t,o).found,r.set(e,c)),c)return;let u=a.get(i.path);if(void 0===u&&a.set(i.path,u=new Set),u.has(e))return;u.add(e);const d=void 0===l?"":` (read by fragment '${l}')`;n.push({severity:"warning",code:s.missingDataPath,message:`'${C(o)}' is absent from the supplied sample data${d}`,path:Me(i.path)})};for(const t of e)if("path"===t.kind)o(t.key,t.segments,t,void 0);else for(const[e,r]of t.fragment.dependencies.dataPaths)o(e,r,t,t.fragment.name);return n},to="...",ro=e=>e,ao=e=>{const r=Object.entries(e.parameters),a=new Map;for(const[e,{nullPolicy:n}]of r){if("function"!=typeof n)continue;const[o,{type:s}]=r.find(([,e])=>void 0!==e.type&&t(e.type)),{literal:i}=s;a.set(e,{selector:o,table:i.map(e=>({value:e,policy:n(e)}))})}return no(e,a)},no=(e,t)=>{const r={};for(const[a,n]of Object.entries(e.parameters)){const e=t.get(a),o="string"==typeof n.nullPolicy?n.nullPolicy:void 0,s=n.type??"any",i=!0===n.truthiness&&_(s)?"value":"propagate",l={type:io(s),required:n.required??!("default"in n),evaluation:n.evaluation??"eager",truthiness:n.truthiness??!1,nullPolicy:e??o??i};"default"in n&&(l.default=n.default),void 0!==n.metadata&&(l.metadata=n.metadata),void 0!==n.elementNullPolicy&&(l.elementNullPolicy=n.elementNullPolicy),void 0!==n.constraints&&(l.constraints=lo(n.constraints)),void 0!==n.over&&(l.over=n.over),void 0!==n.replacesNullAt&&(l.replacesNullAt=[...n.replacesNullAt]),r[a]=l}const a=e.positionalParams?.at(-1),n=a?.startsWith(to)?a.slice(3):null,o={[ie]:!0,name:e.name,category:e.category,parameters:r,resolution:co(r),restParam:n,deliversLazily:Object.values(r).some(e=>"eager"!==e.evaluation&&"structural"!==e.evaluation),timeoutParam:e.timeoutParam??null,cache:!0===e.cache,fingerprint:"",evaluate:e.evaluate,returns:void 0!==e.returns?io(e.returns):"any"};return void 0!==e.alias&&(o.alias=e.alias),void 0!==e.metadata&&(o.metadata=e.metadata),void 0!==e.positionalParams&&(o.positionalParams=[...e.positionalParams]),void 0!==e.validate&&(o.validate=e.validate),void 0!==e.analysis&&(o.analysis=lo(e.analysis)),o.fingerprint=oo(o),uo(o)},oo=e=>(e=>{let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")})(JSON.stringify([e.name,Object.entries(e.parameters).map(([e,t])=>[e,so(t)]),e.positionalParams,e.restParam,e.returns,e.cache,e.timeoutParam,e.evaluate,e.validate],(e,t)=>"function"==typeof t||"symbol"==typeof t||t instanceof RegExp?String(t):t)),so=e=>{const t={...e};return delete t.metadata,t},io=e=>"string"==typeof e?e:t(e)?{literal:[...e.literal]}:[...e],lo=e=>{if(Array.isArray(e))return e.map(lo);if(q(e)){const t={};for(const[r,a]of Object.entries(e))t[r]=lo(a);return t}return e},co=e=>{const t=Object.entries(e);return{entries:t,whole:t.filter(([,e])=>void 0===e.replacesNullAt&&"perElement"!==e.evaluation),perElement:t.filter(([,e])=>"perElement"===e.evaluation)}},uo=e=>{for(const t of Object.values(e.parameters))"string"!=typeof t.type&&Object.freeze(t.type),"object"==typeof t.type&&"literal"in t.type&&Object.freeze(t.type.literal),"object"==typeof t.nullPolicy&&(t.nullPolicy.table.forEach(e=>Object.freeze(e)),Object.freeze(t.nullPolicy.table),Object.freeze(t.nullPolicy)),void 0!==t.constraints&&po(t.constraints),void 0!==t.replacesNullAt&&Object.freeze(t.replacesNullAt),Object.freeze(t);Object.freeze(e.parameters);for(const t of Object.values(e.resolution))t.forEach(e=>Object.freeze(e)),Object.freeze(t);return Object.freeze(e.resolution),"string"!=typeof e.returns&&Object.freeze(e.returns),void 0!==e.positionalParams&&Object.freeze(e.positionalParams),Object.freeze(e)},po=e=>{Array.isArray(e)?(e.forEach(po),Object.freeze(e)):q(e)&&(Object.values(e).forEach(po),Object.freeze(e))},fo=e=>{if(Array.isArray(e))return e;try{return w(e)}catch(e){throw new Xa(e.message)}},mo=(e,t)=>{if("string"!=typeof e)return[];try{return w(e),[]}catch(e){return[{severity:"error",parameter:t,message:e.message}]}},ho=e=>Array.isArray(e.values)&&0===e.values.length?[{severity:"error",parameter:"values",message:"an empty values array has no result — supply at least one value"}]:[],vo=e=>t=>{const r=t[e];return Array.isArray(r)&&0===r.length?[{severity:"warning",parameter:e,message:`an empty ${e} array is a dead expression — the result is always the identity`}]:[]},yo=/*#__PURE__*/vo("values"),go=/*#__PURE__*/vo("input"),bo=/*#__PURE__*/vo("entries"),ko=e=>Array.isArray(e.values)&&e.values.length<2?[{severity:"warning",parameter:"values",message:"fewer than two values is a dead comparison — the result never varies"}]:[],wo=(e,t)=>new Xa(`${e} of nothing — the values array is empty${void 0!==t?`; ${t}`:""}`,{code:s.emptyAggregate}),$o=async(e,t)=>{const r=[];for await(const a of e){if(a.ok&&a.value===t)return t;a.ok||r.push(a)}if(r.length>0)throw r.sort((e,t)=>e.index-t.index),xo(r);return!t},xo=e=>{const[t,...r]=e,a=r.map(e=>e.error).filter(N);return a.length>0&&N(t.error)&&void 0===t.error.related&&(t.error.related=a),t.error},jo=async e=>{const t=new Array(e.length);let r=0;for await(const a of e){t[a.index]=a;for(let e=t[r];void 0!==e;e=t[r]){if(!e.ok)throw e.error;r+=1}}return t.map(e=>e?.value)},Oo=(e,t)=>{const r=e=>t&&"string"==typeof e?e.toLowerCase():e;if(e.length<2)return!0;const a=r(e[0]);return e.every(e=>Pe(r(e),a))},Ao={values:{type:"array",elementNullPolicy:"value"},caseInsensitive:{type:"boolean",default:!1}},Po={name:"equal",alias:"=",category:"comparison",parameters:Ao,positionalParams:["...values"],returns:"boolean",validate:ko,evaluate:({values:e,caseInsensitive:t})=>Oo(e,t)},Do={name:"notEqual",alias:"!=",category:"comparison",parameters:Ao,positionalParams:["...values"],returns:"boolean",validate:ko,evaluate:({values:e,caseInsensitive:t})=>!Oo(e,t)},No=(e,t,r)=>({name:e,alias:t,category:"comparison",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{length:2,homogeneous:["number","string"]}},nullValueDefault:{type:["number","string"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"boolean",evaluate:({values:e})=>{const[t,a]=e;return r(de(t,a))}}),Co=/*#__PURE__*/No("greaterThan",">",e=>e>0),So=/*#__PURE__*/No("greaterThanOrEqual",">=",e=>e>=0),zo=/*#__PURE__*/No("lessThan","<",e=>e<0),Eo=/*#__PURE__*/No("lessThanOrEqual","<=",e=>e<=0),Mo={number:()=>0,string:()=>"",array:()=>[],object:()=>({})},qo={name:"plus",alias:"+",category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number","string","array","object"]}},expect:{type:{literal:["number","string","array","object"]},required:!1},nullValueDefault:{type:["number","string","array","object"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:["number","string","array","object"],validate:({values:e,expect:t})=>void 0!==t?yo({values:e}):ho({values:e}),evaluate:({values:e,expect:t})=>{if(0===e.length){if(void 0===t)throw wo("the sum","pin the mode with 'expect' to get its identity");return Mo[t]()}const r=B(e[0]);if(void 0!==t&&r!==t)throw new Xa(`all operands must be ${t}s — received ${r}`,{code:s.typeCheck});switch(r){case"number":return e.reduce((e,t)=>e+t,0);case"string":return e.join("");case"array":return e.flat(1);case"object":return Object.assign({},...e)}}},Fo={name:"subtract",alias:"-",category:"math",parameters:{value:{type:["number","null"]},minus:{type:["number","null"]}},positionalParams:["value","minus"],returns:"number",evaluate:({value:e,minus:t})=>e-t},To={name:"divide",alias:"/",category:"math",parameters:{value:{type:["number","null"]},by:{type:["number","null"]}},positionalParams:["value","by"],returns:"number",evaluate:({value:e,by:t})=>e/t},Vo={name:"modulo",category:"math",parameters:{value:{type:["number","null"]},mod:{type:["number","null"]}},positionalParams:["value","mod"],returns:"number",evaluate:({value:e,mod:t})=>(e%t+t)%t},Io={name:"multiply",alias:"*",category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number"]}},nullValueDefault:{type:"number",required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"number",validate:yo,evaluate:({values:e})=>e.reduce((e,t)=>e*t,1)},Ro={name:"power",alias:"^",category:"math",parameters:{base:{type:["number","null"]},exponent:{type:["number","null"]}},positionalParams:["base","exponent"],returns:"number",evaluate:({base:e,exponent:t})=>e**t},Lo={name:"round",category:"math",parameters:{value:{type:["number","null"]},decimals:{type:"integer",default:0}},positionalParams:["value","decimals"],returns:"number",evaluate:({value:e,decimals:t})=>((e,t=0)=>{if(!Number.isFinite(e))return e;const r=e<0?-1:1,a=Math.round(je(Math.abs(e),t));return r*je(a,-t)})(e,t)},Wo=(e,t,r="number")=>({name:e,category:"math",parameters:{value:{type:["number","null"]}},positionalParams:["value"],returns:r,evaluate:({value:e})=>t(e)}),Bo=/*#__PURE__*/Wo("floor",Math.floor,"integer"),Jo=/*#__PURE__*/Wo("ceil",Math.ceil,"integer"),Uo=/*#__PURE__*/Wo("abs",Math.abs),_o=(e,t,r)=>({name:e,category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number","string"]}},nullValueDefault:{type:["number","string"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:["number","string"],validate:ho,evaluate:({values:e})=>{const a=e;if(0===a.length)throw wo(t);return a.reduce((e,t)=>r(de(t,e))?t:e)}}),Go=(e,t)=>({name:e,category:"string",parameters:{value:{type:["string","null"]}},positionalParams:["value"],returns:"string",evaluate:({value:e})=>t(e)}),Ko={name:"split",category:"string",parameters:{value:{type:["string","null"]},delimiter:{type:"string",default:" "},trim:{type:"boolean",default:!0}},positionalParams:["value","delimiter"],returns:"array",evaluate:({value:e,delimiter:t,trim:r})=>{const a=""===t?xe(e):e.split(t);return r?a.map(ge):a}},Ho=e=>Array.isArray(e.values)&&e.values.some(ve)?[{severity:"error",parameter:"values",message:ye}]:[],Qo={name:"join",category:"string",parameters:{values:{type:"array",elementNullPolicy:"value"},delimiter:{type:"string",default:" "},nullValueDefault:{type:["string","number","boolean"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"string",validate:e=>[...yo(e),...Ho(e)],evaluate:({values:e,delimiter:t},r)=>e.map((e,t)=>{const a=`[${t}]`;return null===e?r.trace.note({type:"render",token:a,rendered:"empty"}):ve(e)&&r.trace.note({type:"render",token:a,rendered:"placeholder"}),he(e)}).join(t)},Xo=e=>{const t=new Set,r=[];for(const a of e)if("imsu".includes(a)){if(t.has(a))return`duplicate regex flag '${a}'`;t.add(a)}else r.includes(a)||r.push(a);if(0===r.length)return;const a=r.includes("g")||r.includes("y")?" — all matches is mode: 'match'":"";return`unknown regex flag${1===r.length?"":"s"}: ${r.join(", ")}${a}`},Yo={type:"array"},Zo={type:"string",required:!1,evaluation:"structural"},es={type:"array",required:!1,evaluation:"lazy",replacesNullAt:["input"]},ts={type:"any",evaluation:"perElement",over:"input",truthiness:!0},rs={name:"get",category:"data",parameters:{path:{type:["string","array","null"]},from:{type:"any",nullPolicy:"value",default:se},default:{type:"any",required:!1,evaluation:"lazy"}},positionalParams:S,returns:"any",validate:({path:e})=>mo(e,"path"),evaluate:({path:e,from:t,default:r},a)=>{const n=j(t,fo(e));if(n.found)return n.value;if(void 0!==r)return r.evaluate();if(a.options.strictDataPaths)throw new Xa(`'${as(e)}' is missing (strictDataPaths)`,{code:s.missingDataPath});return null}},as=e=>"string"==typeof e?e:e.map(e=>String(e)).join("."),ns={name:"buildObject",category:"data",parameters:{entries:{type:"array",constraints:{elementShape:{key:{type:["string","number","boolean"]},value:{type:"any"}}}}},positionalParams:["...entries"],returns:"object",validate:e=>[...bo(e),...os(e)],evaluate:({entries:e},t)=>{const r={};for(const a of e){const e=he(a.key);Object.hasOwn(r,e)&&t.trace.note({type:"key-overwrite",key:e}),r[e]=a.value}return r}},os=e=>{const t=e.entries;if(!Array.isArray(t))return[];const r=new Set,a=new Set,n=[];for(const e of t){const t=e?.key;if("string"!=typeof t&&"number"!=typeof t&&"boolean"!=typeof t)continue;const o=he(t);r.has(o)&&!a.has(o)&&(a.add(o),n.push({severity:"warning",parameter:"entries",message:`duplicate key '${o}' — the last entry wins and the earlier one is dead`})),r.add(o)}return n},ss=(e,t)=>new Xa(`cannot convert ${B(e)} to ${t}`),is=/*#__PURE__*/[{name:"and",category:"logic",parameters:{values:{type:"array",truthiness:!0,evaluation:"race"}},positionalParams:["...values"],returns:"boolean",validate:yo,evaluate:({values:e})=>$o(e,!1)},{name:"or",category:"logic",parameters:{values:{type:"array",truthiness:!0,evaluation:"race"}},positionalParams:["...values"],returns:"boolean",validate:yo,evaluate:({values:e})=>$o(e,!0)},{name:"not",alias:"!",category:"logic",parameters:{value:{type:"any",truthiness:!0}},positionalParams:["value"],returns:"boolean",evaluate:({value:e})=>!e},{name:"if",alias:"?",category:"logic",parameters:{condition:{type:"any",truthiness:!0},then:{type:"any",evaluation:"lazy"},else:{type:"any",evaluation:"lazy",default:null}},positionalParams:["condition","then","else"],evaluate:({condition:e,then:t,else:r})=>e?t.evaluate():r.evaluate()},{name:"match",category:"logic",parameters:{value:{type:["string","number","boolean","null"],nullPolicy:"value"},branches:{type:"object",evaluation:"lazyEntries"},default:{type:"any",required:!1,evaluation:"lazy"}},positionalParams:["value","branches","default"],evaluate:({value:e,branches:t,default:r})=>{const a=null===e?null:he(e);if(null!==a&&Object.hasOwn(t,a))return t[a].evaluate();if(void 0!==r)return r.evaluate();throw new Xa(`no branch matches ${null===a?"null":`'${a}'`}, and no default was supplied`)}},{name:"firstNonNull",category:"logic",parameters:{values:{type:"array",evaluation:"lazyElements"}},positionalParams:["...values"],validate:yo,evaluate:async({values:e})=>{for(const t of e){const e=await t.evaluate();if(null!==e)return e}return null}},Po,Do,Co,So,zo,Eo,qo,Fo,Io,To,Vo,Ro,Lo,Bo,Jo,Uo,/*#__PURE__*/_o("min","the minimum",e=>e<0),/*#__PURE__*/_o("max","the maximum",e=>e>0),{name:"buildString",category:"string",parameters:{template:{type:["string","null"]},substitutions:{type:["array","object"],default:[],elementNullPolicy:"value"},trim:{type:"boolean",default:!1},closeGaps:{type:"boolean",default:!1},nullValueDefault:{type:["string","number","boolean"],required:!1,evaluation:"lazy",replacesNullAt:["substitutions"]}},positionalParams:["template","...substitutions"],returns:"string",evaluate:({template:e,substitutions:t,trim:r,closeGaps:a},n)=>{const o=Array.isArray(t)?t:void 0,s=void 0===o?t:void 0,i=[];for(const t of Ne(e)){if("text"===t.kind){i.push({text:t.text,site:!1});continue}if(!("positional"===t.kind?void 0!==o&&t.index>=1&&t.index<=o.length:void 0!==s&&Object.hasOwn(s,t.body))){n.trace.note({type:"render",token:t.raw,rendered:"literal"}),i.push({text:t.raw,site:!1});continue}const e="positional"===t.kind?o[t.index-1]:s[t.body],a=he(e);ve(e)&&n.trace.note({type:"render",token:t.raw,rendered:"placeholder"});const l=r?ge(a):a;""===l&&n.trace.note({type:"render",token:t.raw,rendered:"empty"}),i.push({text:l,site:!0,token:t.raw})}if(a)for(const e of(e=>{const t=[];for(let r=0;r<e.length;r++){const a=e[r];if(!a.site||""!==a.text)continue;const n=e[r-1];if(void 0!==n&&!n.site){const e=we(n.text);if(e!==n.text){n.text=e,t.push(a.token);continue}}const o=e[r+1];if(void 0!==o&&!o.site){const e=$e(o.text);e!==o.text&&t.push(a.token),o.text=e}}return t})(i))n.trace.note({type:"render",token:e,rendered:"gap-closed"});return i.map(e=>e.text).join("")}},Ko,Qo,/*#__PURE__*/Go("lower",e=>e.toLowerCase()),/*#__PURE__*/Go("upper",e=>e.toUpperCase()),/*#__PURE__*/Go("trim",ge),{name:"regex",category:"string",parameters:{value:{type:["string","null"]},pattern:{type:["string","null"]},flags:{type:"string",default:""},mode:{type:{literal:["test","extract","match"]},default:"test"},noMatchDefault:{type:["string","null"],default:null,nullPolicy:"value",evaluation:"lazy"}},positionalParams:["value","pattern"],returns:["boolean","string","array","null"],validate:({pattern:e,flags:t})=>{const r=[],a="string"==typeof t?Xo(t):void 0;if(void 0!==a&&r.push({severity:"error",parameter:"flags",message:a}),"string"==typeof e)try{new RegExp(e,"string"==typeof t&&void 0===a?t:"")}catch(e){r.push({severity:"error",parameter:"pattern",message:`pattern does not compile: ${e.message}`})}return r},evaluate:({value:e,pattern:t,flags:r,mode:a,noMatchDefault:n})=>{const o=Xo(r);if(void 0!==o)throw new Xa(o);const s=e=>{try{return new RegExp(t,r+e)}catch(e){throw new Xa(`pattern does not compile: ${e.message}`)}};switch(a){case"test":return s("").test(e);case"extract":{const t=s("").exec(e);return null===t?n.evaluate():t[0]}case"match":return[...e.matchAll(s("g"))].map(e=>e[0])}}},{name:"length",category:"array",parameters:{value:{type:["string","array","null"]}},positionalParams:["...value"],returns:"integer",evaluate:({value:e})=>"string"==typeof e?xe(e).length:e.length},{name:"map",category:"array",parameters:{input:Yo,as:Zo,nullInputDefault:es,each:{type:"any",evaluation:"perElement",over:"input"}},positionalParams:["input","each"],returns:"array",validate:go,evaluate:({each:e})=>jo(e.settle())},{name:"filter",category:"array",parameters:{input:Yo,as:Zo,nullInputDefault:es,each:ts},positionalParams:["input","each"],returns:"array",validate:go,evaluate:async({input:e,each:t})=>{const r=await jo(t.settle());return e.filter((e,t)=>r[t])}},{name:"find",category:"array",parameters:{input:Yo,as:Zo,nullInputDefault:es,each:ts,noMatchDefault:{type:"any",default:null,evaluation:"lazy"}},positionalParams:["input","each"],validate:go,evaluate:async({input:e,each:t,noMatchDefault:r})=>{const a=new Array(e.length);let n=0;for await(const r of t.settle()){a[r.index]=r;for(let t=a[n];void 0!==t;t=a[n]){if(!t.ok)throw t.error;if(!0===t.value)return e[n];n+=1}}return r.evaluate()}},{name:"some",category:"array",parameters:{input:Yo,as:Zo,nullInputDefault:es,each:ts},positionalParams:["input","each"],returns:"boolean",validate:go,evaluate:({each:e})=>$o(e.settle(),!0)},{name:"every",category:"array",parameters:{input:Yo,as:Zo,nullInputDefault:es,each:ts},positionalParams:["input","each"],returns:"boolean",validate:go,evaluate:({each:e})=>$o(e.settle(),!1)},rs,ns,{name:"convert",category:"other",parameters:{value:{type:"any",nullPolicy:e=>"boolean"===e?"value":"propagate"},to:{type:{literal:["number","string","boolean","array"]}}},positionalParams:["value","to"],returns:["number","string","boolean","array"],evaluate:({value:e,to:t})=>{switch(t){case"number":if("number"==typeof e)return e;if("boolean"==typeof e)return e?1:0;if("string"==typeof e){const t=e.trim(),r=""===t?NaN:Number(t);if(Number.isNaN(r))throw new Xa(`'${e}' is not a numeric string — use regex to extract a number from text`);return r}throw ss(e,"number");case"string":if(Array.isArray(e)||q(e))throw new Xa(`cannot convert ${B(e)} to string — a cast is not a render; use buildString or join`);if("object"==typeof e)throw ss(e,"string");return he(e);case"boolean":if("string"==typeof e){const t=e.trim().toLowerCase();if("true"===t)return!0;if("false"===t)return!1}return ue(e);case"array":return Array.isArray(e)?e:[e]}}}].map(ao),ls="3.0.0-preview.14",cs=(e,t)=>{const r=((e,t)=>{const r={...e};for(const[e,a]of Object.entries(t)){if(void 0===a)continue;if(null===a){delete r[e];continue}if("data"===e||!n(a)){r[e]=a;continue}const t=r[e],o=n(t)?{...t}:{};for(const[e,t]of Object.entries(a))void 0!==t&&(null===t?delete o[e]:o[e]=t);r[e]=o}return r})(null===e?{}:e.options,t);xs(r);const a=us(r);if(null!==e&&!(e=>void 0!==e.operators||void 0!==e.fragments||void 0!==e.operatorDefaults)(t))return{options:r,evaluation:a,registry:e.registry,compileCache:e.compileCache};const o=Zr({operators:r.operators??[is],...void 0!==r.operatorDefaults?{operatorDefaults:r.operatorDefaults}:{},...void 0!==r.fragments?{fragments:r.fragments}:{}});return{options:r,evaluation:a,registry:o,compileCache:new Lr({compile:e=>ds(e,o),probe:Ce})}},us=e=>{const t={...e};return delete t.operators,delete t.fragments,t},ds=(e,t,r)=>{const a=Ue(e,t);return Yt(a,r),a.hasNoCache&&Ar(a),a};let ps;class fs{state;results;version=ls;constructor(e={}){const t=ps;ps=void 0,this.state=t?.state??cs(null,e),this.results=t?.results??new Un(Wn(this.state.options.cache))}static fromState(e,t){return ps={state:e,results:t},new fs}updateOptions(e={}){const t=cs(this.state,e),r=Wn(t.options.cache);this.state=t,this.results.configure(r)}with(e={}){const t=cs(this.state,e),r=Wn(t.options.cache);return fs.fromState(t,new Un(r,this.results.generation))}clearCache(){this.results.clear()}getOptions(){return(e=>{const t={};for(const[r,a]of Object.entries(e))t[r]=n(a)?{...a}:a;return t})(this.state.evaluation)}getOperators(){return[...this.state.registry.operators.values()].map(e=>{const{definition:t,hostDefaults:r}=e,a={name:t.name,category:t.category,parameters:Hn(t.parameters,r),restParam:t.restParam,timeoutParam:t.timeoutParam,cache:t.cache,returns:t.returns,hasValidate:void 0!==t.validate};return void 0!==t.alias&&(a.alias=t.alias),void 0!==t.metadata&&(a.metadata=t.metadata),void 0!==t.positionalParams&&(a.positionalParams=t.positionalParams),void 0!==r&&(!0===r.noCache&&(a.hostNoCache=!0),Object.hasOwn(r,"fallback")&&(a.hostFallback=r.fallback)),a})}getFragments(){return[...this.state.registry.fragments.values()].map(e=>{const t={name:e.name,parameters:Object.fromEntries(Object.entries(e.parameters).map(([e,t])=>[e,{...t}])),returns:e.returns,warnings:[...e.warnings],dependencies:Kn(e.dependencies),caches:e.caches};return void 0!==e.description&&(t.description=e.description),void 0!==e.metadata&&(t.metadata=e.metadata),t})}validate(e,t){let r,a=t;if(void 0!==t?.params){const{params:e,...n}=t;a=n,r={fragmentParams:ws(e)}}const n=void 0===a?this.state.evaluation:ks(this.state.evaluation,a),o=ds(e,this.state.registry,r),s=Zn(o,n,e=>e.issue);return{valid:!s.some(e=>"error"===e.severity),issues:s}}getDependencies(e){return Kn(Ue(e,this.state.registry).dependencies)}isEvaluable(e){const t=Ue(e,this.state.registry);return t.holes.length>0||t.hasErrors}evaluate(e,t){const{state:r}=this;return ms(r.evaluation,this.results,e,t,()=>r.compileCache.resolve(e),()=>ds(e,r.registry))}compile(e){const{state:t}=this;return gs(e,t.compileCache.resolve(e),t.evaluation,t.registry,this.results)}}const ms=async(e,t,r,a,n,o)=>{const s=void 0===a?e:ks(e,a),i=n(),l="inert"===i.kind&&!0===s.trace?{kind:"artifact",artifact:o()}:i;if("inert"===l.kind){if(void 0!==s.maxDepth&&l.depth>s.maxDepth){const e=Yn(l.depth,s.maxDepth);throw Os(e,[e])}return r}const{artifact:c}=l,u=Xn(c,s),d=u.find(e=>"error"===e.severity);if(void 0!==d)throw Os(d,u);const p=await Fn(c,s,t);return!0===s.trace?p:p.result};let hs;const vs=(e,t)=>hs?.(e,t);class ys{#t;#r;#a;#n;#o;#s;#i;constructor(e,t,r,a,n){this.#t=e,this.#r=t,this.#a=r,this.#n=a,this.#o=n,hs??=(e,t)=>{if("object"!=typeof e||null===e||!(#r in e))return;const r=void 0===t?e.#a:ks(e.#a,t);return{expression:e.#t,artifact:e.#l(),options:r}}}get expression(){return this.#t}get issues(){return this.#i??=this.#l().issues.map(e=>e.issue)}get hasErrors(){return this.#l().hasErrors}evaluate(e){return ms(this.#a,this.#o,this.#t,e,()=>this.#r,()=>this.#l())}getDependencies(){return Kn(this.#l().dependencies)}#l(){return"artifact"===this.#r.kind?this.#r.artifact:this.#s??=ds(this.#t,this.#n)}}const gs=(e,t,r,a,n)=>new ys(e,t,r,a,n),bs={data:0,signal:0,timeout:0,trace:0},ks=(e,t)=>{let r;for(const a in t){const n=t[a];if(void 0!==n){if(!Object.hasOwn(bs,a))throw $s(a);r??={...e},r[a]=n}}return void 0===r?e:(xs(t),r)},ws=t=>{if(!Array.isArray(t)||t.some(e=>"string"!=typeof e))throw new e({code:s.invalidOptions,message:"'params' must be an array of parameter names (strings)",path:[]});return new Set(t)},$s=t=>new e({code:s.invalidOptions,message:`'${t}' is not a per-call option — a call may supply data, signal, timeout and trace; configure the rest at construction or via updateOptions()`,path:[]}),xs=t=>{const{timeout:r,signal:a}=t;if(void 0!==r&&("number"!=typeof r||!Number.isFinite(r)||r<=0))throw new e({code:s.invalidOptions,message:"'timeout' must be a positive number of milliseconds",path:[]});if(void 0!==a&&!js(a))throw new e({code:s.invalidOptions,message:"'signal' must be an AbortSignal",path:[]})},js=e=>"object"==typeof e&&null!==e&&"boolean"==typeof e.aborted&&"function"==typeof e.addEventListener&&"function"==typeof e.removeEventListener,Os=(t,r)=>new e({code:t.code,message:t.message,path:t.path,...void 0!==t.operator?{operator:t.operator}:{},issues:r});export{ro as A,mo as B,ls as C,Zn as D,se as E,fs as F,fe as G,me as H,de as I,Pe as J,oe as O,to as R,re as a,_ as b,Q as c,ue as d,is as e,Ya as f,Re as g,vs as h,q as i,Xn as j,H as k,le as l,z as m,G as n,ee as o,ae as p,no as q,Ie as r,We as s,Me as t,Xa as u,Xt as v,fo as w,he as x,B as y,ao as z};