fig-tree-evaluator 3.0.0-preview.13 → 3.0.0-preview.15

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