fig-tree-evaluator 3.0.0-preview.7 → 3.0.0-preview.9
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/authoring/index.js +1 -1
- package/build/chunks/engine.js +1 -1
- package/build/chunks/shared.js +1 -1
- package/build/format/index.js +1 -1
- package/build/index.d.ts +6 -6
- package/build/index.js +1 -1
- package/build/migrate/index.js +1 -1
- package/package.json +1 -1
package/build/authoring/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e,c as t,a as n,b as r,i as a,d as s,v as o,e as i,r as c,f as u,s as l,F as m,g as p}from"../chunks/engine.js";import{r as y,W as d,i as f,a as h,E as v,b as g,F as b}from"../chunks/shared.js";const w=e=>"demand"in e,x=(t,n)=>({...t,path:n.path,...void 0===t.fragment?{fragment:n.name,fragmentPath:e(t.path)}:{},order:[n.order,...t.order]}),k=(t,n)=>void 0===t.fragmentPath?{path:n.path,fragmentPath:e(t.path)}:{...t,path:n.path},O=t=>{const{code:n,message:r,certainty:a,operator:s,parameter:o,fragment:i,fragmentPath:c}=t;return{path:e(t.path),code:n,message:r,certainty:a,...void 0!==s?{operator:s}:{},...void 0!==o?{parameter:o}:{},...void 0!==i?{fragment:i,fragmentPath:c}:{}}},j=e=>{const t=new Map;for(const{finding:n}of[...e].sort((e,t)=>((e,t)=>{for(let n=0;n<Math.min(e.length,t.length);n++)if(e[n]!==t[n])return e[n]-t[n];return e.length-t.length})(e.order,t.order))){const e=JSON.stringify({...n,message:void 0,certainty:void 0}),r=t.get(e);void 0===r?t.set(e,n):"always"===n.certainty&&(r.certainty="always")}return[...t.values()]},$=e=>({order:e.order,finding:O(e)}),A=(t,n)=>({order:t.order,finding:{...O(t),coveredBy:e(n.path),...void 0!==n.fragmentPath?{coveredByFragmentPath:n.fragmentPath}:{}}}),N=[],S=[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"},{type:"array"},{type:"object"},{type:"opaque"},{type:"nonFinite"}],M=e=>[{exact:void 0===e?null:e}],P=e=>e.length>0&&e.every(e=>"exact"in e)?e.map(e=>e.exact):void 0,F=e=>"exact"in e?null===e.exact:"null"===e.type,E=e=>{if(f(e))return e.literal.map(e=>({exact:e}));const t="string"==typeof e?[e]:e;return t.includes("any")?S:I(t.map(e=>[{type:e}]))},z=new WeakMap;let L=0;const q=e=>"object"==typeof e&&null!==e||"function"==typeof e?`=#${(e=>{let t=z.get(e);return void 0===t&&z.set(e,t=++L),t})(e)}`:`=${typeof e}:${String(e)}`,D=e=>{if("exact"in e)return q(e.exact);if("array"===e.type)return void 0!==e.items?`a[${e.items.map(J).join(";")}]`:`a${e.length??""}+${e.minLength??""}(${void 0===e.element?"*":J(e.element)})`;if("object"===e.type)return void 0===e.keys?"o":`o{${Object.keys(e.keys).sort().map(t=>`${JSON.stringify(t)}:${J(e.keys[t])}`).join(",")}}`;const{type:t,...n}=e;return`${t}${JSON.stringify(n)}`},J=e=>e.map(D).sort().join("|"),B=e=>{if(null===e)return{type:"null"};if(Array.isArray(e))return{type:"array"};switch(typeof e){case"string":return{type:"string"};case"number":return{type:Number.isInteger(e)?"integer":Number.isFinite(e)?"number":"nonFinite"};case"boolean":return{type:"boolean"};case"object":{const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t?{type:"object"}:{type:"opaque"}}default:return{type:"opaque"}}},I=e=>{const t=new Set,n=[];for(const r of e)for(const e of r){const r=D(e);t.has(r)||(t.add(r),n.push(e))}const r=n.filter(e=>"exact"in e).map(e=>e.exact);return r.length<=16?n:C(n.filter(e=>!("exact"in e)),H(r))},C=(...e)=>I(e),T=e=>"number"==typeof e&&Number.isFinite(e),W=e=>Array.from(e).length,H=e=>{const t=(e,t)=>{if(0===t.length)return N;const n=t.reduce((e,t)=>Math.min(e,t));return[R({type:e},n)]};return I([...[!0,!1].map(t=>le(ce(e.map(e=>T(e)&&Number.isInteger(e)===t?oe(e):void 0)))),t("string",e.filter(e=>"string"==typeof e).map(W)),t("array",e.filter(Array.isArray).map(e=>e.length)),...e.filter(e=>!T(e)&&"string"!=typeof e&&!Array.isArray(e)).map(e=>[B(e)])])},R=(e,t)=>t?{...e,minLength:t}:e,G=e=>e.some(F),K=e=>e.length>0&&e.every(F),Q=e=>e.filter(e=>!F(e)),U=e=>we(e.map(e=>{if("exact"in e){const{exact:t}=e;return(Array.isArray(t)?t:h(t)?Object.values(t):[]).includes(null)?"yes":"no"}return"array"===e.type?0!==e.length&&G(e.element??S)?"maybe":"no":"object"===e.type?"maybe":"no"})),V=(e,t)=>I(e.map(e=>{if("no"===U([e]))return[e];const n="exact"in e?e.exact:void 0;if(1===t.length&&"exact"in t[0]&&"exact"in e){const e=t[0].exact,r=t=>null===t?e:t;if(Array.isArray(n))return M(n.map(r));const a={};for(const[e,t]of Object.entries(n))a[e]=r(t);return M(a)}if(!(Array.isArray(n)||"type"in e&&"array"===e.type))return[{type:"object"}];const{length:r,minLength:a}=e;return Z([Q(Y([e])),t],Array.isArray(n)?{length:n.length}:{length:r,minLength:a})})),X=e=>e.flatMap(e=>{const t=U([e]);if("no"===t)return[e];if("yes"===t)return N;if(!("type"in e))return[e];if("array"!==e.type)return[e];const{items:n,...r}=e;if(void 0===n)return[{...r,element:Q(e.element??S)}];const a=n.map(Q);return a.some(e=>0===e.length)?N:_(a)}),Y=e=>I(e.map(e=>"exact"in e?Array.isArray(e.exact)?I(Array.from(e.exact,e=>M(e))):N:"array"===e.type?0===e.length?N:e.element??S:N)),Z=(e,t={})=>[{type:"array",element:I(e),...t}],_=e=>[{type:"array",element:I(e),length:e.length,items:e}],ee=e=>C(e.map(e=>"exact"in e?B(e.exact):e)),te=e=>be(e.map(e=>"exact"in e?"number"!=typeof e.exact||Number.isFinite(e.exact)?"no":"yes":"nonFinite"===e.type?"maybe":"no")),ne=e=>[{type:"object",keys:e}],re=(e,t)=>{if(0===t.length)return{value:e,found:"yes"};const[n,...r]=t;let a;const s=[],o=we(e.map(e=>{if("exact"in e){const n=y(e.exact,t);return n.found&&s.push(M(n.value)),n.found?"yes":"no"}const o=(e,t)=>{if("no"===t)return"no";const n=(e=>e===S?a??=re(S,r):re(e,r))(e);return s.push(n.value),"yes"===t?n.found:"no"===n.found?"no":"maybe"};if(n===d)return"array"!==e.type?"no":(s.push(0===r.length?[e]:[{type:"array"}]),"yes");switch(e.type){case"array":{const t="number"==typeof n?n:Number(n);if(!Number.isInteger(t)||t<0)return"number"==typeof n?"no":"maybe";const r=void 0!==e.length?t<e.length?"yes":"no":t<(e.minLength??0)?"yes":"maybe";return void 0!==e.items&&"yes"===r?o(e.items[t],"yes"):o(e.element??S,r)}case"object":return void 0===e.keys?o(S,"maybe"):Object.hasOwn(e.keys,String(n))?o(e.keys[String(n)],"yes"):"no";case"opaque":return o(S,"maybe");default:return"no"}}));return{value:I(s),found:0===e.length?"yes":o}},ae={min:0,max:0,integer:!0},se={min:1,max:1,integer:!0},oe=e=>({min:e,max:e,integer:Number.isInteger(e)}),ie=e=>"exact"in e?T(e.exact)?oe(e.exact):void 0:"number"===e.type||"integer"===e.type?{min:e.min??-1/0,max:e.max??1/0,integer:"integer"===e.type}:void 0,ce=e=>e.reduce((e,t)=>void 0===e||void 0===t?e??t:{min:Math.min(e.min,t.min),max:Math.max(e.max,t.max),integer:e.integer&&t.integer},void 0),ue=e=>ce(e.map(ie)),le=e=>{if(void 0===e)return N;const t=e.integer?Math.ceil(e.min):e.min,n=e.integer?Math.floor(e.max):e.max;return t>n?N:[{type:e.integer?"integer":"number",...t>-1/0?{min:t}:{},...n<1/0?{max:n}:{}}]},me=e=>e.filter(e=>"exact"in e?"number"!=typeof e.exact:!["number","integer","nonFinite"].includes(e.type)),pe=e=>Y(e).filter(e=>"no"!==te([e])),ye=(e,t,n)=>I(e.map(e=>"exact"in e?Array.isArray(e.exact)?t(Array.from(e.exact,e=>M(e))):N:"array"!==e.type?N:void 0!==e.items?t(e.items):0===e.length?n(N,0):n(e.element??S,e.length??e.minLength??0))),de=(e,t,n)=>e.reduce((e,t)=>{const r=ue(t);return e&&r&&n(e,r)},t),fe=(e,t)=>({min:e.min+t.min,max:e.max+t.max,integer:e.integer&&t.integer}),he=(e,t)=>0===e||0===t?0:e*t,ve=(e,t)=>{const n=[he(e.min,t.min),he(e.min,t.max),he(e.max,t.min),he(e.max,t.max)];return{min:Math.min(...n),max:Math.max(...n),integer:e.integer&&t.integer}},ge=(e,t)=>C(me(Y(e)),pe(e),ye(e,e=>{const n=e.map(ue);if(e.some(e=>"no"!==te(e)))return le(ce(n));if(0===n.length||n.includes(void 0))return N;const r="min"===t?Math.min:Math.max;return le({min:n.map(e=>e.min).reduce((e,t)=>r(e,t)),max:n.map(e=>e.max).reduce((e,t)=>r(e,t)),integer:n.every(e=>e.integer)})},e=>le(ue(e)))),be=e=>e.includes("yes")?"yes":e.includes("maybe")?"maybe":"no",we=e=>e.every(e=>"yes"===e)?"yes":e.every(e=>"no"===e)?"no":"maybe",xe=(e,t)=>"no"===e||"no"===t?"no":"yes"===e&&"yes"===t?"yes":"maybe",ke=(e,t)=>{if("exact"in e)return Oe([e.exact],t);if("object"!==e.type)return"no";if(void 0===e.keys)return"maybe";const n=e.keys;return we(Object.entries(t).map(([e,t])=>{if(!Object.hasOwn(n,e))return!1===t.required?"yes":"no";const r=void 0===t.type?"yes":je(n[e],t.type);return void 0===t.constraints?r:xe(r,je(n[e],"any",t.constraints))}))},Oe=(e,t)=>n(e,{elementShape:t},!1).ok?"yes":"no",je=(e,r,a,s=!1)=>we(e.map(e=>{if("exact"in e){const o=e.exact;return t(o,r).ok&&(null===o||void 0===a||n(o,a,s).ok)?"yes":"no"}const o=((e,t)=>{if(f(t)){const n=t=>{const n=ie(e);return void 0!==n?"number"==typeof t&&(!n.integer||Number.isInteger(t))&&t>=n.min&&t<=n.max:"string"===e.type?"string"==typeof t&&W(t)>=(e.minLength??0):typeof t===e.type};return t.literal.some(n)?"maybe":"no"}const n="string"==typeof t?[t]:t;if(n.includes("any"))return"yes";switch(e.type){case"number":return n.includes("number")?"yes":n.includes("integer")?"maybe":"no";case"integer":return n.includes("integer")||n.includes("number")?"yes":"no";case"opaque":return n.includes("object")?"maybe":"no";case"nonFinite":return n.includes("number")?"yes":"no";default:return n.includes(e.type)?"yes":"no"}})(e,r);return"no"===o||void 0===a||"null"===e.type?o:xe(o,((e,t,n)=>{if(0===Object.keys(t).filter(e=>void 0!==t[e]).length)return"yes";if("array"!==e.type)return"no";let r="yes";void 0!==t.length&&(r=xe(r,void 0===e.length?"maybe":e.length===t.length?"yes":"no"));const a=0===e.length?N:e.element??S,s=n?Q(a):a;return void 0!==t.homogeneous&&(r=xe(r,0===s.length||t.homogeneous.some(e=>"yes"===je(s,e))?"yes":"maybe")),void 0!==t.elementShape&&(r=xe(r,s.every(e=>"yes"===ke(e,t.elementShape))?"yes":"maybe")),r})(e,a,s))})),$e=(e,t)=>"yes"===je(e,t)?e:I(e.map(e=>"no"===je([e],t)?N:"exact"in e?[e]:f(t)?t.literal.filter(t=>"no"!==je([e],{literal:[t]})).map(e=>({exact:e})):"number"===e.type?le({...ie(e),integer:!0}):[e])),Ae=e=>"string"==typeof e?e:Array.isArray(e)?e.join(" | "):`one of ${e.literal.map(e=>JSON.stringify(e)).join(", ")}`,Ne=(e,t,n)=>{const r=e.entry.instanceDefaults;return void 0!==r&&Object.hasOwn(r,t)?M(r[t]):"default"in n?"symbol"==typeof n.default?S:M(n.default):void 0},Se=(e,t)=>"lazyEntries"===e.evaluation?"entries"===t.kind:"elements"===t.kind,Me=(e,t)=>{const n=e.nullPolicy;if("string"==typeof n)return new Set([n]);const r=t[n.selector]?.known??N,a=r.every(e=>"exact"in e)?n.table.filter(e=>r.some(t=>"exact"in t&&t.exact===e.value)):n.table;return new Set(a.map(e=>e.policy))},Pe=(e,t)=>{const{definition:n}=e.entry,{entries:a,whole:s}=n.resolution,o={},i=new Set,c=[],u={},l=new Set,m={},p=new Set;let y,d="no";const f=(t,n,r,a)=>{const s=je(r,n.type,n.constraints,void 0!==n.elementNullPolicy);if("yes"===s)return;const o={path:e.path,code:"type-check",message:`${e.name} – parameter '${t}': may receive something other than ${Ae(n.type)}${void 0!==n.constraints?", as constrained":""}`,certainty:"no"===s&&a?"always":"may",operator:e.name,parameter:t,order:[e.order]};c.push(o),"no"===s&&a&&(y??=o)};for(const[n,r]of a){const a=e.params[n];switch(r.evaluation){case"eager":void 0!==a&&(u[n]={known:t[n],absent:!1});break;case"structural":"constant"===a?.kind&&(u[n]={known:M(a.value),absent:!1});break;case"lazy":if(void 0!==r.replacesNullAt){const s=void 0!==a?t[n]:Ne(e,n,r);if(void 0!==s)for(const e of r.replacesNullAt)m[e]={name:n,known:s}}else void 0!==a&&(l.add(n),f(n,r,t[n],!1),o[n]=$e(t[n],r.type));break;case"lazyElements":case"lazyEntries":case"race":if(void 0===a)break;Se(r,a)?(l.add(n),o[n]=t[n]):u[n]={known:t[n],absent:!1}}}for(const[t,n]of s){if(l.has(t))continue;const a=u[t]??{known:N,absent:!0},s=!n.required&&!r(n.type)&&G(a.known);if(!a.absent&&!s)continue;const o=Ne(e,t,n),i=s?Q(a.known):a.known;u[t]={known:void 0===o?i:C(i,o),absent:void 0===o}}for(const[e,t]of s){if(l.has(e))continue;let n=u[e]?.known??N;if(0===n.length)continue;u[e].absent&&i.add(e);const a=m[e];if(void 0!==a){(void 0!==t.elementNullPolicy?"no"!==U(n):G(n))&&(p.add(a.name),n=void 0!==t.elementNullPolicy?V(n,a.known):C(Q(n),a.known))}const s="eager"!==t.evaluation&&"structural"!==t.evaluation;if(G(n)&&r(t.type)&&!s){const e=Me(t,u);if(e.has("propagate")){const t=1===e.size&&K(n);if(d=t?"yes":"maybe",t){y??="null";break}1===e.size&&(n=Q(n))}}if("propagate"===t.elementNullPolicy){const e=U(n);if("no"!==e){if(d="yes"===e?"yes":"maybe","yes"===e){y??="null";break}n=X(n)}}f(e,t,n,!0),o[e]=ze(t,n)}if("no"!==d)for(const e of c)"always"===e.certainty&&(e.certainty="may");return{received:o,absent:i,failures:c,propagates:d,consulted:p,...y?{ends:y}:{}}},Fe=e=>{const t="string"==typeof e?[e]:Array.isArray(e)?e:[];return t.length>0&&t.every(e=>"array"===e||"object"===e)},Ee=(e,t)=>{if(Fe(t)){if(Array.isArray(e))return e.map(a);if(h(e)){const t={};for(const[n,r]of Object.entries(e))t[n]=a(r);return t}}return a(e)},ze=(e,t)=>{const n=$e(t,e.type);return e.truthiness?n.length>0&&n.every(e=>"exact"in e)?I(n.map(t=>M(Ee(t.exact,e.type)))):Fe(e.type)?S:E("boolean"):n},Le=(e,t)=>{const n=!e.required&&!r(e.type)&&G(t),a=n?Q(t):t;let s=je(a,e.type,e.constraints);"yes"===s&&void 0!==e.constraints&&G(a)&&(s="maybe");const o=n?M(e.default??null):N;return{known:C($e(a,e.type),o),answer:s}},qe=(e,t,n,r)=>{if("yes"!==je(r,n.type,n.constraints))return{path:e.path,code:"type-check",message:`${e.name} – parameter '${t}': an element's result may be other than ${Ae(n.type)}`,certainty:"may",operator:e.name,parameter:t,order:[e.order]}},De="non-finite-result",Je="empty-aggregate",Be="operator-failure",Ie={code:De,overflow:!0},Ce=e=>({code:"type-check",parameter:"values",when:{expect:e,values:{some:{not:{type:e}}}}}),Te={plus:[{code:Je,parameter:"values",when:{values:{empty:!0},expect:{supplied:!1}}},Ce("number"),Ce("string"),Ce("array"),Ce("object"),Ie],subtract:[Ie],multiply:[Ie],divide:[{code:De,parameter:"by",when:{by:0}},Ie],modulo:[{code:De,parameter:"mod",when:{mod:0}},Ie],power:[{code:De,parameter:"base",when:{base:0,exponent:{below:0}}},{code:De,parameter:"base",may:!0,when:{base:{below:0},exponent:{not:{type:"integer"}}}},{code:De,parameter:"exponent",may:!0,when:{exponent:{not:{below:100}}}},Ie],round:[{code:De,parameter:"decimals",may:!0,when:{decimals:{not:{below:300}}}},Ie],min:[{code:Je,parameter:"values",when:{values:{empty:!0}}}],max:[{code:Je,parameter:"values",when:{values:{empty:!0}}}],match:[{code:Be,may:!0,when:{default:{supplied:!1}}}],regex:[{code:Be,parameter:"flags",when:{flags:{invalid:!0}}},{code:Be,parameter:"pattern",when:{pattern:{invalid:!0}}}],get:[{code:Be,parameter:"path",when:{path:{invalid:!0}}},{code:"missing-data-path",may:!0,options:{strictDataPaths:!0},when:{default:{supplied:!1}}}],convert:[{code:Be,when:{to:"number",value:{type:["array","object"]}}},{code:Be,may:!0,when:{to:"number",value:{type:"string"}}},{code:De,may:!0,when:{to:"number",value:{type:"string"}}},{code:Be,when:{to:"string",value:{type:["array","object"]}}}]};let We;const He=e=>{const t=e.analysis;return void 0!==t?t.external?"external":t.failures??[]:(We??=new Map(s.map(e=>[e,Te[e.name]??[]])),We.get(e)??"external")},Re=e=>"yes"===e?"no":"no"===e?"yes":"maybe",Ge=(e,t)=>{if(null===e||"object"!=typeof e){if("exact"in t)return t.exact===e?"yes":"no";return"no"===je([t],null===e?"null":{literal:[e]})?"no":"maybe"}if("type"in e)return je([t],e.type);if("not"in e)return Re(Ge(e.not,t));if("below"in e)return"exact"in t?"number"==typeof t.exact&&t.exact<e.below?"yes":"no":"number"===t.type||"integer"===t.type?(t.max??1/0)<e.below?"yes":(t.min??-1/0)>=e.below?"no":"maybe":"nonFinite"===t.type?"maybe":"no";if("empty"in e){if("exact"in t){const{exact:e}=t;return"string"==typeof e||Array.isArray(e)?0===e.length?"yes":"no":h(e)&&0===Object.keys(e).length?"yes":"no"}switch(t.type){case"array":return void 0!==t.length?0===t.length?"yes":"no":t.minLength?"no":"maybe";case"object":return void 0===t.keys?"maybe":0===Object.keys(t.keys).length?"yes":"no";case"string":return t.minLength?"no":"maybe";default:return"no"}}if("some"in e){if("exact"in t){const{exact:n}=t,r=Array.isArray(n)?Array.from(n):h(n)?Object.values(n):[];return be(r.map(t=>Ge(e.some,{exact:t??null})))}if("array"===t.type){if(0===t.length)return"no";const n=Ke(e.some,t.element??S);return"yes"!==n||void 0===t.length&&!t.minLength?"no"===n?"no":"maybe":"yes"}return"object"===t.type?void 0===t.keys?"maybe":be(Object.values(t.keys).map(t=>"no"===Ke(e.some,t)?"no":"maybe")):"no"}return"maybe"},Ke=(e,t)=>0===t.length?"no":we(t.map(t=>Ge(e,t))),Qe=e=>void 0!==e&&1===e.length&&"exact"in e[0]?{value:e[0].exact}:void 0,Ue=(e,t,n,r)=>{const a=r.received[t],s=void 0===a?"no":r.absent.has(t)?"maybe":"yes";return null!==n&&"object"==typeof n&&"supplied"in n?n.supplied?s:Re(s):"no"===s?"no":null!==n&&"object"==typeof n&&"invalid"in n?((e,t,n)=>{const{validate:r}=e.entry.definition;if(void 0===r)return"no";if(void 0===Qe(n.received[t]))return"maybe";const a={};for(const[e,t]of Object.entries(n.received)){const r=Qe(t);void 0===r||n.absent.has(e)||(a[e]=r.value)}return r(a,o).some(e=>"error"===e.severity&&e.parameter===t)?"yes":"no"})(e,t,r):Ke(n,a)},Ve=e=>null===e||"object"!=typeof e?JSON.stringify(e):"type"in e?"string"==typeof e.type?`a ${e.type}`:`of type ${JSON.stringify(e.type)}`:"not"in e?`not ${Ve(e.not)}`:"below"in e?`below ${e.below}`:"empty"in e?"empty":"supplied"in e?e.supplied?"supplied":"not supplied":"invalid"in e?"refused by its validation":`with some element ${Ve(e.some)}`,Xe=(e,t)=>{const n=Object.entries(t.when??{}).map(([e,t])=>null!==t&&"object"==typeof t&&"some"in t?`some element of '${e}' is ${Ve(t.some)}`:`'${e}' is ${Ve(t)}`),r=n.length>0?`when ${n.join(" and ")}`:t.overflow?"on extreme numbers":"whatever its inputs";return`${e} – ${t.code} ${t.may?"possible ":""}${r}`},Ye=(e,t,n,r)=>{if(t.overflow&&!r.strictNumbers)return"no";for(const[e,n]of Object.entries(t.options??{}))if((r.evaluation[e]??!1)!==n)return"no";const a=Object.entries(t.when??{}).map(([t,r])=>Ue(e,t,r,n));return a.includes("no")?"no":a.every(e=>"yes"===e)?"yes":"maybe"},Ze={if:{oneOf:[{param:"then"},{param:"else"}]},match:{oneOf:[{param:"branches"},{param:"default"}]},firstOf:{firstNonNull:"values"},find:{oneOf:[{elementOf:"input"},{param:"noMatchDefault"}]},plus:{oneOf:[{sum:"values"},{typeNamedBy:"expect"}]},subtract:{difference:["value","minus"]},multiply:{product:"values"},abs:{abs:"value"},min:{min:"values"},max:{max:"values"},length:{type:"integer",min:0},filter:{arrayOf:{elementOf:"input"}},map:{arrayOf:{param:"each"}},split:{byParam:"delimiter",cases:{"":{arrayOf:"string"}},otherwise:{arrayOf:"string",minLength:1}},convert:{typeNamedBy:"to"},regex:{byParam:"mode",cases:{test:"boolean",extract:{oneOf:["string",{param:"noMatchDefault"}]},match:{arrayOf:"string"}}}};let _e;const et=/*#__PURE__*/new Set(["lazyElements","lazyEntries","race"]),tt=(e,t)=>{const{inputs:n}=t,r=e=>n.received[e]??N;if((e=>"string"==typeof e||Array.isArray(e)||"literal"in e)(e))return E(e);if("type"in e)return(e=>{const{type:t,min:n=-1/0,max:r=1/0}=e;return"number"===t||"integer"===t?le({min:n,max:r,integer:"integer"===t}):[R({type:t},e.minLength)]})(e);if("sum"in e)return a=r(e.sum),C(ee(me(Y(a))),pe(a),ye(a,e=>le(de(e,ae,fe)),(e,t)=>{const n=ue(e);if(void 0===n)return 0===t?le(ae):N;const r=t>0;return le({min:n.min>=0?r?n.min:0:-1/0,max:n.max<=0?r?n.max:0:1/0,integer:n.integer})}));var a;if("product"in e)return(e=>C(pe(e),ye(e,e=>le(de(e,se,ve)),(e,t)=>{const n=ue(e);if(void 0===n)return 0===t?le(se):N;const r=n.min>=-1&&n.max<=1;return le({min:n.min>=1?1:n.min>=0?0:r?-1:-1/0,max:r?1:1/0,integer:n.integer})})))(r(e.product));if("difference"in e)return((e,t)=>{const n=ue(e),r=ue(t);return le(n&&r&&{min:n.min-r.max,max:n.max-r.min,integer:n.integer&&r.integer})})(...e.difference.map(r));if("abs"in e)return(e=>{const t=ue(e);if(void 0===t)return N;const{min:n,max:r}=t;return le(n>=0?t:r<=0?{...t,min:-r,max:-n}:{...t,min:0,max:Math.max(-n,r)})})(r(e.abs));if("min"in e)return ge(r(e.min),"min");if("max"in e)return ge(r(e.max),"max");if("param"in e){const n=e.param;if(Object.hasOwn(t.elements,n))return t.elements[n];const a=r(n),s=t.definition.parameters[n]?.evaluation??"eager";return et.has(s)?C(Y(a),(e=>I(e.map(e=>"exact"in e?h(e.exact)?I(Object.values(e.exact).map(e=>M(e))):N:"object"!==e.type?N:void 0===e.keys?S:I(Object.values(e.keys)))))(a)):a}if("elementOf"in e)return Y(r(e.elementOf));if("kindOf"in e)return ee(Y(r(e.kindOf)));if("arrayOf"in e){const{arrayOf:n,minLength:r}=e,a="object"==typeof n&&"param"in n?t.items[n.param]:void 0;return void 0!==a?_(a):Z([tt(n,t)],r?{minLength:r}:{})}if("oneOf"in e)return I(e.oneOf.map(e=>tt(e,t)));if("typeNamedBy"in e){const r=e.typeNamedBy,a=n.received[r];if(void 0===a)return N;const s=P(a)??((e,t)=>{const n=e.definition.parameters[t]?.type;return"object"==typeof n&&"literal"in n?[...n.literal]:void 0})(t,r);return void 0===s?S:I(s.filter(e=>"string"==typeof e).map(e=>E(e)))}if("byParam"in e){const{cases:r,otherwise:a}=e,s=n.received[e.byParam],o=void 0===s?void 0:P(s),i=o?.map(e=>"string"==typeof e&&Object.hasOwn(r,e)?r[e]:a)??[...Object.values(r),a];return I(i.map(e=>void 0===e?N:tt(e,t)))}return(e=>I(e.map(e=>{const t="exact"in e?Array.isArray(e.exact)?Array.from(e.exact,e=>M(e)):void 0:"array"===e.type?e.items:void 0;if(void 0===t)return C(Q(Y([e])),M(null));const n=[];for(const e of t)if(n.push(Q(e)),!G(e))return I(n);return I([...n,M(null)])})))(r(e.firstNonNull))},nt=[{type:"nonFinite"}],rt=(e,t,n,r,a={})=>{if("yes"===t.propagates)return{output:M(null)};const{definition:o}=e.entry,i=(e=>void 0!==e.analysis?e.analysis.output:(_e??=new Map(s.filter(e=>Object.hasOwn(Ze,e.name)).map(e=>[e,Ze[e.name]])),_e.get(e)))(o);let c=void 0!==i?tt(i,{definition:o,inputs:t,elements:n,items:a}):E(o.returns);return Object.values(t.received).some(e=>"no"!==te(e))&&"no"!==je(c,"number")&&(c=C(c,nt)),"maybe"===t.propagates&&(c=C(c,M(null))),at(e,c,r,"no"===t.propagates)},at=(e,t,n,r)=>{const a=te(t),s=n?a:te(st(t)),o=t.filter(e=>"exact"in e?"number"!=typeof e.exact||Number.isFinite(e.exact):"nonFinite"!==e.type);return"no"===s?{output:o}:{output:o,boundary:{path:e.path,code:"non-finite-result",message:`${e.name} – non-finite-result possible: a NaN or infinite number may reach its result`,certainty:0===o.length&&r?"always":"may",operator:e.name,order:[e.order]}}},st=e=>e.filter(e=>!("type"in e&&"nonFinite"===e.type)),ot={unknown:!0},it={fails:!0},ct=async(e,t,n,r,a=new Set)=>{if(a.has(e.entry.definition))return;const{parameters:s}=e.entry.definition,o=new Set(n.map(e=>e.param)),i=[];for(const[e,n]of Object.entries(t)){if(o.has(e))continue;const t=P(n);if(void 0===t)return;i.push({name:e,outcomes:t.map(e=>({value:e}))})}const c=n.map(e=>{const t=s[e.param],n=((e,t)=>{const{verdict:n,output:r}=e.result,a=void 0!==t.replacesNullAt;if("always"===n)return[a?ot:it];const s=P(r);if(void 0===s)return[ot];const o=s.map(e=>({value:e}));return"no"===n?o:a?[ot]:[...o,it]})(e,t);return{child:e,outcomes:"perElement"===t.evaluation&&void 0===e.at&&n.length>1?[ot]:n}}),u=()=>[...i,...c].reduce((e,{outcomes:t})=>e*t.length,1);if(u()>16)for(const e of c)e.outcomes.length>1&&(e.outcomes=[ot]);const l=u();if(l>16)return;const m=new Set,p=new Set,y=[];for(let n=0;n<l;n++){let s=n;const o=e=>{const t=e[s%e.length];return s=Math.floor(s/e.length),t},u={};for(const{name:e,outcomes:t}of i)u[e]=o(t).value;const l=new Map(c.map(({child:e,outcomes:t})=>[e,o(t)])),d=await ft(e,t,u,l,r,m,p,a);if(void 0===d)return;y.push(d)}const d=[],f=new Map,h=new Set,v=new Set;let g=0;for(const e of y)if("value"in e)d.push(M(e.value));else if("passed"in e){const{passed:t}=e;v.add(t),h.add(t),d.push(ut(t,s[t.param]))}else if(g++,"escaped"in e)h.add(e.escaped);else{const t=`${e.failure.code}|${e.failure.parameter??""}`,n=f.get(t)??{failure:e.failure,count:0};n.count++,f.set(t,n)}const b=[...f.values()].map(({failure:e,count:t})=>({...e,certainty:t===y.length?"always":"may"}));return{output:I(d),failures:b,reached:m,awaited:p,escaped:h,passed:v,fails:g===y.length}},ut=(e,t)=>void 0===e.at||"perElement"===t.evaluation?ze(t,e.result.output):t.truthiness?E("boolean"):e.result.output,lt=Symbol("stopped"),mt=new Promise(()=>{}),pt=e=>{const t=Promise.reject(e);return t.catch(()=>{}),t},yt={memo:(e,t)=>t()},dt={note:()=>{}},ft=async(e,t,n,r,s,o,c,u)=>{const l=e=>{o.add(e),c.add(e)},{definition:m}=e.entry,{parameters:p}=m,y={...t};for(const[e,t]of Object.entries(n))y[e]=M(t);for(const[e,t]of r)void 0!==p[e.param].replacesNullAt&&"value"in t&&(y[e.param]=M(t.value));const d=Pe(e,y);for(const[e,t]of r){if("race"===p[e.param].evaluation&&o.add(e),d.consulted.has(e.param)){if(!("value"in t))return;l(e)}}const f=He(m),h=(t,n,r)=>{const a=r??("external"===f?void 0:f.find(n=>n.code===t&&void 0!==n.parameter&&"no"!==Ye(e,n,d,s))?.parameter);return{failure:{path:e.path,code:t,message:n,certainty:"always",operator:e.name,...void 0!==a?{parameter:a}:{},order:[e.order]}}};if("null"===d.ends)return{value:null};if(void 0!==d.ends)return{failure:d.ends};const w=new Map,x=new Set,k=new Map,O=new Map;let j=!1,$=()=>{};const A=new Promise(e=>{$=()=>e(lt)});let N=!1;const S=()=>{N?$():j=!0},F=e=>{const t=new b({code:v.operatorFailure,message:"",path:[]});return k.set(t,e),t},E=(t,n)=>r=>{const a=void 0!==n.elementNullPolicy;if("yes"!==je(M(r),n.type,n.constraints,a)){const n=new b({code:v.typeCheck,message:`${e.name} – parameter '${t}': fails its type check`,path:[]});throw O.set(n,t),n}return n.truthiness?Ee(r,n.type):r},z=e=>t=>e.truthiness?a(t):t,L=(e,t)=>{void 0!==e&&l(e);const n=void 0===e?ot:r.get(e);if("unknown"in n){const t=new Promise(()=>{});return void 0!==e&&w.set(t,e),S(),t}if("fails"in n)return pt(F(e));try{return Promise.resolve(t(n.value))}catch(e){return pt(e)}},q=e=>{let t;const n={evaluate:()=>t??=e()};return x.add(n),n},D=(e,t)=>{const n=({index:e,child:n,value:a})=>{if(void 0===n)return{index:e,ok:!0,value:t(a)};l(n);const s=r.get(n);if("fails"in s)return{index:e,ok:!1,error:F(n)};try{return{index:e,ok:!0,value:t(s.value)}}catch(t){return{index:e,ok:!1,error:t}}},a=e=>void 0!==e.child&&"unknown"in r.get(e.child),s={length:e.length,async*[Symbol.asyncIterator](){for(const t of e)a(t)||(yield n(t));e.some(a)&&(S(),await mt)}};return x.add(s),s},J=(e,t)=>{const n=z(t);switch(t.evaluation){case"lazyElements":return e.map(e=>q(()=>Promise.resolve(n(e))));case"race":return D(e.map((e,t)=>({index:t,value:e})),n);case"lazyEntries":{const t={};for(const[r,a]of Object.entries(e))t[r]=q(()=>Promise.resolve(n(a)));return t}case"lazy":return q(()=>Promise.resolve(e));default:return e}},B=new Map;for(const e of r.keys())B.set(e.param,[...B.get(e.param)??[],e]);const I={};for(const[e,t]of Object.entries(p)){if("perElement"===t.evaluation||void 0!==t.replacesNullAt)continue;const n=B.get(e);if(void 0!==n){const r=z(t);if("lazy"===t.evaluation)I[e]=q(()=>L(n[0],E(e,t)));else if("race"===t.evaluation)I[e]=D(n.map((e,t)=>({index:t,child:e})),r);else if("lazyElements"===t.evaluation)I[e]=n.map(e=>q(()=>L(e,r)));else{const t={};for(const e of n)t[String(e.at)]=q(()=>L(e,r));I[e]=t}continue}const r=d.received[e];if(void 0===r)continue;const a=P(r);if(void 0===a||1!==a.length)return;I[e]=J(a[0],t)}for(const[t,n]of m.resolution.perElement){if(void 0===e.params[t]||void 0===n.over)continue;const r=B.get(t)??[],a=I[n.over],s=Array.isArray(a)?a:[],i=1===r.length&&void 0===r[0].at;if(!i&&r.length!==s.length)return;const c=e=>r[i?e>=0&&e<s.length?0:-1:e],u=E(t,n),l=new Map,m={evaluate:e=>{let t=l.get(e);return void 0===t&&l.set(e,t=L(c(e),u)),t},settle:()=>{const e=s.map((e,t)=>({index:t,child:c(t)}));for(const{child:t}of e)o.add(t);return D(e,u)}};x.add(m),I[t]=m}const C={options:s.evaluation,get signal(){return(new AbortController).signal},cache:yt,trace:dt},T=t=>{const n=k.get(t);if(void 0!==n)return{escaped:n};if(g(t))return h(t.code,t.message,O.get(t));const r=`${e.name} – ${t instanceof Error?t.message:String(t)}`;return h((i(t)?t.code:void 0)??v.operatorFailure,r)};let W;try{W=m.evaluate(I,C)}catch(e){return T(e)}if(H=W,"function"==typeof H?.then){const e=w.get(W);if(void 0!==e)return{passed:e};if(j)return;N=!0;const t=setTimeout(()=>{u.add(m),$()},100),n=await Promise.race([Promise.resolve(W).then(e=>({value:e}),e=>({error:e})),A]);if(clearTimeout(t),n===lt)return;if("error"in n)return T(n.error);W=n.value}var H;return void 0===W?{value:null}:"number"!=typeof W||Number.isFinite(W)?x.has(W)?h(v.escapedHandle,`${e.name} – returned a lazy handle instead of evaluating it`):{value:W}:h(v.nonFiniteResult,`${e.name} – produced a non-finite number (${String(W)})`)},ht=(e,t)=>void 0===t?e.scope:{vars:t,at:e,known:new Map},vt={verdict:"no",escapes:[],output:N},gt={result:vt,covered:[]},bt=[{type:"integer",min:0}],wt=M(null),xt=(e,t)=>{for(const n of t)e.push(n)},kt=(e,t,n)=>{const r=[...e];for(const e of t)xt(r,e.result.escapes);const a=t.some(e=>e.result.waits);return t.some(e=>e.eager&&"always"===e.result.verdict)||e.some(e=>!w(e)&&"always"===e.certainty)?{verdict:"always",escapes:r,output:N,waits:a}:{verdict:r.length>0?"may":"no",escapes:r,output:n,waits:a}},Ot=e=>`${e.order}|${e.code}|${e.parameter}`,jt=e=>{const t=e.map(e=>new Set([...e.result.escapes,...e.covered.map(({pending:e})=>e)].filter(e=>!w(e)&&"always"===e.certainty).map(e=>Ot(e)))),n=e=>w(e)||"may"===e.certainty||t.every(t=>t.has(Ot(e)))?e:{...e,certainty:"may"};for(const t of e)t.result={...t.result,escapes:t.result.escapes.map(n)},t.covered=t.covered.map(({pending:e,by:t})=>({pending:n(e),by:t}))};class $t{options;issues;bodies=new Map;stalled=new Set;waiting=new Set;strict;constructor(e,t){this.options=e,this.issues=t,this.strict=!0===e.evaluation.strictDataPaths}root(e,t){return this.walk(e,{scope:null,bindings:null,sink:t,frame:{},walks:1})}async walk(e,t){const n=await this.visit(e,t);return n.waits&&this.waiting.add(e),n}async visit(e,t){switch(e.kind){case"constant":return{...vt,output:M(e.value)};case"invalid":return this.staticError(e,"malformed-node");case"reference":return this.reference(e,t);case"skeleton":{const n={...t,scope:ht(t,e.vars)},r=[];for(const t of e.holes)r.push({result:await this.walk(t.node,n),eager:!0});const a=((e,t)=>{if(t.every(e=>1===e.length&&"exact"in e[0]))return M(l(e.skeleton,e.holes,t.map(e=>e[0].exact)));const n=e.holes.map((e,n)=>({at:e.at,output:t[n]})),r=(e,t,n)=>{const a=n.find(e=>e.at.length===t);if(void 0!==a)return a.output;if(0===n.length)return M(e);const s=new Map;for(const e of n){const n=s.get(e.at[t]);void 0===n?s.set(e.at[t],[e]):n.push(e)}const o=e=>s.get(e)??[];if(Array.isArray(e))return _(Array.from(e,(e,n)=>r(e,t+1,o(n))));const i=e,c=new Set([...Object.keys(i),...n.map(e=>String(e.at[t]))]),u={};for(const e of c)u[e]=r(i[e],t+1,o(e));return ne(u)};return r(e.skeleton,0,n)})(e,r.map(e=>e.result.output));return kt([],r,a)}case"elements":case"entries":{const n=[],r=await this.container("",e,t,n);for(const e of n)xt(t.sink,e.covered);const a=n.map(({result:e})=>({result:e,eager:!1}));return kt([],a,r)}case"operator":return this.operator(e,t);case"fragmentCall":return this.call(e,t)}return e}async operator(e,t){const{definition:n}=e.entry,r={...t,scope:ht(t,e.vars)},a={},s=[],o=[];for(const[t,i]of Object.entries(e.params)){const e=n.parameters[t]?.evaluation;if("perElement"!==e)if("elements"===i.kind||"entries"===i.kind)a[t]=await this.container(t,i,r,o);else if("lazy"===e){const e=await this.apart(t,i,r);a[t]=e.result.output,o.push(e)}else{const e=await this.walk(i,r);a[t]=e.output,s.push({result:e,eager:!0})}}const i=Pe(e,a),u=c(e),l={},m={};for(const[a,s]of n.resolution.perElement){const n=e.params[a];if(void 0===n||void 0===s.over)continue;const c=i.received[s.over]??N,p=P(c),y=1===p?.length&&Array.isArray(p[0])?p[0]:void 0,d=t.walks*(y?.length??1/0);if(d<=16){const e=[];for(const[s,i]of Array.from(y).entries()){const c={as:u,element:M(i),index:M(s),parent:t.bindings},l=await this.apart(a,n,{...r,bindings:c,walks:d},s);o.push(l),e.push(l.result.output)}m[a]=e,l[a]=I(e)}else{const e={as:u,element:Y(c),index:bt,parent:t.bindings},s=await this.apart(a,n,{...r,bindings:e});o.push(s),l[a]=s.result.output}}const p=s.some(e=>"always"===e.result.verdict)?{output:N,failures:[],reached:new Set(o.filter(e=>"race"===n.parameters[e.param].evaluation)),awaited:new Set,escaped:new Set,passed:new Set,fails:!0}:"external"===He(n)?void 0:await ct(e,a,o,this.options,this.stalled);for(const e of Object.keys(m))jt(o.filter(t=>t.param===e&&(p?.reached.has(t)??!0)));const y=[];void 0===p?(xt(y,i.failures),"yes"!==i.propagates&&xt(y,((e,t,n)=>{const r=He(e.entry.definition),a={path:e.path,operator:e.name,order:[e.order]};if("external"===r)return[{...a,code:Be,message:`${e.name} – may fail whatever its inputs: nothing describes what it fails on`,certainty:"may"}];const s=[];for(const o of r){const r=Ye(e,o,t,n);"no"!==r&&s.push({...a,code:o.code,message:Xe(e.name,o),certainty:"yes"!==r||o.may||o.overflow||"no"!==t.propagates?"may":"always",...void 0!==o.parameter?{parameter:o.parameter}:{}})}return s})(e,i,this.options))):xt(y,p.failures);for(const t of o){if(void 0!==p&&!p.passed.has(t))continue;const r=n.parameters[t.param];if("perElement"===r.evaluation){const n=qe(e,t.param,r,t.result.output);void 0!==n&&y.push(n)}else void 0!==p&&void 0===t.at&&xt(y,i.failures.filter(e=>e.parameter===t.param))}const{output:d,boundary:f}=void 0===p?rt(e,i,l,this.options.strictNumbers,m):at(e,p.output,this.options.strictNumbers,!1);void 0===f||y.some(e=>!w(e)&&e.code===f.code)||y.push(f);for(const e of o){if(void 0!==p&&!p.reached.has(e))continue;xt(t.sink,e.covered);const n=void 0===p||p.escaped.has(e)?e.result.escapes:e.result.escapes.filter(w),r=e.result.waits&&(p?.awaited.has(e)??!0);s.push({result:{...e.result,escapes:n,waits:r},eager:!1})}const h=kt(y,s,d);return!0===p?.fails&&Object.assign(h,{verdict:"always",output:N}),(e=>void 0!==e.analysis||"external"===He(e))(n)&&(h.waits=!0),this.withFallback(e,h,r)}async apart(e,t,n,r){const a=[];return{param:e,...void 0!==r?{at:r}:{},result:await this.walk(t,{...n,sink:a}),covered:a}}async container(e,t,n,r){if("elements"===t.kind){const a=[];for(const[s,o]of t.nodes.entries()){const t=await this.apart(e,o,n,s);r.push(t),a.push(t.result.output)}return _(a)}const a={...n,scope:ht(n,t.vars)},s={};for(const[n,o]of Object.entries(t.entries)){const t=await this.apart(e,o,a,n);r.push(t),s[n]=t.result.output}return ne(s)}async withFallback(e,t,n){if("no"===t.verdict)return t;const r="operator"===e.kind?e.entry.instanceDefaults:void 0,a=void 0!==r&&Object.hasOwn(r,"fallback");if(void 0===e.fallback&&!a)return t;const s={path:e.path};for(const e of t.escapes)n.sink.push({pending:e,by:s});const{waits:o}=t;if(void 0===e.fallback)return{...vt,output:C(t.output,M(r.fallback)),waits:o};const i=await this.walk(e.fallback,n);return{verdict:"always"===t.verdict||"always"!==i.verdict?i.verdict:"may",escapes:i.escapes,output:C(t.output,i.output),waits:o||i.waits}}async reference(e,t){const{segments:n,namespace:r}=e;switch(r){case"data":return this.drilled(e,S,n,[],[]);case"element":case"index":for(let a=t.bindings;null!==a;a=a.parent)if(u(a.as,r,e.binding))return"index"===r?{...vt,output:a.index}:this.drilled(e,a.element,n,[],[]);return this.staticError(e,"unresolved-binding");case"vars":{const r=await this.varDefinition(n[0],t);if(void 0===r)return this.staticError(e,"unresolved-var");xt(t.sink,r.covered);const a=[{result:r.result,eager:!0}];return this.drilled(e,r.result.output,n.slice(1),a,[])}case"params":{const{entry:r,params:a={}}=t.frame;if(void 0===r)return this.staticError(e,"unresolved-param");const[s,...o]=n;if(void 0===s){const t=Object.keys(r.parameters).map(e=>({demand:e}));return this.drilled(e,ne(a),[],[],t)}const i="string"==typeof s?a[s]??S:S;return this.drilled(e,i,o,[],[{demand:String(s)}])}}return r}drilled(e,t,n,r,a){const{value:s,found:o}=re(t,n);if("yes"===o)return kt(a,r,s);if(!this.strict)return kt(a,r,C(s,wt));const i={path:e.path,code:"missing-data-path",message:`'${e.raw}' may be absent (strictDataPaths)`,certainty:"no"===o?"always":"may",order:[e.order]};return kt([...a,i],r,s)}async varDefinition(e,t){for(let n=t.scope;null!==n;n=n.at.scope){if("string"!=typeof e||!Object.hasOwn(n.vars,e))continue;const t=n.known.get(e);if(void 0!==t)return t;n.known.set(e,{result:{...vt,output:S},covered:[]});const r=[],a={result:await this.walk(n.vars[e],{...n.at,scope:n,sink:r}),covered:r};return n.known.set(e,a),a}}async call(e,t){const{entry:n}=e;if(void 0===n)return this.staticError(e,"unknown-fragment");const r={...t,scope:ht(t,e.vars)},a=[],s=[],o={},i=new Map;if("static"===e.argumentsMode)for(const[t,a]of Object.entries(n.parameters)){const n=await this.argument(e,t,a,r);i.set(t,n),o[t]=n.result.output}else{const t=e.parameters,i=await this.walk(t,r);s.push({result:i,eager:!0}),xt(a,Nt(e,n,t,o))}let c=!1;const u=e=>{const n=i.get(e)??gt;return xt(t.sink,n.covered),c||=!0===n.result.waits,n},l=await this.body(n,o);for(const{pending:n,by:r}of l.covered){const a=k(r,e);if(w(n))for(const e of u(n.demand).result.escapes)t.sink.push({pending:e,by:a});else t.sink.push({pending:x(n,e),by:a})}const m=[];for(const t of l.result.escapes)w(t)?xt(m,u(t.demand).result.escapes):m.push(x(t,e));return s.push({result:{...l.result,escapes:[]},eager:!0},{result:{...vt,escapes:m,waits:c},eager:!1}),this.withFallback(e,kt(a,s,l.result.output),r)}async argument(e,t,n,r){const a=e.parameters?.[t];if(void 0===a)return{result:{...vt,output:M(n.default??null)},covered:[]};const s=[],o=await this.walk(a,{...r,sink:s}),{known:i,answer:c}=Le(n,o.output),u="yes"===c?[]:[At(e,t,a.path,a.order)];return{result:kt(u,[{result:o,eager:!0}],i),covered:s}}async body(e,t){const n=Object.keys(t).map(e=>`${e}=${J(t[e])}`).join(";");let r=this.bodies.get(e);void 0===r&&this.bodies.set(e,r=new Map);const a=r.get(n);if(void 0!==a)return a;r.set(n,{result:{...vt,output:S},covered:[]});const s=[],o={entry:e,params:t},i={result:await this.walk(e.body,{scope:null,bindings:null,sink:s,frame:o,walks:1}),covered:s};return r.set(n,i),i}staticError(e,t){const n=this.issues.find(t=>t.order===e.order&&"error"===t.issue.severity)?.issue,r={path:e.path,code:n?.code??t,message:n?.message??"a static error",certainty:"always",order:[e.order]};return kt([r],[],N)}}const At=(e,t,n,r)=>({path:n,code:"type-check",message:`fragment '${e.name}' – parameter '${t}': the argument may not fit the declared type`,certainty:"may",parameter:t,order:[r]}),Nt=(e,t,n,r)=>{const a=(t,r)=>({path:n.path,code:t,message:`fragment '${e.name}' – ${r}`,certainty:"may",order:[n.order]}),s=Object.entries(t.parameters);for(const[e,t]of s)r[e]=Le(t,S).known;const o=[a("type-check","'parameters' may not match the declared parameters")];return s.some(([,e])=>e.required)&&o.push(a("missing-required","'parameters' may omit a required parameter")),o},St=async(e,t,n)=>{if(!(e instanceof m))throw new TypeError("fallbackCoverage() takes a FigTree instance");const r=n?.strictNumbers??!1;if("boolean"!=typeof r)throw new b({code:v.invalidOptions,message:`'strictNumbers' must be a boolean, received ${JSON.stringify(r)}`,path:[]});const{artifact:a,options:s}=p(e.compile(t)),o=new $t({strictNumbers:r,evaluation:s},a.issues),i=[],{escapes:c,waits:u}=await o.root(a.root,i),l=c.filter(e=>!w(e)).map($);if(void 0!==s.timeout&&u)for(const{node:e,timeoutFallback:t}of a.holes){const n={path:e.path,code:"timeout",certainty:"may",order:[e.order]};a.timeoutShielded?o.waiting.has(e)&&i.push({pending:{...n,message:"may be cut off by the timeout, which puts its constant fallback in its place"},by:{path:e.path}}):void 0===t&&l.push($({...n,message:"the timeout may reject the evaluation: something in it can wait, and this value has no constant fallback to shield it"}))}const y=i.flatMap(({pending:e,by:t})=>w(e)?[]:[A(e,t)]);return{uncovered:j(l),covered:j(y)}};export{St as fallbackCoverage};
|
|
1
|
+
import{t as e,c as t,a as n,b as r,i as a,d as o,v as s,e as i,r as c,f as u,s as l,F as m,g as p,h as y}from"../chunks/engine.js";import{r as d,W as f,i as h,a as v,E as g,b,F as w}from"../chunks/shared.js";const x=e=>"demand"in e,k=(t,n)=>({...t,path:n.path,...void 0===t.fragment?{fragment:n.name,fragmentPath:e(t.path)}:{},order:[n.order,...t.order]}),O=(t,n)=>void 0===t.fragmentPath?{path:n.path,fragmentPath:e(t.path)}:{...t,path:n.path},j=t=>{const{code:n,message:r,certainty:a,operator:o,parameter:s,fragment:i,fragmentPath:c}=t;return{path:e(t.path),code:n,message:r,certainty:a,...void 0!==o?{operator:o}:{},...void 0!==s?{parameter:s}:{},...void 0!==i?{fragment:i,fragmentPath:c}:{}}},$=({path:e,code:t,message:n,operator:r,parameter:a})=>({path:[...e],code:t,message:n,certainty:"always",...void 0!==r?{operator:r}:{},...void 0!==a?{parameter:a}:{}}),A=e=>{const t=new Map;for(const{finding:n}of[...e].sort((e,t)=>((e,t)=>{for(let n=0;n<Math.min(e.length,t.length);n++)if(e[n]!==t[n])return e[n]-t[n];return e.length-t.length})(e.order,t.order))){const e=JSON.stringify({...n,message:void 0,certainty:void 0}),r=t.get(e);void 0===r?t.set(e,n):"always"===n.certainty&&(r.certainty="always")}return[...t.values()]},N=e=>({order:e.order,finding:j(e)}),S=(t,n)=>({order:t.order,finding:{...j(t),coveredBy:e(n.path),...void 0!==n.fragmentPath?{coveredByFragmentPath:n.fragmentPath}:{}}}),M=[],P=[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"},{type:"array"},{type:"object"},{type:"opaque"},{type:"nonFinite"}],F=e=>[{exact:void 0===e?null:e}],E=e=>e.length>0&&e.every(e=>"exact"in e)?e.map(e=>e.exact):void 0,z=e=>"exact"in e?null===e.exact:"null"===e.type,L=e=>{if(h(e))return e.literal.map(e=>({exact:e}));const t="string"==typeof e?[e]:e;return t.includes("any")?P:T(t.map(e=>[{type:e}]))},q=new WeakMap;let D=0;const J=e=>"object"==typeof e&&null!==e||"function"==typeof e?`=#${(e=>{let t=q.get(e);return void 0===t&&q.set(e,t=++D),t})(e)}`:`=${typeof e}:${String(e)}`,B=e=>{if("exact"in e)return J(e.exact);if("array"===e.type)return void 0!==e.items?`a[${e.items.map(I).join(";")}]`:`a${e.length??""}+${e.minLength??""}(${void 0===e.element?"*":I(e.element)})`;if("object"===e.type)return void 0===e.keys?"o":`o{${Object.keys(e.keys).sort().map(t=>`${JSON.stringify(t)}:${I(e.keys[t])}`).join(",")}}`;const{type:t,...n}=e;return`${t}${JSON.stringify(n)}`},I=e=>e.map(B).sort().join("|"),C=e=>{if(null===e)return{type:"null"};if(Array.isArray(e))return{type:"array"};switch(typeof e){case"string":return{type:"string"};case"number":return{type:Number.isInteger(e)?"integer":Number.isFinite(e)?"number":"nonFinite"};case"boolean":return{type:"boolean"};case"object":{const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t?{type:"object"}:{type:"opaque"}}default:return{type:"opaque"}}},T=e=>{const t=new Set,n=[];for(const r of e)for(const e of r){const r=B(e);t.has(r)||(t.add(r),n.push(e))}const r=n.filter(e=>"exact"in e).map(e=>e.exact);return r.length<=16?n:W(n.filter(e=>!("exact"in e)),G(r))},W=(...e)=>T(e),H=e=>"number"==typeof e&&Number.isFinite(e),R=e=>Array.from(e).length,G=e=>{const t=(e,t)=>{if(0===t.length)return M;const n=t.reduce((e,t)=>Math.min(e,t));return[K({type:e},n)]};return T([...[!0,!1].map(t=>pe(le(e.map(e=>H(e)&&Number.isInteger(e)===t?ce(e):void 0)))),t("string",e.filter(e=>"string"==typeof e).map(R)),t("array",e.filter(Array.isArray).map(e=>e.length)),...e.filter(e=>!H(e)&&"string"!=typeof e&&!Array.isArray(e)).map(e=>[C(e)])])},K=(e,t)=>t?{...e,minLength:t}:e,Q=e=>e.some(z),U=e=>e.length>0&&e.every(z),V=e=>e.filter(e=>!z(e)),X=e=>ke(e.map(e=>{if("exact"in e){const{exact:t}=e;return(Array.isArray(t)?t:v(t)?Object.values(t):[]).includes(null)?"yes":"no"}return"array"===e.type?0!==e.length&&Q(e.element??P)?"maybe":"no":"object"===e.type?"maybe":"no"})),Y=(e,t)=>T(e.map(e=>{if("no"===X([e]))return[e];const n="exact"in e?e.exact:void 0;if(1===t.length&&"exact"in t[0]&&"exact"in e){const e=t[0].exact,r=t=>null===t?e:t;if(Array.isArray(n))return F(n.map(r));const a={};for(const[e,t]of Object.entries(n))a[e]=r(t);return F(a)}if(!(Array.isArray(n)||"type"in e&&"array"===e.type))return[{type:"object"}];const{length:r,minLength:a}=e;return ee([V(_([e])),t],Array.isArray(n)?{length:n.length}:{length:r,minLength:a})})),Z=e=>e.flatMap(e=>{const t=X([e]);if("no"===t)return[e];if("yes"===t)return M;if(!("type"in e))return[e];if("array"!==e.type)return[e];const{items:n,...r}=e;if(void 0===n)return[{...r,element:V(e.element??P)}];const a=n.map(V);return a.some(e=>0===e.length)?M:te(a)}),_=e=>T(e.map(e=>"exact"in e?Array.isArray(e.exact)?T(Array.from(e.exact,e=>F(e))):M:"array"===e.type?0===e.length?M:e.element??P:M)),ee=(e,t={})=>[{type:"array",element:T(e),...t}],te=e=>[{type:"array",element:T(e),length:e.length,items:e}],ne=e=>W(e.map(e=>"exact"in e?C(e.exact):e)),re=e=>xe(e.map(e=>"exact"in e?"number"!=typeof e.exact||Number.isFinite(e.exact)?"no":"yes":"nonFinite"===e.type?"maybe":"no")),ae=e=>[{type:"object",keys:e}],oe=(e,t)=>{if(0===t.length)return{value:e,found:"yes"};const[n,...r]=t;let a;const o=[],s=ke(e.map(e=>{if("exact"in e){const n=d(e.exact,t);return n.found&&o.push(F(n.value)),n.found?"yes":"no"}const s=(e,t)=>{if("no"===t)return"no";const n=(e=>e===P?a??=oe(P,r):oe(e,r))(e);return o.push(n.value),"yes"===t?n.found:"no"===n.found?"no":"maybe"};if(n===f)return"array"!==e.type?"no":(o.push(0===r.length?[e]:[{type:"array"}]),"yes");switch(e.type){case"array":{const t="number"==typeof n?n:Number(n);if(!Number.isInteger(t)||t<0)return"number"==typeof n?"no":"maybe";const r=void 0!==e.length?t<e.length?"yes":"no":t<(e.minLength??0)?"yes":"maybe";return void 0!==e.items&&"yes"===r?s(e.items[t],"yes"):s(e.element??P,r)}case"object":return void 0===e.keys?s(P,"maybe"):Object.hasOwn(e.keys,String(n))?s(e.keys[String(n)],"yes"):"no";case"opaque":return s(P,"maybe");default:return"no"}}));return{value:T(o),found:0===e.length?"yes":s}},se={min:0,max:0,integer:!0},ie={min:1,max:1,integer:!0},ce=e=>({min:e,max:e,integer:Number.isInteger(e)}),ue=e=>"exact"in e?H(e.exact)?ce(e.exact):void 0:"number"===e.type||"integer"===e.type?{min:e.min??-1/0,max:e.max??1/0,integer:"integer"===e.type}:void 0,le=e=>e.reduce((e,t)=>void 0===e||void 0===t?e??t:{min:Math.min(e.min,t.min),max:Math.max(e.max,t.max),integer:e.integer&&t.integer},void 0),me=e=>le(e.map(ue)),pe=e=>{if(void 0===e)return M;const t=e.integer?Math.ceil(e.min):e.min,n=e.integer?Math.floor(e.max):e.max;return t>n?M:[{type:e.integer?"integer":"number",...t>-1/0?{min:t}:{},...n<1/0?{max:n}:{}}]},ye=e=>e.filter(e=>"exact"in e?"number"!=typeof e.exact:!["number","integer","nonFinite"].includes(e.type)),de=e=>_(e).filter(e=>"no"!==re([e])),fe=(e,t,n)=>T(e.map(e=>"exact"in e?Array.isArray(e.exact)?t(Array.from(e.exact,e=>F(e))):M:"array"!==e.type?M:void 0!==e.items?t(e.items):0===e.length?n(M,0):n(e.element??P,e.length??e.minLength??0))),he=(e,t,n)=>e.reduce((e,t)=>{const r=me(t);return e&&r&&n(e,r)},t),ve=(e,t)=>({min:e.min+t.min,max:e.max+t.max,integer:e.integer&&t.integer}),ge=(e,t)=>0===e||0===t?0:e*t,be=(e,t)=>{const n=[ge(e.min,t.min),ge(e.min,t.max),ge(e.max,t.min),ge(e.max,t.max)];return{min:Math.min(...n),max:Math.max(...n),integer:e.integer&&t.integer}},we=(e,t)=>W(ye(_(e)),de(e),fe(e,e=>{const n=e.map(me);if(e.some(e=>"no"!==re(e)))return pe(le(n));if(0===n.length||n.includes(void 0))return M;const r="min"===t?Math.min:Math.max;return pe({min:n.map(e=>e.min).reduce((e,t)=>r(e,t)),max:n.map(e=>e.max).reduce((e,t)=>r(e,t)),integer:n.every(e=>e.integer)})},e=>pe(me(e)))),xe=e=>e.includes("yes")?"yes":e.includes("maybe")?"maybe":"no",ke=e=>e.every(e=>"yes"===e)?"yes":e.every(e=>"no"===e)?"no":"maybe",Oe=(e,t)=>"no"===e||"no"===t?"no":"yes"===e&&"yes"===t?"yes":"maybe",je=(e,t)=>{if("exact"in e)return $e([e.exact],t);if("object"!==e.type)return"no";if(void 0===e.keys)return"maybe";const n=e.keys;return ke(Object.entries(t).map(([e,t])=>{if(!Object.hasOwn(n,e))return!1===t.required?"yes":"no";const r=void 0===t.type?"yes":Ae(n[e],t.type);return void 0===t.constraints?r:Oe(r,Ae(n[e],"any",t.constraints))}))},$e=(e,t)=>n(e,{elementShape:t},!1).ok?"yes":"no",Ae=(e,r,a,o=!1)=>ke(e.map(e=>{if("exact"in e){const s=e.exact;return t(s,r).ok&&(null===s||void 0===a||n(s,a,o).ok)?"yes":"no"}const s=((e,t)=>{if(h(t)){const n=t=>{const n=ue(e);return void 0!==n?"number"==typeof t&&(!n.integer||Number.isInteger(t))&&t>=n.min&&t<=n.max:"string"===e.type?"string"==typeof t&&R(t)>=(e.minLength??0):typeof t===e.type};return t.literal.some(n)?"maybe":"no"}const n="string"==typeof t?[t]:t;if(n.includes("any"))return"yes";switch(e.type){case"number":return n.includes("number")?"yes":n.includes("integer")?"maybe":"no";case"integer":return n.includes("integer")||n.includes("number")?"yes":"no";case"opaque":return n.includes("object")?"maybe":"no";case"nonFinite":return n.includes("number")?"yes":"no";default:return n.includes(e.type)?"yes":"no"}})(e,r);return"no"===s||void 0===a||"null"===e.type?s:Oe(s,((e,t,n)=>{if(0===Object.keys(t).filter(e=>void 0!==t[e]).length)return"yes";if("array"!==e.type)return"no";let r="yes";void 0!==t.length&&(r=Oe(r,void 0===e.length?"maybe":e.length===t.length?"yes":"no"));const a=0===e.length?M:e.element??P,o=n?V(a):a;return void 0!==t.homogeneous&&(r=Oe(r,0===o.length||t.homogeneous.some(e=>"yes"===Ae(o,e))?"yes":"maybe")),void 0!==t.elementShape&&(r=Oe(r,o.every(e=>"yes"===je(e,t.elementShape))?"yes":"maybe")),r})(e,a,o))})),Ne=(e,t)=>"yes"===Ae(e,t)?e:T(e.map(e=>"no"===Ae([e],t)?M:"exact"in e?[e]:h(t)?t.literal.filter(t=>"no"!==Ae([e],{literal:[t]})).map(e=>({exact:e})):"number"===e.type?pe({...ue(e),integer:!0}):[e])),Se=e=>"string"==typeof e?e:Array.isArray(e)?e.join(" | "):`one of ${e.literal.map(e=>JSON.stringify(e)).join(", ")}`,Me=(e,t,n)=>{const r=e.entry.hostDefaults;return void 0!==r&&Object.hasOwn(r,t)?F(r[t]):"default"in n?"symbol"==typeof n.default?P:F(n.default):void 0},Pe=(e,t)=>"lazyEntries"===e.evaluation?"entries"===t.kind:"elements"===t.kind,Fe=(e,t)=>{const n=e.nullPolicy;if("string"==typeof n)return new Set([n]);const r=t[n.selector]?.known??M,a=r.every(e=>"exact"in e)?n.table.filter(e=>r.some(t=>"exact"in t&&t.exact===e.value)):n.table;return new Set(a.map(e=>e.policy))},Ee=(e,t)=>{const{definition:n}=e.entry,{entries:a,whole:o}=n.resolution,s={},i=new Set,c=[],u={},l=new Set,m={},p=new Set;let y,d="no";const f=(t,n,r,a)=>{const o=Ae(r,n.type,n.constraints,void 0!==n.elementNullPolicy);if("yes"===o)return;const s={path:e.path,code:"type-check",message:`${e.name} – parameter '${t}': may receive something other than ${Se(n.type)}${void 0!==n.constraints?", as constrained":""}`,certainty:"no"===o&&a?"always":"may",operator:e.name,parameter:t,order:[e.order]};c.push(s),"no"===o&&a&&(y??=s)};for(const[n,r]of a){const a=e.params[n];switch(r.evaluation){case"eager":void 0!==a&&(u[n]={known:t[n],absent:!1});break;case"structural":"constant"===a?.kind&&(u[n]={known:F(a.value),absent:!1});break;case"lazy":if(void 0!==r.replacesNullAt){const o=void 0!==a?t[n]:Me(e,n,r);if(void 0!==o)for(const e of r.replacesNullAt)m[e]={name:n,known:o}}else void 0!==a&&(l.add(n),f(n,r,t[n],!1),s[n]=Ne(t[n],r.type));break;case"lazyElements":case"lazyEntries":case"race":if(void 0===a)break;Pe(r,a)?(l.add(n),s[n]=t[n]):u[n]={known:t[n],absent:!1}}}for(const[t,n]of o){if(l.has(t))continue;const a=u[t]??{known:M,absent:!0},o=!n.required&&!r(n.type)&&Q(a.known);if(!a.absent&&!o)continue;const s=Me(e,t,n),i=o?V(a.known):a.known;u[t]={known:void 0===s?i:W(i,s),absent:void 0===s}}for(const[e,t]of o){if(l.has(e))continue;let n=u[e]?.known??M;if(0===n.length)continue;u[e].absent&&i.add(e);const a=m[e];if(void 0!==a){(void 0!==t.elementNullPolicy?"no"!==X(n):Q(n))&&(p.add(a.name),n=void 0!==t.elementNullPolicy?Y(n,a.known):W(V(n),a.known))}const o="eager"!==t.evaluation&&"structural"!==t.evaluation;if(Q(n)&&r(t.type)&&!o){const e=Fe(t,u);if(e.has("propagate")){const t=1===e.size&&U(n);if(d=t?"yes":"maybe",t){y??="null";break}1===e.size&&(n=V(n))}}if("propagate"===t.elementNullPolicy){const e=X(n);if("no"!==e){if(d="yes"===e?"yes":"maybe","yes"===e){y??="null";break}n=Z(n)}}f(e,t,n,!0),s[e]=qe(t,n)}if("no"!==d)for(const e of c)"always"===e.certainty&&(e.certainty="may");return{received:s,absent:i,failures:c,propagates:d,consulted:p,...y?{ends:y}:{}}},ze=e=>{const t="string"==typeof e?[e]:Array.isArray(e)?e:[];return t.length>0&&t.every(e=>"array"===e||"object"===e)},Le=(e,t)=>{if(ze(t)){if(Array.isArray(e))return e.map(a);if(v(e)){const t={};for(const[n,r]of Object.entries(e))t[n]=a(r);return t}}return a(e)},qe=(e,t)=>{const n=Ne(t,e.type);return e.truthiness?n.length>0&&n.every(e=>"exact"in e)?T(n.map(t=>F(Le(t.exact,e.type)))):ze(e.type)?P:L("boolean"):n},De=(e,t)=>{const n=!e.required&&!r(e.type)&&Q(t),a=n?V(t):t;let o=Ae(a,e.type,e.constraints);"yes"===o&&void 0!==e.constraints&&Q(a)&&(o="maybe");const s=n?F(e.default??null):M;return{known:W(Ne(a,e.type),s),answer:o}},Je=(e,t,n,r)=>{if("yes"!==Ae(r,n.type,n.constraints))return{path:e.path,code:"type-check",message:`${e.name} – parameter '${t}': an element's result may be other than ${Se(n.type)}`,certainty:"may",operator:e.name,parameter:t,order:[e.order]}},Be="non-finite-result",Ie="empty-aggregate",Ce="operator-failure",Te={code:Be,overflow:!0},We=e=>({code:"type-check",parameter:"values",when:{expect:e,values:{some:{not:{type:e}}}}}),He={plus:[{code:Ie,parameter:"values",when:{values:{empty:!0},expect:{supplied:!1}}},We("number"),We("string"),We("array"),We("object"),Te],subtract:[Te],multiply:[Te],divide:[{code:Be,parameter:"by",when:{by:0}},Te],modulo:[{code:Be,parameter:"mod",when:{mod:0}},Te],power:[{code:Be,parameter:"base",when:{base:0,exponent:{below:0}}},{code:Be,parameter:"base",may:!0,when:{base:{below:0},exponent:{not:{type:"integer"}}}},{code:Be,parameter:"exponent",may:!0,when:{exponent:{not:{below:100}}}},Te],round:[{code:Be,parameter:"decimals",may:!0,when:{decimals:{not:{below:300}}}},Te],min:[{code:Ie,parameter:"values",when:{values:{empty:!0}}}],max:[{code:Ie,parameter:"values",when:{values:{empty:!0}}}],match:[{code:Ce,may:!0,when:{default:{supplied:!1}}}],regex:[{code:Ce,parameter:"flags",when:{flags:{invalid:!0}}},{code:Ce,parameter:"pattern",when:{pattern:{invalid:!0}}}],get:[{code:Ce,parameter:"path",when:{path:{invalid:!0}}},{code:"missing-data-path",may:!0,options:{strictDataPaths:!0},when:{default:{supplied:!1}}}],convert:[{code:Ce,when:{to:"number",value:{type:["array","object"]}}},{code:Ce,may:!0,when:{to:"number",value:{type:"string"}}},{code:Be,may:!0,when:{to:"number",value:{type:"string"}}},{code:Ce,when:{to:"string",value:{type:["array","object"]}}}]};let Re;const Ge=e=>{const t=e.analysis;return void 0!==t?t.external?"external":t.failures??[]:(Re??=new Map(o.map(e=>[e,He[e.name]??[]])),Re.get(e)??"external")},Ke=e=>"yes"===e?"no":"no"===e?"yes":"maybe",Qe=(e,t)=>{if(null===e||"object"!=typeof e){if("exact"in t)return t.exact===e?"yes":"no";return"no"===Ae([t],null===e?"null":{literal:[e]})?"no":"maybe"}if("type"in e)return Ae([t],e.type);if("not"in e)return Ke(Qe(e.not,t));if("below"in e)return"exact"in t?"number"==typeof t.exact&&t.exact<e.below?"yes":"no":"number"===t.type||"integer"===t.type?(t.max??1/0)<e.below?"yes":(t.min??-1/0)>=e.below?"no":"maybe":"nonFinite"===t.type?"maybe":"no";if("empty"in e){if("exact"in t){const{exact:e}=t;return"string"==typeof e||Array.isArray(e)?0===e.length?"yes":"no":v(e)&&0===Object.keys(e).length?"yes":"no"}switch(t.type){case"array":return void 0!==t.length?0===t.length?"yes":"no":t.minLength?"no":"maybe";case"object":return void 0===t.keys?"maybe":0===Object.keys(t.keys).length?"yes":"no";case"string":return t.minLength?"no":"maybe";default:return"no"}}if("some"in e){if("exact"in t){const{exact:n}=t,r=Array.isArray(n)?Array.from(n):v(n)?Object.values(n):[];return xe(r.map(t=>Qe(e.some,{exact:t??null})))}if("array"===t.type){if(0===t.length)return"no";const n=Ue(e.some,t.element??P);return"yes"!==n||void 0===t.length&&!t.minLength?"no"===n?"no":"maybe":"yes"}return"object"===t.type?void 0===t.keys?"maybe":xe(Object.values(t.keys).map(t=>"no"===Ue(e.some,t)?"no":"maybe")):"no"}return"maybe"},Ue=(e,t)=>0===t.length?"no":ke(t.map(t=>Qe(e,t))),Ve=e=>void 0!==e&&1===e.length&&"exact"in e[0]?{value:e[0].exact}:void 0,Xe=(e,t,n,r)=>{const a=r.received[t],o=void 0===a?"no":r.absent.has(t)?"maybe":"yes";return null!==n&&"object"==typeof n&&"supplied"in n?n.supplied?o:Ke(o):"no"===o?"no":null!==n&&"object"==typeof n&&"invalid"in n?((e,t,n)=>{const{validate:r}=e.entry.definition;if(void 0===r)return"no";if(void 0===Ve(n.received[t]))return"maybe";const a={};for(const[e,t]of Object.entries(n.received)){const r=Ve(t);void 0===r||n.absent.has(e)||(a[e]=r.value)}return r(a,s).some(e=>"error"===e.severity&&e.parameter===t)?"yes":"no"})(e,t,r):Ue(n,a)},Ye=e=>null===e||"object"!=typeof e?JSON.stringify(e):"type"in e?"string"==typeof e.type?`a ${e.type}`:`of type ${JSON.stringify(e.type)}`:"not"in e?`not ${Ye(e.not)}`:"below"in e?`below ${e.below}`:"empty"in e?"empty":"supplied"in e?e.supplied?"supplied":"not supplied":"invalid"in e?"refused by its validation":`with some element ${Ye(e.some)}`,Ze=(e,t)=>{const n=Object.entries(t.when??{}).map(([e,t])=>null!==t&&"object"==typeof t&&"some"in t?`some element of '${e}' is ${Ye(t.some)}`:`'${e}' is ${Ye(t)}`),r=n.length>0?`when ${n.join(" and ")}`:t.overflow?"on extreme numbers":"whatever its inputs";return`${e} – ${t.code} ${t.may?"possible ":""}${r}`},_e=(e,t,n,r)=>{if(t.overflow&&!r.strictNumbers)return"no";for(const[e,n]of Object.entries(t.options??{}))if((r.evaluation[e]??!1)!==n)return"no";const a=Object.entries(t.when??{}).map(([t,r])=>Xe(e,t,r,n));return a.includes("no")?"no":a.every(e=>"yes"===e)?"yes":"maybe"},et={if:{oneOf:[{param:"then"},{param:"else"}]},match:{oneOf:[{param:"branches"},{param:"default"}]},firstOf:{firstNonNull:"values"},find:{oneOf:[{elementOf:"input"},{param:"noMatchDefault"}]},plus:{oneOf:[{sum:"values"},{typeNamedBy:"expect"}]},subtract:{difference:["value","minus"]},multiply:{product:"values"},abs:{abs:"value"},min:{min:"values"},max:{max:"values"},length:{type:"integer",min:0},filter:{arrayOf:{elementOf:"input"}},map:{arrayOf:{param:"each"}},split:{byParam:"delimiter",cases:{"":{arrayOf:"string"}},otherwise:{arrayOf:"string",minLength:1}},convert:{typeNamedBy:"to"},regex:{byParam:"mode",cases:{test:"boolean",extract:{oneOf:["string",{param:"noMatchDefault"}]},match:{arrayOf:"string"}}}};let tt;const nt=/*#__PURE__*/new Set(["lazyElements","lazyEntries","race"]),rt=(e,t)=>{const{inputs:n}=t,r=e=>n.received[e]??M;if((e=>"string"==typeof e||Array.isArray(e)||"literal"in e)(e))return L(e);if("type"in e)return(e=>{const{type:t,min:n=-1/0,max:r=1/0}=e;return"number"===t||"integer"===t?pe({min:n,max:r,integer:"integer"===t}):[K({type:t},e.minLength)]})(e);if("sum"in e)return a=r(e.sum),W(ne(ye(_(a))),de(a),fe(a,e=>pe(he(e,se,ve)),(e,t)=>{const n=me(e);if(void 0===n)return 0===t?pe(se):M;const r=t>0;return pe({min:n.min>=0?r?n.min:0:-1/0,max:n.max<=0?r?n.max:0:1/0,integer:n.integer})}));var a;if("product"in e)return(e=>W(de(e),fe(e,e=>pe(he(e,ie,be)),(e,t)=>{const n=me(e);if(void 0===n)return 0===t?pe(ie):M;const r=n.min>=-1&&n.max<=1;return pe({min:n.min>=1?1:n.min>=0?0:r?-1:-1/0,max:r?1:1/0,integer:n.integer})})))(r(e.product));if("difference"in e)return((e,t)=>{const n=me(e),r=me(t);return pe(n&&r&&{min:n.min-r.max,max:n.max-r.min,integer:n.integer&&r.integer})})(...e.difference.map(r));if("abs"in e)return(e=>{const t=me(e);if(void 0===t)return M;const{min:n,max:r}=t;return pe(n>=0?t:r<=0?{...t,min:-r,max:-n}:{...t,min:0,max:Math.max(-n,r)})})(r(e.abs));if("min"in e)return we(r(e.min),"min");if("max"in e)return we(r(e.max),"max");if("param"in e){const n=e.param;if(Object.hasOwn(t.elements,n))return t.elements[n];const a=r(n),o=t.definition.parameters[n]?.evaluation??"eager";return nt.has(o)?W(_(a),(e=>T(e.map(e=>"exact"in e?v(e.exact)?T(Object.values(e.exact).map(e=>F(e))):M:"object"!==e.type?M:void 0===e.keys?P:T(Object.values(e.keys)))))(a)):a}if("elementOf"in e)return _(r(e.elementOf));if("kindOf"in e)return ne(_(r(e.kindOf)));if("arrayOf"in e){const{arrayOf:n,minLength:r}=e,a="object"==typeof n&&"param"in n?t.items[n.param]:void 0;return void 0!==a?te(a):ee([rt(n,t)],r?{minLength:r}:{})}if("oneOf"in e)return T(e.oneOf.map(e=>rt(e,t)));if("typeNamedBy"in e){const r=e.typeNamedBy,a=n.received[r];if(void 0===a)return M;const o=E(a)??((e,t)=>{const n=e.definition.parameters[t]?.type;return"object"==typeof n&&"literal"in n?[...n.literal]:void 0})(t,r);return void 0===o?P:T(o.filter(e=>"string"==typeof e).map(e=>L(e)))}if("byParam"in e){const{cases:r,otherwise:a}=e,o=n.received[e.byParam],s=void 0===o?void 0:E(o),i=s?.map(e=>"string"==typeof e&&Object.hasOwn(r,e)?r[e]:a)??[...Object.values(r),a];return T(i.map(e=>void 0===e?M:rt(e,t)))}return(e=>T(e.map(e=>{const t="exact"in e?Array.isArray(e.exact)?Array.from(e.exact,e=>F(e)):void 0:"array"===e.type?e.items:void 0;if(void 0===t)return W(V(_([e])),F(null));const n=[];for(const e of t)if(n.push(V(e)),!Q(e))return T(n);return T([...n,F(null)])})))(r(e.firstNonNull))},at=[{type:"nonFinite"}],ot=(e,t,n,r,a={})=>{if("yes"===t.propagates)return{output:F(null)};const{definition:s}=e.entry,i=(e=>void 0!==e.analysis?e.analysis.output:(tt??=new Map(o.filter(e=>Object.hasOwn(et,e.name)).map(e=>[e,et[e.name]])),tt.get(e)))(s);let c=void 0!==i?rt(i,{definition:s,inputs:t,elements:n,items:a}):L(s.returns);return Object.values(t.received).some(e=>"no"!==re(e))&&"no"!==Ae(c,"number")&&(c=W(c,at)),"maybe"===t.propagates&&(c=W(c,F(null))),st(e,c,r,"no"===t.propagates)},st=(e,t,n,r)=>{const a=re(t),o=n?a:re(it(t)),s=t.filter(e=>"exact"in e?"number"!=typeof e.exact||Number.isFinite(e.exact):"nonFinite"!==e.type);return"no"===o?{output:s}:{output:s,boundary:{path:e.path,code:"non-finite-result",message:`${e.name} – non-finite-result possible: a NaN or infinite number may reach its result`,certainty:0===s.length&&r?"always":"may",operator:e.name,order:[e.order]}}},it=e=>e.filter(e=>!("type"in e&&"nonFinite"===e.type)),ct={unknown:!0},ut={fails:!0},lt=async(e,t,n,r,a=new Set)=>{if(a.has(e.entry.definition))return;const{parameters:o}=e.entry.definition,s=new Set(n.map(e=>e.param)),i=[];for(const[e,n]of Object.entries(t)){if(s.has(e))continue;const t=E(n);if(void 0===t)return;i.push({name:e,outcomes:t.map(e=>({value:e}))})}const c=n.map(e=>{const t=o[e.param],n=((e,t)=>{const{verdict:n,output:r}=e.result,a=void 0!==t.replacesNullAt;if("always"===n)return[a?ct:ut];const o=E(r);if(void 0===o)return[ct];const s=o.map(e=>({value:e}));return"no"===n?s:a?[ct]:[...s,ut]})(e,t);return{child:e,outcomes:"perElement"===t.evaluation&&void 0===e.at&&n.length>1?[ct]:n}}),u=()=>[...i,...c].reduce((e,{outcomes:t})=>e*t.length,1);if(u()>16)for(const e of c)e.outcomes.length>1&&(e.outcomes=[ct]);const l=u();if(l>16)return;const m=new Set,p=new Set,y=[];for(let n=0;n<l;n++){let o=n;const s=e=>{const t=e[o%e.length];return o=Math.floor(o/e.length),t},u={};for(const{name:e,outcomes:t}of i)u[e]=s(t).value;const l=new Map(c.map(({child:e,outcomes:t})=>[e,s(t)])),d=await vt(e,t,u,l,r,m,p,a);if(void 0===d)return;y.push(d)}const d=[],f=new Map,h=new Set,v=new Set;let g=0;for(const e of y)if("value"in e)d.push(F(e.value));else if("passed"in e){const{passed:t}=e;v.add(t),h.add(t),d.push(mt(t,o[t.param]))}else if(g++,"escaped"in e)h.add(e.escaped);else{const t=`${e.failure.code}|${e.failure.parameter??""}`,n=f.get(t)??{failure:e.failure,count:0};n.count++,f.set(t,n)}const b=[...f.values()].map(({failure:e,count:t})=>({...e,certainty:t===y.length?"always":"may"}));return{output:T(d),failures:b,reached:m,awaited:p,escaped:h,passed:v,fails:g===y.length}},mt=(e,t)=>void 0===e.at||"perElement"===t.evaluation?qe(t,e.result.output):t.truthiness?L("boolean"):e.result.output,pt=Symbol("stopped"),yt=new Promise(()=>{}),dt=e=>{const t=Promise.reject(e);return t.catch(()=>{}),t},ft={memo:(e,t)=>t()},ht={note:()=>{}},vt=async(e,t,n,r,o,s,c,u)=>{const l=e=>{s.add(e),c.add(e)},{definition:m}=e.entry,{parameters:p}=m,y={...t};for(const[e,t]of Object.entries(n))y[e]=F(t);for(const[e,t]of r)void 0!==p[e.param].replacesNullAt&&"value"in t&&(y[e.param]=F(t.value));const d=Ee(e,y);for(const[e,t]of r){if("race"===p[e.param].evaluation&&s.add(e),d.consulted.has(e.param)){if(!("value"in t))return;l(e)}}const f=Ge(m),h=(t,n,r)=>{const a=r??("external"===f?void 0:f.find(n=>n.code===t&&void 0!==n.parameter&&"no"!==_e(e,n,d,o))?.parameter);return{failure:{path:e.path,code:t,message:n,certainty:"always",operator:e.name,...void 0!==a?{parameter:a}:{},order:[e.order]}}};if("null"===d.ends)return{value:null};if(void 0!==d.ends)return{failure:d.ends};const v=new Map,x=new Set,k=new Map,O=new Map;let j=!1,$=()=>{};const A=new Promise(e=>{$=()=>e(pt)});let N=!1;const S=()=>{N?$():j=!0},M=e=>{const t=new w({code:g.operatorFailure,message:"",path:[]});return k.set(t,e),t},P=(t,n)=>r=>{const a=void 0!==n.elementNullPolicy;if("yes"!==Ae(F(r),n.type,n.constraints,a)){const n=new w({code:g.typeCheck,message:`${e.name} – parameter '${t}': fails its type check`,path:[]});throw O.set(n,t),n}return n.truthiness?Le(r,n.type):r},z=e=>t=>e.truthiness?a(t):t,L=(e,t)=>{void 0!==e&&l(e);const n=void 0===e?ct:r.get(e);if("unknown"in n){const t=new Promise(()=>{});return void 0!==e&&v.set(t,e),S(),t}if("fails"in n)return dt(M(e));try{return Promise.resolve(t(n.value))}catch(e){return dt(e)}},q=e=>{let t;const n={evaluate:()=>t??=e()};return x.add(n),n},D=(e,t)=>{const n=({index:e,child:n,value:a})=>{if(void 0===n)return{index:e,ok:!0,value:t(a)};l(n);const o=r.get(n);if("fails"in o)return{index:e,ok:!1,error:M(n)};try{return{index:e,ok:!0,value:t(o.value)}}catch(t){return{index:e,ok:!1,error:t}}},a=e=>void 0!==e.child&&"unknown"in r.get(e.child),o={length:e.length,async*[Symbol.asyncIterator](){for(const t of e)a(t)||(yield n(t));e.some(a)&&(S(),await yt)}};return x.add(o),o},J=(e,t)=>{const n=z(t);switch(t.evaluation){case"lazyElements":return e.map(e=>q(()=>Promise.resolve(n(e))));case"race":return D(e.map((e,t)=>({index:t,value:e})),n);case"lazyEntries":{const t={};for(const[r,a]of Object.entries(e))t[r]=q(()=>Promise.resolve(n(a)));return t}case"lazy":return q(()=>Promise.resolve(e));default:return e}},B=new Map;for(const e of r.keys())B.set(e.param,[...B.get(e.param)??[],e]);const I={};for(const[e,t]of Object.entries(p)){if("perElement"===t.evaluation||void 0!==t.replacesNullAt)continue;const n=B.get(e);if(void 0!==n){const r=z(t);if("lazy"===t.evaluation)I[e]=q(()=>L(n[0],P(e,t)));else if("race"===t.evaluation)I[e]=D(n.map((e,t)=>({index:t,child:e})),r);else if("lazyElements"===t.evaluation)I[e]=n.map(e=>q(()=>L(e,r)));else{const t={};for(const e of n)t[String(e.at)]=q(()=>L(e,r));I[e]=t}continue}const r=d.received[e];if(void 0===r)continue;const a=E(r);if(void 0===a||1!==a.length)return;I[e]=J(a[0],t)}for(const[t,n]of m.resolution.perElement){if(void 0===e.params[t]||void 0===n.over)continue;const r=B.get(t)??[],a=I[n.over],o=Array.isArray(a)?a:[],i=1===r.length&&void 0===r[0].at;if(!i&&r.length!==o.length)return;const c=e=>r[i?e>=0&&e<o.length?0:-1:e],u=P(t,n),l=new Map,m={evaluate:e=>{let t=l.get(e);return void 0===t&&l.set(e,t=L(c(e),u)),t},settle:()=>{const e=o.map((e,t)=>({index:t,child:c(t)}));for(const{child:t}of e)s.add(t);return D(e,u)}};x.add(m),I[t]=m}const C={options:o.evaluation,get signal(){return(new AbortController).signal},cache:ft,trace:ht},T=t=>{const n=k.get(t);if(void 0!==n)return{escaped:n};if(b(t))return h(t.code,t.message,O.get(t));const r=`${e.name} – ${t instanceof Error?t.message:String(t)}`;return h((i(t)?t.code:void 0)??g.operatorFailure,r)};let W;try{W=m.evaluate(I,C)}catch(e){return T(e)}if(H=W,"function"==typeof H?.then){const e=v.get(W);if(void 0!==e)return{passed:e};if(j)return;N=!0;const t=setTimeout(()=>{u.add(m),$()},100),n=await Promise.race([Promise.resolve(W).then(e=>({value:e}),e=>({error:e})),A]);if(clearTimeout(t),n===pt)return;if("error"in n)return T(n.error);W=n.value}var H;return void 0===W?{value:null}:"number"!=typeof W||Number.isFinite(W)?x.has(W)?h(g.escapedHandle,`${e.name} – returned a lazy handle instead of evaluating it`):{value:W}:h(g.nonFiniteResult,`${e.name} – produced a non-finite number (${String(W)})`)},gt=(e,t)=>void 0===t?e.scope:{vars:t,at:e,known:new Map},bt={verdict:"no",escapes:[],output:M},wt={result:bt,covered:[]},xt=[{type:"integer",min:0}],kt=F(null),Ot=(e,t)=>{for(const n of t)e.push(n)},jt=(e,t,n)=>{const r=[...e];for(const e of t)Ot(r,e.result.escapes);const a=t.some(e=>e.result.waits);return t.some(e=>e.eager&&"always"===e.result.verdict)||e.some(e=>!x(e)&&"always"===e.certainty)?{verdict:"always",escapes:r,output:M,waits:a}:{verdict:r.length>0?"may":"no",escapes:r,output:n,waits:a}},$t=e=>`${e.order}|${e.code}|${e.parameter}`,At=e=>{const t=e.map(e=>new Set([...e.result.escapes,...e.covered.map(({pending:e})=>e)].filter(e=>!x(e)&&"always"===e.certainty).map(e=>$t(e)))),n=e=>x(e)||"may"===e.certainty||t.every(t=>t.has($t(e)))?e:{...e,certainty:"may"};for(const t of e)t.result={...t.result,escapes:t.result.escapes.map(n)},t.covered=t.covered.map(({pending:e,by:t})=>({pending:n(e),by:t}))};class Nt{options;bodies=new Map;stalled=new Set;waiting=new Set;strict;constructor(e){this.options=e,this.strict=!0===e.evaluation.strictDataPaths}root(e,t){return this.walk(e,{scope:null,bindings:null,sink:t,frame:{},walks:1})}async walk(e,t){const n=await this.visit(e,t);return n.waits&&this.waiting.add(e),n}async visit(e,t){switch(e.kind){case"constant":return{...bt,output:F(e.value)};case"invalid":throw St("an invalid node");case"reference":return this.reference(e,t);case"skeleton":{const n={...t,scope:gt(t,e.vars)},r=[];for(const t of e.holes)r.push({result:await this.walk(t.node,n),eager:!0});const a=((e,t)=>{if(t.every(e=>1===e.length&&"exact"in e[0]))return F(l(e.skeleton,e.holes,t.map(e=>e[0].exact)));const n=e.holes.map((e,n)=>({at:e.at,output:t[n]})),r=(e,t,n)=>{const a=n.find(e=>e.at.length===t);if(void 0!==a)return a.output;if(0===n.length)return F(e);const o=new Map;for(const e of n){const n=o.get(e.at[t]);void 0===n?o.set(e.at[t],[e]):n.push(e)}const s=e=>o.get(e)??[];if(Array.isArray(e))return te(Array.from(e,(e,n)=>r(e,t+1,s(n))));const i=e,c=new Set([...Object.keys(i),...n.map(e=>String(e.at[t]))]),u={};for(const e of c)u[e]=r(i[e],t+1,s(e));return ae(u)};return r(e.skeleton,0,n)})(e,r.map(e=>e.result.output));return jt([],r,a)}case"elements":case"entries":{const n=[],r=await this.container("",e,t,n);for(const e of n)Ot(t.sink,e.covered);const a=n.map(({result:e})=>({result:e,eager:!1}));return jt([],a,r)}case"operator":return this.operator(e,t);case"fragmentCall":return this.call(e,t)}return e}async operator(e,t){const{definition:n}=e.entry,r={...t,scope:gt(t,e.vars)},a={},o=[],s=[];for(const[t,i]of Object.entries(e.params)){const e=n.parameters[t]?.evaluation;if("perElement"!==e)if("elements"===i.kind||"entries"===i.kind)a[t]=await this.container(t,i,r,s);else if("lazy"===e){const e=await this.apart(t,i,r);a[t]=e.result.output,s.push(e)}else{const e=await this.walk(i,r);a[t]=e.output,o.push({result:e,eager:!0})}}const i=Ee(e,a),u=c(e),l={},m={};for(const[a,o]of n.resolution.perElement){const n=e.params[a];if(void 0===n||void 0===o.over)continue;const c=i.received[o.over]??M,p=E(c),y=1===p?.length&&Array.isArray(p[0])?p[0]:void 0,d=t.walks*(y?.length??1/0);if(d<=16){const e=[];for(const[o,i]of Array.from(y).entries()){const c={as:u,element:F(i),index:F(o),parent:t.bindings},l=await this.apart(a,n,{...r,bindings:c,walks:d},o);s.push(l),e.push(l.result.output)}m[a]=e,l[a]=T(e)}else{const e={as:u,element:_(c),index:xt,parent:t.bindings},o=await this.apart(a,n,{...r,bindings:e});s.push(o),l[a]=o.result.output}}const p=o.some(e=>"always"===e.result.verdict)?{output:M,failures:[],reached:new Set(s.filter(e=>"race"===n.parameters[e.param].evaluation)),awaited:new Set,escaped:new Set,passed:new Set,fails:!0}:"external"===Ge(n)?void 0:await lt(e,a,s,this.options,this.stalled);for(const e of Object.keys(m))At(s.filter(t=>t.param===e&&(p?.reached.has(t)??!0)));const y=[];void 0===p?(Ot(y,i.failures),"yes"!==i.propagates&&Ot(y,((e,t,n)=>{const r=Ge(e.entry.definition),a={path:e.path,operator:e.name,order:[e.order]};if("external"===r)return[{...a,code:Ce,message:`${e.name} – may fail whatever its inputs: nothing describes what it fails on`,certainty:"may"}];const o=[];for(const s of r){const r=_e(e,s,t,n);"no"!==r&&o.push({...a,code:s.code,message:Ze(e.name,s),certainty:"yes"!==r||s.may||s.overflow||"no"!==t.propagates?"may":"always",...void 0!==s.parameter?{parameter:s.parameter}:{}})}return o})(e,i,this.options))):Ot(y,p.failures);for(const t of s){if(void 0!==p&&!p.passed.has(t))continue;const r=n.parameters[t.param];if("perElement"===r.evaluation){const n=Je(e,t.param,r,t.result.output);void 0!==n&&y.push(n)}else void 0!==p&&void 0===t.at&&Ot(y,i.failures.filter(e=>e.parameter===t.param))}const{output:d,boundary:f}=void 0===p?ot(e,i,l,this.options.strictNumbers,m):st(e,p.output,this.options.strictNumbers,!1);void 0===f||y.some(e=>!x(e)&&e.code===f.code)||y.push(f);for(const e of s){if(void 0!==p&&!p.reached.has(e))continue;Ot(t.sink,e.covered);const n=void 0===p||p.escaped.has(e)?e.result.escapes:e.result.escapes.filter(x),r=e.result.waits&&(p?.awaited.has(e)??!0);o.push({result:{...e.result,escapes:n,waits:r},eager:!1})}const h=jt(y,o,d);return!0===p?.fails&&Object.assign(h,{verdict:"always",output:M}),(e=>void 0!==e.analysis||"external"===Ge(e))(n)&&(h.waits=!0),this.withFallback(e,h,r)}async apart(e,t,n,r){const a=[];return{param:e,...void 0!==r?{at:r}:{},result:await this.walk(t,{...n,sink:a}),covered:a}}async container(e,t,n,r){if("elements"===t.kind){const a=[];for(const[o,s]of t.nodes.entries()){const t=await this.apart(e,s,n,o);r.push(t),a.push(t.result.output)}return te(a)}const a={...n,scope:gt(n,t.vars)},o={};for(const[n,s]of Object.entries(t.entries)){const t=await this.apart(e,s,a,n);r.push(t),o[n]=t.result.output}return ae(o)}async withFallback(e,t,n){if("no"===t.verdict)return t;const r="operator"===e.kind?e.entry.hostDefaults:void 0,a=void 0!==r&&Object.hasOwn(r,"fallback");if(void 0===e.fallback&&!a)return t;const o={path:e.path};for(const e of t.escapes)n.sink.push({pending:e,by:o});const{waits:s}=t;if(void 0===e.fallback)return{...bt,output:W(t.output,F(r.fallback)),waits:s};const i=await this.walk(e.fallback,n);return{verdict:"always"===t.verdict||"always"!==i.verdict?i.verdict:"may",escapes:i.escapes,output:W(t.output,i.output),waits:s||i.waits}}async reference(e,t){const{segments:n,namespace:r}=e;switch(r){case"data":return this.drilled(e,P,n,[],[]);case"element":case"index":for(let a=t.bindings;null!==a;a=a.parent)if(u(a.as,r,e.binding))return"index"===r?{...bt,output:a.index}:this.drilled(e,a.element,n,[],[]);throw St(`an unresolved '${e.raw}'`);case"vars":{const r=await this.varDefinition(n[0],t);if(void 0===r)throw St(`an unresolved '${e.raw}'`);Ot(t.sink,r.covered);const a=[{result:r.result,eager:!0}];return this.drilled(e,r.result.output,n.slice(1),a,[])}case"params":{const{entry:r,params:a={}}=t.frame;if(void 0===r)throw St(`'${e.raw}' outside a fragment body`);const[o,...s]=n;if(void 0===o){const t=Object.keys(r.parameters).map(e=>({demand:e}));return this.drilled(e,ae(a),[],[],t)}const i="string"==typeof o?a[o]??P:P;return this.drilled(e,i,s,[],[{demand:String(o)}])}}return r}drilled(e,t,n,r,a){const{value:o,found:s}=oe(t,n);if("yes"===s)return jt(a,r,o);if(!this.strict)return jt(a,r,W(o,kt));const i={path:e.path,code:"missing-data-path",message:`'${e.raw}' may be absent (strictDataPaths)`,certainty:"no"===s?"always":"may",order:[e.order]};return jt([...a,i],r,o)}async varDefinition(e,t){for(let n=t.scope;null!==n;n=n.at.scope){if("string"!=typeof e||!Object.hasOwn(n.vars,e))continue;const t=n.known.get(e);if(void 0!==t)return t;n.known.set(e,{result:{...bt,output:P},covered:[]});const r=[],a={result:await this.walk(n.vars[e],{...n.at,scope:n,sink:r}),covered:r};return n.known.set(e,a),a}}async call(e,t){const{entry:n}=e;if(void 0===n)throw St(`a call to the unknown fragment '${e.name}'`);const r={...t,scope:gt(t,e.vars)},a=[],o=[],s={},i=new Map;if("static"===e.argumentsMode)for(const[t,a]of Object.entries(n.parameters)){const n=await this.argument(e,t,a,r);i.set(t,n),s[t]=n.result.output}else{const t=e.parameters,i=await this.walk(t,r);o.push({result:i,eager:!0}),Ot(a,Pt(e,n,t,s))}let c=!1;const u=e=>{const n=i.get(e)??wt;return Ot(t.sink,n.covered),c||=!0===n.result.waits,n},l=await this.body(n,s);for(const{pending:n,by:r}of l.covered){const a=O(r,e);if(x(n))for(const e of u(n.demand).result.escapes)t.sink.push({pending:e,by:a});else t.sink.push({pending:k(n,e),by:a})}const m=[];for(const t of l.result.escapes)x(t)?Ot(m,u(t.demand).result.escapes):m.push(k(t,e));return o.push({result:{...l.result,escapes:[]},eager:!0},{result:{...bt,escapes:m,waits:c},eager:!1}),this.withFallback(e,jt(a,o,l.result.output),r)}async argument(e,t,n,r){const a=e.parameters?.[t];if(void 0===a)return{result:{...bt,output:F(n.default??null)},covered:[]};const o=[],s=await this.walk(a,{...r,sink:o}),{known:i,answer:c}=De(n,s.output),u="yes"===c?[]:[Mt(e,t,a.path,a.order)];return{result:jt(u,[{result:s,eager:!0}],i),covered:o}}async body(e,t){const n=Object.keys(t).map(e=>`${e}=${I(t[e])}`).join(";");let r=this.bodies.get(e);void 0===r&&this.bodies.set(e,r=new Map);const a=r.get(n);if(void 0!==a)return a;r.set(n,{result:{...bt,output:P},covered:[]});const o=[],s={entry:e,params:t},i={result:await this.walk(e.body,{scope:null,bindings:null,sink:o,frame:s,walks:1}),covered:o};return r.set(n,i),i}}const St=e=>new Error(`[fig-tree internal] ${e} reached the coverage walk — the static gate should have refused it`),Mt=(e,t,n,r)=>({path:n,code:"type-check",message:`fragment '${e.name}' – parameter '${t}': the argument may not fit the declared type`,certainty:"may",parameter:t,order:[r]}),Pt=(e,t,n,r)=>{const a=(t,r)=>({path:n.path,code:t,message:`fragment '${e.name}' – ${r}`,certainty:"may",order:[n.order]}),o=Object.entries(t.parameters);for(const[e,t]of o)r[e]=De(t,P).known;const s=[a("type-check","'parameters' may not match the declared parameters")];return o.some(([,e])=>e.required)&&s.push(a("missing-required","'parameters' may omit a required parameter")),s},Ft=async(e,t,n)=>{if(!(e instanceof m))throw new TypeError("fallbackCoverage() takes a FigTree instance");const r=n?.strictNumbers??!1;if("boolean"!=typeof r)throw new w({code:g.invalidOptions,message:`'strictNumbers' must be a boolean, received ${JSON.stringify(r)}`,path:[]});const{artifact:a,options:o}=p(e.compile(t)),s=y(a,o).filter(e=>"error"===e.severity);if(s.length>0)return{uncovered:s.map($),covered:[]};const i=new Nt({strictNumbers:r,evaluation:o}),c=[],{escapes:u,waits:l}=await i.root(a.root,c),d=u.filter(e=>!x(e)).map(N);if(void 0!==o.timeout&&l)for(const{node:e,timeoutFallback:t}of a.holes){const n={path:e.path,code:"timeout",certainty:"may",order:[e.order]};a.timeoutShielded?i.waiting.has(e)&&c.push({pending:{...n,message:"may be cut off by the timeout, which puts its constant fallback in its place"},by:{path:e.path}}):void 0===t&&d.push(N({...n,message:"the timeout may reject the evaluation: something in it can wait, and this value has no constant fallback to shield it"}))}const f=c.flatMap(({pending:e,by:t})=>x(e)?[]:[S(e,t)]);return{uncovered:A(d),covered:A(f)}};export{Ft as fallbackCoverage};
|