fig-tree-evaluator 3.0.0-preview.13 → 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,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}},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: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!==Zr(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);Ke(a);const s=Lt(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,...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,paramNames:e.dependencies.paramNames,paramsDynamic:e.dependencies.paramsDynamic,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):"params"===a&&yt(e,s),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=wt(e,t,r,0,a);return Rt(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 zt(e,t,r,a,n);case"shorthand":return Ot(e,t,o.key,r,a,n);case"plain":return Tt(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 St(e,t,t.value,"value"in t,r,n);const i=Zr(e.registry,o);if(void 0===i){const a=T(o,Gt(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=Ft(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=jt(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]=bt(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]=bt(e,n,r,a))}void 0!==i&&e.scope.bindings.pop()}gt(e,t),pt(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=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?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=g(o,[c]),i.value=Array.isArray(i.value)?u:d(u)},dt=(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}},pt=(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=>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,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=ft(e,t,o,l))},ft=(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)=>{const r=t[0];void 0===r||r===p?e.paramsDynamic=!0:e.paramNames.add(String(r))},gt=(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);vt(e,a,"string"==typeof r.value?r.value:void 0,t.path)}catch{e.dynamic=!0}else e.dynamic=!0},bt=(e,t,r,a)=>{const n="lazyElements"===r||"race"===r;if("slice"===t.kind)return $t(e,t.elements,t.basePath,t.offset,a,n);if(n&&Array.isArray(t.value))return $t(e,t.value,t.path,0,a,!0);if("lazyEntries"===r){const r=xt(e,t,a);if(null!==r)return r}return He(e,t.value,t.path,a+1)},kt=(e,t)=>{const r=e.order++,a=t+1;return a>e.maxDepth&&(e.maxDepth=a),{order:r,containerDepth:a}},wt=(e,t,r,a,n)=>Array.from(t,(t,o)=>({key:o,rawChild:t,node:He(e,t,Ee(r,a+o),n+1)})),$t=(e,t,r,a,n,o)=>{const{order:s,containerDepth:i}=kt(e,n),l=wt(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 Rt(e,t,l,!0,!1,void 0,r,s)},xt=(e,t,r)=>{const a=t.value;if(!n(a)||m(a,e.recognizes))return null;const{order:o,containerDepth:s}=kt(e,r),{entries:i,vars:l,changed:c}=Vt(e,a,t.path,s,o,!0);if(i.every(e=>"constant"===e.node.kind))return Rt(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},jt=(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,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},Ot=(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 St(e,t,u,!0,a,o);if(c)return Et(e,t,i,u,a,n,o);const p=Zr(e.registry,i),m=ot(e,p,a,o);st(e,m,t,r,n);const h=[];return At(e,m,h,u,d,o),ct(e,m,h,n,o),m},At=(e,t,r,a,o,s)=>{if(Array.isArray(a))Dt(e,t,r,a,o,s);else if(!n(a)||m(a,e.recognizes))Pt(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)}},Pt=(e,t,r,a,n,o)=>{const s=v(t.entry.definition);null!==s?r.push({name:s,kind:"value",value:a,path:n}):Nt(e,t,n,o)},Dt=(e,t,r,a,n,o)=>{const s=t.entry.definition,i=h(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})},Nt=(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 Nt(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})},St=(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))},zt=(e,t,r,a,n)=>{const o=t.fragment;if("string"!=typeof o)return nt(e,t,"fragment",r,n);const i=Mt(e,o,r,a,n);return st(e,i,t,"fragment",a,(t,o)=>{"parameters"===t?qt(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},Et=(e,t,r,a,o,i,l)=>{const c=Mt(e,r,o,i,l);return st(e,c,t,`$${r}`,i),n(a)?qt(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},Mt=(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},qt=(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&&(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)},Ft=(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},Tt=(e,t,r,a,n)=>{const{entries:o,vars:s,changed:i}=Vt(e,t,r,a,n);return Rt(e,t,o,!1,i,s,r,n)},Vt=(e,t,r,a,n,o=!1)=>{let i,l=!1;const c=[],u=!o&&It(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),Gt(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=Ft(e,d,r,a,n),l=!0;else l=!0}return u&&e.unknownNodes--,{entries:c,vars:i,changed:l}},It=e=>{for(const t in e)if(t.startsWith("$")&&void 0!==e[t])return!0;return!1},Rt=(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 p={kind:"skeleton",skeleton:u,holes:c,path:i,order:l};return void 0!==o&&(p.vars=o),p},Lt=(e,t=[])=>{if("skeleton"===e.kind)for(const r of e.holes)Lt(r.node,t);else if("constant"!==e.kind){const r=Wt(e);t.push(void 0===r?{node:e}:{node:e,timeoutFallback:r})}return t},Wt=e=>{if("operator"===e.kind||"fragmentCall"===e.kind)return void 0!==e.fallback?Bt(e.fallback):"operator"===e.kind?e.entry.defaultFallback:e.entry?.timeoutFallback},Bt=e=>{if("constant"===e.kind)return{value:e.value};const t=[],r=Jt(e,[],t);return void 0===r?void 0:{value:r,reads:t}},Jt=(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=Jt(n.node,[...t,...n.at],r);if(void 0===e)return;a.push(e)}return We(e.skeleton,e.holes,a)},Ut=new WeakMap,Gt=e=>{const t=Ut.get(e.registry);if(void 0!==t)return t;const r=[...e.registry.operators.keys(),...e.registry.aliases.keys(),...e.registry.fragments.keys()];return Ut.set(e.registry,r),r},Kt=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 _t(e.value);default:return"any"}},_t=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"}},Ht=/*#__PURE__*/Object.freeze({parsePath:w,resolvePath:j,checkType:Q,checkConstraints:X,describeType:B,renderText:he,isTruthy:ue}),Qt=(e,t={})=>{Yt({artifact:e,context:t,varsFrames:[],iteratorFrames:[],fallbackFrames:[]},e.root),Fe(e.issues),e.hasErrors=Ve(e.issues)},Xt=(e,t,r,a,n,o,s)=>{Te(e.artifact.issues,t,r,a,n,o,s)},Yt=(e,t)=>{switch(t.kind){case"constant":case"invalid":return;case"reference":return void mr(e,t);case"skeleton":{const r=br(e,t.vars,t.path);for(const r of t.holes)Yt(e,r.node);return void kr(e,r)}case"fragmentCall":return void pr(e,t);case"elements":for(const r of t.nodes)Yt(e,r);return;case"entries":{const r=br(e,t.vars,t.path);for(const r in t.entries)Yt(e,t.entries[r]);return void kr(e,r)}case"operator":return void er(e,t)}return t},Zt=(e,t,r)=>{const a={referenced:!1};e.fallbackFrames.push(a),Yt(e,r),e.fallbackFrames.pop(),a.referenced&&(t.fallbackReadsError=!0)},er=(e,t)=>{const r=br(e,t.vars,t.path);void 0!==t.fallback&&Zt(e,t,t.fallback);const a=t.entry.definition,n=dr(t);for(const[r,o]of a.resolution.entries){const a=t.params[r];void 0!==a?rr(e,n,r,o,a,tr(t,r)):o.required&&Xt(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]):Yt(e,n)}if(o.length>0){const r={as:Ie(t),referenced:!1};e.iteratorFrames.push(r);for(const[,t]of o)Yt(e,t);e.iteratorFrames.pop(),r.referenced||Xt(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})}kr(e,r)},tr=(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},rr=(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&&Xt(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 Xt(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=nr(a,n,o);void 0!==c&&Xt(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&&ar(e,t,r,a,u,o));const c=nr(a,n,o);void 0!==c&&Xt(e,"warning",s.fallbackMismatch,`this fallback can never satisfy ${l}: ${c.reason}`,n.path,n.order,i),u=n}},ar=(e,t,r,a,n,o)=>{const i=n.entry.defaultFallback;if(void 0===i)return;const l=or(a,i,o);void 0!==l&&Xt(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})},nr=(e,t,r)=>{switch(t.kind){case"constant":return ur(e,t.value,r);case"operator":case"fragmentCall":{if("fragmentCall"===t.kind&&void 0===t.entry)return;const r=Kt(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 ir(e,Array.isArray(t.skeleton)?[]:{});case"reference":return"error"===t.namespace?sr(e,t.segments):void 0;default:return}},or=(e,{value:t,reads:r},a)=>void 0===r?ur(e,t,a):0===r[0].at.length?sr(e,r[0].segments):ir(e,Array.isArray(t)?[]:{}),sr=(e,t)=>{const r=cr(t);if(void 0!==r&&!O(r,e.type))return ir(e,lr[r])},ir=(e,t)=>{const r=Q(t,e.type);if(!r.ok)return{code:s.typeCheck,reason:`expected ${r.expected}, received ${r.actual}`}},lr={object:{},array:[],string:"",number:0,boolean:!1},cr=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},ur=(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}`}},dr=e=>({label:e.name,extra:{operator:e.name}}),pr=(e,t)=>{const r=br(e,t.vars,t.path);void 0!==t.fallback&&Zt(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?rr(e,r,o,i,l):i.required&&Xt(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));Xt(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)Yt(e,n[t]);else void 0!==t.parameters&&Yt(e,t.parameters);kr(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,Ht)}catch(r){return void Xt(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;Xt(e,r.severity,s.operatorValidate,r.message,a?.path??t.path,t.order,{operator:t.name,parameter:r.parameter})}},mr=(e,t)=>{const{namespace:r}=t;switch(r){case"data":return;case"vars":return void hr(e,t);case"params":return void vr(e,t);case"element":case"index":return void yr(e,t,r);case"error":return void gr(e,t)}return r},hr=(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}}Xt(e,"error",s.unresolvedVar,`'${t.raw}': no var '${a??""}' is declared in scope`,t.path,t.order)},vr=(e,t)=>{const r=e.context.fragmentParams,a=t.segments[0],n="string"==typeof a?a:void 0;if(void 0===r)return void Xt(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);Xt(e,"error",s.unresolvedParam,`'${t.raw}': the fragment declares no parameter '${String(a)}'${V(o)}`,t.path,t.order,{parameter:n,suggestion:o})},yr=(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||Xt(e,"error",s.unresolvedBinding,`'${t.raw}' resolves against no enclosing iterator here`,t.path,t.order)},gr=(e,t)=>{const r=e.fallbackFrames.at(-1);void 0===r?t.scopeUnknown||Xt(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},br=(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)){Xt(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,Yt(e,r.node),a.currentVar=null;return a},kr=(e,t)=>{if(null!==t){e.varsFrames.pop();for(const[r,a]of t.names)a.referenced||Xt(e,"warning",s.unreferencedVar,`'${r}' is declared but never referenced in its scope`,a.declaredAt,a.order);wr(e,t)}},wr=(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]);Xt(e,"error",s.varCycle,i,l.declaredAt,l.order)})},$r={capable:!1,effective:!1,disabled:[]},xr={capable:!0,effective:!0,disabled:[]},jr=e=>{const{effective:t}=Or(e,e.root,!1);return Fe(e.issues),t},Or=(e,t,r)=>{switch(t.kind){case"constant":case"reference":return $r;case"invalid":return xr;case"skeleton":case"elements":case"entries":return Nr(e,qe(t),r);case"operator":return Ar(e,t,Hr(t.entry),r);case"fragmentCall":return Ar(e,t,t.entry?.caches??!0,r)}return t},Ar=(e,t,r,a)=>{const n=!0===t.noCache,o=Nr(e,qe(t),a||n),s=r||o.capable,i=Pr(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 ${Dr(l)}`:"'noCache' is dead — nothing beneath this node caches"),{capable:s,effective:!n&&(r||o.effective),disabled:l}},Pr=e=>"operator"===e.kind&&e.entry.definition.cache&&!Hr(e.entry)?e.entry.definition.name:void 0,Dr=e=>I([...new Set(e)].map(e=>`'${e}'`)),Nr=(e,t,r)=>{const a={capable:!1,effective:!1,disabled:[]};for(const n of t){const{capable:t,effective:o,disabled:s}=Or(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 Sr{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 zr=Symbol("fig-tree:lazy-handle"),Er="~",Mr=(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=Mr(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=Mr(e[r],t+1);if("json"!==a)return a}return"json"},qr=(e,t)=>Fr(e,0,t)?t.join(""):void 0,Fr=(e,t,r)=>{if(t>o)return!1;if(null===e)return Vr(r,"n");if(void 0===e)return Vr(r,"u");switch(typeof e){case"boolean":return Vr(r,e?"t":"f");case"number":return Tr(e,r);case"string":return Vr(r,`s${e.length}:${e}`);case"object":break;default:return!1}if(Array.isArray(e)){r.push("[");for(const a of e)if(!Fr(a,t+1,r))return!1;return Vr(r,"]")}if(!n(e)||zr in e)return!1;r.push("{");for(const a in e)if(r.push(`s${a.length}:${a}`),!Fr(e[a],t+1,r))return!1;return Vr(r,"}")},Tr=(e,t)=>Number.isNaN(e)?Vr(t,"N"):e===1/0?Vr(t,"I"):e===-1/0?Vr(t,"J"):Object.is(e,-0)?Vr(t,"#-0"):Vr(t,`#${String(e)}`),Vr=(e,t)=>(e.push(t),!0);class Ir{deps;identity=new WeakMap;content=new Sr(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=Mr(e,0);return"json"===t?JSON.stringify(e):"serializer"===t?qr(e,[Er]):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 Rr=/*#__PURE__*/new Set(["type","required","default","description","metadata","constraints"]),Lr=/*#__PURE__*/new Set(["expression","parameters","description","metadata","samples"]),Wr=(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))Lr.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=Br(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},Br=(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))Rr.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},Jr=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=Kt(n),t.delete(e.name),r.add(e.name)};for(const t of e.fragments.values())a(t)},Ur=(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])),Gr=(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=jr(s),o.timeoutFallback=Kr(n,s,e.fragments)};for(const e of t.keys())a(e)},Kr=(e,t,r)=>{const{root:a,holes:n}=t;if(0===n.length)return;const o=[];for(const e of n){const t=_r(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}},_r=(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},Hr=e=>e.definition.cache&&!0!==e.hostDefaults?.noCache,Qr=["fallback","noCache"],Xr=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&&Yr(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=Wr(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)}Jr(t);for(const[e,r]of t.fragments){const t=n.get(e);Qt(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])}Ur(n,a)&&Gr(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},Yr=(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(Qr.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"])},Zr=(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},ea="fig-tree:scope-settled",ta="fig-tree:request-expired",ra="fig-tree:evaluation-timeout";class aa{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?ea:this.parent?.reason}get signal(){if(void 0===this.controller){const e=new AbortController;if(this.controller=e,this.settled)e.abort(ea);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(ea)))}}const na=(e,t,r=E)=>({get aborted(){return e.aborted},get reason(){return e.reason},signal:e,clock:t,settle:r}),oa=(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(ea)}}},sa=(e,t)=>oa(e,t,ta),ia=(e,t)=>(r,a)=>{const n=(o=[e.operator,e.fingerprint,r],qr(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)},la=/*#__PURE__*/Object.freeze({}),ca=(e,t)=>!0!==t||!0===e.noCache?e:{...e,noCache:t};class ua{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 da={memo:(e,t)=>t()},pa={note:E},fa=Symbol("fig-tree:internal-error"),ma=e=>Oa(`[fig-tree internal] ${e}`,fa),ha=e=>ma(`${e} reached evaluation — the static gate should have refused it`),va=(t,r,a,n)=>new e({code:r,message:`${t.name} – ${a}`,path:Me(t.path),operator:t.name,errorData:n}),ya=e=>Pa(e,fa),ga=Symbol("fig-tree:cancelled"),ba=()=>Oa("[fig-tree] evaluation cancelled",ga),ka=e=>Pa(e,ga),wa=(e,t,r)=>e.rootScope.aborted?$a(e.rootScope.reason,t,r):e.abortScope.aborted?ba():void 0,$a=(e,t,r)=>e===ea?ba():xa(e,Me(t),{operator:r}),xa=(t,r,a={})=>{const{operator:n,ms:o}=a,i=t===ra,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}:{}})},ja=e=>ya(e)||ka(e)||(e=>N(e)&&(e.code===s.aborted||e.code===s.timeout))(e),Oa=(e,t)=>{const r=new Error(e);return Aa(r,t),r},Aa=(e,t)=>{e[t]=!0},Pa=(e,t)=>e instanceof Error&&!0===e[t],Da=()=>performance.now(),Na=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=qa(e),l=Fa(e),c={path:Me(e.path),kind:Ea(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:Da()}),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=Da()-u.started,s(c,{type:"shielded-fallback"});const d=Ma(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=>Sa(e.node).filter(t=>!e.seen.has(t)).map(e=>({entry:{path:Me(e.path),kind:Ea(e),status:"skipped"},order:e.order,index:0})),Sa=e=>{const t=qe(e).flatMap(za);return"fragmentCall"===e.kind&&void 0!==e.entry&&t.push(e.entry.body),t},za=e=>"elements"===e.kind||"entries"===e.kind?Sa(e):[e],Ea=e=>{switch(e.kind){case"operator":return"operator";case"fragmentCall":return"fragment";case"reference":return"reference";case"skeleton":return"skeleton";default:return"literal"}},Ma=e=>"operator"===e.kind||"fragmentCall"===e.kind?e.fallback:void 0,qa=e=>"operator"===e.kind||"fragmentCall"===e.kind?e.name:void 0,Fa=e=>"reference"===e.kind?e.raw:void 0,Ta=async(e,t,r,a,n)=>{let o;try{o=await e()}catch(e){if(ja(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},Va=(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},Ia=async(e,t,r,a,n)=>{const o={...r,params:"dynamic"===e.argumentsMode?await La(e,t,a):Ra(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},Ra=(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 Wa(e,o,s,r);let a;try{a=await Cn(t,r)}catch(e){throw Ga(e,r.frame)}return Ba(e,o,s,a,t.path,r)});n.set(o,()=>{const e=i();return e.catch(E),e})}return n},La=async(e,t,r)=>{const a=e.parameters;let n;try{n=await Cn(a,r)}catch(e){throw Ga(e,r.frame)}if(!q(n))throw Ga(Ja(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)?Ba(e,s,i,n[s],a.path,r):Wa(e,s,i,r,a.path);o.set(s,()=>Promise.resolve(t))}return o},Wa=(e,t,r,a,n=e.path)=>{if(!r.required)return r.default??null;throw Ga(Ja(e,s.missingRequired,`requires '${t}'`,n),a.frame)},Ba=(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 Ga(Ja(e,s.typeCheck,`parameter '${t}': expected ${l.expected}, received ${l.actual}`,n),o.frame);return i},Ja=(t,r,a,n)=>new e({code:r,message:`fragment '${t.name}' – ${a}`,path:Me(n)}),Ua=Symbol("fig-tree:anchored"),Ga=(e,t)=>!N(e)||Pa(e,Ua)?e:(Aa(e,Ua),void 0===t?e:Object.assign(e,Ka(e,t))),Ka=(e,t)=>({fragment:t.fragment,fragmentPath:e.path,path:Me(t.callPath)}),_a=(e,t)=>{const r=void 0===t||Pa(e,Ua)?e:Ka(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 Ha 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 Qa=e=>e instanceof Ha,Xa=(e,t,r)=>Za(Array.from({length:e},(e,a)=>Ya(a,()=>t(a),r)),e),Ya=async(e,t,r)=>{try{return{index:e,ok:!0,value:r(await t())}}catch(t){return{index:e,ok:!1,error:t}}},Za=(e,t)=>{const r=new Map(e.map((e,t)=>[t,e]));return{[zr]:!0,length:t,async*[Symbol.asyncIterator](){for(;r.size>0;){const e=await Promise.race(r.values());r.delete(e.index),yield e}}}},en=e=>({[zr]:!0,evaluate:R(e)}),tn=e=>({[zr]:!0,evaluate:()=>Promise.resolve(e)}),rn=(e,t,r,a,n)=>en(async()=>an(await Cn(e,n),t,r,a)),an=(e,t,r,a)=>{const n=ne(e,a);if(!n.ok)throw cn(t,r,n);return a.truthiness?fn(e,a.type):e},nn=(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()=>an(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{[zr]:!0,evaluate:c,settle:()=>Xa(s.length,c,e=>e)}},on=(e,t)=>t.truthiness?ue(e):e,sn=(e,t,r)=>{if("lazyElements"===t.evaluation&&"elements"===e.kind)return e.nodes.map((e,a)=>en(async()=>on(await Cn(e,r,{index:a}),t)));if("race"===t.evaluation&&"elements"===e.kind)return((e,t,r)=>Xa(e.length,r=>Cn(e[r],t,{index:r}),r))(e.nodes,r,e=>on(e,t));if("lazyEntries"===t.evaluation&&"entries"===e.kind){const a=Va(r,e.vars),n={};for(const[r,o]of Object.entries(e.entries))n[r]=en(async()=>on(await Cn(o,a),t));return n}},ln=(e,t)=>{switch(t.evaluation){case"lazyElements":return e.map(e=>tn(on(e,t)));case"race":return((e,t)=>Xa(e.length,t=>Promise.resolve(e[t]),t))(e,e=>on(e,t));case"lazyEntries":{const r={};for(const[a,n]of Object.entries(e))r[a]=tn(on(n,t));return r}case"lazy":return tn(e);default:return e}},cn=(e,t,r)=>va(e,s.typeCheck,`parameter '${t}': expected ${r.expected}, received ${r.actual}`),un=(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 cn(e,a.selector,s);return a.table.find(e=>e.value===o).policy},dn=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},pn=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)},mn=(e,t)=>0===e.segments.length?t.data:wn(t.data,e.segments,e,t,"is absent from the evaluation data"),hn=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 ha(`'${e.raw}'`);const o=await n();return 0===a.length?$n(o):wn(o,a,e,t,`is absent from the value of '$vars.${r}'`)},vn=async(e,t)=>{const r=t.params;if(void 0===r)throw ha(`'${e.raw}'`);const[a,...n]=e.segments;if(void 0===a){const e={};return await Promise.all([...r].map(async([t,r])=>{e[t]=$n(await r())})),e}const o="string"==typeof a?r.get(a):void 0;if(void 0===o)throw ha(`'${e.raw}'`);const s=await o();return 0===n.length?$n(s):wn(s,n,e,t,`is absent from the value of '$params.${String(a)}'`)},yn=(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 ha(`'${e.raw}'`);return"index"===r?a.index:0===e.segments.length?$n(a.element):wn(a.element,e.segments,e,t,`is absent from '${e.raw.split(".")[0]}'`)},gn=(e,t)=>{if(void 0===t.caught)throw ha(`'${e.raw}'`);return bn(_a(t.caught,t.frame),e.segments)},bn=(e,t)=>{if(0===t.length)return e;const r=j(e,t);return r.found?$n(r.value):null},kn=(e,t,r)=>{const{value:a,reads:n}=e;if(void 0===n)return a;const o=_a(t,r),s=n.map(({segments:e,within:t})=>bn(void 0===t?o:{...o,...t},e));return 0===n[0].at.length?s[0]:We(a,n,s)},wn=(t,r,a,n,o)=>{const i=j(t,r);if(i.found)return $n(i.value);if(!n.strictDataPaths)return null;throw new e({code:s.missingDataPath,message:`'${a.raw}' ${o} (strictDataPaths)`,path:Me(a.path)})},$n=e=>void 0===e?null:e,xn=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]=rn(n,e,r,o,t));break;case"lazyElements":case"lazyEntries":case"race":{if(void 0===n)break;const e=sn(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 dn(a,r,n));const o="eager"!==r.evaluation&&"structural"!==r.evaluation;if(null===a&&G(r.type)&&!o&&"propagate"===un(e,r,c))return{params:d,propagate:!0};if("propagate"===r.elementNullPolicy&&pn(a))return{params:d,propagate:!0};a=an(a,e,t,r),d[t]=ln(a,r)}for(const[r,a]of s){const n=e.params[r];void 0!==n&&(d[r]=nn(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&&Hr(e.entry),s=On(n,r),i=void 0===s?void 0:sa(t.abortScope.signal,s),l=void 0===i?t:{...t,abortScope:na(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 ua(e.abortScope,e.options,r?{memo:ia({operator:t.name,fingerprint:t.fingerprint,note:a},e.cache)}:da,void 0===a?pa:{note:a}))(l,n,o,c);try{return await jn(e,t,r,u,i)}catch(r){throw An(r,e,t,i,s)}finally{i?.settle()}},jn=async(e,t,r,a,n)=>{const o=wa(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?Dn(await s,e):(s.catch(E),Dn(await Promise.race([s,n.expiry]),e))},On=(e,t)=>{const r=e.timeoutParam;if(null===r)return;const a=t[r];return"number"==typeof a&&a>0?a:void 0},An=(e,t,r,a,n)=>{if(ya(e)||ka(e))return e;const o=wa(r,t.path,t.name);return void 0!==o?o:a?.signal.reason===ta?new Ha(`request exceeded its ${String(n)}ms timeout`,{code:s.requestTimeout}):e},Pn=(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?()=>kn(n,r,t.frame):void 0},Dn=(e,t)=>{if(void 0===e)return null;if("number"==typeof e&&!Number.isFinite(e))throw va(t,s.nonFiniteResult,`produced a non-finite number (${String(e)})`);if("object"==typeof(r=e)&&null!==r&&!0===r[zr])throw va(t,s.escapedHandle,"returned a lazy handle instead of evaluating it");var r;return e},Nn=(e,t)=>{if(N(e))return e;const r=Qa(e)?e:void 0;return va(t,r?.code??s.operatorFailure,e instanceof Error?e.message:String(e),r?.errorData)},Cn=(e,t,r)=>void 0!==t.trace?Sn(e,t,t.trace,r):t.abortScope.aborted?Promise.reject(wa(t,e.path)):zn(e,t),Sn=async(e,t,r,a)=>{const n=r.enter(e,t.traceParent,t.frame,a),o=Da();try{if(t.abortScope.aborted)throw wa(t,e.path);const a=await zn(e,{...t,traceParent:n});return r.settle(n,"value",{value:a,elapsed:Da()-o}),a}catch(e){throw r.settle(n,ka(e)?"cancelled":"failed",{...N(e)?{error:e}:{},elapsed:Da()-o}),e}},zn=(e,t)=>{try{switch(e.kind){case"constant":return e.value;case"reference":return((e,t)=>{switch(e.namespace){case"data":return mn(e,t);case"vars":return hn(e,t);case"params":return vn(e,t);case"element":case"index":return yn(e,t);case"error":return gn(e,t)}})(e,t);case"skeleton":return En(e,t);case"operator":return(async(e,t)=>{const r=Va(ca(t,e.noCache),e.vars),a=e.entry.definition.deliversLazily?new aa(r.abortScope):void 0,n=void 0===a?r:{...r,abortScope:a};try{try{return await xn(e,n)}finally{a?.settle()}}catch(a){if(ja(a))throw a;const n=Nn(a,e),o=Pn(e,r,n);if(void 0===o)throw n;return Ta(o,n,e.fallbackReadsError,t=>Nn(t,e),t)}})(e,t);case"fragmentCall":return(async(e,t)=>{const{entry:r}=e;if(void 0===r)throw ha(`fragment call '${e.name}'`);const a=Va(ca(t,e.noCache),e.vars),n=new aa(a.abortScope),o={fragment:e.name,callPath:t.frame?.callPath??e.path},s={...a,abortScope:n};try{try{return await Ia(e,r,s,a,o)}finally{n.settle()}}catch(r){if(ja(r))throw r;const n=Ga(r,o),{fallback:s}=e;if(void 0===s)throw n;const i=N(n)?{...a,caught:n}:a;return Ta(()=>Cn(s,i),n,e.fallbackReadsError,e=>Ga(e,t.frame),t)}})(e,t);default:throw ma(`a '${e.kind}' node reached the node dispatch`)}}catch(e){return Promise.reject(e)}},En=async(e,t)=>{const r=t.rootBoundary,a=void 0===r?t:{...t,rootBoundary:void 0},n=Va(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)},Mn=async(e,t,r)=>{const{timeout:a,signal:n}=t,o=e.holes.length>0,s=void 0!==a||void 0!==n?oa(n,a,ra):void 0,i=void 0!==s?((e,t)=>{const r={epoch:0};return e.addEventListener("abort",()=>{r.epoch+=1},{once:!0}),na(e,r,t)})(s.signal,s.settle):new aa(void 0),l=void 0!==s&&void 0!==a&&e.timeoutShielded&&o,c=!0===t.trace?Na(e.issues.map(e=>e.issue).filter(e=>"error"!==e.severity)):void 0,u=((e,t,r,a)=>({options:e,data:e.data??la,abortScope:r,rootScope:r,cache:t,strictDataPaths:e.strictDataPaths??!1,...void 0!==a?{trace:a}:{}}))(t,r,i,c),d=l?Fn(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 xa(i.reason,[]);const t=()=>p&&void 0!==d?d(()=>Cn(e.root,f),e.root):Cn(e.root,f),r=await(l||void 0===s?t():qn(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()}},qn=(e,t,r)=>Promise.race([e(),t.expiry.catch(e=>{throw xa(e,[],{ms:r})})]),Fn=(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!==ra)throw xa(e,[]);if(i)return;const t=Tn(s,e,r),n=Vn(s,t);return a?.markShielded(s.node,t,n),n})])}},Tn=(e,t,r)=>{const{node:a}=e,n="operator"===a.kind?a.name:void 0;return xa(t,Me(a.path),{operator:n,ms:r})},Vn=(e,t)=>kn(e.timeoutFallback,t,void 0),In={hit:!1},Rn=e=>{if(void 0===e)return{maxSize:50,maxTime:1800};if(!n(e))throw Wn("'cache' must be an object");const{store:t,maxSize:r,maxTime:a}=e;if(void 0!==t&&!Ln(t))throw Wn("'cache.store' must provide get, set, delete and clear methods");if(void 0!==r&&(!Number.isInteger(r)||r<1))throw Wn("'cache.maxSize' must be a positive integer");if(void 0!==a&&("number"!=typeof a||a<=0||Number.isNaN(a)))throw Wn("'cache.maxTime' must be a positive number of seconds, or Infinity");return{...void 0!==t?{store:t}:{},maxSize:r??50,maxTime:a??1800}},Ln=e=>"object"==typeof e&&null!==e&&["get","set","delete","clear"].every(t=>"function"==typeof e[t]),Wn=t=>new e({code:s.invalidOptions,message:t,path:[]});class Bn{store;own;maxTime;current;constructor(e,t=0){this.current=t,void 0===e.store?(this.own=new Sr(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 In}return n(r=t)&&"ft3"===r.fig&&"number"==typeof r.generation?t.generation<this.current||Jn(t)?(this.drop(e),In):{hit:!0,value:t.value}:In;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 Sr(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 Jn=e=>void 0!==e.expiresAt&&e.expiresAt<=Date.now(),Un=e=>e===p?0:"number"==typeof e?1:2,Gn=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=Un(r)-Un(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]}),Kn=(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},_n=(e,t)=>{const r=[];return void 0!==t.maxDepth&&e.maxDepth>t.maxDepth&&r.push(Qn(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},Hn=(e,t)=>e.hasErrors||void 0!==t.maxDepth||void 0!==t.maxNodes?[..._n(e,t),...e.issues.map(e=>e.issue)]:[],Qn=(e,t)=>({severity:"error",code:s.maxDepthExceeded,message:`the expression nests ${e} levels deep — maxDepth is ${t}`,path:[]}),Xn=(e,t,r)=>{const a=[..._n(e,t),...e.issues.map(r)];return void 0!==t.data&&a.push(...Yn(e.dataReads,t.data)),a},Yn=(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},Zn="...",eo=e=>e,to=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 ro(e,a)},ro=(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:oo(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=so(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(Zn)?a.slice(3):null,o={[ie]:!0,name:e.name,category:e.category,parameters:r,resolution:io(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?oo(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=so(e.analysis)),o.fingerprint=ao(o),lo(o)},ao=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,no(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)),no=e=>{const t={...e};return delete t.metadata,t},oo=e=>"string"==typeof e?e:t(e)?{literal:[...e.literal]}:[...e],so=e=>{if(Array.isArray(e))return e.map(so);if(q(e)){const t={};for(const[r,a]of Object.entries(e))t[r]=so(a);return t}return e},io=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)}},lo=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&&co(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)},co=e=>{Array.isArray(e)?(e.forEach(co),Object.freeze(e)):q(e)&&(Object.values(e).forEach(co),Object.freeze(e))},uo=e=>{if(Array.isArray(e))return e;try{return w(e)}catch(e){throw new Ha(e.message)}},po=(e,t)=>{if("string"!=typeof e)return[];try{return w(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"}]:[],mo=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`}]:[]},ho=/*#__PURE__*/mo("values"),vo=/*#__PURE__*/mo("input"),yo=/*#__PURE__*/mo("entries"),go=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"}]:[],bo=(e,t)=>new Ha(`${e} of nothing — the values array is empty${void 0!==t?`; ${t}`:""}`,{code:s.emptyAggregate}),ko=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),wo(r);return!t},wo=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},$o=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)},xo=(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))},jo={values:{type:"array",elementNullPolicy:"value"},caseInsensitive:{type:"boolean",default:!1}},Oo={name:"equal",alias:"=",category:"comparison",parameters:jo,positionalParams:["...values"],returns:"boolean",validate:go,evaluate:({values:e,caseInsensitive:t})=>xo(e,t)},Ao={name:"notEqual",alias:"!=",category:"comparison",parameters:jo,positionalParams:["...values"],returns:"boolean",validate:go,evaluate:({values:e,caseInsensitive:t})=>!xo(e,t)},Po=(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))}}),Do=/*#__PURE__*/Po("greaterThan",">",e=>e>0),No=/*#__PURE__*/Po("greaterThanOrEqual",">=",e=>e>=0),Co=/*#__PURE__*/Po("lessThan","<",e=>e<0),So=/*#__PURE__*/Po("lessThanOrEqual","<=",e=>e<=0),zo={number:()=>0,string:()=>"",array:()=>[],object:()=>({})},Eo={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?ho({values:e}):fo({values:e}),evaluate:({values:e,expect:t})=>{if(0===e.length){if(void 0===t)throw bo("the sum","pin the mode with 'expect' to get its identity");return zo[t]()}const r=B(e[0]);if(void 0!==t&&r!==t)throw new Ha(`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)}}},Mo={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},qo={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},Fo={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},To={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:ho,evaluate:({values:e})=>e.reduce((e,t)=>e*t,1)},Vo={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},Io={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)},Ro=(e,t,r="number")=>({name:e,category:"math",parameters:{value:{type:["number","null"]}},positionalParams:["value"],returns:r,evaluate:({value:e})=>t(e)}),Lo=/*#__PURE__*/Ro("floor",Math.floor,"integer"),Wo=/*#__PURE__*/Ro("ceil",Math.ceil,"integer"),Bo=/*#__PURE__*/Ro("abs",Math.abs),Jo=(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 bo(t);return a.reduce((e,t)=>r(de(t,e))?t:e)}}),Uo=(e,t)=>({name:e,category:"string",parameters:{value:{type:["string","null"]}},positionalParams:["value"],returns:"string",evaluate:({value:e})=>t(e)}),Go={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}},Ko=e=>Array.isArray(e.values)&&e.values.some(ve)?[{severity:"error",parameter:"values",message:ye}]:[],_o={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=>[...ho(e),...Ko(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)},Ho=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}`},Qo={type:"array"},Xo={type:"string",required:!1,evaluation:"structural"},Yo={type:"array",required:!1,evaluation:"lazy",replacesNullAt:["input"]},Zo={type:"any",evaluation:"perElement",over:"input",truthiness:!0},es={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})=>po(e,"path"),evaluate:({path:e,from:t,default:r},a)=>{const n=j(t,uo(e));if(n.found)return n.value;if(void 0!==r)return r.evaluate();if(a.options.strictDataPaths)throw new Ha(`'${ts(e)}' is missing (strictDataPaths)`,{code:s.missingDataPath});return null}},ts=e=>"string"==typeof e?e:e.map(e=>String(e)).join("."),rs={name:"buildObject",category:"data",parameters:{entries:{type:"array",constraints:{elementShape:{key:{type:["string","number","boolean"]},value:{type:"any"}}}}},positionalParams:["...entries"],returns:"object",validate:e=>[...yo(e),...as(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}},as=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},ns=(e,t)=>new Ha(`cannot convert ${B(e)} to ${t}`),os=/*#__PURE__*/[{name:"and",category:"logic",parameters:{values:{type:"array",truthiness:!0,evaluation:"race"}},positionalParams:["...values"],returns:"boolean",validate:ho,evaluate:({values:e})=>ko(e,!1)},{name:"or",category:"logic",parameters:{values:{type:"array",truthiness:!0,evaluation:"race"}},positionalParams:["...values"],returns:"boolean",validate:ho,evaluate:({values:e})=>ko(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 Ha(`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:ho,evaluate:async({values:e})=>{for(const t of e){const e=await t.evaluate();if(null!==e)return e}return null}},Oo,Ao,Do,No,Co,So,Eo,Mo,To,qo,Fo,Vo,Io,Lo,Wo,Bo,/*#__PURE__*/Jo("min","the minimum",e=>e<0),/*#__PURE__*/Jo("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("")}},Go,_o,/*#__PURE__*/Uo("lower",e=>e.toLowerCase()),/*#__PURE__*/Uo("upper",e=>e.toUpperCase()),/*#__PURE__*/Uo("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?Ho(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=Ho(r);if(void 0!==o)throw new Ha(o);const s=e=>{try{return new RegExp(t,r+e)}catch(e){throw new Ha(`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:Qo,as:Xo,nullInputDefault:Yo,each:{type:"any",evaluation:"perElement",over:"input"}},positionalParams:["input","each"],returns:"array",validate:vo,evaluate:({each:e})=>$o(e.settle())},{name:"filter",category:"array",parameters:{input:Qo,as:Xo,nullInputDefault:Yo,each:Zo},positionalParams:["input","each"],returns:"array",validate:vo,evaluate:async({input:e,each:t})=>{const r=await $o(t.settle());return e.filter((e,t)=>r[t])}},{name:"find",category:"array",parameters:{input:Qo,as:Xo,nullInputDefault:Yo,each:Zo,noMatchDefault:{type:"any",default:null,evaluation:"lazy"}},positionalParams:["input","each"],validate:vo,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:Qo,as:Xo,nullInputDefault:Yo,each:Zo},positionalParams:["input","each"],returns:"boolean",validate:vo,evaluate:({each:e})=>ko(e.settle(),!0)},{name:"every",category:"array",parameters:{input:Qo,as:Xo,nullInputDefault:Yo,each:Zo},positionalParams:["input","each"],returns:"boolean",validate:vo,evaluate:({each:e})=>ko(e.settle(),!1)},es,rs,{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 Ha(`'${e}' is not a numeric string — use regex to extract a number from text`);return r}throw ns(e,"number");case"string":if(Array.isArray(e)||q(e))throw new Ha(`cannot convert ${B(e)} to string — a cast is not a render; use buildString or join`);if("object"==typeof e)throw ns(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(to),ss="3.0.0-preview.13",is=(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);ws(r);const a=ls(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=Xr({operators:r.operators??[os],...void 0!==r.operatorDefaults?{operatorDefaults:r.operatorDefaults}:{},...void 0!==r.fragments?{fragments:r.fragments}:{}});return{options:r,evaluation:a,registry:o,compileCache:new Ir({compile:e=>cs(e,o),probe:Ce})}},ls=e=>{const t={...e};return delete t.operators,delete t.fragments,t},cs=(e,t,r)=>{const a=Ue(e,t);return Qt(a,r),a.hasNoCache&&jr(a),a};let us;class ds{state;results;version=ss;constructor(e={}){const t=us;us=void 0,this.state=t?.state??is(null,e),this.results=t?.results??new Bn(Rn(this.state.options.cache))}static fromState(e,t){return us={state:e,results:t},new ds}updateOptions(e={}){const t=is(this.state,e),r=Rn(t.options.cache);this.state=t,this.results.configure(r)}with(e={}){const t=is(this.state,e),r=Rn(t.options.cache);return ds.fromState(t,new Bn(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:Kn(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:Gn(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:bs(e)}}const n=void 0===a?this.state.evaluation:gs(this.state.evaluation,a),o=cs(e,this.state.registry,r),s=Xn(o,n,e=>e.issue);return{valid:!s.some(e=>"error"===e.severity),issues:s}}getDependencies(e){return Gn(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 ps(r.evaluation,this.results,e,t,()=>r.compileCache.resolve(e),()=>cs(e,r.registry))}compile(e){const{state:t}=this;return vs(e,t.compileCache.resolve(e),t.evaluation,t.registry,this.results)}}const ps=async(e,t,r,a,n,o)=>{const s=void 0===a?e:gs(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=Qn(l.depth,s.maxDepth);throw xs(e,[e])}return r}const{artifact:c}=l,u=Hn(c,s),d=u.find(e=>"error"===e.severity);if(void 0!==d)throw xs(d,u);const p=await Mn(c,s,t);return!0===s.trace?p:p.result};let fs;const ms=(e,t)=>fs?.(e,t);class hs{#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,fs??=(e,t)=>{if("object"!=typeof e||null===e||!(#r in e))return;const r=void 0===t?e.#a:gs(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 ps(this.#a,this.#o,this.#t,e,()=>this.#r,()=>this.#l())}getDependencies(){return Gn(this.#l().dependencies)}#l(){return"artifact"===this.#r.kind?this.#r.artifact:this.#s??=cs(this.#t,this.#n)}}const vs=(e,t,r,a,n)=>new hs(e,t,r,a,n),ys={data:0,signal:0,timeout:0,trace:0},gs=(e,t)=>{let r;for(const a in t){const n=t[a];if(void 0!==n){if(!Object.hasOwn(ys,a))throw ks(a);r??={...e},r[a]=n}}return void 0===r?e:(ws(t),r)},bs=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)},ks=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:[]}),ws=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&&!$s(a))throw new e({code:s.invalidOptions,message:"'signal' must be an AbortSignal",path:[]})},$s=e=>"object"==typeof e&&null!==e&&"boolean"==typeof e.aborted&&"function"==typeof e.addEventListener&&"function"==typeof e.removeEventListener,xs=(t,r)=>new e({code:t.code,message:t.message,path:t.path,...void 0!==t.operator?{operator:t.operator}:{},issues:r});export{eo as A,po as B,ss as C,Xn as D,se as E,ds as F,fe as G,me as H,de as I,Pe as J,oe as O,Zn as R,re as a,G as b,Q as c,ue as d,os as e,Qa as f,Re as g,ms as h,q as i,Hn as j,H as k,le as l,z as m,K as n,ee as o,ae as p,ro as q,Ie as r,We as s,Me as t,Ha as u,Ht as v,uo as w,he as x,B as y,to 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};
package/build/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare const version = "3.0.0-preview.13";
1
+ declare const version = "3.0.0-preview.14";
2
2
 
3
3
  interface HttpRequest {
4
4
  url: string;
@@ -628,7 +628,10 @@ type TypeSeeds = {
628
628
  interface CatalogCategory extends CategoryListing {
629
629
  name: OperatorCategory;
630
630
  }
631
+ type NullOutcome = 'propagate' | 'value' | 'unset' | 'error' | 'none';
631
632
  interface CatalogParameter extends ParameterInfo {
633
+ nullOutcome: NullOutcome | CompiledNullPolicy;
634
+ elementNullOutcome?: NullPolicyValue | 'error';
632
635
  description?: string;
633
636
  seed: unknown;
634
637
  }
@@ -738,7 +741,7 @@ type ResultShape<O> = O extends {
738
741
  declare class FigTree<InstanceOpts extends FigTreeOptions = NoOptions> {
739
742
  private state;
740
743
  private readonly results;
741
- readonly version = "3.0.0-preview.13";
744
+ readonly version = "3.0.0-preview.14";
742
745
  constructor(options?: InstanceOpts);
743
746
  private static fromState;
744
747
  updateOptions(options?: OptionsUpdate): void;
@@ -996,4 +999,4 @@ interface ShorthandOptions extends NameOptions {
996
999
  }
997
1000
 
998
1001
  export { ARRAY, AxiosClient, CompiledExpression, ErrorCodes, EvaluationData, FetchClient, FigTree, FigTreeError, OBJECT, OPERATOR_CATEGORIES, OperatorFailure, PostgresConnection, SQLiteConnection, WILDCARD, compareValues, coreOperators, deepEqual, defineOperator, httpFailure, httpOperators, inspect, isFigTreeError, isOperatorFailure, isTruthy, parsePath, renderText, resolvePath, sqlFailure, sqlOperators, version };
999
- export type { AxiosErrorLike, AxiosLike, BasicType, CacheStore, CacheTraceEvent, CallOptions, CanonicalOptions, Catalog, CatalogCategory, CatalogFragment, CatalogFragmentParameter, CatalogOperator, CatalogParameter, CategoryListing, CategoryListingMap, CompiledNullPolicy, ConditionalNullPolicy, Constraints, CoverageFinding, CoveredFinding, DeclaredOutput, Dependencies, EvaluationMode, EvaluationOptions, EvaluationResult, ExpectedType, FailureRule, FailureTest, FallbackCoverage, FallbackCoverageOptions, FallbackError, FallbackErrorCode, FetchLike, FetchResponseLike, FigTreeErrorCode, FigTreeErrorInit, FigTreeOptions, FragmentDefinition, FragmentInfo, FragmentMetadata, FragmentMigrationResult, FragmentParameter, FragmentParameterDeclaration, HttpClient, HttpFailureInfo, HttpRequest, InspectDependencies, InspectIssue, InspectNode, InspectReport, Issue, KeyOverwriteTraceEvent, KnownTraceEvent, LazyValue, LiteralType, Merge, MigrationIssue, MigrationResult, NameOptions, NoOptions, NullPolicy, NullPolicyValue, ObjectClass, OnlyCallOptions, OperatorAnalysis, OperatorCategory, OperatorContext, OperatorDefinition, OperatorEvaluate, OperatorFailureInit, OperatorInfo, OperatorListing, OperatorListingMap, OperatorValidate, OptionsUpdate, ParamValue, ParameterDeclaration, ParameterDeclarations, ParameterInfo, PathSegment, PerElement, PgClientLike, PositionalLayout, PositionalShape, QueryTraceEvent, ReferenceNamespace, ReferenceRecognition, ReferenceScope, Registry, RenderTraceEvent, RequestTraceEvent, ResolveResult, ResolvedParams, ResultShape, Settlement, SettlementStream, Severity, ShieldedFallbackTraceEvent, ShorthandOptions, Spelling, SqlConnection, SqlRequest, SqliteDatabaseLike, TraceEvent, TraceKind, TraceNode, TraceStatus, TypeCheckResult, TypeDeclaration, TypeOf, TypeSeeds, V2Options, ValidateFinding, ValidateHelpers, ValidateOptions, ValidatedOperatorDefinition, ValidatedParameter, ValidationResult, Wildcard };
1002
+ export type { AxiosErrorLike, AxiosLike, BasicType, CacheStore, CacheTraceEvent, CallOptions, CanonicalOptions, Catalog, CatalogCategory, CatalogFragment, CatalogFragmentParameter, CatalogOperator, CatalogParameter, CategoryListing, CategoryListingMap, CompiledNullPolicy, ConditionalNullPolicy, Constraints, CoverageFinding, CoveredFinding, DeclaredOutput, Dependencies, EvaluationMode, EvaluationOptions, EvaluationResult, ExpectedType, FailureRule, FailureTest, FallbackCoverage, FallbackCoverageOptions, FallbackError, FallbackErrorCode, FetchLike, FetchResponseLike, FigTreeErrorCode, FigTreeErrorInit, FigTreeOptions, FragmentDefinition, FragmentInfo, FragmentMetadata, FragmentMigrationResult, FragmentParameter, FragmentParameterDeclaration, HttpClient, HttpFailureInfo, HttpRequest, InspectDependencies, InspectIssue, InspectNode, InspectReport, Issue, KeyOverwriteTraceEvent, KnownTraceEvent, LazyValue, LiteralType, Merge, MigrationIssue, MigrationResult, NameOptions, NoOptions, NullOutcome, NullPolicy, NullPolicyValue, ObjectClass, OnlyCallOptions, OperatorAnalysis, OperatorCategory, OperatorContext, OperatorDefinition, OperatorEvaluate, OperatorFailureInit, OperatorInfo, OperatorListing, OperatorListingMap, OperatorValidate, OptionsUpdate, ParamValue, ParameterDeclaration, ParameterDeclarations, ParameterInfo, PathSegment, PerElement, PgClientLike, PositionalLayout, PositionalShape, QueryTraceEvent, ReferenceNamespace, ReferenceRecognition, ReferenceScope, Registry, RenderTraceEvent, RequestTraceEvent, ResolveResult, ResolvedParams, ResultShape, Settlement, SettlementStream, Severity, ShieldedFallbackTraceEvent, ShorthandOptions, Spelling, SqlConnection, SqlRequest, SqliteDatabaseLike, TraceEvent, TraceKind, TraceNode, TraceStatus, TypeCheckResult, TypeDeclaration, TypeOf, TypeSeeds, V2Options, ValidateFinding, ValidateHelpers, ValidateOptions, ValidatedOperatorDefinition, ValidatedParameter, ValidationResult, Wildcard };