fig-tree-evaluator 3.0.0-preview.12 → 3.0.0-preview.13
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.
- package/build/catalog/index.d.ts +17 -4
- package/build/chunks/engine.js +1 -1
- package/build/index.d.ts +107 -93
- package/build/index.js +1 -1
- package/build/migrate/index.d.ts +19 -1
- package/package.json +1 -1
package/build/catalog/index.d.ts
CHANGED
|
@@ -97,6 +97,10 @@ interface Dependencies {
|
|
|
97
97
|
paths: string[];
|
|
98
98
|
dynamic: boolean;
|
|
99
99
|
};
|
|
100
|
+
params: {
|
|
101
|
+
names: string[];
|
|
102
|
+
dynamic: boolean;
|
|
103
|
+
};
|
|
100
104
|
operators: string[];
|
|
101
105
|
fragments: string[];
|
|
102
106
|
}
|
|
@@ -112,7 +116,7 @@ interface OperatorInfo extends Omit<ValidatedOperatorDefinition, typeof VALIDATE
|
|
|
112
116
|
interface FragmentInfo {
|
|
113
117
|
name: string;
|
|
114
118
|
description?: string;
|
|
115
|
-
metadata?: Record<string, unknown>;
|
|
119
|
+
metadata?: FragmentMetadata & Record<string, unknown>;
|
|
116
120
|
parameters: Record<string, FragmentParameter>;
|
|
117
121
|
returns: ExpectedType;
|
|
118
122
|
warnings: Issue[];
|
|
@@ -123,14 +127,16 @@ interface FragmentInfo {
|
|
|
123
127
|
declare class FigTree<InstanceOpts extends FigTreeOptions = NoOptions> {
|
|
124
128
|
private state;
|
|
125
129
|
private readonly results;
|
|
126
|
-
readonly version = "3.0.0-preview.
|
|
130
|
+
readonly version = "3.0.0-preview.13";
|
|
127
131
|
constructor(options?: InstanceOpts);
|
|
132
|
+
private static fromState;
|
|
128
133
|
updateOptions(options?: OptionsUpdate): void;
|
|
134
|
+
with(update?: OptionsUpdate): FigTree<InstanceOpts>;
|
|
129
135
|
clearCache(): void;
|
|
130
136
|
getOptions(): EvaluationOptions;
|
|
131
137
|
getOperators(): OperatorInfo[];
|
|
132
138
|
getFragments(): FragmentInfo[];
|
|
133
|
-
validate(expression: unknown, options?:
|
|
139
|
+
validate(expression: unknown, options?: ValidateOptions): ValidationResult;
|
|
134
140
|
getDependencies(expression: unknown): Dependencies;
|
|
135
141
|
isEvaluable(expression: unknown): boolean;
|
|
136
142
|
evaluate<CallOpts extends CallOptions = NoOptions>(expression: unknown, options?: OnlyCallOptions<CallOpts>): Promise<ResultShape<Merge<InstanceOpts, CallOpts>>>;
|
|
@@ -288,6 +294,9 @@ type CallOptions = Pick<FigTreeOptions, 'data' | 'signal' | 'timeout' | 'trace'>
|
|
|
288
294
|
type OnlyCallOptions<CallOpts> = CallOpts & {
|
|
289
295
|
[Key in Exclude<keyof CallOpts, keyof CallOptions>]: never;
|
|
290
296
|
};
|
|
297
|
+
type ValidateOptions = CallOptions & {
|
|
298
|
+
params?: readonly string[];
|
|
299
|
+
};
|
|
291
300
|
interface FigTreeOptions {
|
|
292
301
|
data?: Record<string, unknown>;
|
|
293
302
|
fragments?: Record<string, FragmentDefinition>;
|
|
@@ -424,7 +433,10 @@ interface FragmentDefinition {
|
|
|
424
433
|
expression: unknown;
|
|
425
434
|
parameters?: Record<string, FragmentParameterDeclaration>;
|
|
426
435
|
description?: string;
|
|
427
|
-
metadata?: Record<string, unknown>;
|
|
436
|
+
metadata?: FragmentMetadata & Record<string, unknown>;
|
|
437
|
+
samples?: {
|
|
438
|
+
[parameter: string]: unknown;
|
|
439
|
+
};
|
|
428
440
|
}
|
|
429
441
|
interface FragmentParameter {
|
|
430
442
|
type: ExpectedType;
|
|
@@ -448,6 +460,7 @@ interface OperatorListing {
|
|
|
448
460
|
[parameter: string]: unknown;
|
|
449
461
|
};
|
|
450
462
|
}
|
|
463
|
+
type FragmentMetadata = Omit<OperatorListing, 'description' | 'parameterDescriptions'>;
|
|
451
464
|
interface CategoryListing {
|
|
452
465
|
displayName: string;
|
|
453
466
|
order: number;
|
package/build/chunks/engine.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e,i as t,l as r,f as a,d as n,D as o,E as s,g as i,c as l,o as c,q as u,h as d,S as f,e as p,p as m,s as h,j as v,n as y,u as g,v as b,k,w,x as $,r as x,t as j,b as O,m as A,R as P,a as D,W as C,y as N,G as S}from"./shared.js";const z=(t,r,a)=>{const[n]=r,o=r.length-1;return new e({code:t,message:o>0?`${n.message} (+ ${o} more issue${1===o?"":"s"})`:n.message,path:n.path,operator:a,issues:r})},E=()=>{},M=e=>"object"==typeof e&&null!==e&&"function"==typeof e.then,q=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),F=(e,t,r)=>{if(e===t)return 0;const a=e.length,n=t.length;if(Math.abs(a-n)>r)return r+1;let o=new Array(n+1),s=new Array(n+1);for(let e=0;e<=n;e++)o[e]=e;for(let i=1;i<=a;i++){s[0]=i;let a=i;const l=e.charCodeAt(i-1);for(let e=1;e<=n;e++){const r=o[e-1]+(l===t.charCodeAt(e-1)?0:1),n=Math.min(o[e]+1,s[e-1]+1,r);s[e]=n,n<a&&(a=n)}if(a>r)return r+1;const c=o;o=s,s=c}return o[n]},T=(e,t)=>{let r,a=3;for(const n of t){const t=F(e,n,a-1);if(t<a&&(r=n,a=t,0===t))break}return r},V=e=>e?` — did you mean '${e}'?`:"",I=e=>e.length<2?e.join(""):`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`,R=e=>{let t;return()=>(void 0===t&&(t=(async()=>e())()),t)},L=(e,t,r)=>{const a=[],n=new Set,o=new Set,s=e=>{const i=a.indexOf(e);if(-1!==i){const e=a.slice(i),t=[...e].sort().join("\0");return void(o.has(t)||(o.add(t),r(e)))}if(!n.has(e)){a.push(e);for(const r of t(e)??[])s(r);a.pop(),n.add(e)}};for(const t of e)s(t);return 0===o.size},W={ok:!0},B=e=>null===e?"null":Array.isArray(e)?"array":typeof e,J=(e,t)=>({ok:!1,expected:e,actual:B(t)}),U=(e,t)=>{switch(t){case"any":return!0;case"string":return"string"==typeof e;case"number":return"number"==typeof e;case"integer":return"number"==typeof e&&Number.isInteger(e);case"boolean":return"boolean"==typeof e;case"array":return Array.isArray(e);case"object":return q(e);case"null":return null===e;default:return!1}},G=e=>"null"===e||"any"===e||!!Array.isArray(e)&&(e.includes("null")||e.includes("any")),K=e=>!e.required&&!G(e.type),_=/*#__PURE__*/new Set(["any","string","number","boolean","array","object","null","integer"]),H=e=>{if("string"==typeof e)return _.has(e);if(Array.isArray(e))return e.length>0&&e.every(e=>"string"==typeof e&&_.has(e));if(q(e)&&"literal"in e){const t=e.literal;return Array.isArray(t)&&t.length>0&&t.every(e=>["string","number","boolean"].includes(typeof e))}return!1},Q=(e,r)=>{if(t(r)){if(-1!==r.literal.indexOf(e))return W;const t=r.literal.map(e=>JSON.stringify(e)).join(", ");return J(`one of ${t}`,e)}return"string"==typeof r?U(e,r)?W:J(r,e):r.some(t=>U(e,t))?W:J(r.join(" | "),e)},X=(e,t)=>{if(void 0!==t.length){if(!Array.isArray(e))return J("array",e);if(e.length!==t.length)return{ok:!1,expected:`array of length ${t.length}`,actual:`array of length ${e.length}`}}if(t.homogeneous){if(!Array.isArray(e))return J("array",e);const r=t.homogeneous;if(e.length>0){if(void 0===r.find(t=>e.every(e=>U(e,t))))return{ok:!1,expected:`homogeneous array of ${r.join(" | ")}`,actual:Y(e)}}}if(t.elementShape){if(!Array.isArray(e))return J("array",e);for(let r=0;r<e.length;r++){const a=te(e[r],t.elementShape);if(!a.ok)return a}}return W},Y=e=>{const t=B(e[0]),r=e.find(e=>B(e)!==t);return void 0===r?`array of ${t}`:`${B(r)} beside ${t}`},Z=["length","homogeneous","elementShape"],ee=e=>{if(!q(e))return J("a constraints object",e);for(const t of Object.keys(e))if(!Z.includes(t))return{ok:!1,expected:`one of ${Z.join(", ")}`,actual:t};const{length:t,homogeneous:r,elementShape:a}=e;if(void 0!==t&&(!Number.isInteger(t)||t<0))return J("a non-negative integer length",t);if(!(void 0===r||Array.isArray(r)&&H(r)))return J("a non-empty array of basic types",r);if(void 0!==a){if(!q(a))return J("an object of declarations",a);for(const[e,t]of Object.entries(a)){if(!q(t))return J(`a declaration for "${e}"`,t);if(void 0!==t.type&&!H(t.type))return J(`a vocabulary type for "${e}"`,t.type);if(void 0!==t.required&&"boolean"!=typeof t.required)return J(`a boolean "required" for "${e}"`,t.required);if(void 0!==t.constraints){const e=ee(t.constraints);if(!e.ok)return e}}}return W},te=(e,t)=>{if(!q(e))return J("object",e);const r=Object.keys(t);for(let a=0;a<r.length;a++){const n=r[a],o=t[n],s=Object.prototype.hasOwnProperty.call(e,n),i=!1!==o.required;if(!s){if(i)return{ok:!1,expected:`property "${n}"`,actual:"missing"};continue}const l=ne(e[n],o);if(!l.ok)return l}return W},re=(e,t,r)=>{if(!r||!Array.isArray(e))return X(e,t);const{length:a,...n}=t;if(void 0!==a){const t=X(e,{length:a});if(!t.ok)return t}return X(e.filter(e=>null!==e),n)},ae=(e,t)=>null===e||void 0===t.constraints?W:re(e,t.constraints,void 0!==t.elementNullPolicy),ne=(e,t)=>{if(void 0!==t.type){const r=Q(e,t.type);if(!r.ok)return r}return ae(e,t)},oe=["logic","comparison","math","string","array","data","io","other"],se=Symbol("fig-tree:EvaluationData"),ie=Symbol("fig-tree:validated-operator"),le=e=>"object"==typeof e&&null!==e&&!0===e[ie],ce=[!1,null,0,""],ue=e=>-1===ce.indexOf(e),de=(e,t)=>"number"==typeof e&&"number"==typeof t?e<t?-1:e>t?1:0:fe(String(e),String(t)),fe=(e,t)=>{const r=Array.from(e),a=Array.from(t),n=Math.min(r.length,a.length);for(let e=0;e<n;e++){const t=r[e].codePointAt(0),n=a[e].codePointAt(0);if(t!==n)return t<n?-1:1}return r.length===a.length?0:r.length<a.length?-1:1},pe="<array>",me="<object>",he=e=>null===e?"":"string"==typeof e?e:"number"==typeof e?String(e):"boolean"==typeof e?e?"true":"false":Array.isArray(e)?pe:me,ve=e=>null!==e&&"object"==typeof e,ye="a composite element renders as a placeholder, never as text — drill in, or join it explicitly",ge=e=>e.trim(),be=/\s+$/,ke=/^\s+/,we=e=>e.replace(be,""),$e=e=>e.replace(ke,""),xe=e=>Array.from(e),je=(e,t)=>{const[r,a]=String(e).split("e"),n=void 0!==a?Number(a)+t:t;return Number(`${r}e${n}`)},Oe=Object.prototype.hasOwnProperty,Ae=(e,t)=>{for(const r of e.keys())if(Pe(r,t))return r},Pe=(e,t)=>{let r,a,n;if(e===t)return!0;if(e&&t&&(r=e.constructor)===t.constructor){if(r===Date)return e.getTime()===t.getTime();if(r===RegExp)return e.toString()===t.toString();if(r===Array){if((a=e.length)===t.length)for(;a--&&Pe(e[a],t[a]););return-1===a}if(r===Set){if(e.size!==t.size)return!1;for(a of e){if(n=a,n&&"object"==typeof n&&(n=Ae(t,n),!n))return!1;if(!t.has(n))return!1}return!0}if(r===Map){if(e.size!==t.size)return!1;for(a of e){if(n=a[0],n&&"object"==typeof n&&(n=Ae(t,n),!n))return!1;if(!Pe(a[1],t.get(n)))return!1}return!0}if(r===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(r===DataView){if((a=e.byteLength)===t.byteLength)for(;a--&&e.getInt8(a)===t.getInt8(a););return-1===a}if(ArrayBuffer.isView(e)){if((a=e.byteLength)===t.byteLength)for(;a--&&e[a]===t[a];);return-1===a}if(!r||"object"==typeof e){for(r in a=0,e){if(Oe.call(e,r)&&++a&&!Oe.call(t,r))return!1;if(!(r in t)||!Pe(e[r],t[r]))return!1}return Object.keys(t).length===a}}return e!=e&&t!=t},De=e=>!e.includes("{")&&!e.includes("}")&&(e.startsWith("$")?e.length>1:r(e).ok),Ce=e=>{const t=[];let r="";const a=()=>{""!==r&&(t.push({kind:"text",text:r}),r="")};let n=0;for(;n<e.length;){const o=e[n];if("%"===o){let s=n+1;for(;s<e.length&&e[s]>="0"&&e[s]<="9";)s++;if(s>n+1){const r=e.slice(n,s);a(),t.push({kind:"positional",raw:r,index:Number(r.slice(1))}),n=s;continue}r+=o,n++;continue}if("{"===o&&"{"===e[n+1]){const o=e.indexOf("}}",n+2);if(-1!==o){const r=e.slice(n+2,o);if(De(r)){a(),t.push({kind:"named",raw:e.slice(n,o+2),body:r}),n=o+2;continue}}r+="{{",n+=2;continue}r+=o,n++}return a(),t},Ne=e=>{const t={maxDepth:0};return{constant:ze(t,e,0),depth:t.maxDepth}},Se=e=>{const t={maxDepth:0};if(ze(t,e,0,[]))return void 0===t.reads?{value:e}:{value:e,reads:t.reads}},ze=(e,t,r,s)=>{if(r>o)return!1;if(r>e.maxDepth&&(e.maxDepth=r),void 0===t)return!1;if("string"==typeof t){const r=a(t);return"reference"===r.kind&&"error"===r.namespace&&void 0!==s?((e.reads??=[]).push({at:s,segments:r.segments}),!0):"plain"===r.kind||"unrecognized"===r.kind}if(Array.isArray(t)){for(let a=0;a<t.length;a++)if(!ze(e,t[a],r+1,s&&[...s,a]))return!1;return!0}if(n(t)){for(const e in t){if("operator"===e||"fragment"===e||"vars"===e||"//"===e)return!1;if(e.startsWith("$"))return!1}for(const a in t)if(!ze(e,t[a],r+1,s&&[...s,a]))return!1;return!0}return!0},Ee=(e,t)=>({parent:e,key:t}),Me=e=>{const t=[];for(let r=e;null!==r;r=r.parent)t.push(r.key);return t.reverse()},qe=e=>{switch(e.kind){case"constant":case"reference":case"invalid":return[];case"skeleton":return[...e.holes.map(e=>e.node),...Object.values(e.vars??{})];case"elements":return e.nodes;case"entries":return[...Object.values(e.entries),...Object.values(e.vars??{})];case"operator":case"fragmentCall":{const t="operator"===e.kind?Object.values(e.params):void 0===e.parameters?[]:"dynamic"===e.argumentsMode?[e.parameters]:Object.values(e.parameters);return void 0!==e.fallback&&t.push(e.fallback),[...t,...Object.values(e.vars??{})]}}return e},Fe=e=>{e.sort((e,t)=>e.order-t.order)},Te=(e,t,r,a,n,o,s={})=>{const i={severity:t,code:r,message:a,path:Me(n)};void 0!==s.operator&&(i.operator=s.operator),void 0!==s.fragment&&(i.fragment=s.fragment),void 0!==s.parameter&&(i.parameter=s.parameter),void 0!==s.suggestion&&(i.suggestion=s.suggestion);const l={issue:i,order:o};return e.push(l),l},Ve=e=>e.some(({issue:e})=>"error"===e.severity),Ie=e=>{const t=e.entry.definition.parameters.as;if("structural"!==t?.evaluation)return null;const r=e.params.as;return"constant"===r?.kind&&"string"==typeof r.value?r.value:null},Re=(e,t,r)=>void 0===r?null===e:("element"===t?e:`${e??""}Index`)===r,Le=(e,t,r)=>{"__proto__"===t?Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}):e[t]=r},We=(e,t,r)=>{const a=new Set;let n=e;return t.forEach((e,t)=>{n=Be(n,e.at,r[t],a)}),n},Be=(e,t,r,a)=>{const n=Je(e,a),[o,...s]=t;return Le(n,o,0===s.length?r:Be(n[o],s,r,a)),n},Je=(e,t)=>{if(t.has(e))return e;const r=Array.isArray(e)?[...e]:{...e};return t.add(r),r},Ue=(e,t,r={})=>{const a={registry:t,recognizes:e=>((e,t)=>"literal"===t||void 0!==Yr(e,t)||e.fragments.has(t))(t,e),issues:[],order:0,nodeCount:0,maxDepth:0,dataPaths:new Map,dynamic:!1,operators:new Set,fragmentNames:new Set,fragmentCalls:[],dataReads:[],identityOnly:!1,scope:{bindings:[]},asNames:new Set,unrecognized:[],unknownNodes:0,hasNoCache:!1},n=(r.basePath??[]).reduce(Ee,null),o=He(a,e,n,0);Ke(a);const s=Rt(o);Fe(a.issues);const i=Ve(a.issues),l={nodeCount:a.nodeCount,maxDepth:a.maxDepth,dependencies:{dataPaths:a.dataPaths,dynamic:a.dynamic,operators:[...a.operators],fragments:[...a.fragmentNames]},identityOnly:a.identityOnly};return{root:o,holes:s,issues:a.issues,hasErrors:i,timeoutShielded:s.every(e=>void 0!==e.timeoutFallback),own:l,...Ge(l,a.fragmentCalls,t.fragments),fragmentCalls:a.fragmentCalls,dataReads:a.dataReads,hasNoCache:a.hasNoCache}},Ge=(e,t,r)=>{if(0===t.length)return e;const a=new Map(e.dependencies.dataPaths),n=new Set(e.dependencies.operators),o=new Set(e.dependencies.fragments);let{nodeCount:s,maxDepth:i,identityOnly:l}=e,c=e.dependencies.dynamic;for(const e of t){const t=r.get(e.name);if(void 0!==t){s+=t.nodeCount,i=Math.max(i,e.depth+t.maxDepth),l||=t.identityOnly,c||=t.dependencies.dynamic;for(const[e,r]of t.dependencies.dataPaths)a.set(e,r);for(const e of t.dependencies.operators)n.add(e);for(const e of t.dependencies.fragments)o.add(e)}}return{nodeCount:s,maxDepth:i,identityOnly:l,dependencies:{dataPaths:a,dynamic:c,operators:[...n],fragments:[...o]}}},Ke=e=>{if(0!==e.asNames.size)for(const{token:t,issue:r,raw:a}of e.unrecognized)e.asNames.has(t)&&(r.issue={...r.issue,severity:"error",code:s.unresolvedBinding,message:`'${a}' names an iterator binding, but no enclosing iterator binds it here`})},_e=(e,t,r,a,n,o,s)=>Te(e.issues,t,r,a,n,o,s),He=(e,t,r,a)=>{const n=e.order++;if(a>e.maxDepth&&(e.maxDepth=a),a>o)return _e(e,"error",s.depthCeiling,`the expression nests deeper than the engine's ceiling of ${o} levels — descent stopped here`,r,n),e.nodeCount++,Ye(t,r,n);const i=Qe(e,t,r,a,n);return"operator"!==i.kind&&"fragmentCall"!==i.kind&&"reference"!==i.kind&&"invalid"!==i.kind||e.nodeCount++,i},Qe=(e,t,r,a,o)=>null==t?Xe(t??null,r,o):"number"==typeof t||"boolean"==typeof t?Xe(t,r,o):"string"==typeof t?Ze(e,t,r,o):Array.isArray(t)?tt(e,t,r,a,o):n(t)?rt(e,t,r,a,o):(e.identityOnly=!0,Xe(t,r,o)),Xe=(e,t,r)=>({kind:"constant",value:e,path:t,order:r}),Ye=(e,t,r)=>({kind:"invalid",raw:e,path:t,order:r}),Ze=(e,t,r,n)=>{const o=a(t,e.scope);switch(o.kind){case"plain":return Xe(t,r,n);case"unrecognized":{const a=_e(e,"warning",s.unrecognizedIdentifier,`'${t}' matches no reference namespace and will pass through as data`,r,n),o=i(t);return null!==o&&0===e.unknownNodes&&e.unrecognized.push({token:o.token,issue:a,raw:t}),Xe(t,r,n)}case"invalid":return _e(e,"error",o.code??s.invalidReference,`'${t}': ${o.reason}`,r,n),Ye(t,r,n);case"reference":{const{namespace:a,segments:s,drill:i,binding:l}=o,c={kind:"reference",namespace:a,segments:s,raw:t,path:r,order:n};return void 0!==l?c.binding=l:"data"===a&&(0===s.length?e.dynamic=!0:vt(e,s,i.startsWith(".")?i.slice(1):void 0,r)),e.unknownNodes>0&&et(a)&&(c.scopeUnknown=!0),c}}},et=e=>"element"===e||"index"===e||"error"===e,tt=(e,t,r,a,n)=>{const o=kt(e,t,r,0,a);return It(e,t,o,!0,!1,void 0,r,n)},rt=(e,t,r,a,n)=>{const o=l(t,e.recognizes);switch(o.kind){case"malformed":return _e(e,"error",s.malformedNode,o.message,r,n),Ye(t,r,n);case"operator":return at(e,t,r,a,n);case"fragment":return St(e,t,r,a,n);case"shorthand":return jt(e,t,o.key,r,a,n);case"plain":return Ft(e,t,r,a,n)}},at=(e,t,r,a,n)=>{const o=t.operator;if("string"!=typeof o)return nt(e,t,"operator",r,n);if("literal"===o)return Nt(e,t,t.value,"value"in t,r,n);const i=Yr(e.registry,o);if(void 0===i){const a=T(o,Ut(e));return _e(e,"error",s.unknownOperator,`'${o}' names no registered operator${V(a)}`,r,n,{suggestion:a}),Ye(t,r,n)}const l=ot(e,i,r,n),c=[];return st(e,l,t,"operator",a,(t,a)=>{"parameters"===t?_e(e,"error",s.malformedNode,"'parameters' is reserved and unused on operator nodes",Ee(r,t),n,{operator:l.name}):lt(e,l,c,t,a,Ee(r,t),n)}),ct(e,l,c,a,n),l},nt=(e,t,r,a,n)=>(_e(e,"error",s.malformedNode,`the '${r}' value must be a literal string`,a,n),Ye(t,a,n)),ot=(e,t,r,a)=>(e.operators.add(t.definition.name),{kind:"operator",name:t.definition.name,entry:t,params:{},path:r,order:a}),st=(e,t,r,a,n,o)=>{const{path:s,order:i}=t;for(const l in r){const c=r[l];l!==a&&"//"!==l&&void 0!==c&&("fallback"===l?t.fallback=He(e,c,Ee(s,l),n+1):"noCache"===l?it(e,t,c,s,i):"vars"===l?t.vars=qt(e,c,s,n,i):o?.(l,c))}},it=(e,t,r,a,n)=>{!0===r?(t.noCache=!0,e.hasNoCache=!0):_e(e,"error",s.malformedNode,"'noCache' takes only the literal true — it is settled before the subtree runs",Ee(a,"noCache"),n,"operator"===t.kind?{operator:t.name}:{})},lt=(e,t,r,a,n,o,i)=>{if(void 0===t.entry.definition.parameters[a]){const r=T(a,Object.keys(t.entry.definition.parameters));return void _e(e,"error",s.unknownNodeKey,`'${a}' is not a parameter of '${t.name}'${V(r)}`,o,i,{operator:t.name,parameter:a,suggestion:r})}r.push({name:a,kind:"value",value:n,path:o})},ct=(e,t,r,a,n)=>{const o=t.entry.definition,s=o.resolution.perElement.length>0;let i;if("get"===t.name&&ut(e,t,r),s&&"structural"===o.parameters.as?.evaluation){const a=r.find(e=>"as"===e.name);"value"===a?.kind&&(i=xt(e,t,a.value,a.path,n))}for(const n of r){const r=o.parameters[n.name]?.evaluation;"perElement"!==r&&(t.params[n.name]=gt(e,n,r,a))}if(s){void 0!==i&&e.scope.bindings.push(i);for(const n of r){const r=o.parameters[n.name]?.evaluation;"perElement"===r&&(t.params[n.name]=gt(e,n,r,a))}void 0!==i&&e.scope.bindings.pop()}yt(e,t),ft(e,t)},ut=(e,t,r)=>{const a=r.findIndex(e=>"from"===e.name),n=r[a];if("value"!==n?.kind||"string"!=typeof n.value)return;const o=v(n.value);if("data"===o&&r.splice(a,1),"vars"!==o&&"params"!==o)return;const i=r.find(e=>"path"===e.name),l="value"===i?.kind?dt(e,i.value):null;if(null===l||"value"!==i?.kind){if("vars"!==o)return;const i=e.order++;return _e(e,"error",s.bareVars,`'${n.value}': with 'from: ${n.value}' the path's first key names the var, so the path must be written out and start with a key`,n.path,i,{operator:"get",parameter:"from"}),r.splice(a,1),void(t.params.from=Ye(n.value,n.path,i))}const[c,...u]=l;n.value=y(o,[c]),i.value=Array.isArray(i.value)?u:d(u)},dt=(e,t)=>{const r=t=>{if("string"!=typeof t)return w(t);const{kind:r}=a(t,e.scope);return"plain"===r||"unrecognized"===r};try{const e=Array.isArray(t)?t.every(r)&&t:"string"==typeof t&&r(t)&&k(t);return e&&"string"==typeof e[0]?e:null}catch{return null}},ft=(e,t)=>{if("buildString"!==t.name)return;((e,t)=>{const r=t.params.substitutions;if(void 0===r)return;const a="constant"===r.kind?r.value:"skeleton"===r.kind?r.skeleton:void 0;(Array.isArray(a)||n(a))&&Object.values(a).some(ve)&&_e(e,"error",s.operatorValidate,ye,r.path,r.order,{operator:t.name,parameter:"substitutions"})})(e,t);const r=t.params.template;if("constant"!==r?.kind||"string"!=typeof r.value)return;const a=(e=>Ce(e).filter(e=>"text"!==e.kind))(r.value);if(0===a.length)return;const o=t.params.substitutions,i=(e=>{if(void 0===e)return{mode:"absent"};if("constant"===e.kind)return Array.isArray(e.value)?{mode:"array",length:e.value.length}:n(e.value)?{mode:"object",keys:new Set(Object.keys(e.value))}:{mode:"dynamic"};if("skeleton"===e.kind){const{skeleton:t,holes:r}=e;if(Array.isArray(t))return{mode:"array",length:t.length};const a=new Set(Object.keys(t));for(const e of r)a.add(String(e.at[0]));return{mode:"object",keys:a}}return{mode:"dynamic"}})(o);if(mt(e,t,r,a,i),"absent"!==i.mode&&"object"!==i.mode)return;const l=[],c=new Set;for(const t of a){if("named"!==t.kind||!t.body.startsWith("$"))continue;if(c.has(t.body))continue;const a=Ze(e,t.body,r.path,e.order++);"reference"===a.kind&&(e.nodeCount++,c.add(t.body),l.push({path:r.path,at:[t.body],node:a}))}0!==l.length&&(t.params.substitutions=pt(e,t,o,l))},pt=(e,t,r,a)=>"skeleton"===r?.kind?(r.holes.push(...a),r):{kind:"skeleton",skeleton:"constant"===r?.kind?r.value:{},holes:a,path:r?.path??Ee(t.path,"substitutions"),order:r?.order??e.order++},mt=(e,t,r,a,n)=>{const o=(a,n)=>_e(e,"warning",a,n,r.path,r.order,{operator:t.name}),i=(e,t)=>o(s.unboundToken,`'${e}' binds to nothing and renders as its own text${t}`),l=e=>{for(const t of e)o(s.unusedSubstitution,`substitution ${t} is never named by the template`)};if("array"!==n.mode&&"dynamic"!==n.mode||a.some(e=>"named"===e.kind&&e.body.startsWith("$"))&&o(s.inertReferenceToken,`a reference token needs the named face — beside ${"array"===n.mode?"positional substitutions":"a dynamically supplied map"} it is not recognized and renders as its own text`),"array"===n.mode){const e=new Set,t=[];for(const r of a)"positional"===r.kind&&(r.index>=1&&r.index<=n.length?e.add(r.index):t.push(r));const r=[];for(let t=1;t<=n.length;t++)e.has(t)||r.push(String(t));if(0===t.length)return void l(r);const o=0===n.length?"there are no substitutions":1===n.length?"there is only 1 substitution":`there are only ${n.length} substitutions`;for(const e of t)i(e.raw,` — ${e.index<1?"numbering starts at %1":o}${ht(r)}`);return}if("object"===n.mode){const e=new Set,t=[];for(const r of a)"named"===r.kind&&(n.keys.has(r.body)?e.add(r.body):r.body.startsWith("$")||t.push(r.raw));const r=[...n.keys].filter(t=>!e.has(t)).map(e=>`'${e}'`);0===t.length&&l(r);for(const e of t)i(e,ht(r))}},ht=e=>0===e.length?"":1===e.length?`, and substitution ${e[0]} is unused`:`, and substitutions ${I(e)} are unused`,vt=(e,t,r,a)=>{let n,o;void 0!==r&&c(r)?(n=r,o=t):(o=u(t),n=d(o)),e.dataPaths.set(n,o),e.dataReads.push({kind:"path",key:n,segments:o,path:a})},yt=(e,t)=>{if("get"!==t.name||void 0!==t.params.from)return;const r=t.params.path;if(void 0!==r)if("constant"===r.kind)try{const a="string"==typeof r.value?k(r.value):r.value;if(!Array.isArray(a)||!a.every(w))return void(e.dynamic=!0);if(0===a.length)return void(e.dynamic=!0);vt(e,a,"string"==typeof r.value?r.value:void 0,t.path)}catch{e.dynamic=!0}else e.dynamic=!0},gt=(e,t,r,a)=>{const n="lazyElements"===r||"race"===r;if("slice"===t.kind)return wt(e,t.elements,t.basePath,t.offset,a,n);if(n&&Array.isArray(t.value))return wt(e,t.value,t.path,0,a,!0);if("lazyEntries"===r){const r=$t(e,t,a);if(null!==r)return r}return He(e,t.value,t.path,a+1)},bt=(e,t)=>{const r=e.order++,a=t+1;return a>e.maxDepth&&(e.maxDepth=a),{order:r,containerDepth:a}},kt=(e,t,r,a,n)=>Array.from(t,(t,o)=>({key:o,rawChild:t,node:He(e,t,Ee(r,a+o),n+1)})),wt=(e,t,r,a,n,o)=>{const{order:s,containerDepth:i}=bt(e,n),l=kt(e,t,r,a,i);if(o&&!l.every(e=>"constant"===e.node.kind)){return{kind:"elements",nodes:l.map(e=>e.node),path:r,order:s}}return It(e,t,l,!0,!1,void 0,r,s)},$t=(e,t,r)=>{const a=t.value;if(!n(a)||p(a,e.recognizes))return null;const{order:o,containerDepth:s}=bt(e,r),{entries:i,vars:l,changed:c}=Tt(e,a,t.path,s,o,!0);if(i.every(e=>"constant"===e.node.kind))return It(e,a,i,!1,c,l,t.path,o);const u={};for(const{key:e,node:t}of i)u[String(e)]=t;const d={kind:"entries",entries:u,path:t.path,order:o};return void 0!==l&&(d.vars=l),d},xt=(e,t,n,o,i)=>{const l=r=>{_e(e,"error",s.invalidAs,r,o,i,{operator:t.name})};if("string"!=typeof n||"plain"!==a(n).kind)return l("'as' must be a literal name — a dynamic value cannot be statically resolved");const c=r(n);if(!c.ok)return l(`'${n}' is not a legal binding name — ${c.reason}`);const u=[n,$(n)];for(const t of u){if(void 0!==g(t))return l(`'${n}' collides with the reserved namespace word '${t}'`);if(null!==b(t,e.scope.bindings))return l(`'${n}' collides with an enclosing 'as' binding ('${t}')`)}for(const t of u)e.asNames.add(t);return n},jt=(e,t,r,a,n,o)=>{const i=r.slice(1),l="literal"===i,c=!l&&e.registry.fragments.has(i);for(const n in t)if(n!==r&&!f.has(n))return _e(e,"error",s.malformedNode,`'${n}' may not sit beside the shorthand key '${r}' — reserved modifiers only`,Ee(a,n),o),Ye(t,a,o);const u=t[r],d=Ee(a,r);if(l)return Nt(e,t,u,!0,a,o);if(c)return zt(e,t,i,u,a,n,o);const p=Yr(e.registry,i),m=ot(e,p,a,o);st(e,m,t,r,n);const h=[];return Ot(e,m,h,u,d,o),ct(e,m,h,n,o),m},Ot=(e,t,r,a,o,s)=>{if(Array.isArray(a))Pt(e,t,r,a,o,s);else if(!n(a)||p(a,e.recognizes))At(e,t,r,a,o,s);else for(const n in a){const i=a[n];"//"!==n&&void 0!==i&<(e,t,r,n,i,Ee(o,n),s)}},At=(e,t,r,a,n,o)=>{const s=h(t.entry.definition);null!==s?r.push({name:s,kind:"value",value:a,path:n}):Dt(e,t,n,o)},Pt=(e,t,r,a,n,o)=>{const s=t.entry.definition,i=m(s,a.length);if(null===i)return void Ct(e,t,a,n,o);const l=s.positionalParams;for(let e=0;e<i.bound;e++)r.push({name:l[e],kind:"value",value:a[e],path:Ee(n,e)});const{restAt:c}=i;null!==c&&r.push({name:s.restParam,kind:"slice",elements:0===c?a:a.slice(c),basePath:n,offset:c})},Dt=(e,t,r,a)=>_e(e,"error",s.positionalArity,`'${t.name}' takes no positional arguments — use the named form`,r,a,{operator:t.name}),Ct=(e,t,r,a,n)=>{const o=t.entry.definition.positionalParams;if(void 0===o)return void Dt(e,t,a,n);const i=o.length;_e(e,"error",s.positionalArity,`'${t.name}' takes at most ${i} positional argument${1===i?"":"s"} (${o.join(", ")}), got ${r.length}`,a,n,{operator:t.name})},Nt=(e,t,r,a,n,o)=>{for(const r in t)"operator"!==r&&"value"!==r&&"//"!==r&&"$literal"!==r&&("fallback"===r||"vars"===r||"noCache"===r?_e(e,"warning",s.uselessModifier,`'${r}' on 'literal' is dead — contents are never evaluated`,Ee(n,r),o):_e(e,"error",s.unknownNodeKey,`'${r}' is not a key of 'literal' — content goes in 'value'`,Ee(n,r),o,{operator:"literal"}));return a?Xe(r,n,o):(_e(e,"error",s.malformedNode,"'literal' requires its content in 'value'",n,o,{operator:"literal"}),Ye(t,n,o))},St=(e,t,r,a,n)=>{const o=t.fragment;if("string"!=typeof o)return nt(e,t,"fragment",r,n);const i=Et(e,o,r,a,n);return st(e,i,t,"fragment",a,(t,o)=>{"parameters"===t?Mt(e,i,o,Ee(r,t),a,n):_e(e,"error",s.unknownNodeKey,`'${t}' is not a key of a fragment call — arguments live only in 'parameters'`,Ee(r,t),n)}),i},zt=(e,t,r,a,o,i,l)=>{const c=Et(e,r,o,i,l);return st(e,c,t,`$${r}`,i),n(a)?Mt(e,c,a,Ee(o,`$${r}`),i,l):_e(e,"error",s.malformedNode,`fragments have no single-value or positional form — '$${r}' takes a named-arguments object`,Ee(o,`$${r}`),l),c},Et=(e,t,r,a,n)=>{const o={kind:"fragmentCall",name:t,argumentsMode:"static",path:r,order:n};e.fragmentNames.add(t);const i=e.registry.fragments.get(t);if(void 0===i){const a=T(t,e.registry.fragments.keys());return _e(e,"error",s.unknownFragment,`'${t}' names no registered fragment${V(a)}`,r,n,{suggestion:a}),o}return o.entry=i,e.fragmentCalls.push({name:t,depth:a}),e.dataReads.push({kind:"call",fragment:i,path:r}),o},Mt=(e,t,r,o,i,l)=>{if(p(r,e.recognizes)||"string"==typeof r&&"reference"===a(r,e.scope).kind)return t.argumentsMode="dynamic",t.parameters=He(e,r,o,i+1),void(e.dynamic=!0);if(n(r)){const a={};for(const t in r){const n=r[t];"//"!==t&&void 0!==n&&(a[t]=He(e,n,Ee(o,t),i+1))}return void(t.parameters=a)}_e(e,"error",s.malformedNode,"a fragment's 'parameters' must be a named-arguments object or a node computing one",o,l)},qt=(e,t,a,o,i)=>{const l=Ee(a,"vars");if(!n(t))return void _e(e,"error",s.invalidVars,"a 'vars' block must be an object of name → expression entries",l,i);const c={};for(const a in t){const n=t[a];if("//"===a||void 0===n)continue;const u=Ee(l,a),d=r(a);d.ok?c[a]=He(e,n,u,o+1):_e(e,"error",s.invalidName,`'${a}' is not a legal var name — ${d.reason}`,u,i)}return c},Ft=(e,t,r,a,n)=>{const{entries:o,vars:s,changed:i}=Tt(e,t,r,a,n);return It(e,t,o,!1,i,s,r,n)},Tt=(e,t,r,a,n,o=!1)=>{let i,l=!1;const c=[],u=!o&&Vt(t);u&&e.unknownNodes++;for(const u in t){const d=t[u];if("//"!==u)if("vars"!==u)if(void 0!==d){if(u.startsWith("$")){const t=T(u.slice(1),Ut(e)),a=void 0!==t?V(`$${t}`):o?"":" — data with a '$' key goes inside 'literal'";_e(e,o?"warning":"error",s.unrecognizedIdentifier,`'${u}' is not a registered operator or fragment${o?", so it is a plain key":""}${a}`,Ee(r,u),n,{suggestion:void 0===t?void 0:`$${t}`})}c.push({key:u,rawChild:d,node:He(e,d,Ee(r,u),a+1)})}else l=!0;else i=qt(e,d,r,a,n),l=!0;else l=!0}return u&&e.unknownNodes--,{entries:c,vars:i,changed:l}},Vt=e=>{for(const t in e)if(t.startsWith("$")&&void 0!==e[t])return!0;return!1},It=(e,t,r,a,n,o,i,l)=>{const c=[],u=a?new Array(r.length):{};let d=n;for(const{key:e,rawChild:t,node:a}of r)"constant"!==a.kind?(d=!0,"skeleton"!==a.kind||void 0!==a.vars?c.push({path:a.path,at:[e],node:a}):(Le(u,e,a.skeleton),c.push(...a.holes.map(t=>({...t,at:[e,...t.at]}))))):(Le(u,e,a.value),a.value!==t&&(d=!0));if(0===c.length)return void 0!==o&&Object.keys(o).length>0&&_e(e,"warning",s.unreferencedVar,"this vars block declares names nothing in its scope references",Ee(i,"vars"),l),Xe(d||void 0!==o?u:t,i,l);const f={kind:"skeleton",skeleton:u,holes:c,path:i,order:l};return void 0!==o&&(f.vars=o),f},Rt=(e,t=[])=>{if("skeleton"===e.kind)for(const r of e.holes)Rt(r.node,t);else if("constant"!==e.kind){const r=Lt(e);t.push(void 0===r?{node:e}:{node:e,timeoutFallback:r})}return t},Lt=e=>{if("operator"===e.kind||"fragmentCall"===e.kind)return void 0!==e.fallback?Wt(e.fallback):"operator"===e.kind?e.entry.defaultFallback:e.entry?.timeoutFallback},Wt=e=>{if("constant"===e.kind)return{value:e.value};const t=[],r=Bt(e,[],t);return void 0===r?void 0:{value:r,reads:t}},Bt=(e,t,r)=>{if("reference"===e.kind){if("error"!==e.namespace)return;return r.push({at:t,segments:e.segments}),e.raw}if("skeleton"!==e.kind)return;const a=[];for(const n of e.holes){const e=Bt(n.node,[...t,...n.at],r);if(void 0===e)return;a.push(e)}return We(e.skeleton,e.holes,a)},Jt=new WeakMap,Ut=e=>{const t=Jt.get(e.registry);if(void 0!==t)return t;const r=[...e.registry.operators.keys(),...e.registry.aliases.keys(),...e.registry.fragments.keys()];return Jt.set(e.registry,r),r},Gt=e=>{switch(e.kind){case"operator":return e.entry.definition.returns;case"fragmentCall":return e.entry?.returns??"any";case"skeleton":return Array.isArray(e.skeleton)?"array":"object";case"constant":return Kt(e.value);default:return"any"}},Kt=e=>{if(null===e)return"null";if(Array.isArray(e))return"array";if(q(e))return"object";switch(typeof e){case"string":return"string";case"number":return"number";case"boolean":return"boolean";default:return"any"}},_t=/*#__PURE__*/Object.freeze({parsePath:k,resolvePath:x,checkType:Q,checkConstraints:X,describeType:B,renderText:he,isTruthy:ue}),Ht=(e,t={})=>{Xt({artifact:e,context:t,varsFrames:[],iteratorFrames:[],fallbackFrames:[]},e.root),Fe(e.issues),e.hasErrors=Ve(e.issues)},Qt=(e,t,r,a,n,o,s)=>{Te(e.artifact.issues,t,r,a,n,o,s)},Xt=(e,t)=>{switch(t.kind){case"constant":case"invalid":return;case"reference":return void pr(e,t);case"skeleton":{const r=gr(e,t.vars,t.path);for(const r of t.holes)Xt(e,r.node);return void br(e,r)}case"fragmentCall":return void dr(e,t);case"elements":for(const r of t.nodes)Xt(e,r);return;case"entries":{const r=gr(e,t.vars,t.path);for(const r in t.entries)Xt(e,t.entries[r]);return void br(e,r)}case"operator":return void Zt(e,t)}return t},Yt=(e,t,r)=>{const a={referenced:!1};e.fallbackFrames.push(a),Xt(e,r),e.fallbackFrames.pop(),a.referenced&&(t.fallbackReadsError=!0)},Zt=(e,t)=>{const r=gr(e,t.vars,t.path);void 0!==t.fallback&&Yt(e,t,t.fallback);const a=t.entry.definition,n=ur(t);for(const[r,o]of a.resolution.entries){const a=t.params[r];void 0!==a?tr(e,n,r,o,a,er(t,r)):o.required&&Qt(e,"error",s.missingRequired,`'${t.name}' requires '${r}'`,t.path,t.order,{operator:t.name,parameter:r})}fr(e,t);const o=[];for(const r in t.params){const n=t.params[r];"perElement"===a.parameters[r]?.evaluation?o.push([r,n]):Xt(e,n)}if(o.length>0){const r={as:Ie(t),referenced:!1};e.iteratorFrames.push(r);for(const[,t]of o)Xt(e,t);e.iteratorFrames.pop(),r.referenced||Qt(e,"warning",s.deadBinding,`'${t.name}' binds ${null===r.as?"$element / $index":`$${r.as}`} but its 'each' references neither`,t.path,t.order,{operator:t.name})}br(e,r)},er=(e,t)=>{const{definition:r,hostDefaults:a}=e.entry;if(void 0!==r.parameters[t]?.elementNullPolicy)return!1;for(const[n,o]of r.resolution.entries){if(!o.replacesNullAt?.includes(t))continue;const r=e.params[n];if(void 0===r){if(void 0!==a&&Object.hasOwn(a,n)&&null!==a[n])return!0}else if("constant"!==r.kind||null!==r.value)return!0}return!1},tr=(e,t,r,a,n,o=!1)=>{const i={...t.extra,parameter:r};if("elements"===n.kind){const o=a.constraints?.length;return void(void 0!==o&&n.nodes.length!==o&&Qt(e,"error",s.typeCheck,`'${t.label}.${r}': expected ${o} element${1===o?"":"s"}, received ${n.nodes.length}`,n.path,n.order,i))}if("constant"!==n.kind&&"structural"===a.evaluation&&"as"!==r)return void Qt(e,"error",s.typeCheck,`'${t.label}.${r}' is structural — it requires a literal value`,n.path,n.order,i);const l=`'${t.label}.${r}'`,c=ar(a,n,o);void 0!==c&&Qt(e,"error",c.code,c.code===s.returnsMismatch?`${c.reason} — it can never satisfy ${l}`:`${l}: ${c.reason}`,n.path,n.order,i);let u=n;for(;"operator"===u.kind||"fragmentCall"===u.kind;){const n=u.fallback;if(void 0===n)return void("operator"===u.kind&&rr(e,t,r,a,u,o));const c=ar(a,n,o);void 0!==c&&Qt(e,"warning",s.fallbackMismatch,`this fallback can never satisfy ${l}: ${c.reason}`,n.path,n.order,i),u=n}},rr=(e,t,r,a,n,o)=>{const i=n.entry.defaultFallback;if(void 0===i)return;const l=nr(a,i,o);void 0!==l&&Qt(e,"warning",s.fallbackMismatch,`'${n.name}' falls back to its operatorDefaults fallback, which can never satisfy '${t.label}.${r}': ${l.reason}`,n.path,n.order,{...t.extra,parameter:r})},ar=(e,t,r)=>{switch(t.kind){case"constant":return cr(e,t.value,r);case"operator":case"fragmentCall":{if("fragmentCall"===t.kind&&void 0===t.entry)return;const r=Gt(t);if(j(r,e.type))return;const a="operator"===t.kind?`'${t.name}'`:`fragment '${t.name}'`;return{code:s.returnsMismatch,reason:`${a} returns ${JSON.stringify(r)}`}}case"skeleton":return sr(e,Array.isArray(t.skeleton)?[]:{});case"reference":return"error"===t.namespace?or(e,t.segments):void 0;default:return}},nr=(e,{value:t,reads:r},a)=>void 0===r?cr(e,t,a):0===r[0].at.length?or(e,r[0].segments):sr(e,Array.isArray(t)?[]:{}),or=(e,t)=>{const r=lr(t);if(void 0!==r&&!j(r,e.type))return sr(e,ir[r])},sr=(e,t)=>{const r=Q(t,e.type);if(!r.ok)return{code:s.typeCheck,reason:`expected ${r.expected}, received ${r.actual}`}},ir={object:{},array:[],string:"",number:0,boolean:!1},lr=e=>{const[t,...r]=e;if(void 0===t)return"object";if(r.length>0||!Object.hasOwn(O,t))return;const a=O[t];return"string"==typeof a?a:void 0},cr=(e,t,r)=>{if(null===t&&(r||K(e)))return;const a=ne(t,e);return a.ok?void 0:{code:s.typeCheck,reason:`expected ${a.expected}, received ${a.actual}`}},ur=e=>({label:e.name,extra:{operator:e.name}}),dr=(e,t)=>{const r=gr(e,t.vars,t.path);void 0!==t.fallback&&Yt(e,t,t.fallback);const a=t.entry?.parameters,n="static"===t.argumentsMode?t.parameters:void 0;if(void 0!==a&&"static"===t.argumentsMode){const r={label:t.name,extra:{fragment:t.name}};for(const o in a){const i=a[o],l=n?.[o];void 0!==l?tr(e,r,o,i,l):i.required&&Qt(e,"error",s.missingRequired,`fragment '${t.name}' – requires '${o}'`,t.path,t.order,{fragment:t.name,parameter:o})}if(void 0!==n)for(const r in n){const o=n[r];if(void 0===a[r]){const n=T(r,Object.keys(a));Qt(e,"error",s.unknownNodeKey,`fragment '${t.name}' declares no parameter '${r}'${V(n)}`,o.path,o.order,{parameter:r,suggestion:n})}}}if(void 0!==n)for(const t in n)Xt(e,n[t]);else void 0!==t.parameters&&Xt(e,t.parameters);br(e,r)},fr=(e,t)=>{const r=t.entry.definition.validate;if(void 0===r)return;const a={};for(const e in t.params){const r=t.params[e];"constant"===r.kind&&(a[e]=r.value)}let n;try{n=r(a,_t)}catch(r){return void Qt(e,"error",s.operatorValidate,`'${t.name}' validate hook threw: ${r.message}`,t.path,t.order,{operator:t.name})}for(const r of n){const a=void 0!==r.parameter?t.params[r.parameter]:void 0;Qt(e,r.severity,s.operatorValidate,r.message,a?.path??t.path,t.order,{operator:t.name,parameter:r.parameter})}},pr=(e,t)=>{const{namespace:r}=t;switch(r){case"data":return;case"vars":return void mr(e,t);case"params":return void hr(e,t);case"element":case"index":return void vr(e,t,r);case"error":return void yr(e,t)}return r},mr=(e,t)=>{const r=t.segments[0],a="string"==typeof r?r:void 0;if(void 0!==a)for(let t=e.varsFrames.length-1;t>=0;t--){const r=e.varsFrames[t],n=r.names.get(a);if(void 0!==n){if(n.referenced=!0,null!==r.currentVar){const e=r.edges.get(r.currentVar)??new Set;e.add(a),r.edges.set(r.currentVar,e)}return}}Qt(e,"error",s.unresolvedVar,`'${t.raw}': no var '${a??""}' is declared in scope`,t.path,t.order)},hr=(e,t)=>{const r=e.context.fragmentParams;if(void 0===r)return void Qt(e,"error",s.unresolvedParam,`'${t.raw}': $params is only available inside a fragment body`,t.path,t.order);if(0===t.segments.length)return;const a=t.segments[0];"string"==typeof a&&r.has(a)||Qt(e,"error",s.unresolvedParam,`'${t.raw}': the fragment declares no parameter '${String(a)}'`,t.path,t.order)},vr=(e,t,r)=>{for(let a=e.iteratorFrames.length-1;a>=0;a--){const n=e.iteratorFrames[a];if(Re(n.as,r,t.binding))return void(n.referenced=!0)}t.scopeUnknown||Qt(e,"error",s.unresolvedBinding,`'${t.raw}' resolves against no enclosing iterator here`,t.path,t.order)},yr=(e,t)=>{const r=e.fallbackFrames.at(-1);void 0===r?t.scopeUnknown||Qt(e,"error",s.unresolvedBinding,`'${t.raw}' is only available inside the fallback of an operator node or fragment call`,t.path,t.order):r.referenced=!0},gr=(e,t,r)=>{if(void 0===t)return null;const a={names:new Map,currentVar:null,edges:new Map},n=Ee(r,"vars");for(const r in t){const o=t[r],i=Ee(n,r);for(const t of e.varsFrames)if(t.names.has(r)){Qt(e,"warning",s.shadowedVar,`'${r}' shadows a var of the same name from an enclosing scope`,i,o.order);break}a.names.set(r,{node:o,declaredAt:i,order:o.order,referenced:!1})}e.varsFrames.push(a);for(const[t,r]of a.names)a.currentVar=t,Xt(e,r.node),a.currentVar=null;return a},br=(e,t)=>{if(null!==t){e.varsFrames.pop();for(const[r,a]of t.names)a.referenced||Qt(e,"warning",s.unreferencedVar,`'${r}' is declared but never referenced in its scope`,a.declaredAt,a.order);kr(e,t)}},kr=(e,t)=>{const r=new Map([...t.names.keys()].map((e,t)=>[e,t]));L(t.names.keys(),e=>t.edges.get(e),a=>{const n=a.sort((e,t)=>r.get(e)-r.get(t)),o=n.map(e=>`'${e}'`),i=1===o.length?`${o[0]} depends on itself`:`${I(o)} form a vars cycle — a var may not depend on itself`,l=t.names.get(n[0]);Qt(e,"error",s.varCycle,i,l.declaredAt,l.order)})},wr={capable:!1,effective:!1,disabled:[]},$r={capable:!0,effective:!0,disabled:[]},xr=e=>{const{effective:t}=jr(e,e.root,!1);return Fe(e.issues),t},jr=(e,t,r)=>{switch(t.kind){case"constant":case"reference":return wr;case"invalid":return $r;case"skeleton":case"elements":case"entries":return Dr(e,qe(t),r);case"operator":return Or(e,t,_r(t.entry),r);case"fragmentCall":return Or(e,t,t.entry?.caches??!0,r)}return t},Or=(e,t,r,a)=>{const n=!0===t.noCache,o=Dr(e,qe(t),a||n),s=r||o.capable,i=Ar(t),l=void 0===i?o.disabled:[i,...o.disabled];return n&&a?Cr(e,t,"'noCache' is redundant — an enclosing node already sets it"):n&&!s&&Cr(e,t,l.length>0?`'noCache' is redundant — caching is already disabled for ${Pr(l)}`:"'noCache' is dead — nothing beneath this node caches"),{capable:s,effective:!n&&(r||o.effective),disabled:l}},Ar=e=>"operator"===e.kind&&e.entry.definition.cache&&!_r(e.entry)?e.entry.definition.name:void 0,Pr=e=>I([...new Set(e)].map(e=>`'${e}'`)),Dr=(e,t,r)=>{const a={capable:!1,effective:!1,disabled:[]};for(const n of t){const{capable:t,effective:o,disabled:s}=jr(e,n,r);a.capable||=t,a.effective||=o,a.disabled.push(...s)}return a},Cr=(e,t,r)=>{Te(e.issues,"warning",s.uselessModifier,r,Ee(t.path,"noCache"),t.order,"operator"===t.kind?{operator:t.name}:{fragment:t.name})};class Nr{max;entries=new Map;constructor(e){this.max=e}get size(){return this.entries.size}get(e){if(!this.entries.has(e))return;const t=this.entries.get(e);return this.entries.delete(e),this.entries.set(e,t),t}set(e,t){this.entries.delete(e),this.entries.set(e,t),this.entries.size>this.max&&this.evictOldest()}delete(e){this.entries.delete(e)}clear(){this.entries.clear()}resize(e){for(this.max=e;this.entries.size>this.max;)this.evictOldest()}evictOldest(){const e=this.entries.keys().next();!0!==e.done&&this.entries.delete(e.value)}}const Sr=Symbol("fig-tree:lazy-handle"),zr="~",Er=(e,t)=>{if(t>o)return"refused";switch(typeof e){case"boolean":return"json";case"string":return e.length>4096?"serializer":"json";case"number":return Number.isFinite(e)&&!Object.is(e,-0)?"json":"serializer";case"undefined":return"serializer";case"object":break;default:return"refused"}if(null===e)return"json";if(Array.isArray(e)){for(let r=0;r<e.length;r++){const a=Er(e[r],t+1);if("json"!==a)return a}return"json"}if(!n(e))return"refused";for(const r in e){if(r.length>4096)return"serializer";const a=Er(e[r],t+1);if("json"!==a)return a}return"json"},Mr=(e,t)=>qr(e,0,t)?t.join(""):void 0,qr=(e,t,r)=>{if(t>o)return!1;if(null===e)return Tr(r,"n");if(void 0===e)return Tr(r,"u");switch(typeof e){case"boolean":return Tr(r,e?"t":"f");case"number":return Fr(e,r);case"string":return Tr(r,`s${e.length}:${e}`);case"object":break;default:return!1}if(Array.isArray(e)){r.push("[");for(const a of e)if(!qr(a,t+1,r))return!1;return Tr(r,"]")}if(!n(e)||Sr in e)return!1;r.push("{");for(const a in e)if(r.push(`s${a.length}:${a}`),!qr(e[a],t+1,r))return!1;return Tr(r,"}")},Fr=(e,t)=>Number.isNaN(e)?Tr(t,"N"):e===1/0?Tr(t,"I"):e===-1/0?Tr(t,"J"):Object.is(e,-0)?Tr(t,"#-0"):Tr(t,`#${String(e)}`),Tr=(e,t)=>(e.push(t),!0);class Vr{deps;identity=new WeakMap;content=new Nr(200);constructor(e){this.deps=e}resolve(e){const t="object"==typeof e&&null!==e?e:void 0;if(void 0!==t){const e=this.identity.get(t);if(void 0!==e)return e}const r=this.deps.probe(e);if(r.constant){const e={kind:"inert",depth:r.depth};return void 0!==t&&this.identity.set(t,e),e}const a=void 0===t?void 0:(e=>{const t=Er(e,0);return"json"===t?JSON.stringify(e):"serializer"===t?Mr(e,[zr]):void 0})(e),n=void 0===a?void 0:this.content.get(a),o=n??this.deps.compile(e),s={kind:"artifact",artifact:o};return void 0!==t&&this.identity.set(t,s),void 0!==a&&void 0===n&&!o.identityOnly&&o.holes.length>0&&this.content.set(a,o),s}}const Ir=/*#__PURE__*/new Set(["type","required","default","description","metadata","constraints"]),Rr=/*#__PURE__*/new Set(["expression","parameters","description","metadata"]),Lr=(e,t,a)=>{const n=(...t)=>["fragments",e,...t],o=r(e);if(!o.ok)return void a(s.invalidName,`'${e}' is not a legal fragment name: ${o.reason}`,n());if(A(e))return void a(s.reservedName,`'${e}' is a reserved name and may not name a fragment`,n());if(!q(t))return void a(s.invalidDefinition,`fragment '${e}' must be a wrapper object: { expression, parameters?, description?, metadata? }`,n());if(!("expression"in t))return void a(s.invalidDefinition,`fragment '${e}' has no 'expression'`,n());for(const e of Object.keys(t))Rr.has(e)||a(s.invalidDefinition,`'${e}' is not a key of a fragment definition`,n(e));const i={name:e,parameters:{},body:{kind:"constant",value:null,path:null,order:0},returns:"any",warnings:[],nodeCount:0,maxDepth:0,dependencies:{dataPaths:new Map,dynamic:!1,operators:[],fragments:[]},identityOnly:!1,caches:!1};if(void 0!==t.description&&("string"!=typeof t.description?a(s.invalidDefinition,"'description' must be a string",n("description")):i.description=t.description),void 0!==t.metadata&&(q(t.metadata)?i.metadata=t.metadata:a(s.invalidDefinition,"'metadata' must be a plain object",n("metadata"))),void 0!==t.parameters)if(q(t.parameters))for(const[e,r]of Object.entries(t.parameters)){const t=Wr(e,r,n,a);void 0!==t&&(i.parameters[e]=t)}else a(s.invalidDefinition,"'parameters' must be a plain object",n("parameters"));return i},Wr=(e,t,a,n)=>{const o=a("parameters",e),i=r(e);if(!i.ok)return void n(s.invalidName,`'${e}' is not a legal parameter name: ${i.reason}`,o);if(P.has(e))return void n(s.reservedName,`'${e}' is a reserved node key and may not name a parameter`,o);if(!q(t))return void n(s.invalidDefinition,`the declaration of '${e}' must be an object`,o);for(const e of Object.keys(t))Ir.has(e)||n(s.invalidDefinition,`'${e}' is not a key of a parameter declaration`,[...o,e]);const l=t.type??"any";if(!H(l))return void n(s.invalidDefinition,`'${e}' declares an unknown type`,[...o,"type"]);if(void 0!==t.required&&"boolean"!=typeof t.required)return void n(s.invalidDefinition,"'required' must be a boolean",[...o,"required"]);let c;if(void 0!==t.constraints){const r=ee(t.constraints);if(!r.ok)return void n(s.invalidDefinition,`'${e}' declares invalid constraints: expected ${r.expected}, got ${r.actual}`,[...o,"constraints"]);c=t.constraints}const u="default"in t;if(u&&!0===t.required)return void n(s.invalidDefinition,`'${e}' is declared required and also declares a default — the default could never apply`,[...o,"default"]);if(u){const r=Q(t.default,l);if(!r.ok)return void n(s.typeCheck,`the default for '${e}' does not satisfy its declared type: expected ${r.expected}, got ${r.actual}`,[...o,"default"]);const a=ae(t.default,{constraints:c});if(!a.ok)return void n(s.typeCheck,`the default for '${e}' violates its declared constraints: expected ${a.expected}, got ${a.actual}`,[...o,"default"])}const d={type:l,required:t.required??!u};return u&&(d.default=t.default),"string"==typeof t.description&&(d.description=t.description),q(t.metadata)&&(d.metadata=t.metadata),void 0!==c&&(d.constraints=c),d},Br=e=>{const t=new Set,r=new Set,a=e=>{if(r.has(e.name)||t.has(e.name))return;t.add(e.name);const n=e.body;"fragmentCall"===n.kind&&void 0!==n.entry&&a(n.entry),e.returns=Gt(n),t.delete(e.name),r.add(e.name)};for(const t of e.fragments.values())a(t)},Jr=(e,t)=>L(e.keys(),t=>e.get(t)?.fragmentCalls.map(e=>e.name),([e,...r])=>t(s.fragmentCycle,`fragment '${e}' reaches itself: ${[e,...r,e].join(" → ")} — recursion is not supported`,["fragments",e])),Ur=(e,t)=>{const r=new Set,a=n=>{if(r.has(n))return;r.add(n);const o=e.fragments.get(n),s=t.get(n);if(void 0===o||void 0===s)return;for(const e of s.fragmentCalls)a(e.name);const i=Ge(s.own,s.fragmentCalls,e.fragments);o.nodeCount=i.nodeCount,o.maxDepth=i.maxDepth,o.dependencies=i.dependencies,o.identityOnly=i.identityOnly,o.caches=xr(s),o.timeoutFallback=Gr(n,s,e.fragments)};for(const e of t.keys())a(e)},Gr=(e,t,r)=>{const{root:a,holes:n}=t;if(0===n.length)return;const o=[];for(const e of n){const t=Kr(e,r);if(void 0===t)return;o.push(t)}const s=[];let i=0;const l=(t,r)=>{if("skeleton"===t.kind)return We(t.skeleton,t.holes,t.holes.map(e=>l(e.node,[...r,...e.at])));const{value:a,reads:n=[]}=o[i++],c={..."operator"===t.kind?{operator:t.name}:{},fragment:e,fragmentPath:Me(t.path)};for(const e of n)s.push({...e,at:[...r,...e.at],within:e.within??c});return a},c=l(a,[]);return 0===s.length?{value:c}:{value:c,reads:s}},Kr=(e,t)=>{if(void 0!==e.timeoutFallback)return e.timeoutFallback;const{node:r}=e;return"fragmentCall"===r.kind&&void 0===r.fallback?t.get(r.name)?.timeoutFallback:void 0},_r=e=>e.definition.cache&&!0!==e.hostDefaults?.noCache,Hr=["fallback","noCache"],Qr=e=>{const t=[],r=(e,r,a,n)=>{t.push({severity:"error",code:e,message:r,path:a,...void 0!==n?{operator:n}:{}})},a={operators:new Map,aliases:new Map,fragments:new Map},{operators:n,aliases:o}=a,i=new Map,l=(e,t,a)=>{const n=i.get(e);return void 0!==n?(r(s.duplicateOperator,`'${e}' is already registered (by '${n}') — one namespace, no silent precedence`,t,a),!1):(i.set(e,a),!0)},c=(e,t)=>{if("function"==typeof e)return void r(s.invalidOptions,`operators[${t[1]}]${t.length>2?`[${t[2]}]`:""} is a function — factories must be called: httpOperators(client)`,t);if(!le(e))return void r(s.invalidOptions,"every operators entry must be built with defineOperator() — a plain definition object is not accepted",t);const{name:a,alias:i}=e,c=l(a,t,a),u=void 0===i||l(i,t,a);c&&u&&(n.set(a,{definition:e}),void 0!==i&&o.set(i,a))};if(Array.isArray(e.operators)?e.operators.forEach((e,t)=>{Array.isArray(e)?e.forEach((e,a)=>{Array.isArray(e)?r(s.invalidOptions,"'operators' is flattened one level only — arrays may not nest deeper",["operators",t,a]):c(e,["operators",t,a])}):c(e,["operators",t])}):r(s.invalidOptions,"'operators' must be an array",["operators"]),void 0!==e.operatorDefaults&&Xr(e.operatorDefaults,n,o,r),((e,t,r,a)=>{if(void 0===e)return;if(!q(e))return void a(s.invalidOptions,"'fragments' must be a plain object",["fragments"]);for(const[n,o]of Object.entries(e)){const e=Lr(n,o,a);void 0!==e&&r(n,["fragments",n])&&t.fragments.set(n,e)}const n=new Map;for(const[r,a]of t.fragments){const o=e[r],s=Ue(o.expression,t,{basePath:["expression"]});a.body=s.root,n.set(r,s)}Br(t);for(const[e,r]of t.fragments){const t=n.get(e);Ht(t,{fragmentParams:new Set(Object.keys(r.parameters))});for(const{issue:r}of t.issues)"error"===r.severity&&a(r.code,`fragment '${e}': ${r.message}`,["fragments",e,...r.path])}Jr(n,a)&&Ur(t,n);for(const[e,r]of t.fragments)for(const{issue:t}of n.get(e).issues)if("error"!==t.severity){const e={...t,path:[...t.path]};Object.freeze(e.path),r.warnings.push(Object.freeze(e))}})(e.fragments,a,(e,t)=>l(e,t,e),r),t.length>0)throw z(s.invalidOptions,t,t[0].operator);return a},Xr=(e,t,r,a)=>{if(q(e))for(const[n,o]of Object.entries(e)){const e=["operatorDefaults",n],i=t.get(n);if(void 0===i){const t=r.get(n);void 0!==t?a(s.invalidOptions,`'operatorDefaults' keys are canonical names — use '${t}', not its alias '${n}'`,e,t):a(s.unknownOperator,`'${n}' names no registered operator`,e);continue}if(!q(o)){a(s.invalidOptions,`the defaults for '${n}' must be a plain object`,e,n);continue}let l,c=!0;for(const[t,r]of Object.entries(o)){const o=[...e,t];if(Hr.includes(t)){"fallback"===t&&(l=Se(r),void 0===l&&(a(s.invalidOptions,`the default fallback for '${n}' must be static, built only from literals and $error reads — it is never evaluated`,o,n),c=!1)),"noCache"===t&&(!0!==r?(a(s.invalidOptions,"the 'noCache' modifier takes only the literal true",o,n),c=!1):i.definition.cache||(a(s.invalidOptions,`'noCache' on '${n}', which never caches — its definition does not declare 'cache: true'`,o,n),c=!1));continue}const u=i.definition.parameters[t];if(void 0===u){a(s.invalidOptions,`'${t}' names no declared parameter of '${n}' (nor 'fallback'/'noCache')`,o,n),c=!1;continue}if(u.required){a(s.invalidOptions,`'${t}' is a required parameter of '${n}' — operatorDefaults may only target optional parameters`,o,n),c=!1;continue}const d=Q(r,u.type);if(!d.ok){a(s.typeCheck,`the default for '${n}.${t}' does not satisfy its declared type: expected ${d.expected}, got ${d.actual}`,o,n),c=!1;continue}const f=ae(r,u);f.ok||(a(s.typeCheck,`the default for '${n}.${t}' violates its declared constraints: expected ${f.expected}, got ${f.actual}`,o,n),c=!1)}c&&(i.hostDefaults=Object.freeze({...o}),void 0!==l&&(i.defaultFallback=l))}else a(s.invalidOptions,"'operatorDefaults' must be a plain object",["operatorDefaults"])},Yr=(e,t)=>{const r=e.operators.get(t);if(void 0!==r)return r;const a=e.aliases.get(t);return void 0!==a?e.operators.get(a):void 0},Zr="fig-tree:scope-settled",ea="fig-tree:request-expired",ta="fig-tree:evaluation-timeout";class ra{parent;controller;upstream;forward;settled=!1;verified=-1;clock;constructor(e){this.parent=e,this.clock=void 0===e?{epoch:0}:e.clock}get aborted(){return void 0!==this.controller?this.controller.signal.aborted:!!this.settled||this.verified!==this.clock.epoch&&(!(void 0===this.parent||!this.parent.aborted)||(this.verified=this.clock.epoch,!1))}get reason(){return void 0!==this.controller?this.controller.signal.reason:this.settled?Zr:this.parent?.reason}get signal(){if(void 0===this.controller){const e=new AbortController;if(this.controller=e,this.settled)e.abort(Zr);else if(void 0!==this.parent){const t=this.parent.signal;t.aborted?e.abort(t.reason):(this.upstream=t,this.forward=()=>e.abort(t.reason),t.addEventListener("abort",this.forward,{once:!0}))}}return this.controller.signal}settle(){this.settled||(this.settled=!0,this.clock.epoch+=1,void 0!==this.controller&&(void 0!==this.upstream&&void 0!==this.forward&&this.upstream.removeEventListener("abort",this.forward),this.controller.abort(Zr)))}}const aa=(e,t,r=E)=>({get aborted(){return e.aborted},get reason(){return e.reason},signal:e,clock:t,settle:r}),na=(e,t,r)=>{const a=new AbortController,{signal:n}=a,o=()=>a.abort(e?.reason);let s;e?.aborted?o():e?.addEventListener("abort",o,{once:!0});const i=new Promise((e,t)=>{s=t});i.catch(E);const l=()=>s(n.reason);n.aborted?l():n.addEventListener("abort",l,{once:!0});const c=void 0===t?void 0:setTimeout(()=>a.abort(r),Math.min(t,2147483647));return{signal:n,expiry:i,settle:()=>{void 0!==c&&clearTimeout(c),n.removeEventListener("abort",l),e?.removeEventListener("abort",o),a.abort(Zr)}}},oa=(e,t)=>na(e,t,ea),sa=(e,t)=>(r,a)=>{const n=(o=[e.operator,e.fingerprint,r],Mr(o,[]));var o;return void 0===n?a():(async(e,t,r,a)=>{const n=e.generation,o=await e.lookup(t);if(a?.({type:"cache",hit:o.hit}),o.hit)return o.value;const s=await r();return await e.write(t,s,n),s})(t,n,a,e.note)},ia=/*#__PURE__*/Object.freeze({}),la=(e,t)=>!0!==t||!0===e.noCache?e:{...e,noCache:t};class ca{options;cache;trace;#e;constructor(e,t,r,a){this.options=t,this.cache=r,this.trace=a,this.#e=e}get signal(){return this.#e.signal}}const ua={memo:(e,t)=>t()},da={note:E},fa=Symbol("fig-tree:internal-error"),pa=e=>ja(`[fig-tree internal] ${e}`,fa),ma=e=>pa(`${e} reached evaluation — the static gate should have refused it`),ha=(t,r,a,n)=>new e({code:r,message:`${t.name} – ${a}`,path:Me(t.path),operator:t.name,errorData:n}),va=e=>Aa(e,fa),ya=Symbol("fig-tree:cancelled"),ga=()=>ja("[fig-tree] evaluation cancelled",ya),ba=e=>Aa(e,ya),ka=(e,t,r)=>e.rootScope.aborted?wa(e.rootScope.reason,t,r):e.abortScope.aborted?ga():void 0,wa=(e,t,r)=>e===Zr?ga():$a(e,Me(t),{operator:r}),$a=(t,r,a={})=>{const{operator:n,ms:o}=a,i=t===ta,l=void 0===o?"":`${o}ms `;return new e({code:i?s.timeout:s.aborted,message:i?`evaluation exceeded its ${l}timeout`:"evaluation was aborted by the caller",path:r,...void 0!==n?{operator:n}:{}})},xa=e=>va(e)||ba(e)||(e=>D(e)&&(e.code===s.aborted||e.code===s.timeout))(e),ja=(e,t)=>{const r=new Error(e);return Oa(r,t),r},Oa=(e,t)=>{e[t]=!0},Aa=(e,t)=>e instanceof Error&&!0===e[t],Pa=()=>performance.now(),Da=e=>{const t=new Map,r=new WeakMap,a=new WeakSet;let n;const o=(e,r,n)=>{const o=t.get(e);if(void 0===o)return;t.delete(e),a.has(e)||("fallback"!==e.status&&(e.status=r),void 0!==n.error&&void 0===e.error&&(e.error=n.error),"failed"!==r&&"cancelled"!==r&&(e.value=n.value),void 0!==n.elapsed&&(e.elapsed=n.elapsed));const s=[...o.children,...Ca(o)];s.length>0&&(e.children=s.sort((e,t)=>e.order-t.order||e.index-t.index).map(e=>e.entry))},s=(e,t)=>{(e.events??=[]).push(t)},i=(e,a,o,s)=>{const i=Ma(e),l=qa(e),c={path:Me(e.path),kind:za(e),status:"value",...void 0!==o?{source:o}:{},...void 0!==i?{operator:i}:{},...void 0!==l?{ref:l}:{},...void 0!==s?.var?{var:s.var}:{}};return t.set(c,{node:e,children:[],seen:new Set,started:Pa()}),r.set(e,c),((e,r,a)=>{if(void 0===e)return void(n=r.entry);const o=t.get(e);void 0!==o&&(o.children.push(r),o.seen.add(a))})(a,{entry:c,order:e.order,index:s?.index??0},e),c};return{enter:(e,t,r,a)=>i(e,t,void 0!==r?{fragment:r.fragment}:void 0,a),settle:o,markFallback:(e,t)=>{e.status="fallback",e.error=t},note:s,markShielded:(e,n,l)=>{const c=r.get(e),u=void 0===c?void 0:t.get(c);if(void 0===c||void 0===u)return;a.add(c),c.status="fallback",c.error=n,c.value=l,c.elapsed=Pa()-u.started,s(c,{type:"shielded-fallback"});const d=Ea(e);void 0!==d&&o(i(d,c,c.source,void 0),"value",{value:l})},finish:()=>{for(const e of[...t.keys()].reverse())o(e,"cancelled",{});return void 0!==n&&e.length>0&&(n.warnings=e),n}}},Ca=e=>Na(e.node).filter(t=>!e.seen.has(t)).map(e=>({entry:{path:Me(e.path),kind:za(e),status:"skipped"},order:e.order,index:0})),Na=e=>{const t=qe(e).flatMap(Sa);return"fragmentCall"===e.kind&&void 0!==e.entry&&t.push(e.entry.body),t},Sa=e=>"elements"===e.kind||"entries"===e.kind?Na(e):[e],za=e=>{switch(e.kind){case"operator":return"operator";case"fragmentCall":return"fragment";case"reference":return"reference";case"skeleton":return"skeleton";default:return"literal"}},Ea=e=>"operator"===e.kind||"fragmentCall"===e.kind?e.fallback:void 0,Ma=e=>"operator"===e.kind||"fragmentCall"===e.kind?e.name:void 0,qa=e=>"reference"===e.kind?e.raw:void 0,Fa=async(e,t,r,a,n)=>{let o;try{o=await e()}catch(e){if(xa(e))throw e;if(!r){const r=a(e);throw D(r)&&r!==t&&void 0===r.cause&&(r.cause=t),r}o=null}return void 0!==n.trace&&void 0!==n.traceParent&&D(t)&&n.trace.markFallback(n.traceParent,t),o},Ta=(e,t)=>{if(void 0===t)return e;const r={parent:e.scope,vars:new Map},a={...e,scope:r};for(const[e,n]of Object.entries(t))r.vars.set(e,R(()=>Cn(n,a,{var:e})));return a},Va=async(e,t,r,a,n)=>{const o={...r,params:"dynamic"===e.argumentsMode?await Ra(e,t,a):Ia(e,t,a),frame:n};delete o.scope,delete o.bindings,delete o.caught;const s=await Cn(t.body,o);return void 0===s?null:s},Ia=(e,t,r)=>{const a=e.parameters??{},n=new Map;for(const[o,s]of Object.entries(t.parameters)){const t=a[o],i=R(async()=>{if(void 0===t)return La(e,o,s,r);let a;try{a=await Cn(t,r)}catch(e){throw Ua(e,r.frame)}return Wa(e,o,s,a,t.path,r)});n.set(o,()=>{const e=i();return e.catch(E),e})}return n},Ra=async(e,t,r)=>{const a=e.parameters;let n;try{n=await Cn(a,r)}catch(e){throw Ua(e,r.frame)}if(!q(n))throw Ua(Ba(e,s.typeCheck,`'parameters' must evaluate to an object, received ${B(n)}`,a.path),r.frame);const o=new Map;for(const[s,i]of Object.entries(t.parameters)){const t=Object.hasOwn(n,s)?Wa(e,s,i,n[s],a.path,r):La(e,s,i,r,a.path);o.set(s,()=>Promise.resolve(t))}return o},La=(e,t,r,a,n=e.path)=>{if(!r.required)return r.default??null;throw Ua(Ba(e,s.missingRequired,`requires '${t}'`,n),a.frame)},Wa=(e,t,r,a,n,o)=>{const i=void 0===a?null:a;if(null===i&&K(r))return r.default??null;const l=ne(i,r);if(!l.ok)throw Ua(Ba(e,s.typeCheck,`parameter '${t}': expected ${l.expected}, received ${l.actual}`,n),o.frame);return i},Ba=(t,r,a,n)=>new e({code:r,message:`fragment '${t.name}' – ${a}`,path:Me(n)}),Ja=Symbol("fig-tree:anchored"),Ua=(e,t)=>!D(e)||Aa(e,Ja)?e:(Oa(e,Ja),void 0===t?e:Object.assign(e,Ga(e,t))),Ga=(e,t)=>({fragment:t.fragment,fragmentPath:e.path,path:Me(t.callPath)}),Ka=(e,t)=>{const r=void 0===t||Aa(e,Ja)?e:Ga(e,t),a={code:e.code,message:e.message,path:r.path};return void 0!==e.operator&&(a.operator=e.operator),void 0!==r.fragment&&(a.fragment=r.fragment),void 0!==r.fragmentPath&&(a.fragmentPath=r.fragmentPath),void 0!==e.errorData&&(a.errorData=e.errorData),a};class _a extends Error{constructor(e,t={}){super(e),this.name="OperatorFailure",void 0!==t.code&&(this.code=t.code),void 0!==t.errorData&&(this.errorData=t.errorData)}}const Ha=e=>e instanceof _a,Qa=(e,t,r)=>Ya(Array.from({length:e},(e,a)=>Xa(a,()=>t(a),r)),e),Xa=async(e,t,r)=>{try{return{index:e,ok:!0,value:r(await t())}}catch(t){return{index:e,ok:!1,error:t}}},Ya=(e,t)=>{const r=new Map(e.map((e,t)=>[t,e]));return{[Sr]:!0,length:t,async*[Symbol.asyncIterator](){for(;r.size>0;){const e=await Promise.race(r.values());r.delete(e.index),yield e}}}},Za=e=>({[Sr]:!0,evaluate:R(e)}),en=e=>({[Sr]:!0,evaluate:()=>Promise.resolve(e)}),tn=(e,t,r,a,n)=>Za(async()=>rn(await Cn(e,n),t,r,a)),rn=(e,t,r,a)=>{const n=ne(e,a);if(!n.ok)throw ln(t,r,n);return a.truthiness?fn(e,a.type):e},an=(e,t,r,a,n,o)=>{const s=Array.isArray(t)?t:[],i=Ie(r),l=new Map,c=t=>{const c=l.get(t);if(void 0!==c)return c;const u=(async()=>rn(await Cn(e,((e,t,r,a)=>({...e,bindings:{parent:e.bindings,as:t,element:r,index:a}}))(o,i,s[t],t),{index:t}),r,a,n))();return u.catch(E),l.set(t,u),u};return{[Sr]:!0,evaluate:c,settle:()=>Qa(s.length,c,e=>e)}},nn=(e,t)=>t.truthiness?ue(e):e,on=(e,t,r)=>{if("lazyElements"===t.evaluation&&"elements"===e.kind)return e.nodes.map((e,a)=>Za(async()=>nn(await Cn(e,r,{index:a}),t)));if("race"===t.evaluation&&"elements"===e.kind)return((e,t,r)=>Qa(e.length,r=>Cn(e[r],t,{index:r}),r))(e.nodes,r,e=>nn(e,t));if("lazyEntries"===t.evaluation&&"entries"===e.kind){const a=Ta(r,e.vars),n={};for(const[r,o]of Object.entries(e.entries))n[r]=Za(async()=>nn(await Cn(o,a),t));return n}},sn=(e,t)=>{switch(t.evaluation){case"lazyElements":return e.map(e=>en(nn(e,t)));case"race":return((e,t)=>Qa(e.length,t=>Promise.resolve(e[t]),t))(e,e=>nn(e,t));case"lazyEntries":{const r={};for(const[a,n]of Object.entries(e))r[a]=en(nn(n,t));return r}case"lazy":return en(e);default:return e}},ln=(e,t,r)=>ha(e,s.typeCheck,`parameter '${t}': expected ${r.expected}, received ${r.actual}`),cn=(e,t,r)=>{if("string"==typeof t.nullPolicy)return t.nullPolicy;const a=t.nullPolicy,n=e.entry.definition.parameters[a.selector],o=r[a.selector],s=Q(o,n.type);if(!s.ok)throw ln(e,a.selector,s);return a.table.find(e=>e.value===o).policy},un=async(e,t,r)=>{if(void 0!==t.elementNullPolicy){if(Array.isArray(e)&&e.includes(null)){const t=await r();return e.map(e=>null===e?t:e)}if(q(e)&&Object.values(e).includes(null)){const t=await r(),a={};for(const[r,n]of Object.entries(e))a[r]=null===n?t:n;return a}return e}return null===e?r():e},dn=e=>Array.isArray(e)?e.includes(null):!!q(e)&&Object.values(e).includes(null),fn=(e,t)=>{if((e=>!("object"==typeof e&&!Array.isArray(e))&&(Array.isArray(e)?e:[e]).every(e=>"array"===e||"object"===e))(t)){if(Array.isArray(e))return e.map(ue);if(q(e)){const t={};for(const[r,a]of Object.entries(e))t[r]=ue(a);return t}}return ue(e)},pn=(e,t)=>0===e.segments.length?t.data:kn(t.data,e.segments,e,t,"is absent from the evaluation data"),mn=async(e,t)=>{const[r,...a]=e.segments,n="string"==typeof r?((e,t)=>{for(let r=e;void 0!==r;r=r.parent){const e=r.vars.get(t);if(void 0!==e)return e}})(t.scope,r):void 0;if("string"!=typeof r||void 0===n)throw ma(`'${e.raw}'`);const o=await n();return 0===a.length?wn(o):kn(o,a,e,t,`is absent from the value of '$vars.${r}'`)},hn=async(e,t)=>{const r=t.params;if(void 0===r)throw ma(`'${e.raw}'`);const[a,...n]=e.segments;if(void 0===a){const e={};return await Promise.all([...r].map(async([t,r])=>{e[t]=wn(await r())})),e}const o="string"==typeof a?r.get(a):void 0;if(void 0===o)throw ma(`'${e.raw}'`);const s=await o();return 0===n.length?wn(s):kn(s,n,e,t,`is absent from the value of '$params.${String(a)}'`)},vn=(e,t)=>{const r=e.namespace,a=((e,t,r)=>{for(let a=e;void 0!==a;a=a.parent)if(Re(a.as,t,r))return a})(t.bindings,r,e.binding);if(void 0===a)throw ma(`'${e.raw}'`);return"index"===r?a.index:0===e.segments.length?wn(a.element):kn(a.element,e.segments,e,t,`is absent from '${e.raw.split(".")[0]}'`)},yn=(e,t)=>{if(void 0===t.caught)throw ma(`'${e.raw}'`);return gn(Ka(t.caught,t.frame),e.segments)},gn=(e,t)=>{if(0===t.length)return e;const r=x(e,t);return r.found?wn(r.value):null},bn=(e,t,r)=>{const{value:a,reads:n}=e;if(void 0===n)return a;const o=Ka(t,r),s=n.map(({segments:e,within:t})=>gn(void 0===t?o:{...o,...t},e));return 0===n[0].at.length?s[0]:We(a,n,s)},kn=(t,r,a,n,o)=>{const i=x(t,r);if(i.found)return wn(i.value);if(!n.strictDataPaths)return null;throw new e({code:s.missingDataPath,message:`'${a.raw}' ${o} (strictDataPaths)`,path:Me(a.path)})},wn=e=>void 0===e?null:e,$n=async(e,t)=>{const{params:r,propagate:a}=await(async(e,t)=>{const{definition:r,hostDefaults:a}=e.entry,{entries:n,whole:o,perElement:s}=r.resolution,i=[],l=[],c={};let u;const d={};for(const[r,o]of n){const n=e.params[r];switch(o.evaluation){case"eager":void 0!==n&&(i.push(r),l.push(Cn(n,t)));break;case"structural":"constant"===n?.kind&&(c[r]=n.value);break;case"lazy":if(void 0!==o.replacesNullAt){const e=void 0!==n?R(()=>Cn(n,t)):void 0!==a&&Object.hasOwn(a,r)?R(()=>a[r]):void 0;if(void 0!==e)for(const t of o.replacesNullAt)(u??={})[t]=e;break}void 0!==n&&(d[r]=tn(n,e,r,o,t));break;case"lazyElements":case"lazyEntries":case"race":{if(void 0===n)break;const e=on(n,o,t);if(void 0!==e){d[r]=e;break}i.push(r),l.push(Cn(n,t));break}case"perElement":break;default:o.evaluation}}if(l.length>0)if(1===l.length){const e=l[0];c[i[0]]=M(e)?await e:e}else{const e=await Promise.all(l);i.forEach((t,r)=>{c[t]=e[r]})}for(const[e,r]of o){if(Object.hasOwn(d,e))continue;const n=c[e];(void 0===n||null===n&&K(r))&&(void 0!==a&&Object.hasOwn(a,e)?c[e]=a[e]:"default"in r?c[e]=r.default===se?t.data:r.default:delete c[e])}for(const[t,r]of o){if(Object.hasOwn(d,t))continue;let a=c[t];if(void 0===a)continue;const n=u?.[t];void 0!==n&&(a=await un(a,r,n));const o="eager"!==r.evaluation&&"structural"!==r.evaluation;if(null===a&&G(r.type)&&!o&&"propagate"===cn(e,r,c))return{params:d,propagate:!0};if("propagate"===r.elementNullPolicy&&dn(a))return{params:d,propagate:!0};a=rn(a,e,t,r),d[t]=sn(a,r)}for(const[r,a]of s){const n=e.params[r];void 0!==n&&(d[r]=an(n,d[a.over],e,r,a,t))}return{params:d,propagate:!1}})(e,t);if(a)return null;const{definition:n}=e.entry,o=!0!==t.noCache&&_r(e.entry),s=jn(n,r),i=void 0===s?void 0:oa(t.abortScope.signal,s),l=void 0===i?t:{...t,abortScope:aa(i.signal,t.abortScope.clock)},c=(e=>{const{trace:t,traceParent:r}=e;if(void 0!==t&&void 0!==r)return e=>{t.note(r,e)}})(t),u=((e,t,r,a)=>new ca(e.abortScope,e.options,r?{memo:sa({operator:t.name,fingerprint:t.fingerprint,note:a},e.cache)}:ua,void 0===a?da:{note:a}))(l,n,o,c);try{return await xn(e,t,r,u,i)}catch(r){throw On(r,e,t,i,s)}finally{i?.settle()}},xn=async(e,t,r,a,n)=>{const o=ka(t,e.path,e.name);if(void 0!==o)throw o;const s=Promise.resolve(e.entry.definition.evaluate(r,a));return void 0===n?Pn(await s,e):(s.catch(E),Pn(await Promise.race([s,n.expiry]),e))},jn=(e,t)=>{const r=e.timeoutParam;if(null===r)return;const a=t[r];return"number"==typeof a&&a>0?a:void 0},On=(e,t,r,a,n)=>{if(va(e)||ba(e))return e;const o=ka(r,t.path,t.name);return void 0!==o?o:a?.signal.reason===ea?new _a(`request exceeded its ${String(n)}ms timeout`,{code:s.requestTimeout}):e},An=(e,t,r)=>{const a=e.fallback;if(void 0!==a)return()=>Cn(a,{...t,caught:r});const n=e.entry.defaultFallback;return void 0!==n?()=>bn(n,r,t.frame):void 0},Pn=(e,t)=>{if(void 0===e)return null;if("number"==typeof e&&!Number.isFinite(e))throw ha(t,s.nonFiniteResult,`produced a non-finite number (${String(e)})`);if("object"==typeof(r=e)&&null!==r&&!0===r[Sr])throw ha(t,s.escapedHandle,"returned a lazy handle instead of evaluating it");var r;return e},Dn=(e,t)=>{if(D(e))return e;const r=Ha(e)?e:void 0;return ha(t,r?.code??s.operatorFailure,e instanceof Error?e.message:String(e),r?.errorData)},Cn=(e,t,r)=>void 0!==t.trace?Nn(e,t,t.trace,r):t.abortScope.aborted?Promise.reject(ka(t,e.path)):Sn(e,t),Nn=async(e,t,r,a)=>{const n=r.enter(e,t.traceParent,t.frame,a),o=Pa();try{if(t.abortScope.aborted)throw ka(t,e.path);const a=await Sn(e,{...t,traceParent:n});return r.settle(n,"value",{value:a,elapsed:Pa()-o}),a}catch(e){throw r.settle(n,ba(e)?"cancelled":"failed",{...D(e)?{error:e}:{},elapsed:Pa()-o}),e}},Sn=(e,t)=>{try{switch(e.kind){case"constant":return e.value;case"reference":return((e,t)=>{switch(e.namespace){case"data":return pn(e,t);case"vars":return mn(e,t);case"params":return hn(e,t);case"element":case"index":return vn(e,t);case"error":return yn(e,t)}})(e,t);case"skeleton":return zn(e,t);case"operator":return(async(e,t)=>{const r=Ta(la(t,e.noCache),e.vars),a=e.entry.definition.deliversLazily?new ra(r.abortScope):void 0,n=void 0===a?r:{...r,abortScope:a};try{try{return await $n(e,n)}finally{a?.settle()}}catch(a){if(xa(a))throw a;const n=Dn(a,e),o=An(e,r,n);if(void 0===o)throw n;return Fa(o,n,e.fallbackReadsError,t=>Dn(t,e),t)}})(e,t);case"fragmentCall":return(async(e,t)=>{const{entry:r}=e;if(void 0===r)throw ma(`fragment call '${e.name}'`);const a=Ta(la(t,e.noCache),e.vars),n=new ra(a.abortScope),o={fragment:e.name,callPath:t.frame?.callPath??e.path},s={...a,abortScope:n};try{try{return await Va(e,r,s,a,o)}finally{n.settle()}}catch(r){if(xa(r))throw r;const n=Ua(r,o),{fallback:s}=e;if(void 0===s)throw n;const i=D(n)?{...a,caught:n}:a;return Fa(()=>Cn(s,i),n,e.fallbackReadsError,e=>Ua(e,t.frame),t)}})(e,t);default:throw pa(`a '${e.kind}' node reached the node dispatch`)}}catch(e){return Promise.reject(e)}},zn=async(e,t)=>{const r=t.rootBoundary,a=void 0===r?t:{...t,rootBoundary:void 0},n=Ta(a,e.vars),o=e.holes.map(({node:e})=>void 0===r?Cn(e,n):"skeleton"===e.kind?Cn(e,{...n,rootBoundary:r}):r(()=>Cn(e,n),e)),s=o.some(M)?await Promise.all(o):o;return We(e.skeleton,e.holes,s)},En=async(e,t,r)=>{const{timeout:a,signal:n}=t,o=e.holes.length>0,s=void 0!==a||void 0!==n?na(n,a,ta):void 0,i=void 0!==s?((e,t)=>{const r={epoch:0};return e.addEventListener("abort",()=>{r.epoch+=1},{once:!0}),aa(e,r,t)})(s.signal,s.settle):new ra(void 0),l=void 0!==s&&void 0!==a&&e.timeoutShielded&&o,c=!0===t.trace?Da(e.issues.map(e=>e.issue).filter(e=>"error"!==e.severity)):void 0,u=((e,t,r,a)=>({options:e,data:e.data??ia,abortScope:r,rootScope:r,cache:t,strictDataPaths:e.strictDataPaths??!1,...void 0!==a?{trace:a}:{}}))(t,r,i,c),d=l?qn(e,s.expiry,a,c):void 0,f=void 0!==d&&"skeleton"!==e.root.kind,p=void 0===d||f?u:{...u,rootBoundary:d};try{if(i.aborted)throw $a(i.reason,[]);const t=()=>f&&void 0!==d?d(()=>Cn(e.root,p),e.root):Cn(e.root,p),r=await(l||void 0===s?t():Mn(t,s,a));return void 0!==c?{result:r,trace:c.finish()}:{result:r}}catch(e){throw void 0!==c&&D(e)&&void 0===e.trace&&(e.trace=c.finish()),e}finally{i.settle()}},Mn=(e,t,r)=>Promise.race([e(),t.expiry.catch(e=>{throw $a(e,[],{ms:r})})]),qn=(e,t,r,a)=>{const n=new Map(e.holes.map(e=>[e.node,e]));return(e,o)=>{const s=n.get(o);let i=!1;const l=Promise.resolve(e()).then(e=>(i=!0,e));return Promise.race([l,t.catch(e=>{if(e!==ta)throw $a(e,[]);if(i)return;const t=Fn(s,e,r),n=Tn(s,t);return a?.markShielded(s.node,t,n),n})])}},Fn=(e,t,r)=>{const{node:a}=e,n="operator"===a.kind?a.name:void 0;return $a(t,Me(a.path),{operator:n,ms:r})},Tn=(e,t)=>bn(e.timeoutFallback,t,void 0),Vn={hit:!1},In=e=>{if(void 0===e)return{maxSize:50,maxTime:1800};if(!n(e))throw Ln("'cache' must be an object");const{store:t,maxSize:r,maxTime:a}=e;if(void 0!==t&&!Rn(t))throw Ln("'cache.store' must provide get, set, delete and clear methods");if(void 0!==r&&(!Number.isInteger(r)||r<1))throw Ln("'cache.maxSize' must be a positive integer");if(void 0!==a&&("number"!=typeof a||a<=0||Number.isNaN(a)))throw Ln("'cache.maxTime' must be a positive number of seconds, or Infinity");return{...void 0!==t?{store:t}:{},maxSize:r??50,maxTime:a??1800}},Rn=e=>"object"==typeof e&&null!==e&&["get","set","delete","clear"].every(t=>"function"==typeof e[t]),Ln=t=>new e({code:s.invalidOptions,message:t,path:[]});class Wn{store;own;maxTime;current=0;constructor(e){void 0===e.store?(this.own=new Nr(e.maxSize),this.store=this.own):this.store=e.store,this.maxTime=e.maxTime}get generation(){return this.current}async lookup(e){let t;try{t=await this.store.get(e)}catch{return Vn}return n(r=t)&&"ft3"===r.fig&&"number"==typeof r.generation?t.generation<this.current||Bn(t)?(this.drop(e),Vn):{hit:!0,value:t.value}:Vn;var r}async write(e,t,r){if(r!==this.current)return;const a={fig:"ft3",value:t,generation:r,...Number.isFinite(this.maxTime)?{expiresAt:Date.now()+1e3*this.maxTime}:{}};try{await this.store.set(e,a)}catch{}}clear(){this.current+=1;try{Promise.resolve(this.store.clear()).catch(E)}catch{}}configure(e){void 0===e.store?(this.own??=new Nr(e.maxSize),this.store=this.own):e.store!==this.store&&(this.store=e.store,this.own=void 0),this.maxTime=e.maxTime,this.own?.resize(e.maxSize)}drop(e){try{Promise.resolve(this.store.delete(e)).catch(E)}catch{}}}const Bn=e=>void 0!==e.expiresAt&&e.expiresAt<=Date.now(),Jn=e=>e===C?0:"number"==typeof e?1:2,Un=e=>({data:{paths:[...e.dataPaths].sort(([,e],[,t])=>((e,t)=>{const r=Math.min(e.length,t.length);for(let a=0;a<r;a++){const r=e[a],n=t[a];if(r===n)continue;const o=Jn(r)-Jn(n);return 0!==o?o:"number"==typeof r&&"number"==typeof n?r-n:r<n?-1:1}return e.length-t.length})(e,t)).map(([e])=>e),dynamic:e.dynamic},operators:[...e.operators],fragments:[...e.fragments]}),Gn=(e,t)=>{const r={};for(const[a,n]of Object.entries(e)){const e={...n};void 0!==t&&Object.hasOwn(t,a)&&(e.hostDefault=t[a]),r[a]=e}return r},Kn=(e,t)=>{const r=[];return void 0!==t.maxDepth&&e.maxDepth>t.maxDepth&&r.push(Hn(e.maxDepth,t.maxDepth)),void 0!==t.maxNodes&&e.nodeCount>t.maxNodes&&r.push({severity:"error",code:s.maxNodesExceeded,message:`the expression holds ${e.nodeCount} evaluable nodes — maxNodes is ${t.maxNodes}`,path:[]}),r},_n=(e,t)=>e.hasErrors||void 0!==t.maxDepth||void 0!==t.maxNodes?[...Kn(e,t),...e.issues.map(e=>e.issue)]:[],Hn=(e,t)=>({severity:"error",code:s.maxDepthExceeded,message:`the expression nests ${e} levels deep — maxDepth is ${t}`,path:[]}),Qn=(e,t,r)=>{const a=[...Kn(e,t),...e.issues.map(r)];return void 0!==t.data&&a.push(...Xn(e.dataReads,t.data)),a},Xn=(e,t)=>{const r=new Map,a=new Map,n=[],o=(e,o,i,l)=>{let c=r.get(e);if(void 0===c&&(c=x(t,o).found,r.set(e,c)),c)return;let u=a.get(i.path);if(void 0===u&&a.set(i.path,u=new Set),u.has(e))return;u.add(e);const d=void 0===l?"":` (read by fragment '${l}')`;n.push({severity:"warning",code:s.missingDataPath,message:`'${N(o)}' is absent from the supplied sample data${d}`,path:Me(i.path)})};for(const t of e)if("path"===t.kind)o(t.key,t.segments,t,void 0);else for(const[e,r]of t.fragment.dependencies.dataPaths)o(e,r,t,t.fragment.name);return n},Yn="...",Zn=e=>e,eo=e=>{const r=Object.entries(e.parameters),a=new Map;for(const[e,{nullPolicy:n}]of r){if("function"!=typeof n)continue;const[o,{type:s}]=r.find(([,e])=>void 0!==e.type&&t(e.type)),{literal:i}=s;a.set(e,{selector:o,table:i.map(e=>({value:e,policy:n(e)}))})}return to(e,a)},to=(e,t)=>{const r={};for(const[a,n]of Object.entries(e.parameters)){const e=t.get(a),o="string"==typeof n.nullPolicy?n.nullPolicy:void 0,s=n.type??"any",i=!0===n.truthiness&&G(s)?"value":"propagate",l={type:no(s),required:n.required??!("default"in n),evaluation:n.evaluation??"eager",truthiness:n.truthiness??!1,nullPolicy:e??o??i};"default"in n&&(l.default=n.default),void 0!==n.metadata&&(l.metadata=n.metadata),void 0!==n.elementNullPolicy&&(l.elementNullPolicy=n.elementNullPolicy),void 0!==n.constraints&&(l.constraints=oo(n.constraints)),void 0!==n.over&&(l.over=n.over),void 0!==n.replacesNullAt&&(l.replacesNullAt=[...n.replacesNullAt]),r[a]=l}const a=e.positionalParams?.at(-1),n=a?.startsWith(Yn)?a.slice(3):null,o={[ie]:!0,name:e.name,category:e.category,parameters:r,resolution:so(r),restParam:n,deliversLazily:Object.values(r).some(e=>"eager"!==e.evaluation&&"structural"!==e.evaluation),timeoutParam:e.timeoutParam??null,cache:!0===e.cache,fingerprint:"",evaluate:e.evaluate,returns:void 0!==e.returns?no(e.returns):"any"};return void 0!==e.alias&&(o.alias=e.alias),void 0!==e.metadata&&(o.metadata=e.metadata),void 0!==e.positionalParams&&(o.positionalParams=[...e.positionalParams]),void 0!==e.validate&&(o.validate=e.validate),void 0!==e.analysis&&(o.analysis=oo(e.analysis)),o.fingerprint=ro(o),io(o)},ro=e=>(e=>{let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")})(JSON.stringify([e.name,Object.entries(e.parameters).map(([e,t])=>[e,ao(t)]),e.positionalParams,e.restParam,e.returns,e.cache,e.timeoutParam,e.evaluate,e.validate],(e,t)=>"function"==typeof t||"symbol"==typeof t||t instanceof RegExp?String(t):t)),ao=e=>{const t={...e};return delete t.metadata,t},no=e=>"string"==typeof e?e:t(e)?{literal:[...e.literal]}:[...e],oo=e=>{if(Array.isArray(e))return e.map(oo);if(q(e)){const t={};for(const[r,a]of Object.entries(e))t[r]=oo(a);return t}return e},so=e=>{const t=Object.entries(e);return{entries:t,whole:t.filter(([,e])=>void 0===e.replacesNullAt&&"perElement"!==e.evaluation),perElement:t.filter(([,e])=>"perElement"===e.evaluation)}},io=e=>{for(const t of Object.values(e.parameters))"string"!=typeof t.type&&Object.freeze(t.type),"object"==typeof t.type&&"literal"in t.type&&Object.freeze(t.type.literal),"object"==typeof t.nullPolicy&&(t.nullPolicy.table.forEach(e=>Object.freeze(e)),Object.freeze(t.nullPolicy.table),Object.freeze(t.nullPolicy)),void 0!==t.constraints&&lo(t.constraints),void 0!==t.replacesNullAt&&Object.freeze(t.replacesNullAt),Object.freeze(t);Object.freeze(e.parameters);for(const t of Object.values(e.resolution))t.forEach(e=>Object.freeze(e)),Object.freeze(t);return Object.freeze(e.resolution),"string"!=typeof e.returns&&Object.freeze(e.returns),void 0!==e.positionalParams&&Object.freeze(e.positionalParams),Object.freeze(e)},lo=e=>{Array.isArray(e)?(e.forEach(lo),Object.freeze(e)):q(e)&&(Object.values(e).forEach(lo),Object.freeze(e))},co=e=>{if(Array.isArray(e))return e;try{return k(e)}catch(e){throw new _a(e.message)}},uo=(e,t)=>{if("string"!=typeof e)return[];try{return k(e),[]}catch(e){return[{severity:"error",parameter:t,message:e.message}]}},fo=e=>Array.isArray(e.values)&&0===e.values.length?[{severity:"error",parameter:"values",message:"an empty values array has no result — supply at least one value"}]:[],po=e=>t=>{const r=t[e];return Array.isArray(r)&&0===r.length?[{severity:"warning",parameter:e,message:`an empty ${e} array is a dead expression — the result is always the identity`}]:[]},mo=/*#__PURE__*/po("values"),ho=/*#__PURE__*/po("input"),vo=/*#__PURE__*/po("entries"),yo=e=>Array.isArray(e.values)&&e.values.length<2?[{severity:"warning",parameter:"values",message:"fewer than two values is a dead comparison — the result never varies"}]:[],go=(e,t)=>new _a(`${e} of nothing — the values array is empty${void 0!==t?`; ${t}`:""}`,{code:s.emptyAggregate}),bo=async(e,t)=>{const r=[];for await(const a of e){if(a.ok&&a.value===t)return t;a.ok||r.push(a)}if(r.length>0)throw r.sort((e,t)=>e.index-t.index),ko(r);return!t},ko=e=>{const[t,...r]=e,a=r.map(e=>e.error).filter(D);return a.length>0&&D(t.error)&&void 0===t.error.related&&(t.error.related=a),t.error},wo=async e=>{const t=new Array(e.length);let r=0;for await(const a of e){t[a.index]=a;for(let e=t[r];void 0!==e;e=t[r]){if(!e.ok)throw e.error;r+=1}}return t.map(e=>e?.value)},$o=(e,t)=>{const r=e=>t&&"string"==typeof e?e.toLowerCase():e;if(e.length<2)return!0;const a=r(e[0]);return e.every(e=>Pe(r(e),a))},xo={values:{type:"array",elementNullPolicy:"value"},caseInsensitive:{type:"boolean",default:!1}},jo={name:"equal",alias:"=",category:"comparison",parameters:xo,positionalParams:["...values"],returns:"boolean",validate:yo,evaluate:({values:e,caseInsensitive:t})=>$o(e,t)},Oo={name:"notEqual",alias:"!=",category:"comparison",parameters:xo,positionalParams:["...values"],returns:"boolean",validate:yo,evaluate:({values:e,caseInsensitive:t})=>!$o(e,t)},Ao=(e,t,r)=>({name:e,alias:t,category:"comparison",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{length:2,homogeneous:["number","string"]}},nullValueDefault:{type:["number","string"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"boolean",evaluate:({values:e})=>{const[t,a]=e;return r(de(t,a))}}),Po=/*#__PURE__*/Ao("greaterThan",">",e=>e>0),Do=/*#__PURE__*/Ao("greaterThanOrEqual",">=",e=>e>=0),Co=/*#__PURE__*/Ao("lessThan","<",e=>e<0),No=/*#__PURE__*/Ao("lessThanOrEqual","<=",e=>e<=0),So={number:()=>0,string:()=>"",array:()=>[],object:()=>({})},zo={name:"plus",alias:"+",category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number","string","array","object"]}},expect:{type:{literal:["number","string","array","object"]},required:!1},nullValueDefault:{type:["number","string","array","object"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:["number","string","array","object"],validate:({values:e,expect:t})=>void 0!==t?mo({values:e}):fo({values:e}),evaluate:({values:e,expect:t})=>{if(0===e.length){if(void 0===t)throw go("the sum","pin the mode with 'expect' to get its identity");return So[t]()}const r=B(e[0]);if(void 0!==t&&r!==t)throw new _a(`all operands must be ${t}s — received ${r}`,{code:s.typeCheck});switch(r){case"number":return e.reduce((e,t)=>e+t,0);case"string":return e.join("");case"array":return e.flat(1);case"object":return Object.assign({},...e)}}},Eo={name:"subtract",alias:"-",category:"math",parameters:{value:{type:["number","null"]},minus:{type:["number","null"]}},positionalParams:["value","minus"],returns:"number",evaluate:({value:e,minus:t})=>e-t},Mo={name:"divide",alias:"/",category:"math",parameters:{value:{type:["number","null"]},by:{type:["number","null"]}},positionalParams:["value","by"],returns:"number",evaluate:({value:e,by:t})=>e/t},qo={name:"modulo",category:"math",parameters:{value:{type:["number","null"]},mod:{type:["number","null"]}},positionalParams:["value","mod"],returns:"number",evaluate:({value:e,mod:t})=>(e%t+t)%t},Fo={name:"multiply",alias:"*",category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number"]}},nullValueDefault:{type:"number",required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"number",validate:mo,evaluate:({values:e})=>e.reduce((e,t)=>e*t,1)},To={name:"power",alias:"^",category:"math",parameters:{base:{type:["number","null"]},exponent:{type:["number","null"]}},positionalParams:["base","exponent"],returns:"number",evaluate:({base:e,exponent:t})=>e**t},Vo={name:"round",category:"math",parameters:{value:{type:["number","null"]},decimals:{type:"integer",default:0}},positionalParams:["value","decimals"],returns:"number",evaluate:({value:e,decimals:t})=>((e,t=0)=>{if(!Number.isFinite(e))return e;const r=e<0?-1:1,a=Math.round(je(Math.abs(e),t));return r*je(a,-t)})(e,t)},Io=(e,t,r="number")=>({name:e,category:"math",parameters:{value:{type:["number","null"]}},positionalParams:["value"],returns:r,evaluate:({value:e})=>t(e)}),Ro=/*#__PURE__*/Io("floor",Math.floor,"integer"),Lo=/*#__PURE__*/Io("ceil",Math.ceil,"integer"),Wo=/*#__PURE__*/Io("abs",Math.abs),Bo=(e,t,r)=>({name:e,category:"math",parameters:{values:{type:"array",elementNullPolicy:"propagate",constraints:{homogeneous:["number","string"]}},nullValueDefault:{type:["number","string"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:["number","string"],validate:fo,evaluate:({values:e})=>{const a=e;if(0===a.length)throw go(t);return a.reduce((e,t)=>r(de(t,e))?t:e)}}),Jo=(e,t)=>({name:e,category:"string",parameters:{value:{type:["string","null"]}},positionalParams:["value"],returns:"string",evaluate:({value:e})=>t(e)}),Uo={name:"split",category:"string",parameters:{value:{type:["string","null"]},delimiter:{type:"string",default:" "},trim:{type:"boolean",default:!0}},positionalParams:["value","delimiter"],returns:"array",evaluate:({value:e,delimiter:t,trim:r})=>{const a=""===t?xe(e):e.split(t);return r?a.map(ge):a}},Go=e=>Array.isArray(e.values)&&e.values.some(ve)?[{severity:"error",parameter:"values",message:ye}]:[],Ko={name:"join",category:"string",parameters:{values:{type:"array",elementNullPolicy:"value"},delimiter:{type:"string",default:" "},nullValueDefault:{type:["string","number","boolean"],required:!1,evaluation:"lazy",replacesNullAt:["values"]}},positionalParams:["...values"],returns:"string",validate:e=>[...mo(e),...Go(e)],evaluate:({values:e,delimiter:t},r)=>e.map((e,t)=>{const a=`[${t}]`;return null===e?r.trace.note({type:"render",token:a,rendered:"empty"}):ve(e)&&r.trace.note({type:"render",token:a,rendered:"placeholder"}),he(e)}).join(t)},_o=e=>{const t=new Set,r=[];for(const a of e)if("imsu".includes(a)){if(t.has(a))return`duplicate regex flag '${a}'`;t.add(a)}else r.includes(a)||r.push(a);if(0===r.length)return;const a=r.includes("g")||r.includes("y")?" — all matches is mode: 'match'":"";return`unknown regex flag${1===r.length?"":"s"}: ${r.join(", ")}${a}`},Ho={type:"array"},Qo={type:"string",required:!1,evaluation:"structural"},Xo={type:"array",required:!1,evaluation:"lazy",replacesNullAt:["input"]},Yo={type:"any",evaluation:"perElement",over:"input",truthiness:!0},Zo={name:"get",category:"data",parameters:{path:{type:["string","array","null"]},from:{type:"any",nullPolicy:"value",default:se},default:{type:"any",required:!1,evaluation:"lazy"}},positionalParams:S,returns:"any",validate:({path:e})=>uo(e,"path"),evaluate:({path:e,from:t,default:r},a)=>{const n=x(t,co(e));if(n.found)return n.value;if(void 0!==r)return r.evaluate();if(a.options.strictDataPaths)throw new _a(`'${es(e)}' is missing (strictDataPaths)`,{code:s.missingDataPath});return null}},es=e=>"string"==typeof e?e:e.map(e=>String(e)).join("."),ts={name:"buildObject",category:"data",parameters:{entries:{type:"array",constraints:{elementShape:{key:{type:["string","number","boolean"]},value:{type:"any"}}}}},positionalParams:["...entries"],returns:"object",validate:e=>[...vo(e),...rs(e)],evaluate:({entries:e},t)=>{const r={};for(const a of e){const e=he(a.key);Object.hasOwn(r,e)&&t.trace.note({type:"key-overwrite",key:e}),r[e]=a.value}return r}},rs=e=>{const t=e.entries;if(!Array.isArray(t))return[];const r=new Set,a=new Set,n=[];for(const e of t){const t=e?.key;if("string"!=typeof t&&"number"!=typeof t&&"boolean"!=typeof t)continue;const o=he(t);r.has(o)&&!a.has(o)&&(a.add(o),n.push({severity:"warning",parameter:"entries",message:`duplicate key '${o}' — the last entry wins and the earlier one is dead`})),r.add(o)}return n},as=(e,t)=>new _a(`cannot convert ${B(e)} to ${t}`),ns=/*#__PURE__*/[{name:"and",category:"logic",parameters:{values:{type:"array",truthiness:!0,evaluation:"race"}},positionalParams:["...values"],returns:"boolean",validate:mo,evaluate:({values:e})=>bo(e,!1)},{name:"or",category:"logic",parameters:{values:{type:"array",truthiness:!0,evaluation:"race"}},positionalParams:["...values"],returns:"boolean",validate:mo,evaluate:({values:e})=>bo(e,!0)},{name:"not",alias:"!",category:"logic",parameters:{value:{type:"any",truthiness:!0}},positionalParams:["value"],returns:"boolean",evaluate:({value:e})=>!e},{name:"if",alias:"?",category:"logic",parameters:{condition:{type:"any",truthiness:!0},then:{type:"any",evaluation:"lazy"},else:{type:"any",evaluation:"lazy",default:null}},positionalParams:["condition","then","else"],evaluate:({condition:e,then:t,else:r})=>e?t.evaluate():r.evaluate()},{name:"match",category:"logic",parameters:{value:{type:["string","number","boolean","null"],nullPolicy:"value"},branches:{type:"object",evaluation:"lazyEntries"},default:{type:"any",required:!1,evaluation:"lazy"}},positionalParams:["value","branches","default"],evaluate:({value:e,branches:t,default:r})=>{const a=null===e?null:he(e);if(null!==a&&Object.hasOwn(t,a))return t[a].evaluate();if(void 0!==r)return r.evaluate();throw new _a(`no branch matches ${null===a?"null":`'${a}'`}, and no default was supplied`)}},{name:"firstOf",category:"logic",parameters:{values:{type:"array",evaluation:"lazyElements"}},positionalParams:["...values"],validate:mo,evaluate:async({values:e})=>{for(const t of e){const e=await t.evaluate();if(null!==e)return e}return null}},jo,Oo,Po,Do,Co,No,zo,Eo,Fo,Mo,qo,To,Vo,Ro,Lo,Wo,/*#__PURE__*/Bo("min","the minimum",e=>e<0),/*#__PURE__*/Bo("max","the maximum",e=>e>0),{name:"buildString",category:"string",parameters:{template:{type:["string","null"]},substitutions:{type:["array","object"],default:[],elementNullPolicy:"value"},trim:{type:"boolean",default:!1},closeGaps:{type:"boolean",default:!1},nullValueDefault:{type:["string","number","boolean"],required:!1,evaluation:"lazy",replacesNullAt:["substitutions"]}},positionalParams:["template","...substitutions"],returns:"string",evaluate:({template:e,substitutions:t,trim:r,closeGaps:a},n)=>{const o=Array.isArray(t)?t:void 0,s=void 0===o?t:void 0,i=[];for(const t of Ce(e)){if("text"===t.kind){i.push({text:t.text,site:!1});continue}if(!("positional"===t.kind?void 0!==o&&t.index>=1&&t.index<=o.length:void 0!==s&&Object.hasOwn(s,t.body))){n.trace.note({type:"render",token:t.raw,rendered:"literal"}),i.push({text:t.raw,site:!1});continue}const e="positional"===t.kind?o[t.index-1]:s[t.body],a=he(e);ve(e)&&n.trace.note({type:"render",token:t.raw,rendered:"placeholder"});const l=r?ge(a):a;""===l&&n.trace.note({type:"render",token:t.raw,rendered:"empty"}),i.push({text:l,site:!0,token:t.raw})}if(a)for(const e of(e=>{const t=[];for(let r=0;r<e.length;r++){const a=e[r];if(!a.site||""!==a.text)continue;const n=e[r-1];if(void 0!==n&&!n.site){const e=we(n.text);if(e!==n.text){n.text=e,t.push(a.token);continue}}const o=e[r+1];if(void 0!==o&&!o.site){const e=$e(o.text);e!==o.text&&t.push(a.token),o.text=e}}return t})(i))n.trace.note({type:"render",token:e,rendered:"gap-closed"});return i.map(e=>e.text).join("")}},Uo,Ko,/*#__PURE__*/Jo("lower",e=>e.toLowerCase()),/*#__PURE__*/Jo("upper",e=>e.toUpperCase()),/*#__PURE__*/Jo("trim",ge),{name:"regex",category:"string",parameters:{value:{type:["string","null"]},pattern:{type:["string","null"]},flags:{type:"string",default:""},mode:{type:{literal:["test","extract","match"]},default:"test"},noMatchDefault:{type:["string","null"],default:null,nullPolicy:"value",evaluation:"lazy"}},positionalParams:["value","pattern"],returns:["boolean","string","array","null"],validate:({pattern:e,flags:t})=>{const r=[],a="string"==typeof t?_o(t):void 0;if(void 0!==a&&r.push({severity:"error",parameter:"flags",message:a}),"string"==typeof e)try{new RegExp(e,"string"==typeof t&&void 0===a?t:"")}catch(e){r.push({severity:"error",parameter:"pattern",message:`pattern does not compile: ${e.message}`})}return r},evaluate:({value:e,pattern:t,flags:r,mode:a,noMatchDefault:n})=>{const o=_o(r);if(void 0!==o)throw new _a(o);const s=e=>{try{return new RegExp(t,r+e)}catch(e){throw new _a(`pattern does not compile: ${e.message}`)}};switch(a){case"test":return s("").test(e);case"extract":{const t=s("").exec(e);return null===t?n.evaluate():t[0]}case"match":return[...e.matchAll(s("g"))].map(e=>e[0])}}},{name:"length",category:"array",parameters:{value:{type:["string","array","null"]}},positionalParams:["...value"],returns:"integer",evaluate:({value:e})=>"string"==typeof e?xe(e).length:e.length},{name:"map",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:{type:"any",evaluation:"perElement",over:"input"}},positionalParams:["input","each"],returns:"array",validate:ho,evaluate:({each:e})=>wo(e.settle())},{name:"filter",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:Yo},positionalParams:["input","each"],returns:"array",validate:ho,evaluate:async({input:e,each:t})=>{const r=await wo(t.settle());return e.filter((e,t)=>r[t])}},{name:"find",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:Yo,noMatchDefault:{type:"any",default:null,evaluation:"lazy"}},positionalParams:["input","each"],validate:ho,evaluate:async({input:e,each:t,noMatchDefault:r})=>{const a=new Array(e.length);let n=0;for await(const r of t.settle()){a[r.index]=r;for(let t=a[n];void 0!==t;t=a[n]){if(!t.ok)throw t.error;if(!0===t.value)return e[n];n+=1}}return r.evaluate()}},{name:"some",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:Yo},positionalParams:["input","each"],returns:"boolean",validate:ho,evaluate:({each:e})=>bo(e.settle(),!0)},{name:"every",category:"array",parameters:{input:Ho,as:Qo,nullInputDefault:Xo,each:Yo},positionalParams:["input","each"],returns:"boolean",validate:ho,evaluate:({each:e})=>bo(e.settle(),!1)},Zo,ts,{name:"convert",category:"other",parameters:{value:{type:"any",nullPolicy:e=>"boolean"===e?"value":"propagate"},to:{type:{literal:["number","string","boolean","array"]}}},positionalParams:["value","to"],returns:["number","string","boolean","array"],evaluate:({value:e,to:t})=>{switch(t){case"number":if("number"==typeof e)return e;if("boolean"==typeof e)return e?1:0;if("string"==typeof e){const t=e.trim(),r=""===t?NaN:Number(t);if(Number.isNaN(r))throw new _a(`'${e}' is not a numeric string — use regex to extract a number from text`);return r}throw as(e,"number");case"string":if(Array.isArray(e)||q(e))throw new _a(`cannot convert ${B(e)} to string — a cast is not a render; use buildString or join`);if("object"==typeof e)throw as(e,"string");return he(e);case"boolean":if("string"==typeof e){const t=e.trim().toLowerCase();if("true"===t)return!0;if("false"===t)return!1}return ue(e);case"array":return Array.isArray(e)?e:[e]}}}].map(eo),os="3.0.0-preview.12",ss=(e,t)=>{const r=((e,t)=>{const r={...e};for(const[e,a]of Object.entries(t)){if(void 0===a)continue;if(null===a){delete r[e];continue}if("data"===e||!n(a)){r[e]=a;continue}const t=r[e],o=n(t)?{...t}:{};for(const[e,t]of Object.entries(a))void 0!==t&&(null===t?delete o[e]:o[e]=t);r[e]=o}return r})(null===e?{}:e.options,t);gs(r);const a=is(r);if(null!==e&&!(e=>void 0!==e.operators||void 0!==e.fragments||void 0!==e.operatorDefaults)(t))return{options:r,evaluation:a,registry:e.registry,compileCache:e.compileCache};const o=Qr({operators:r.operators??[ns],...void 0!==r.operatorDefaults?{operatorDefaults:r.operatorDefaults}:{},...void 0!==r.fragments?{fragments:r.fragments}:{}});return{options:r,evaluation:a,registry:o,compileCache:new Vr({compile:e=>ls(e,o),probe:Ne})}},is=e=>{const t={...e};return delete t.operators,delete t.fragments,t},ls=(e,t)=>{const r=Ue(e,t);return Ht(r),r.hasNoCache&&xr(r),r};class cs{state;results;version=os;constructor(e={}){this.state=ss(null,e),this.results=new Wn(In(this.state.options.cache))}updateOptions(e={}){const t=ss(this.state,e),r=In(t.options.cache);this.state=t,this.results.configure(r)}clearCache(){this.results.clear()}getOptions(){return(e=>{const t={};for(const[r,a]of Object.entries(e))t[r]=n(a)?{...a}:a;return t})(this.state.evaluation)}getOperators(){return[...this.state.registry.operators.values()].map(e=>{const{definition:t,hostDefaults:r}=e,a={name:t.name,category:t.category,parameters:Gn(t.parameters,r),restParam:t.restParam,timeoutParam:t.timeoutParam,cache:t.cache,returns:t.returns,hasValidate:void 0!==t.validate};return void 0!==t.alias&&(a.alias=t.alias),void 0!==t.metadata&&(a.metadata=t.metadata),void 0!==t.positionalParams&&(a.positionalParams=t.positionalParams),void 0!==r&&(!0===r.noCache&&(a.hostNoCache=!0),Object.hasOwn(r,"fallback")&&(a.hostFallback=r.fallback)),a})}getFragments(){return[...this.state.registry.fragments.values()].map(e=>{const t={name:e.name,parameters:Object.fromEntries(Object.entries(e.parameters).map(([e,t])=>[e,{...t}])),returns:e.returns,warnings:[...e.warnings],dependencies:Un(e.dependencies),caches:e.caches};return void 0!==e.description&&(t.description=e.description),void 0!==e.metadata&&(t.metadata=e.metadata),t})}validate(e,t){const r=void 0===t?this.state.evaluation:vs(this.state.evaluation,t),a=ls(e,this.state.registry),n=Qn(a,r,e=>e.issue);return{valid:!n.some(e=>"error"===e.severity),issues:n}}getDependencies(e){return Un(Ue(e,this.state.registry).dependencies)}isEvaluable(e){const t=Ue(e,this.state.registry);return t.holes.length>0||t.hasErrors}evaluate(e,t){const{state:r}=this;return us(r.evaluation,this.results,e,t,()=>r.compileCache.resolve(e),()=>ls(e,r.registry))}compile(e){const{state:t}=this;return ms(e,t.compileCache.resolve(e),t.evaluation,t.registry,this.results)}}const us=async(e,t,r,a,n,o)=>{const s=void 0===a?e:vs(e,a),i=n(),l="inert"===i.kind&&!0===s.trace?{kind:"artifact",artifact:o()}:i;if("inert"===l.kind){if(void 0!==s.maxDepth&&l.depth>s.maxDepth){const e=Hn(l.depth,s.maxDepth);throw ks(e,[e])}return r}const{artifact:c}=l,u=_n(c,s),d=u.find(e=>"error"===e.severity);if(void 0!==d)throw ks(d,u);const f=await En(c,s,t);return!0===s.trace?f:f.result};let ds;const fs=(e,t)=>ds?.(e,t);class ps{#t;#r;#a;#n;#o;#s;#i;constructor(e,t,r,a,n){this.#t=e,this.#r=t,this.#a=r,this.#n=a,this.#o=n,ds??=(e,t)=>{if("object"!=typeof e||null===e||!(#r in e))return;const r=void 0===t?e.#a:vs(e.#a,t);return{expression:e.#t,artifact:e.#l(),options:r}}}get expression(){return this.#t}get issues(){return this.#i??=this.#l().issues.map(e=>e.issue)}get hasErrors(){return this.#l().hasErrors}evaluate(e){return us(this.#a,this.#o,this.#t,e,()=>this.#r,()=>this.#l())}getDependencies(){return Un(this.#l().dependencies)}#l(){return"artifact"===this.#r.kind?this.#r.artifact:this.#s??=ls(this.#t,this.#n)}}const ms=(e,t,r,a,n)=>new ps(e,t,r,a,n),hs={data:0,signal:0,timeout:0,trace:0},vs=(e,t)=>{let r;for(const a in t){const n=t[a];if(void 0!==n){if(!Object.hasOwn(hs,a))throw ys(a);r??={...e},r[a]=n}}return void 0===r?e:(gs(t),r)},ys=t=>new e({code:s.invalidOptions,message:`'${t}' is not a per-call option — a call may supply data, signal, timeout and trace; configure the rest at construction or via updateOptions()`,path:[]}),gs=t=>{const{timeout:r,signal:a}=t;if(void 0!==r&&("number"!=typeof r||!Number.isFinite(r)||r<=0))throw new e({code:s.invalidOptions,message:"'timeout' must be a positive number of milliseconds",path:[]});if(void 0!==a&&!bs(a))throw new e({code:s.invalidOptions,message:"'signal' must be an AbortSignal",path:[]})},bs=e=>"object"==typeof e&&null!==e&&"boolean"==typeof e.aborted&&"function"==typeof e.addEventListener&&"function"==typeof e.removeEventListener,ks=(t,r)=>new e({code:t.code,message:t.message,path:t.path,...void 0!==t.operator?{operator:t.operator}:{},issues:r});export{Zn as A,uo as B,os as C,Qn as D,se as E,cs as F,pe as G,me as H,de as I,Pe as J,oe as O,Yn as R,re as a,G as b,Q as c,ue as d,ns as e,Ha as f,Re as g,fs as h,q as i,_n as j,H as k,le as l,z as m,K as n,ee as o,ae as p,to as q,Ie as r,We as s,Me as t,_a as u,_t as v,co as w,he as x,B as y,eo as z};
|
|
1
|
+
import{F as e,i as t,l as r,f as a,d as n,D as o,E as s,g as i,c as l,o as c,q as u,h as d,W as p,S as f,e as m,p as h,s as v,j as y,n as g,u as b,v as k,k as w,w as $,x,r as j,t as O,b as A,m as P,R as D,a as N,y as C,G as S}from"./shared.js";const z=(t,r,a)=>{const[n]=r,o=r.length-1;return new e({code:t,message:o>0?`${n.message} (+ ${o} more issue${1===o?"":"s"})`:n.message,path:n.path,operator:a,issues:r})},E=()=>{},M=e=>"object"==typeof e&&null!==e&&"function"==typeof e.then,q=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),F=(e,t,r)=>{if(e===t)return 0;const a=e.length,n=t.length;if(Math.abs(a-n)>r)return r+1;let o=new Array(n+1),s=new Array(n+1);for(let e=0;e<=n;e++)o[e]=e;for(let i=1;i<=a;i++){s[0]=i;let a=i;const l=e.charCodeAt(i-1);for(let e=1;e<=n;e++){const r=o[e-1]+(l===t.charCodeAt(e-1)?0:1),n=Math.min(o[e]+1,s[e-1]+1,r);s[e]=n,n<a&&(a=n)}if(a>r)return r+1;const c=o;o=s,s=c}return o[n]},T=(e,t)=>{let r,a=3;for(const n of t){const t=F(e,n,a-1);if(t<a&&(r=n,a=t,0===t))break}return r},V=e=>e?` — did you mean '${e}'?`:"",I=e=>e.length<2?e.join(""):`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`,R=e=>{let t;return()=>(void 0===t&&(t=(async()=>e())()),t)},L=(e,t,r)=>{const a=[],n=new Set,o=new Set,s=e=>{const i=a.indexOf(e);if(-1!==i){const e=a.slice(i),t=[...e].sort().join("\0");return void(o.has(t)||(o.add(t),r(e)))}if(!n.has(e)){a.push(e);for(const r of t(e)??[])s(r);a.pop(),n.add(e)}};for(const t of e)s(t);return 0===o.size},W={ok:!0},B=e=>null===e?"null":Array.isArray(e)?"array":typeof e,J=(e,t)=>({ok:!1,expected:e,actual:B(t)}),U=(e,t)=>{switch(t){case"any":return!0;case"string":return"string"==typeof e;case"number":return"number"==typeof e;case"integer":return"number"==typeof e&&Number.isInteger(e);case"boolean":return"boolean"==typeof e;case"array":return Array.isArray(e);case"object":return q(e);case"null":return null===e;default:return!1}},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&<(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};
|
package/build/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare const version = "3.0.0-preview.
|
|
1
|
+
declare const version = "3.0.0-preview.13";
|
|
2
2
|
|
|
3
3
|
interface HttpRequest {
|
|
4
4
|
url: string;
|
|
@@ -564,6 +564,98 @@ interface PositionalLayout {
|
|
|
564
564
|
restAt: number | null;
|
|
565
565
|
}
|
|
566
566
|
|
|
567
|
+
interface Dependencies {
|
|
568
|
+
data: {
|
|
569
|
+
paths: string[];
|
|
570
|
+
dynamic: boolean;
|
|
571
|
+
};
|
|
572
|
+
params: {
|
|
573
|
+
names: string[];
|
|
574
|
+
dynamic: boolean;
|
|
575
|
+
};
|
|
576
|
+
operators: string[];
|
|
577
|
+
fragments: string[];
|
|
578
|
+
}
|
|
579
|
+
interface ParameterInfo extends ValidatedParameter {
|
|
580
|
+
hostDefault?: unknown;
|
|
581
|
+
}
|
|
582
|
+
interface OperatorInfo extends Omit<ValidatedOperatorDefinition, typeof VALIDATED_OPERATOR | 'evaluate' | 'validate' | 'deliversLazily' | 'resolution' | 'fingerprint' | 'parameters'> {
|
|
583
|
+
parameters: Record<string, ParameterInfo>;
|
|
584
|
+
hasValidate: boolean;
|
|
585
|
+
hostNoCache?: true;
|
|
586
|
+
hostFallback?: unknown;
|
|
587
|
+
}
|
|
588
|
+
interface FragmentInfo {
|
|
589
|
+
name: string;
|
|
590
|
+
description?: string;
|
|
591
|
+
metadata?: FragmentMetadata & Record<string, unknown>;
|
|
592
|
+
parameters: Record<string, FragmentParameter>;
|
|
593
|
+
returns: ExpectedType;
|
|
594
|
+
warnings: Issue[];
|
|
595
|
+
dependencies: Dependencies;
|
|
596
|
+
caches: boolean;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
interface OperatorListing {
|
|
600
|
+
displayName?: string;
|
|
601
|
+
description?: string;
|
|
602
|
+
parameterDescriptions?: {
|
|
603
|
+
[parameter: string]: string;
|
|
604
|
+
};
|
|
605
|
+
docUrl?: string;
|
|
606
|
+
backgroundColor?: string;
|
|
607
|
+
textColor?: string;
|
|
608
|
+
seeds?: {
|
|
609
|
+
[parameter: string]: unknown;
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
type FragmentMetadata = Omit<OperatorListing, 'description' | 'parameterDescriptions'>;
|
|
613
|
+
interface CategoryListing {
|
|
614
|
+
displayName: string;
|
|
615
|
+
order: number;
|
|
616
|
+
backgroundColor: string;
|
|
617
|
+
textColor: string;
|
|
618
|
+
}
|
|
619
|
+
type OperatorListingMap = {
|
|
620
|
+
[operator: string]: OperatorListing;
|
|
621
|
+
};
|
|
622
|
+
type CategoryListingMap = {
|
|
623
|
+
[category in OperatorCategory]: CategoryListing;
|
|
624
|
+
};
|
|
625
|
+
type TypeSeeds = {
|
|
626
|
+
[type in BasicType]: unknown;
|
|
627
|
+
};
|
|
628
|
+
interface CatalogCategory extends CategoryListing {
|
|
629
|
+
name: OperatorCategory;
|
|
630
|
+
}
|
|
631
|
+
interface CatalogParameter extends ParameterInfo {
|
|
632
|
+
description?: string;
|
|
633
|
+
seed: unknown;
|
|
634
|
+
}
|
|
635
|
+
interface CatalogOperator extends Omit<OperatorInfo, 'parameters'> {
|
|
636
|
+
displayName: string;
|
|
637
|
+
description?: string;
|
|
638
|
+
docUrl?: string;
|
|
639
|
+
backgroundColor: string;
|
|
640
|
+
textColor: string;
|
|
641
|
+
parameters: Record<string, CatalogParameter>;
|
|
642
|
+
}
|
|
643
|
+
interface CatalogFragmentParameter extends FragmentParameter {
|
|
644
|
+
seed: unknown;
|
|
645
|
+
}
|
|
646
|
+
interface CatalogFragment extends Omit<FragmentInfo, 'parameters'> {
|
|
647
|
+
displayName: string;
|
|
648
|
+
docUrl?: string;
|
|
649
|
+
backgroundColor?: string;
|
|
650
|
+
textColor?: string;
|
|
651
|
+
parameters: Record<string, CatalogFragmentParameter>;
|
|
652
|
+
}
|
|
653
|
+
interface Catalog {
|
|
654
|
+
categories: CatalogCategory[];
|
|
655
|
+
operators: CatalogOperator[];
|
|
656
|
+
fragments: CatalogFragment[];
|
|
657
|
+
}
|
|
658
|
+
|
|
567
659
|
interface FragmentParameterDeclaration extends TypeDeclaration {
|
|
568
660
|
default?: unknown;
|
|
569
661
|
description?: string;
|
|
@@ -573,7 +665,10 @@ interface FragmentDefinition {
|
|
|
573
665
|
expression: unknown;
|
|
574
666
|
parameters?: Record<string, FragmentParameterDeclaration>;
|
|
575
667
|
description?: string;
|
|
576
|
-
metadata?: Record<string, unknown>;
|
|
668
|
+
metadata?: FragmentMetadata & Record<string, unknown>;
|
|
669
|
+
samples?: {
|
|
670
|
+
[parameter: string]: unknown;
|
|
671
|
+
};
|
|
577
672
|
}
|
|
578
673
|
interface FragmentParameter {
|
|
579
674
|
type: ExpectedType;
|
|
@@ -589,6 +684,9 @@ type CallOptions = Pick<FigTreeOptions, 'data' | 'signal' | 'timeout' | 'trace'>
|
|
|
589
684
|
type OnlyCallOptions<CallOpts> = CallOpts & {
|
|
590
685
|
[Key in Exclude<keyof CallOpts, keyof CallOptions>]: never;
|
|
591
686
|
};
|
|
687
|
+
type ValidateOptions = CallOptions & {
|
|
688
|
+
params?: readonly string[];
|
|
689
|
+
};
|
|
592
690
|
interface FigTreeOptions {
|
|
593
691
|
data?: Record<string, unknown>;
|
|
594
692
|
fragments?: Record<string, FragmentDefinition>;
|
|
@@ -637,45 +735,19 @@ type ResultShape<O> = O extends {
|
|
|
637
735
|
trace: true;
|
|
638
736
|
} ? EvaluationResult : unknown;
|
|
639
737
|
|
|
640
|
-
interface Dependencies {
|
|
641
|
-
data: {
|
|
642
|
-
paths: string[];
|
|
643
|
-
dynamic: boolean;
|
|
644
|
-
};
|
|
645
|
-
operators: string[];
|
|
646
|
-
fragments: string[];
|
|
647
|
-
}
|
|
648
|
-
interface ParameterInfo extends ValidatedParameter {
|
|
649
|
-
hostDefault?: unknown;
|
|
650
|
-
}
|
|
651
|
-
interface OperatorInfo extends Omit<ValidatedOperatorDefinition, typeof VALIDATED_OPERATOR | 'evaluate' | 'validate' | 'deliversLazily' | 'resolution' | 'fingerprint' | 'parameters'> {
|
|
652
|
-
parameters: Record<string, ParameterInfo>;
|
|
653
|
-
hasValidate: boolean;
|
|
654
|
-
hostNoCache?: true;
|
|
655
|
-
hostFallback?: unknown;
|
|
656
|
-
}
|
|
657
|
-
interface FragmentInfo {
|
|
658
|
-
name: string;
|
|
659
|
-
description?: string;
|
|
660
|
-
metadata?: Record<string, unknown>;
|
|
661
|
-
parameters: Record<string, FragmentParameter>;
|
|
662
|
-
returns: ExpectedType;
|
|
663
|
-
warnings: Issue[];
|
|
664
|
-
dependencies: Dependencies;
|
|
665
|
-
caches: boolean;
|
|
666
|
-
}
|
|
667
|
-
|
|
668
738
|
declare class FigTree<InstanceOpts extends FigTreeOptions = NoOptions> {
|
|
669
739
|
private state;
|
|
670
740
|
private readonly results;
|
|
671
|
-
readonly version = "3.0.0-preview.
|
|
741
|
+
readonly version = "3.0.0-preview.13";
|
|
672
742
|
constructor(options?: InstanceOpts);
|
|
743
|
+
private static fromState;
|
|
673
744
|
updateOptions(options?: OptionsUpdate): void;
|
|
745
|
+
with(update?: OptionsUpdate): FigTree<InstanceOpts>;
|
|
674
746
|
clearCache(): void;
|
|
675
747
|
getOptions(): EvaluationOptions;
|
|
676
748
|
getOperators(): OperatorInfo[];
|
|
677
749
|
getFragments(): FragmentInfo[];
|
|
678
|
-
validate(expression: unknown, options?:
|
|
750
|
+
validate(expression: unknown, options?: ValidateOptions): ValidationResult;
|
|
679
751
|
getDependencies(expression: unknown): Dependencies;
|
|
680
752
|
isEvaluable(expression: unknown): boolean;
|
|
681
753
|
evaluate<CallOpts extends CallOptions = NoOptions>(expression: unknown, options?: OnlyCallOptions<CallOpts>): Promise<ResultShape<Merge<InstanceOpts, CallOpts>>>;
|
|
@@ -852,6 +924,8 @@ type InspectIssue = Issue & {
|
|
|
852
924
|
interface InspectDependencies {
|
|
853
925
|
dataPaths: string[];
|
|
854
926
|
dynamic: boolean;
|
|
927
|
+
paramNames: string[];
|
|
928
|
+
paramsDynamic: boolean;
|
|
855
929
|
operators: string[];
|
|
856
930
|
fragments: string[];
|
|
857
931
|
}
|
|
@@ -873,66 +947,6 @@ interface InspectReport {
|
|
|
873
947
|
}
|
|
874
948
|
declare const inspect: <InstanceOpts extends FigTreeOptions>(compiled: CompiledExpression<InstanceOpts>, options?: CallOptions) => InspectReport;
|
|
875
949
|
|
|
876
|
-
interface OperatorListing {
|
|
877
|
-
displayName?: string;
|
|
878
|
-
description?: string;
|
|
879
|
-
parameterDescriptions?: {
|
|
880
|
-
[parameter: string]: string;
|
|
881
|
-
};
|
|
882
|
-
docUrl?: string;
|
|
883
|
-
backgroundColor?: string;
|
|
884
|
-
textColor?: string;
|
|
885
|
-
seeds?: {
|
|
886
|
-
[parameter: string]: unknown;
|
|
887
|
-
};
|
|
888
|
-
}
|
|
889
|
-
type FragmentListing = Omit<OperatorListing, 'description' | 'parameterDescriptions'>;
|
|
890
|
-
interface CategoryListing {
|
|
891
|
-
displayName: string;
|
|
892
|
-
order: number;
|
|
893
|
-
backgroundColor: string;
|
|
894
|
-
textColor: string;
|
|
895
|
-
}
|
|
896
|
-
type OperatorListingMap = {
|
|
897
|
-
[operator: string]: OperatorListing;
|
|
898
|
-
};
|
|
899
|
-
type CategoryListingMap = {
|
|
900
|
-
[category in OperatorCategory]: CategoryListing;
|
|
901
|
-
};
|
|
902
|
-
type TypeSeeds = {
|
|
903
|
-
[type in BasicType]: unknown;
|
|
904
|
-
};
|
|
905
|
-
interface CatalogCategory extends CategoryListing {
|
|
906
|
-
name: OperatorCategory;
|
|
907
|
-
}
|
|
908
|
-
interface CatalogParameter extends ParameterInfo {
|
|
909
|
-
description?: string;
|
|
910
|
-
seed: unknown;
|
|
911
|
-
}
|
|
912
|
-
interface CatalogOperator extends Omit<OperatorInfo, 'parameters'> {
|
|
913
|
-
displayName: string;
|
|
914
|
-
description?: string;
|
|
915
|
-
docUrl?: string;
|
|
916
|
-
backgroundColor: string;
|
|
917
|
-
textColor: string;
|
|
918
|
-
parameters: Record<string, CatalogParameter>;
|
|
919
|
-
}
|
|
920
|
-
interface CatalogFragmentParameter extends FragmentParameter {
|
|
921
|
-
seed: unknown;
|
|
922
|
-
}
|
|
923
|
-
interface CatalogFragment extends Omit<FragmentInfo, 'parameters'> {
|
|
924
|
-
displayName: string;
|
|
925
|
-
docUrl?: string;
|
|
926
|
-
backgroundColor?: string;
|
|
927
|
-
textColor?: string;
|
|
928
|
-
parameters: Record<string, CatalogFragmentParameter>;
|
|
929
|
-
}
|
|
930
|
-
interface Catalog {
|
|
931
|
-
categories: CatalogCategory[];
|
|
932
|
-
operators: CatalogOperator[];
|
|
933
|
-
fragments: CatalogFragment[];
|
|
934
|
-
}
|
|
935
|
-
|
|
936
950
|
interface MigrationIssue {
|
|
937
951
|
code: 'split-trailing-empty' | 'remainder-sign' | 'template-numbering' | 'named-token-source' | 'response-collapse' | 'computed-delimiter' | 'computed-branches' | 'graphql-relative-url' | 'output-type' | 'missing-data-fallback' | 'unprefixed-parameter' | 'cache-opt-in' | 'instance-case-insensitive' | 'values-cut' | 'fallback-converted' | 'malformed-entry' | 'unreachable-branches' | 'overridden-value' | 'discarded-expression' | 'fragment-shorthand-payload' | 'shadowed-argument' | 'unknown-argument' | 'name-renamed' | 'unknown-parameter-type' | 'default-outside-type' | 'unused-output-type' | 'deciding-value' | 'drilled-substitution-token' | 'number-mapping' | 'template-escape' | 'computed-dollar-template' | 'custom-function-call' | 'computed-function-name' | 'computed-arguments' | 'body-override' | 'computed-fragment-name' | 'replaced-output-type' | 'computed-children' | 'unknown-operator' | 'unconvertible-input';
|
|
938
952
|
tag: 'non-convertible' | 'intentional-semantic-change' | 'lossy-default';
|
|
@@ -982,4 +996,4 @@ interface ShorthandOptions extends NameOptions {
|
|
|
982
996
|
}
|
|
983
997
|
|
|
984
998
|
export { ARRAY, AxiosClient, CompiledExpression, ErrorCodes, EvaluationData, FetchClient, FigTree, FigTreeError, OBJECT, OPERATOR_CATEGORIES, OperatorFailure, PostgresConnection, SQLiteConnection, WILDCARD, compareValues, coreOperators, deepEqual, defineOperator, httpFailure, httpOperators, inspect, isFigTreeError, isOperatorFailure, isTruthy, parsePath, renderText, resolvePath, sqlFailure, sqlOperators, version };
|
|
985
|
-
export type { AxiosErrorLike, AxiosLike, BasicType, CacheStore, CacheTraceEvent, CallOptions, CanonicalOptions, Catalog, CatalogCategory, CatalogFragment, CatalogFragmentParameter, CatalogOperator, CatalogParameter, CategoryListing, CategoryListingMap, CompiledNullPolicy, ConditionalNullPolicy, Constraints, CoverageFinding, CoveredFinding, DeclaredOutput, Dependencies, EvaluationMode, EvaluationOptions, EvaluationResult, ExpectedType, FailureRule, FailureTest, FallbackCoverage, FallbackCoverageOptions, FallbackError, FallbackErrorCode, FetchLike, FetchResponseLike, FigTreeErrorCode, FigTreeErrorInit, FigTreeOptions, FragmentDefinition, FragmentInfo,
|
|
999
|
+
export type { AxiosErrorLike, AxiosLike, BasicType, CacheStore, CacheTraceEvent, CallOptions, CanonicalOptions, Catalog, CatalogCategory, CatalogFragment, CatalogFragmentParameter, CatalogOperator, CatalogParameter, CategoryListing, CategoryListingMap, CompiledNullPolicy, ConditionalNullPolicy, Constraints, CoverageFinding, CoveredFinding, DeclaredOutput, Dependencies, EvaluationMode, EvaluationOptions, EvaluationResult, ExpectedType, FailureRule, FailureTest, FallbackCoverage, FallbackCoverageOptions, FallbackError, FallbackErrorCode, FetchLike, FetchResponseLike, FigTreeErrorCode, FigTreeErrorInit, FigTreeOptions, FragmentDefinition, FragmentInfo, FragmentMetadata, FragmentMigrationResult, FragmentParameter, FragmentParameterDeclaration, HttpClient, HttpFailureInfo, HttpRequest, InspectDependencies, InspectIssue, InspectNode, InspectReport, Issue, KeyOverwriteTraceEvent, KnownTraceEvent, LazyValue, LiteralType, Merge, MigrationIssue, MigrationResult, NameOptions, NoOptions, NullPolicy, NullPolicyValue, ObjectClass, OnlyCallOptions, OperatorAnalysis, OperatorCategory, OperatorContext, OperatorDefinition, OperatorEvaluate, OperatorFailureInit, OperatorInfo, OperatorListing, OperatorListingMap, OperatorValidate, OptionsUpdate, ParamValue, ParameterDeclaration, ParameterDeclarations, ParameterInfo, PathSegment, PerElement, PgClientLike, PositionalLayout, PositionalShape, QueryTraceEvent, ReferenceNamespace, ReferenceRecognition, ReferenceScope, Registry, RenderTraceEvent, RequestTraceEvent, ResolveResult, ResolvedParams, ResultShape, Settlement, SettlementStream, Severity, ShieldedFallbackTraceEvent, ShorthandOptions, Spelling, SqlConnection, SqlRequest, SqliteDatabaseLike, TraceEvent, TraceKind, TraceNode, TraceStatus, TypeCheckResult, TypeDeclaration, TypeOf, TypeSeeds, V2Options, ValidateFinding, ValidateHelpers, ValidateOptions, ValidatedOperatorDefinition, ValidatedParameter, ValidationResult, Wildcard };
|
package/build/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as t,k as r,O as n,l as i,m as o,o as s,E as l,c as u,p as c,b as p,R as f,q as m,u as y,f as h,w as v,x as b,y as g,z as w,A as P,B as j,t as $,s as D,h as O,C as q,D as x}from"./chunks/engine.js";export{G as ARRAY,F as FigTree,H as OBJECT,I as compareValues,e as coreOperators,J as deepEqual,d as isTruthy}from"./chunks/engine.js";import{E as N,l as A,R as E,m as C,i as S,r as L,d as T,D as R,n as z}from"./chunks/shared.js";export{F as FigTreeError,W as WILDCARD,a as isFigTreeError,k as parsePath}from"./chunks/shared.js";const Q=/*#__PURE__*/new Set(["failures","external","output"]),U=/*#__PURE__*/new Set(["code","parameter","when","options","may","overflow"]),M=e=>{if(null===e||["string","number","boolean"].includes(typeof e))return!0;if(!t(e))return!1;const a=Object.keys(e);if(1!==a.length)return!1;const n=e[a[0]];switch(a[0]){case"type":return r(n);case"below":return"number"==typeof n&&Number.isFinite(n);case"empty":case"invalid":return!0===n;case"supplied":return"boolean"==typeof n;case"some":case"not":return M(n);default:return!1}},V=["param","elementOf","kindOf","typeNamedBy","firstNonNull","sum","product","abs","min","max"],B=e=>void 0===e||"number"==typeof e&&Number.isFinite(e),Y=e=>void 0===e||Number.isInteger(e)&&e>=0,K=(e,t,...a)=>t in e&&Object.keys(e).every(e=>e===t||a.includes(e)),X=(e,a)=>{if(r(e))return!0;if(!t(e))return!1;const n=Object.keys(e);return 1===n.length&&V.includes(n[0])?a(e[n[0]]):"type"in e?(e=>{const{type:t,min:a,max:r,minLength:n}=e;return"number"===t||"integer"===t?K(e,"type","min","max")&&B(a)&&B(r)&&!(a>r):("string"===t||"array"===t)&&K(e,"type","minLength")&&Y(n)})(e):K(e,"difference")?Array.isArray(e.difference)&&2===e.difference.length&&e.difference.every(a):K(e,"arrayOf","minLength")?Y(e.minLength)&&X(e.arrayOf,a):K(e,"oneOf")?Array.isArray(e.oneOf)&&e.oneOf.length>0&&e.oneOf.every(e=>X(e,a)):!(!K(e,"byParam","cases","otherwise")||!("cases"in e))&&(a(e.byParam)&&t(e.cases)&&Object.values(e.cases).every(e=>X(e,a))&&(void 0===e.otherwise||X(e.otherwise,a)))},Z=/[a-z]Default$/,_=/*#__PURE__*/new Set(["eager","race","lazy","lazyElements","lazyEntries","perElement","structural"]),ee=/*#__PURE__*/new Set(n),te=/*#__PURE__*/new Set(["propagate","value"]),ae=e=>u([],e).ok,re=e=>ae(e)||u({},e).ok;function ne(e){if(i(e))return e;const a=[],n=t(e)?e.name:void 0,d="string"==typeof n?n:void 0,y=(e,t,r,n)=>{a.push({severity:"error",code:e,message:t,path:r,...void 0!==d?{operator:d}:{},...void 0!==n?{parameter:n}:{}})};if(!t(e))throw y(N.invalidDefinition,"a definition must be a plain object",[]),o(N.invalidDefinition,a);const h=e;if("string"!=typeof h.name&&y(N.invalidDefinition,"'name' is required and must be a string",["name"]),t(h.parameters)||y(N.invalidDefinition,"'parameters' is required and must be an object of declarations (may be {})",["parameters"]),"function"!=typeof h.evaluate&&y(N.invalidDefinition,"'evaluate' is required and must be a function",["evaluate"]),a.length>0)throw o(N.invalidDefinition,a,d);"string"!=typeof h.category?y(N.invalidDefinition,`'category' is required and must be one of ${[...ee].join(", ")}`,["category"]):ee.has(h.category)||y(N.invalidDefinition,`'${h.category}' is not a category — expected one of ${[...ee].join(", ")}`,["category"]),void 0!==h.alias&&"string"!=typeof h.alias&&y(N.invalidDefinition,"'alias' must be a string",["alias"]),void 0!==h.cache&&!0!==h.cache&&y(N.invalidDefinition,"'cache' must be the literal true",["cache"]),void 0===h.metadata||t(h.metadata)||y(N.invalidDefinition,"'metadata' must be a plain object",["metadata"]),void 0===h.positionalParams||Array.isArray(h.positionalParams)&&!h.positionalParams.some(e=>"string"!=typeof e)||y(N.invalidDefinition,"'positionalParams' must be an array of parameter names",["positionalParams"]),void 0!==h.timeoutParam&&"string"!=typeof h.timeoutParam&&y(N.invalidDefinition,"'timeoutParam' must be a parameter name",["timeoutParam"]),void 0!==h.validate&&"function"!=typeof h.validate&&y(N.invalidDefinition,"'validate' must be a function",["validate"]),void 0===h.returns||r(h.returns)||y(N.invalidDefinition,"'returns' must be a metadata-vocabulary type",["returns"]);const v=(e,t,a)=>{e===l?y(N.invalidDefinition,"the EvaluationData sentinel is legal only as a parameter 'default'",t,a):Array.isArray(e)&&e.forEach((e,r)=>{e===l&&v(e,[...t,r],a)})};for(const[e,t]of Object.entries(h))"parameters"!==e&&"metadata"!==e&&v(t,[e]);const b=(e,t)=>{const a=A(e);a.ok?C(e)&&y(N.reservedName,`'${e}' is a reserved name`,t):y(N.invalidName,`'${e}': ${a.reason}`,t)};"string"==typeof h.name&&b(h.name,["name"]),"string"==typeof h.alias&&b(h.alias,["alias"]);const g=h.parameters,w={};for(const[e,a]of Object.entries(g)){const r=["parameters",e],n=A(e);n.ok?E.has(e)&&y(N.reservedName,`'${e}' is a reserved node key and cannot name a parameter`,r,e):y(N.invalidName,`'${e}': ${n.reason}`,r,e),t(a)?w[e]=a:y(N.invalidDefinition,`the declaration for '${e}' must be a plain object`,r,e)}const P={};for(const[e,a]of Object.entries(w)){const n=["parameters",e],i=e=>[...n,e],o=a;for(const[t,a]of Object.entries(o))"default"!==t&&"metadata"!==t&&v(a,i(t),e);let d=!0;void 0===o.type||r(o.type)||(y(N.invalidDefinition,"'type' must be a metadata-vocabulary type",i("type"),e),d=!1),d&&(P[e]=o.type??"any");let f=!1;if(void 0!==o.constraints){const t=s(o.constraints);t.ok?f=!0:y(N.invalidDefinition,`'constraints' is malformed: expected ${t.expected}, got ${t.actual}`,i("constraints"),e)}void 0!==o.required&&"boolean"!=typeof o.required&&y(N.invalidDefinition,"'required' must be a boolean",i("required"),e),void 0===o.metadata||t(o.metadata)||y(N.invalidDefinition,"'metadata' must be a plain object",i("metadata"),e);const m="default"in o;if(m&&!0===o.required&&y(N.invalidDefinition,"a 'default' contradicts 'required: true' — a default implies the parameter is optional",i("default"),e),m&&o.default!==l){const t=P[e];if(void 0!==t){const a=u(o.default,t);if(a.ok){if(f){const t=c(o.default,o);t.ok||y(N.typeCheck,`'default' violates the declared constraints: expected ${t.expected}, got ${t.actual}`,i("default"),e)}}else y(N.typeCheck,`'default' does not satisfy the declared type: expected ${a.expected}, got ${a.actual}`,i("default"),e)}}if(void 0===o.evaluation||_.has(o.evaluation)||y(N.invalidDefinition,`'evaluation' must be one of ${[..._].join(", ")}`,i("evaluation"),e),void 0!==o.truthiness&&"boolean"!=typeof o.truthiness&&y(N.invalidDefinition,"'truthiness' must be a boolean",i("truthiness"),e),void 0!==o.over&&"string"!=typeof o.over&&y(N.invalidDefinition,"'over' must be a parameter name",i("over"),e),void 0===o.replacesNullAt||Array.isArray(o.replacesNullAt)&&!o.replacesNullAt.some(e=>"string"!=typeof e)||y(N.invalidDefinition,"'replacesNullAt' must be an array of sibling parameter names",i("replacesNullAt"),e),void 0!==o.nullPolicy){const t=o.nullPolicy;"function"==typeof t||te.has(t)||y(N.invalidNullPolicy,"'nullPolicy' must be 'propagate', 'value' or a conditional function",i("nullPolicy"),e);const a=P[e];void 0===a||p(a)||y(N.invalidNullPolicy,"'nullPolicy' is legal only where the declared type names 'null' — a type without 'null' is the reject declaration",i("nullPolicy"),e),!0===o.truthiness&&"propagate"===t&&y(N.invalidNullPolicy,"'truthiness' implies null policy 'value' (null is falsy) — declaring 'propagate' is a conflict",i("nullPolicy"),e)}if(void 0!==o.elementNullPolicy){te.has(o.elementNullPolicy)||y(N.invalidNullPolicy,"'elementNullPolicy' must be 'propagate' or 'value' — the conditional form is not admitted here",i("elementNullPolicy"),e);const t=P[e];void 0===t||re(t)||y(N.invalidNullPolicy,"'elementNullPolicy' applies to container parameters only",i("elementNullPolicy"),e)}}if(Array.isArray(h.positionalParams)&&h.positionalParams.every(e=>"string"==typeof e)){const e=new Set,t=h.positionalParams;t.forEach((a,r)=>{const n=a.startsWith(f),i=n?a.slice(f.length):a;n&&r!==t.length-1&&y(N.invalidDefinition,`the rest entry '${a}' must be the last positional entry`,["positionalParams",r]),i in w||y(N.invalidDefinition,`positional entry '${a}' names no declared parameter`,["positionalParams",r]),e.has(i)&&y(N.invalidDefinition,`duplicate positional entry '${a}'`,["positionalParams",r]),e.add(i)})}for(const[e,t]of Object.entries(w)){const a=["parameters",e],r="perElement"===t.evaluation;if(void 0!==t.over&&"string"==typeof t.over)if(r){const r=t.over;if(r in w&&r!==e){const t=P[r];void 0===t||ae(t)||y(N.invalidDefinition,`the 'over' target '${r}' must admit an array`,[...a,"over"],e)}else y(N.invalidDefinition,`'over' names no sibling parameter ('${r}')`,[...a,"over"],e)}else y(N.invalidDefinition,"'over' is legal only with evaluation: 'perElement'",[...a,"over"],e);else r&&y(N.invalidDefinition,"evaluation: 'perElement' requires 'over' to name the iterated sibling",[...a,"evaluation"],e)}for(const[e,t]of Object.entries(w)){if(void 0===t.replacesNullAt)continue;if(!Array.isArray(t.replacesNullAt)||t.replacesNullAt.some(e=>"string"!=typeof e))continue;const a=["parameters",e,"replacesNullAt"];"lazy"!==t.evaluation&&y(N.invalidDefinition,"a 'replacesNullAt' holder must declare evaluation: 'lazy'",a,e);(t.required??!("default"in t))&&y(N.invalidDefinition,"a 'replacesNullAt' holder must be optional",a,e),"default"in t&&y(N.invalidDefinition,"a 'replacesNullAt' holder may not carry a 'default' — it is presence-sensitive by construction",a,e),t.replacesNullAt.forEach((t,r)=>{t===e?y(N.invalidDefinition,"'replacesNullAt' may not target the holder itself",[...a,r],e):t in w||y(N.invalidDefinition,`'replacesNullAt' target '${t}' names no sibling parameter`,[...a,r],e)})}for(const[e,t]of Object.entries(w))Z.test(e)&&"lazy"!==t.evaluation&&y(N.invalidDefinition,`'${e}' is named for the '…Default' family, so it must declare evaluation: 'lazy' — add 'replacesNullAt', read it as a LazyValue in the body, or rename it`,["parameters",e,"evaluation"],e);const j=ie(w,P,y);if("string"==typeof h.timeoutParam){void 0===w[h.timeoutParam]?y(N.invalidDefinition,`'timeoutParam' names no declared parameter ('${h.timeoutParam}')`,["timeoutParam"]):"integer"!==P[h.timeoutParam]&&y(N.invalidDefinition,"the 'timeoutParam' target must be 'integer'-typed",["timeoutParam"])}if(void 0!==h.analysis&&((e,a,r)=>{const n=(e,...t)=>r(N.invalidDefinition,e,["analysis",...t]);if(!t(e))return n("'analysis' must be a plain object");for(const t of Object.keys(e))Q.has(t)||n(`'${t}' is not an analysis field`,t);const{failures:i,external:o,output:s}=e,l=e=>"string"==typeof e&&Object.hasOwn(a,e);if(void 0!==o&&!0!==o&&n("'external' must be the literal true","external"),void 0===s||X(s,l)||n("'output' must be a type, or an output declaration naming declared parameters","output"),void 0!==i){if(!Array.isArray(i))return n("'failures' must be an array of rules","failures");!0===o&&n("an external operator declares no 'failures': it may fail whatever its inputs","failures"),i.forEach((e,a)=>{const r=(...e)=>["failures",a,...e];if(!t(e))return n("a rule must be a plain object",...r());for(const t of Object.keys(e))U.has(t)||n(`'${t}' is not a rule field`,...r(t));if("string"==typeof e.code&&""!==e.code||n("a rule's 'code' must be a non-empty string",...r("code")),void 0===e.parameter||l(e.parameter)||n("'parameter' names no declared parameter",...r("parameter")),void 0!==e.when)if(t(e.when))for(const[t,a]of Object.entries(e.when))l(t)?M(a)||n(`the test on '${t}' is malformed`,...r("when",t)):n(`'${t}' is not a declared parameter`,...r("when",t));else n("'when' must be an object of tests",...r("when"));void 0===e.options||t(e.options)||n("'options' must be a plain object",...r("options"));for(const t of["may","overflow"])void 0!==e[t]&&!0!==e[t]&&n(`'${t}' must be the literal true`,...r(t))})}})(h.analysis,w,(e,t,a)=>y(e,t,a)),a.length>0)throw o(N.invalidDefinition,a,d);return m(h,j)}const ie=(e,t,a)=>{const r=Object.entries(t).filter(([,e])=>S(e)).map(([e])=>e),n=new Map;for(const[i,o]of Object.entries(e)){if("function"!=typeof o.nullPolicy)continue;const e=["parameters",i,"nullPolicy"];if(1!==r.length){a(N.invalidNullPolicy,`a conditional 'nullPolicy' requires exactly one literal-union parameter in the definition — found ${r.length}`,e,i);continue}const s=r[0],l=t[s];if(!S(l))continue;const u=[];let c=!0;for(const t of l.literal){let r;try{r=o.nullPolicy(t)}catch(r){a(N.invalidNullPolicy,`the conditional 'nullPolicy' threw during compilation for member ${JSON.stringify(t)}: ${String(r)}`,e,i),c=!1;break}if("string"!=typeof r||!te.has(r)){a(N.invalidNullPolicy,`the conditional 'nullPolicy' must return 'propagate' or 'value' for every member — got ${JSON.stringify(r)} for ${JSON.stringify(t)}`,e,i),c=!1;break}u.push({value:t,policy:r})}c&&n.set(i,{selector:s,table:u})}return n},oe=e=>new y(`request failed (${e.status}): ${e.url}`,{code:N.httpStatus,errorData:{status:e.status,statusText:e.statusText,url:e.url,response:de(e.response)}}),se=(e,t,a)=>new y(e,{code:N.invalidResponse,errorData:{url:t,response:de(a)}}),le=(e,t)=>{const a=t instanceof Error?t.message:String(t),r=t??{},n={driver:e};"string"==typeof r.code&&(n.driverCode=r.code);for(const e of["table","column","constraint"])"string"==typeof r[e]&&(n[e]=r[e]);return new y(`${e}: ${a}`,{code:N.sqlError,errorData:n})},ue={http:{"http-status":{status:"number",statusText:"string",url:"string",response:"any"},"invalid-response":{url:"string",response:"any"}},sql:{"sql-error":{driver:"string",driverCode:["string","null"]}}},ce=async(e,t)=>{try{return await e()}catch(e){throw((e,t)=>{const a=ue[t];if(h(e)&&void 0!==e.code&&Object.hasOwn(a,e.code)){const t=e.errorData??{},r=a[e.code];if(Object.entries(r).every(([e,a])=>u(t[e]??null,a).ok))return e}return new y(e instanceof Error?e.message:String(e),{code:N.requestFailure})})(e,t)}},de=(e,t=500)=>"string"!=typeof e||e.length<=t?e:`${e.slice(0,t)}… (${e.length} characters)`;class pe{supplied;constructor(e){if(void 0===e&&"function"!=typeof globalThis.fetch)throw new y("FetchClient(): this runtime has no global fetch — pass one, new FetchClient(myFetch), or use another client such as new AxiosClient(axios)");this.supplied=e}request=async e=>{const t=this.supplied??globalThis.fetch,a=await t.call(globalThis,e.url,{method:e.method.toUpperCase(),headers:e.headers,...void 0!==e.body?{body:JSON.stringify(e.body)}:{},signal:e.signal}),r=await a.text();if(!a.ok)throw oe({status:a.status,statusText:a.statusText,url:a.url||e.url,response:ye(r)});return me(r,a.url||e.url,a.status)}}class fe{axios;constructor(e){if(this.axios=e,"function"!=typeof e||"function"!=typeof e.isAxiosError)throw new y("AxiosClient(axios): pass the axios import itself — new AxiosClient(axios)")}request=async e=>{try{const t=await this.axios({url:e.url,method:e.method,headers:e.headers,...void 0!==e.body?{data:e.body}:{},signal:e.signal});return""===t.data||void 0===t.data?null:t.data}catch(t){if(this.axios.isAxiosError(t)&&t.response)throw oe({status:t.response.status,statusText:t.response.statusText,url:t.config?.url??e.url,response:t.response.data});throw t}}}const me=(e,t,a)=>{if(""===e.trim())return null;try{return JSON.parse(e)}catch{throw se(`response was not JSON (${a}): ${t}`,t,e)}},ye=e=>{if(""===e.trim())return null;try{return JSON.parse(e)}catch{return e}},he=/^https?:\/\//i,ve=(e,t,a)=>{const r=he.test(e)?e:be(a,e),n=ge(t),i=""===n?r:`${r}${r.includes("?")?"&":"?"}${n}`;try{new URL(i)}catch{throw new y(`'${i}' is not a valid URL`,{code:N.typeCheck})}return i},be=(e,t)=>{if(void 0===e||""===e)throw new y(`'${t}' is a relative URL and no http.baseEndpoint is configured`,{code:N.typeCheck});return""===t?e:`${e.replace(/\/$/,"")}/${t.replace(/^\//,"")}`},ge=e=>{if(void 0===e)return"";const t=new URLSearchParams;for(const[a,r]of Object.entries(e))null!=r&&t.append(a,je(r,`query['${a}']`,"query"));return t.toString()},we=(...e)=>{const t={};for(const a of e)if(void 0!==a)for(const[e,r]of Object.entries(a))null!=r?t[e]=je(r,`headers['${e}']`,"header"):delete t[e];return t},Pe=e=>({Accept:"application/json",...e?{"Content-Type":"application/json"}:{}}),je=(e,t,a)=>{if("string"==typeof e||"number"==typeof e||"boolean"==typeof e)return b(e);throw new y(`${t} is ${g(e)} — a ${a} value must be a string, number or boolean; render it explicitly (join) or supply a fully-formed URL`,{code:N.typeCheck})},$e=e=>({method:e.method,url:e.url,headers:Object.fromEntries(Object.entries(e.headers).sort(([e],[t])=>e<t?-1:e>t?1:0)),...void 0!==e.body?{body:e.body}:{}}),ke=e=>Array.isArray(e)?e.length>0:t(e)?Object.keys(e).length>0:null!=e,De=(e,t)=>{if(void 0===t)return e;const a=L(e,v(t));return a.found?a.value:null},Oe=(e,a)=>{if(!t(e))throw new y("a row was not an object");const r=Object.values(e);if(1!==r.length)throw new y(`shape: '${a}' needs a single-column result — this row has ${r.length} columns; name the one column you want in the SQL`,{code:N.typeCheck});return r[0]},qe={type:"integer",required:!1},xe={type:["string","array"],required:!1},Ne=e=>P({name:"http",category:"io",parameters:{url:{type:"string"},method:{type:{literal:["get","post"]},default:"get"},query:{type:"object",required:!1,elementNullPolicy:"value"},body:{type:["string","number","boolean","array","object"],required:!1},headers:{type:"object",required:!1,elementNullPolicy:"value"},returnPath:xe,timeout:qe},positionalParams:["url"],timeoutParam:"timeout",cache:!0,returns:"any",validate:({returnPath:e,method:t,body:a})=>[...j(e,"returnPath"),...Ce(t,a)],evaluate:async({url:t,method:a,query:r,body:n,headers:i,returnPath:o},s)=>{if("get"===a&&void 0!==n)throw new y("a GET carries no body — did you mean method: 'post'?",{code:N.typeCheck});const l={method:a,url:ve(t,r,s.options.http?.baseEndpoint),headers:we(Pe(void 0!==n),s.options.http?.headers,i),...void 0!==n?{body:n}:{}},u=await s.cache.memo($e(l),()=>(Te(s,l),ce(()=>e.request({...l,signal:s.signal}),"http")));return De(u,o)}}),Ae=e=>P({name:"graphQL",category:"io",parameters:{query:{type:"string"},variables:{type:"object",required:!1,elementNullPolicy:"value"},url:{type:"string",required:!1},headers:{type:"object",required:!1,elementNullPolicy:"value"},returnPath:xe,timeout:qe},positionalParams:["query","variables"],timeoutParam:"timeout",cache:!0,returns:"any",validate:({returnPath:e})=>j(e,"returnPath"),evaluate:async({query:a,variables:r,url:n,headers:i,returnPath:o},s)=>{const l=n??s.options.graphQL?.endpoint;if(void 0===l)throw new y("no endpoint — supply url, or set the graphQL.endpoint option");const u={method:"post",url:ve(l,void 0,s.options.http?.baseEndpoint),headers:we(Pe(!0),s.options.http?.headers,s.options.graphQL?.headers,i),body:{query:a,...ke(r)?{variables:r}:{}}},c=await s.cache.memo($e(u),async()=>{Te(s,u);return((e,a)=>{if(!t(e))throw se("the GraphQL response was not an object",a,e);const r=e.errors;if(Array.isArray(r)&&r.length>0){const e=r[0]?.message;throw new y(`the GraphQL response carried ${r.length} error${1===r.length?"":"s"}`+("string"==typeof e?`: ${e}`:""),{code:N.graphQLErrors,errorData:{errors:r}})}if(!("data"in e))throw se("the GraphQL response carried neither data nor errors",a,e);return e.data??null})(await ce(()=>e.request({...u,signal:s.signal}),"http"),u.url)});return De(c,o)}}),Ee=e=>P({name:"sql",category:"io",parameters:{query:{type:"string"},values:{type:["array","object"],required:!1,elementNullPolicy:"value"},shape:{type:{literal:["rows","firstRow","column","firstValue"]},default:"rows"},noRowDefault:{type:"any",default:null,nullPolicy:"value",evaluation:"lazy"},timeout:qe},positionalParams:["query","...values"],timeoutParam:"timeout",cache:!0,returns:"any",evaluate:async({query:t,values:a,shape:r,noRowDefault:n},i)=>{const o={text:t,...ke(a)?{values:a}:{}};return(async(e,t,a)=>{switch(t){case"rows":return e;case"firstRow":return 0===e.length?a.evaluate():e[0];case"column":return e.map(e=>Oe(e,"column"));case"firstValue":return 0===e.length?a.evaluate():Oe(e[0],"firstValue")}})(await i.cache.memo(o,()=>(i.trace.note({type:"query",text:o.text}),ce(()=>e.query({...o,signal:i.signal}),"sql"))),r,n)}}),Ce=(e,t)=>void 0!==t&&"get"===e?[{severity:"error",parameter:"body",message:"a GET carries no body — add method: 'post', or drop the body"}]:[],Se=(e=new pe)=>[w(Ne(e)),w(Ae(e))],Le=e=>[w(Ee(e))],Te=(e,t)=>{e.trace.note({type:"request",method:t.method,url:t.url,headers:Object.keys(t.headers)})};class Fe{client;constructor(e){if(this.client=e,"function"!=typeof e?.query)throw new y("PostgresConnection(client): pass a connected node-postgres Client or Pool")}query=async e=>{if(void 0!==e.values&&!Array.isArray(e.values))throw le("postgres","takes positional binds ($1, $2, …) — an object of named binds needs a driver that supports them");try{const t=await this.client.query({text:e.text,...void 0!==e.values?{values:e.values}:{}});return t?.rows??[]}catch(e){throw le("postgres",e)}}}class Re{db;constructor(e){if(this.db=e,"function"!=typeof e?.all)throw new y("SQLiteConnection(db): pass an open sqlite Database")}query=async e=>{try{return await this.db.all(e.text,e.values)??[]}catch(e){throw le("sqlite",e)}}}const ze=e=>Qe(e,0,new Set),Qe=(e,t,a)=>{if(null===e||"boolean"==typeof e||"string"==typeof e)return e;if("number"==typeof e&&Number.isFinite(e)&&!Object.is(e,-0))return e;if("object"!=typeof e)return Je(e);if(!Array.isArray(e)&&!T(e))return Ge(e);if(a.has(e))return"[circular]";if(t>=R)return"[too deep]";a.add(e);const r=Array.isArray(e)?Array.from(e,e=>Qe(e,t+1,a)):Object.fromEntries(Object.entries(e).map(([e,r])=>[e,Qe(r,t+1,a)]));return a.delete(e),r},Je=e=>{switch(typeof e){case"function":return""===e.name?"[function]":`[function ${e.name}]`;case"symbol":return`[${String(e)}]`;case"bigint":return`[bigint ${e}]`;case"number":return Object.is(e,-0)?"[-0]":`[${e}]`;default:return"[undefined]"}},Ge=e=>{const t=Ue(e);try{const a=e.toJSON;if("function"==typeof a){const r=a.call(e);if("string"==typeof r)return`[${t} ${r}]`}}catch{}return`[${t}]`},Ue=e=>{try{const t=e.constructor?.name;return"string"==typeof t&&""!==t?t:"Object"}catch{return"Object"}},Me=e=>{const t=new Map;for(const a of e.holes)void 0!==a.timeoutFallback&&t.set(a.node,a.timeoutFallback);const a=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,n(t)])),r=e=>{const a=t.get(e);return void 0===a?{}:{timeoutFallback:ze(a.value)}},n=e=>{const t={order:e.order,kind:e.kind,path:$(e.path)},i="vars"in e&&void 0!==e.vars?{vars:a(e.vars)}:{};switch(e.kind){case"constant":return{...t,kind:e.kind,value:ze(e.value)};case"reference":return{...t,kind:e.kind,reference:z(e.binding??e.namespace,e.segments),authored:e.raw,...void 0===e.binding?{}:{binding:e.binding}};case"operator":return{...t,kind:e.kind,...i,operator:e.name,params:a(e.params),...void 0===e.fallback?{}:{fallback:n(e.fallback)},...r(e),...void 0===e.noCache?{}:{noCache:e.noCache},...void 0===e.entry.hostDefaults?{}:{hostDefaults:Object.keys(e.entry.hostDefaults)}};case"fragmentCall":return{...t,kind:e.kind,...i,fragment:e.name,resolved:void 0!==e.entry,argumentsMode:e.argumentsMode,...void 0===e.parameters?{}:{parameters:"dynamic"===e.argumentsMode?n(e.parameters):a(e.parameters)},...void 0===e.fallback?{}:{fallback:n(e.fallback)},...r(e),...void 0===e.noCache?{}:{noCache:e.noCache}};case"skeleton":{const a=D(e.skeleton,e.holes,e.holes.map(()=>"<hole>"));return{...t,kind:e.kind,...i,shape:ze(a),holes:e.holes.map(e=>({at:[...e.at],node:n(e.node)}))}}case"elements":return{...t,kind:e.kind,elements:e.nodes.map(n)};case"entries":return{...t,kind:e.kind,...i,entries:a(e.entries)};case"invalid":return{...t,kind:e.kind,raw:ze(e.raw)}}};return n(e.root)},Ve=(e,t)=>{const a=O(e,t);if(void 0===a)throw new TypeError("inspect() takes a CompiledExpression — the handle fig.compile() returns");const{expression:r,artifact:n,options:i}=a;return{version:q,expression:ze(r),options:Ie(i),canonicalForm:Me(n),issues:x(n,i,({issue:e,order:t})=>({order:t,...e,path:[...e.path]})),timeoutShielded:n.timeoutShielded,nodeCount:n.nodeCount,maxDepth:n.maxDepth,dependencies:Ye(n.dependencies),own:{nodeCount:n.own.nodeCount,maxDepth:n.own.maxDepth,dependencies:Ye(n.own.dependencies)}}},Be="[supplied]",Ie=e=>Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[e,We(e,t)])),We=(e,t)=>{switch(e){case"data":{const e="object"==typeof t&&null!==t?Object.keys(t).length:0;return`[supplied: ${e} top-level key${1===e?"":"s"}]`}case"signal":return Be;case"http":case"graphQL":return He(t,"headers",e=>"object"==typeof e&&null!==e?Object.fromEntries(Object.keys(e).map(e=>[e,"[redacted]"])):ze(e));case"cache":return He(t,"store",()=>Be);default:return ze(t)}},He=(e,t,a)=>"object"==typeof e&&null!==e?Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e).map(([e,r])=>[e,e===t?a(r):ze(r)])):ze(e),Ye=e=>({dataPaths:[...e.dataPaths.keys()],dynamic:e.dynamic,operators:[...e.operators],fragments:[...e.fragments]});export{fe as AxiosClient,N as ErrorCodes,l as EvaluationData,pe as FetchClient,n as OPERATOR_CATEGORIES,y as OperatorFailure,Fe as PostgresConnection,Re as SQLiteConnection,ne as defineOperator,oe as httpFailure,Se as httpOperators,Ve as inspect,h as isOperatorFailure,b as renderText,L as resolvePath,le as sqlFailure,Le as sqlOperators,q as version};
|
|
1
|
+
import{i as t,k as r,O as n,l as i,m as o,o as s,E as l,c as u,p as c,b as p,R as m,q as f,u as y,f as h,w as v,x as b,y as g,z as w,A as P,B as j,t as $,s as D,h as O,C as N,D as q}from"./chunks/engine.js";export{G as ARRAY,F as FigTree,H as OBJECT,I as compareValues,e as coreOperators,J as deepEqual,d as isTruthy}from"./chunks/engine.js";import{E as x,l as A,R as E,m as C,i as S,r as L,d as T,D as R,n as z}from"./chunks/shared.js";export{F as FigTreeError,W as WILDCARD,a as isFigTreeError,k as parsePath}from"./chunks/shared.js";const Q=/*#__PURE__*/new Set(["failures","external","output"]),U=/*#__PURE__*/new Set(["code","parameter","when","options","may","overflow"]),M=e=>{if(null===e||["string","number","boolean"].includes(typeof e))return!0;if(!t(e))return!1;const a=Object.keys(e);if(1!==a.length)return!1;const n=e[a[0]];switch(a[0]){case"type":return r(n);case"below":return"number"==typeof n&&Number.isFinite(n);case"empty":case"invalid":return!0===n;case"supplied":return"boolean"==typeof n;case"some":case"not":return M(n);default:return!1}},V=["param","elementOf","kindOf","typeNamedBy","firstNonNull","sum","product","abs","min","max"],B=e=>void 0===e||"number"==typeof e&&Number.isFinite(e),Y=e=>void 0===e||Number.isInteger(e)&&e>=0,K=(e,t,...a)=>t in e&&Object.keys(e).every(e=>e===t||a.includes(e)),X=(e,a)=>{if(r(e))return!0;if(!t(e))return!1;const n=Object.keys(e);return 1===n.length&&V.includes(n[0])?a(e[n[0]]):"type"in e?(e=>{const{type:t,min:a,max:r,minLength:n}=e;return"number"===t||"integer"===t?K(e,"type","min","max")&&B(a)&&B(r)&&!(a>r):("string"===t||"array"===t)&&K(e,"type","minLength")&&Y(n)})(e):K(e,"difference")?Array.isArray(e.difference)&&2===e.difference.length&&e.difference.every(a):K(e,"arrayOf","minLength")?Y(e.minLength)&&X(e.arrayOf,a):K(e,"oneOf")?Array.isArray(e.oneOf)&&e.oneOf.length>0&&e.oneOf.every(e=>X(e,a)):!(!K(e,"byParam","cases","otherwise")||!("cases"in e))&&(a(e.byParam)&&t(e.cases)&&Object.values(e.cases).every(e=>X(e,a))&&(void 0===e.otherwise||X(e.otherwise,a)))},Z=/[a-z]Default$/,_=/*#__PURE__*/new Set(["eager","race","lazy","lazyElements","lazyEntries","perElement","structural"]),ee=/*#__PURE__*/new Set(n),te=/*#__PURE__*/new Set(["propagate","value"]),ae=e=>u([],e).ok,re=e=>ae(e)||u({},e).ok;function ne(e){if(i(e))return e;const a=[],n=t(e)?e.name:void 0,d="string"==typeof n?n:void 0,y=(e,t,r,n)=>{a.push({severity:"error",code:e,message:t,path:r,...void 0!==d?{operator:d}:{},...void 0!==n?{parameter:n}:{}})};if(!t(e))throw y(x.invalidDefinition,"a definition must be a plain object",[]),o(x.invalidDefinition,a);const h=e;if("string"!=typeof h.name&&y(x.invalidDefinition,"'name' is required and must be a string",["name"]),t(h.parameters)||y(x.invalidDefinition,"'parameters' is required and must be an object of declarations (may be {})",["parameters"]),"function"!=typeof h.evaluate&&y(x.invalidDefinition,"'evaluate' is required and must be a function",["evaluate"]),a.length>0)throw o(x.invalidDefinition,a,d);"string"!=typeof h.category?y(x.invalidDefinition,`'category' is required and must be one of ${[...ee].join(", ")}`,["category"]):ee.has(h.category)||y(x.invalidDefinition,`'${h.category}' is not a category — expected one of ${[...ee].join(", ")}`,["category"]),void 0!==h.alias&&"string"!=typeof h.alias&&y(x.invalidDefinition,"'alias' must be a string",["alias"]),void 0!==h.cache&&!0!==h.cache&&y(x.invalidDefinition,"'cache' must be the literal true",["cache"]),void 0===h.metadata||t(h.metadata)||y(x.invalidDefinition,"'metadata' must be a plain object",["metadata"]),void 0===h.positionalParams||Array.isArray(h.positionalParams)&&!h.positionalParams.some(e=>"string"!=typeof e)||y(x.invalidDefinition,"'positionalParams' must be an array of parameter names",["positionalParams"]),void 0!==h.timeoutParam&&"string"!=typeof h.timeoutParam&&y(x.invalidDefinition,"'timeoutParam' must be a parameter name",["timeoutParam"]),void 0!==h.validate&&"function"!=typeof h.validate&&y(x.invalidDefinition,"'validate' must be a function",["validate"]),void 0===h.returns||r(h.returns)||y(x.invalidDefinition,"'returns' must be a metadata-vocabulary type",["returns"]);const v=(e,t,a)=>{e===l?y(x.invalidDefinition,"the EvaluationData sentinel is legal only as a parameter 'default'",t,a):Array.isArray(e)&&e.forEach((e,r)=>{e===l&&v(e,[...t,r],a)})};for(const[e,t]of Object.entries(h))"parameters"!==e&&"metadata"!==e&&v(t,[e]);const b=(e,t)=>{const a=A(e);a.ok?C(e)&&y(x.reservedName,`'${e}' is a reserved name`,t):y(x.invalidName,`'${e}': ${a.reason}`,t)};"string"==typeof h.name&&b(h.name,["name"]),"string"==typeof h.alias&&b(h.alias,["alias"]);const g=h.parameters,w={};for(const[e,a]of Object.entries(g)){const r=["parameters",e],n=A(e);n.ok?E.has(e)&&y(x.reservedName,`'${e}' is a reserved node key and cannot name a parameter`,r,e):y(x.invalidName,`'${e}': ${n.reason}`,r,e),t(a)?w[e]=a:y(x.invalidDefinition,`the declaration for '${e}' must be a plain object`,r,e)}const P={};for(const[e,a]of Object.entries(w)){const n=["parameters",e],i=e=>[...n,e],o=a;for(const[t,a]of Object.entries(o))"default"!==t&&"metadata"!==t&&v(a,i(t),e);let d=!0;void 0===o.type||r(o.type)||(y(x.invalidDefinition,"'type' must be a metadata-vocabulary type",i("type"),e),d=!1),d&&(P[e]=o.type??"any");let m=!1;if(void 0!==o.constraints){const t=s(o.constraints);t.ok?m=!0:y(x.invalidDefinition,`'constraints' is malformed: expected ${t.expected}, got ${t.actual}`,i("constraints"),e)}void 0!==o.required&&"boolean"!=typeof o.required&&y(x.invalidDefinition,"'required' must be a boolean",i("required"),e),void 0===o.metadata||t(o.metadata)||y(x.invalidDefinition,"'metadata' must be a plain object",i("metadata"),e);const f="default"in o;if(f&&!0===o.required&&y(x.invalidDefinition,"a 'default' contradicts 'required: true' — a default implies the parameter is optional",i("default"),e),f&&o.default!==l){const t=P[e];if(void 0!==t){const a=u(o.default,t);if(a.ok){if(m){const t=c(o.default,o);t.ok||y(x.typeCheck,`'default' violates the declared constraints: expected ${t.expected}, got ${t.actual}`,i("default"),e)}}else y(x.typeCheck,`'default' does not satisfy the declared type: expected ${a.expected}, got ${a.actual}`,i("default"),e)}}if(void 0===o.evaluation||_.has(o.evaluation)||y(x.invalidDefinition,`'evaluation' must be one of ${[..._].join(", ")}`,i("evaluation"),e),void 0!==o.truthiness&&"boolean"!=typeof o.truthiness&&y(x.invalidDefinition,"'truthiness' must be a boolean",i("truthiness"),e),void 0!==o.over&&"string"!=typeof o.over&&y(x.invalidDefinition,"'over' must be a parameter name",i("over"),e),void 0===o.replacesNullAt||Array.isArray(o.replacesNullAt)&&!o.replacesNullAt.some(e=>"string"!=typeof e)||y(x.invalidDefinition,"'replacesNullAt' must be an array of sibling parameter names",i("replacesNullAt"),e),void 0!==o.nullPolicy){const t=o.nullPolicy;"function"==typeof t||te.has(t)||y(x.invalidNullPolicy,"'nullPolicy' must be 'propagate', 'value' or a conditional function",i("nullPolicy"),e);const a=P[e];void 0===a||p(a)||y(x.invalidNullPolicy,"'nullPolicy' is legal only where the declared type names 'null' — a type without 'null' is the reject declaration",i("nullPolicy"),e),!0===o.truthiness&&"propagate"===t&&y(x.invalidNullPolicy,"'truthiness' implies null policy 'value' (null is falsy) — declaring 'propagate' is a conflict",i("nullPolicy"),e)}if(void 0!==o.elementNullPolicy){te.has(o.elementNullPolicy)||y(x.invalidNullPolicy,"'elementNullPolicy' must be 'propagate' or 'value' — the conditional form is not admitted here",i("elementNullPolicy"),e);const t=P[e];void 0===t||re(t)||y(x.invalidNullPolicy,"'elementNullPolicy' applies to container parameters only",i("elementNullPolicy"),e)}}if(Array.isArray(h.positionalParams)&&h.positionalParams.every(e=>"string"==typeof e)){const e=new Set,t=h.positionalParams;t.forEach((a,r)=>{const n=a.startsWith(m),i=n?a.slice(m.length):a;n&&r!==t.length-1&&y(x.invalidDefinition,`the rest entry '${a}' must be the last positional entry`,["positionalParams",r]),i in w||y(x.invalidDefinition,`positional entry '${a}' names no declared parameter`,["positionalParams",r]),e.has(i)&&y(x.invalidDefinition,`duplicate positional entry '${a}'`,["positionalParams",r]),e.add(i)})}for(const[e,t]of Object.entries(w)){const a=["parameters",e],r="perElement"===t.evaluation;if(void 0!==t.over&&"string"==typeof t.over)if(r){const r=t.over;if(r in w&&r!==e){const t=P[r];void 0===t||ae(t)||y(x.invalidDefinition,`the 'over' target '${r}' must admit an array`,[...a,"over"],e)}else y(x.invalidDefinition,`'over' names no sibling parameter ('${r}')`,[...a,"over"],e)}else y(x.invalidDefinition,"'over' is legal only with evaluation: 'perElement'",[...a,"over"],e);else r&&y(x.invalidDefinition,"evaluation: 'perElement' requires 'over' to name the iterated sibling",[...a,"evaluation"],e)}for(const[e,t]of Object.entries(w)){if(void 0===t.replacesNullAt)continue;if(!Array.isArray(t.replacesNullAt)||t.replacesNullAt.some(e=>"string"!=typeof e))continue;const a=["parameters",e,"replacesNullAt"];"lazy"!==t.evaluation&&y(x.invalidDefinition,"a 'replacesNullAt' holder must declare evaluation: 'lazy'",a,e);(t.required??!("default"in t))&&y(x.invalidDefinition,"a 'replacesNullAt' holder must be optional",a,e),"default"in t&&y(x.invalidDefinition,"a 'replacesNullAt' holder may not carry a 'default' — it is presence-sensitive by construction",a,e),t.replacesNullAt.forEach((t,r)=>{t===e?y(x.invalidDefinition,"'replacesNullAt' may not target the holder itself",[...a,r],e):t in w||y(x.invalidDefinition,`'replacesNullAt' target '${t}' names no sibling parameter`,[...a,r],e)})}for(const[e,t]of Object.entries(w))Z.test(e)&&"lazy"!==t.evaluation&&y(x.invalidDefinition,`'${e}' is named for the '…Default' family, so it must declare evaluation: 'lazy' — add 'replacesNullAt', read it as a LazyValue in the body, or rename it`,["parameters",e,"evaluation"],e);const j=ie(w,P,y);if("string"==typeof h.timeoutParam){void 0===w[h.timeoutParam]?y(x.invalidDefinition,`'timeoutParam' names no declared parameter ('${h.timeoutParam}')`,["timeoutParam"]):"integer"!==P[h.timeoutParam]&&y(x.invalidDefinition,"the 'timeoutParam' target must be 'integer'-typed",["timeoutParam"])}if(void 0!==h.analysis&&((e,a,r)=>{const n=(e,...t)=>r(x.invalidDefinition,e,["analysis",...t]);if(!t(e))return n("'analysis' must be a plain object");for(const t of Object.keys(e))Q.has(t)||n(`'${t}' is not an analysis field`,t);const{failures:i,external:o,output:s}=e,l=e=>"string"==typeof e&&Object.hasOwn(a,e);if(void 0!==o&&!0!==o&&n("'external' must be the literal true","external"),void 0===s||X(s,l)||n("'output' must be a type, or an output declaration naming declared parameters","output"),void 0!==i){if(!Array.isArray(i))return n("'failures' must be an array of rules","failures");!0===o&&n("an external operator declares no 'failures': it may fail whatever its inputs","failures"),i.forEach((e,a)=>{const r=(...e)=>["failures",a,...e];if(!t(e))return n("a rule must be a plain object",...r());for(const t of Object.keys(e))U.has(t)||n(`'${t}' is not a rule field`,...r(t));if("string"==typeof e.code&&""!==e.code||n("a rule's 'code' must be a non-empty string",...r("code")),void 0===e.parameter||l(e.parameter)||n("'parameter' names no declared parameter",...r("parameter")),void 0!==e.when)if(t(e.when))for(const[t,a]of Object.entries(e.when))l(t)?M(a)||n(`the test on '${t}' is malformed`,...r("when",t)):n(`'${t}' is not a declared parameter`,...r("when",t));else n("'when' must be an object of tests",...r("when"));void 0===e.options||t(e.options)||n("'options' must be a plain object",...r("options"));for(const t of["may","overflow"])void 0!==e[t]&&!0!==e[t]&&n(`'${t}' must be the literal true`,...r(t))})}})(h.analysis,w,(e,t,a)=>y(e,t,a)),a.length>0)throw o(x.invalidDefinition,a,d);return f(h,j)}const ie=(e,t,a)=>{const r=Object.entries(t).filter(([,e])=>S(e)).map(([e])=>e),n=new Map;for(const[i,o]of Object.entries(e)){if("function"!=typeof o.nullPolicy)continue;const e=["parameters",i,"nullPolicy"];if(1!==r.length){a(x.invalidNullPolicy,`a conditional 'nullPolicy' requires exactly one literal-union parameter in the definition — found ${r.length}`,e,i);continue}const s=r[0],l=t[s];if(!S(l))continue;const u=[];let c=!0;for(const t of l.literal){let r;try{r=o.nullPolicy(t)}catch(r){a(x.invalidNullPolicy,`the conditional 'nullPolicy' threw during compilation for member ${JSON.stringify(t)}: ${String(r)}`,e,i),c=!1;break}if("string"!=typeof r||!te.has(r)){a(x.invalidNullPolicy,`the conditional 'nullPolicy' must return 'propagate' or 'value' for every member — got ${JSON.stringify(r)} for ${JSON.stringify(t)}`,e,i),c=!1;break}u.push({value:t,policy:r})}c&&n.set(i,{selector:s,table:u})}return n},oe=e=>new y(`request failed (${e.status}): ${e.url}`,{code:x.httpStatus,errorData:{status:e.status,statusText:e.statusText,url:e.url,response:de(e.response)}}),se=(e,t,a)=>new y(e,{code:x.invalidResponse,errorData:{url:t,response:de(a)}}),le=(e,t)=>{const a=t instanceof Error?t.message:String(t),r=t??{},n={driver:e};"string"==typeof r.code&&(n.driverCode=r.code);for(const e of["table","column","constraint"])"string"==typeof r[e]&&(n[e]=r[e]);return new y(`${e}: ${a}`,{code:x.sqlError,errorData:n})},ue={http:{"http-status":{status:"number",statusText:"string",url:"string",response:"any"},"invalid-response":{url:"string",response:"any"}},sql:{"sql-error":{driver:"string",driverCode:["string","null"]}}},ce=async(e,t)=>{try{return await e()}catch(e){throw((e,t)=>{const a=ue[t];if(h(e)&&void 0!==e.code&&Object.hasOwn(a,e.code)){const t=e.errorData??{},r=a[e.code];if(Object.entries(r).every(([e,a])=>u(t[e]??null,a).ok))return e}return new y(e instanceof Error?e.message:String(e),{code:x.requestFailure})})(e,t)}},de=(e,t=500)=>"string"!=typeof e||e.length<=t?e:`${e.slice(0,t)}… (${e.length} characters)`;class pe{supplied;constructor(e){if(void 0===e&&"function"!=typeof globalThis.fetch)throw new y("FetchClient(): this runtime has no global fetch — pass one, new FetchClient(myFetch), or use another client such as new AxiosClient(axios)");this.supplied=e}request=async e=>{const t=this.supplied??globalThis.fetch,a=await t.call(globalThis,e.url,{method:e.method.toUpperCase(),headers:e.headers,...void 0!==e.body?{body:JSON.stringify(e.body)}:{},signal:e.signal}),r=await a.text();if(!a.ok)throw oe({status:a.status,statusText:a.statusText,url:a.url||e.url,response:ye(r)});return fe(r,a.url||e.url,a.status)}}class me{axios;constructor(e){if(this.axios=e,"function"!=typeof e||"function"!=typeof e.isAxiosError)throw new y("AxiosClient(axios): pass the axios import itself — new AxiosClient(axios)")}request=async e=>{try{const t=await this.axios({url:e.url,method:e.method,headers:e.headers,...void 0!==e.body?{data:e.body}:{},signal:e.signal});return""===t.data||void 0===t.data?null:t.data}catch(t){if(this.axios.isAxiosError(t)&&t.response)throw oe({status:t.response.status,statusText:t.response.statusText,url:t.config?.url??e.url,response:t.response.data});throw t}}}const fe=(e,t,a)=>{if(""===e.trim())return null;try{return JSON.parse(e)}catch{throw se(`response was not JSON (${a}): ${t}`,t,e)}},ye=e=>{if(""===e.trim())return null;try{return JSON.parse(e)}catch{return e}},he=/^https?:\/\//i,ve=(e,t,a)=>{const r=he.test(e)?e:be(a,e),n=ge(t),i=""===n?r:`${r}${r.includes("?")?"&":"?"}${n}`;try{new URL(i)}catch{throw new y(`'${i}' is not a valid URL`,{code:x.typeCheck})}return i},be=(e,t)=>{if(void 0===e||""===e)throw new y(`'${t}' is a relative URL and no http.baseEndpoint is configured`,{code:x.typeCheck});return""===t?e:`${e.replace(/\/$/,"")}/${t.replace(/^\//,"")}`},ge=e=>{if(void 0===e)return"";const t=new URLSearchParams;for(const[a,r]of Object.entries(e))null!=r&&t.append(a,je(r,`query['${a}']`,"query"));return t.toString()},we=(...e)=>{const t={};for(const a of e)if(void 0!==a)for(const[e,r]of Object.entries(a))null!=r?t[e]=je(r,`headers['${e}']`,"header"):delete t[e];return t},Pe=e=>({Accept:"application/json",...e?{"Content-Type":"application/json"}:{}}),je=(e,t,a)=>{if("string"==typeof e||"number"==typeof e||"boolean"==typeof e)return b(e);throw new y(`${t} is ${g(e)} — a ${a} value must be a string, number or boolean; render it explicitly (join) or supply a fully-formed URL`,{code:x.typeCheck})},$e=e=>({method:e.method,url:e.url,headers:Object.fromEntries(Object.entries(e.headers).sort(([e],[t])=>e<t?-1:e>t?1:0)),...void 0!==e.body?{body:e.body}:{}}),ke=e=>Array.isArray(e)?e.length>0:t(e)?Object.keys(e).length>0:null!=e,De=(e,t)=>{if(void 0===t)return e;const a=L(e,v(t));return a.found?a.value:null},Oe=(e,a)=>{if(!t(e))throw new y("a row was not an object");const r=Object.values(e);if(1!==r.length)throw new y(`shape: '${a}' needs a single-column result — this row has ${r.length} columns; name the one column you want in the SQL`,{code:x.typeCheck});return r[0]},Ne={type:"integer",required:!1},qe={type:["string","array"],required:!1},xe=e=>P({name:"http",category:"io",parameters:{url:{type:"string"},method:{type:{literal:["get","post"]},default:"get"},query:{type:"object",required:!1,elementNullPolicy:"value"},body:{type:["string","number","boolean","array","object"],required:!1},headers:{type:"object",required:!1,elementNullPolicy:"value"},returnPath:qe,timeout:Ne},positionalParams:["url"],timeoutParam:"timeout",cache:!0,returns:"any",validate:({returnPath:e,method:t,body:a})=>[...j(e,"returnPath"),...Ce(t,a)],evaluate:async({url:t,method:a,query:r,body:n,headers:i,returnPath:o},s)=>{if("get"===a&&void 0!==n)throw new y("a GET carries no body — did you mean method: 'post'?",{code:x.typeCheck});const l={method:a,url:ve(t,r,s.options.http?.baseEndpoint),headers:we(Pe(void 0!==n),s.options.http?.headers,i),...void 0!==n?{body:n}:{}},u=await s.cache.memo($e(l),()=>(Te(s,l),ce(()=>e.request({...l,signal:s.signal}),"http")));return De(u,o)}}),Ae=e=>P({name:"graphQL",category:"io",parameters:{query:{type:"string"},variables:{type:"object",required:!1,elementNullPolicy:"value"},url:{type:"string",required:!1},headers:{type:"object",required:!1,elementNullPolicy:"value"},returnPath:qe,timeout:Ne},positionalParams:["query","variables"],timeoutParam:"timeout",cache:!0,returns:"any",validate:({returnPath:e})=>j(e,"returnPath"),evaluate:async({query:a,variables:r,url:n,headers:i,returnPath:o},s)=>{const l=n??s.options.graphQL?.endpoint;if(void 0===l)throw new y("no endpoint — supply url, or set the graphQL.endpoint option");const u={method:"post",url:ve(l,void 0,s.options.http?.baseEndpoint),headers:we(Pe(!0),s.options.http?.headers,s.options.graphQL?.headers,i),body:{query:a,...ke(r)?{variables:r}:{}}},c=await s.cache.memo($e(u),async()=>{Te(s,u);return((e,a)=>{if(!t(e))throw se("the GraphQL response was not an object",a,e);const r=e.errors;if(Array.isArray(r)&&r.length>0){const e=r[0]?.message;throw new y(`the GraphQL response carried ${r.length} error${1===r.length?"":"s"}`+("string"==typeof e?`: ${e}`:""),{code:x.graphQLErrors,errorData:{errors:r}})}if(!("data"in e))throw se("the GraphQL response carried neither data nor errors",a,e);return e.data??null})(await ce(()=>e.request({...u,signal:s.signal}),"http"),u.url)});return De(c,o)}}),Ee=e=>P({name:"sql",category:"io",parameters:{query:{type:"string"},values:{type:["array","object"],required:!1,elementNullPolicy:"value"},shape:{type:{literal:["rows","firstRow","column","firstValue"]},default:"rows"},noRowDefault:{type:"any",default:null,nullPolicy:"value",evaluation:"lazy"},timeout:Ne},positionalParams:["query","...values"],timeoutParam:"timeout",cache:!0,returns:"any",evaluate:async({query:t,values:a,shape:r,noRowDefault:n},i)=>{const o={text:t,...ke(a)?{values:a}:{}};return(async(e,t,a)=>{switch(t){case"rows":return e;case"firstRow":return 0===e.length?a.evaluate():e[0];case"column":return e.map(e=>Oe(e,"column"));case"firstValue":return 0===e.length?a.evaluate():Oe(e[0],"firstValue")}})(await i.cache.memo(o,()=>(i.trace.note({type:"query",text:o.text}),ce(()=>e.query({...o,signal:i.signal}),"sql"))),r,n)}}),Ce=(e,t)=>void 0!==t&&"get"===e?[{severity:"error",parameter:"body",message:"a GET carries no body — add method: 'post', or drop the body"}]:[],Se=(e=new pe)=>[w(xe(e)),w(Ae(e))],Le=e=>[w(Ee(e))],Te=(e,t)=>{e.trace.note({type:"request",method:t.method,url:t.url,headers:Object.keys(t.headers)})};class Fe{client;constructor(e){if(this.client=e,"function"!=typeof e?.query)throw new y("PostgresConnection(client): pass a connected node-postgres Client or Pool")}query=async e=>{if(void 0!==e.values&&!Array.isArray(e.values))throw le("postgres","takes positional binds ($1, $2, …) — an object of named binds needs a driver that supports them");try{const t=await this.client.query({text:e.text,...void 0!==e.values?{values:e.values}:{}});return t?.rows??[]}catch(e){throw le("postgres",e)}}}class Re{db;constructor(e){if(this.db=e,"function"!=typeof e?.all)throw new y("SQLiteConnection(db): pass an open sqlite Database")}query=async e=>{try{return await this.db.all(e.text,e.values)??[]}catch(e){throw le("sqlite",e)}}}const ze=e=>Qe(e,0,new Set),Qe=(e,t,a)=>{if(null===e||"boolean"==typeof e||"string"==typeof e)return e;if("number"==typeof e&&Number.isFinite(e)&&!Object.is(e,-0))return e;if("object"!=typeof e)return Je(e);if(!Array.isArray(e)&&!T(e))return Ge(e);if(a.has(e))return"[circular]";if(t>=R)return"[too deep]";a.add(e);const r=Array.isArray(e)?Array.from(e,e=>Qe(e,t+1,a)):Object.fromEntries(Object.entries(e).map(([e,r])=>[e,Qe(r,t+1,a)]));return a.delete(e),r},Je=e=>{switch(typeof e){case"function":return""===e.name?"[function]":`[function ${e.name}]`;case"symbol":return`[${String(e)}]`;case"bigint":return`[bigint ${e}]`;case"number":return Object.is(e,-0)?"[-0]":`[${e}]`;default:return"[undefined]"}},Ge=e=>{const t=Ue(e);try{const a=e.toJSON;if("function"==typeof a){const r=a.call(e);if("string"==typeof r)return`[${t} ${r}]`}}catch{}return`[${t}]`},Ue=e=>{try{const t=e.constructor?.name;return"string"==typeof t&&""!==t?t:"Object"}catch{return"Object"}},Me=e=>{const t=new Map;for(const a of e.holes)void 0!==a.timeoutFallback&&t.set(a.node,a.timeoutFallback);const a=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,n(t)])),r=e=>{const a=t.get(e);return void 0===a?{}:{timeoutFallback:ze(a.value)}},n=e=>{const t={order:e.order,kind:e.kind,path:$(e.path)},i="vars"in e&&void 0!==e.vars?{vars:a(e.vars)}:{};switch(e.kind){case"constant":return{...t,kind:e.kind,value:ze(e.value)};case"reference":return{...t,kind:e.kind,reference:z(e.binding??e.namespace,e.segments),authored:e.raw,...void 0===e.binding?{}:{binding:e.binding}};case"operator":return{...t,kind:e.kind,...i,operator:e.name,params:a(e.params),...void 0===e.fallback?{}:{fallback:n(e.fallback)},...r(e),...void 0===e.noCache?{}:{noCache:e.noCache},...void 0===e.entry.hostDefaults?{}:{hostDefaults:Object.keys(e.entry.hostDefaults)}};case"fragmentCall":return{...t,kind:e.kind,...i,fragment:e.name,resolved:void 0!==e.entry,argumentsMode:e.argumentsMode,...void 0===e.parameters?{}:{parameters:"dynamic"===e.argumentsMode?n(e.parameters):a(e.parameters)},...void 0===e.fallback?{}:{fallback:n(e.fallback)},...r(e),...void 0===e.noCache?{}:{noCache:e.noCache}};case"skeleton":{const a=D(e.skeleton,e.holes,e.holes.map(()=>"<hole>"));return{...t,kind:e.kind,...i,shape:ze(a),holes:e.holes.map(e=>({at:[...e.at],node:n(e.node)}))}}case"elements":return{...t,kind:e.kind,elements:e.nodes.map(n)};case"entries":return{...t,kind:e.kind,...i,entries:a(e.entries)};case"invalid":return{...t,kind:e.kind,raw:ze(e.raw)}}};return n(e.root)},Ve=(e,t)=>{const a=O(e,t);if(void 0===a)throw new TypeError("inspect() takes a CompiledExpression — the handle fig.compile() returns");const{expression:r,artifact:n,options:i}=a;return{version:N,expression:ze(r),options:Ie(i),canonicalForm:Me(n),issues:q(n,i,({issue:e,order:t})=>({order:t,...e,path:[...e.path]})),timeoutShielded:n.timeoutShielded,nodeCount:n.nodeCount,maxDepth:n.maxDepth,dependencies:Ye(n.dependencies),own:{nodeCount:n.own.nodeCount,maxDepth:n.own.maxDepth,dependencies:Ye(n.own.dependencies)}}},Be="[supplied]",Ie=e=>Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[e,We(e,t)])),We=(e,t)=>{switch(e){case"data":{const e="object"==typeof t&&null!==t?Object.keys(t).length:0;return`[supplied: ${e} top-level key${1===e?"":"s"}]`}case"signal":return Be;case"http":case"graphQL":return He(t,"headers",e=>"object"==typeof e&&null!==e?Object.fromEntries(Object.keys(e).map(e=>[e,"[redacted]"])):ze(e));case"cache":return He(t,"store",()=>Be);default:return ze(t)}},He=(e,t,a)=>"object"==typeof e&&null!==e?Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e).map(([e,r])=>[e,e===t?a(r):ze(r)])):ze(e),Ye=e=>({dataPaths:[...e.dataPaths.keys()],dynamic:e.dynamic,paramNames:[...e.paramNames],paramsDynamic:e.paramsDynamic,operators:[...e.operators],fragments:[...e.fragments]});export{me as AxiosClient,x as ErrorCodes,l as EvaluationData,pe as FetchClient,n as OPERATOR_CATEGORIES,y as OperatorFailure,Fe as PostgresConnection,Re as SQLiteConnection,ne as defineOperator,oe as httpFailure,Se as httpOperators,Ve as inspect,h as isOperatorFailure,b as renderText,L as resolvePath,le as sqlFailure,Le as sqlOperators,N as version};
|
package/build/migrate/index.d.ts
CHANGED
|
@@ -14,6 +14,21 @@ interface TypeDeclaration {
|
|
|
14
14
|
constraints?: Constraints;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
interface OperatorListing {
|
|
18
|
+
displayName?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
parameterDescriptions?: {
|
|
21
|
+
[parameter: string]: string;
|
|
22
|
+
};
|
|
23
|
+
docUrl?: string;
|
|
24
|
+
backgroundColor?: string;
|
|
25
|
+
textColor?: string;
|
|
26
|
+
seeds?: {
|
|
27
|
+
[parameter: string]: unknown;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
type FragmentMetadata = Omit<OperatorListing, 'description' | 'parameterDescriptions'>;
|
|
31
|
+
|
|
17
32
|
interface FragmentParameterDeclaration extends TypeDeclaration {
|
|
18
33
|
default?: unknown;
|
|
19
34
|
description?: string;
|
|
@@ -23,7 +38,10 @@ interface FragmentDefinition {
|
|
|
23
38
|
expression: unknown;
|
|
24
39
|
parameters?: Record<string, FragmentParameterDeclaration>;
|
|
25
40
|
description?: string;
|
|
26
|
-
metadata?: Record<string, unknown>;
|
|
41
|
+
metadata?: FragmentMetadata & Record<string, unknown>;
|
|
42
|
+
samples?: {
|
|
43
|
+
[parameter: string]: unknown;
|
|
44
|
+
};
|
|
27
45
|
}
|
|
28
46
|
|
|
29
47
|
interface MigrationIssue {
|