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