@tslite/type-core 0.3.2 → 0.3.4

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var M=e=>Object.freeze(e),s={any:M({t:"any"}),unknown:M({t:"unknown"}),string:M({t:"string"}),number:M({t:"number"}),boolean:M({t:"boolean"}),null:M({t:"null"}),undefined:M({t:"undefined"}),void:M({t:"void"}),literal:e=>({t:"literal",value:e}),object:(e,n)=>({t:"object",props:e,...n?{index:n}:{}}),record:(e,n="string")=>({t:"object",props:{},index:{key:n,value:e}}),array:(e,n)=>({t:"array",items:e,...n?{readonly:true}:{}}),tuple:(e,n,r)=>({t:"tuple",elements:e,...n&&n.some(t=>t!=="req")?{flags:n}:{},...r?{readonly:true}:{}}),fn:(e,n,r)=>({t:"fn",params:e,returns:n,...r?.length?{typeParams:r}:{}}),guard:(e,n,r=0)=>({t:"fn",params:e,returns:{t:"boolean"},guard:{param:r,type:n}}),overload:e=>({t:"overload",signatures:e}),keyof:e=>({t:"keyof",of:e}),index:(e,n)=>({t:"index",obj:e,key:n}),mapped:(e,n,r,t=false)=>({t:"mapped",key:e,over:n,body:r,optional:t}),conditional:(e,n,r,t,o)=>({t:"conditional",check:e,extends:n,then:r,else:t,...o&&o.length?{infer:o}:{}}),intersection:e=>({t:"intersection",of:e}),and:(e,n)=>({t:"intersection",of:[e,n]}),returnType:e=>({t:"returnType",fn:e}),parameters:e=>({t:"parameters",fn:e}),var:(e,n,r)=>({t:"var",name:e,bound:n,isConst:r}),typeQuery:e=>({t:"typeQuery",path:e}),apply:(e,n=[])=>({t:"apply",name:e,args:n}),promise:e=>({t:"apply",name:"Promise",args:[e]}),union:e=>{let n=[];for(let r of e)r.t==="union"?n.push(...r.of):n.push(r);return {t:"union",of:n}}};function h(e){return e.t==="keyof"?fe(e.of)??e:e.t==="index"?ee(e.obj,e.key)??e:e.t==="returnType"?je(e.fn)??e:e.t==="parameters"?Ee(e.fn)??e:e}var le={t:"union",of:[]},Te=e=>e.t==="union"&&e.of.length===0;function je(e){return e.t==="fn"?e.returns:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1].returns:null}function we(e){if(e.t==="undefined")return e;let n=e.t==="union"?e.of:[e];return n.some(r=>r.t==="undefined")?e:{t:"union",of:[...n,{t:"undefined"}]}}function Ee(e){let n=e.t==="fn"?e:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1]:null;if(!n)return null;let r=[],t=[];for(let o of n.params)o.variadic?(r.push(o.type.t==="array"?o.type.items:o.type),t.push("rest")):o.optional?(r.push(we(o.type)),t.push("optional")):(r.push(o.type),t.push("req"));return s.tuple(r,t)}var ue=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function pe(e,n){return e.t==="literal"&&n.t==="literal"?e.value===n.value:e.t==="literal"&&(n.t==="string"||n.t==="number"||n.t==="boolean")?typeof e.value===n.t:e.t===n.t&&(e.t==="string"||e.t==="number"||e.t==="boolean")}function b(e){let n=[],r=o=>{let i=h(o);i.t==="intersection"?i.of.forEach(r):n.push(i);};e.of.forEach(r);let t=[];for(let o of n){if(o.t==="any")return s.any;if(Te(o))return le;if(o.t!=="unknown"){if(ue(o)){let i=false;for(let a=t.length-1;a>=0;a--){let l=t[a];if(ue(l)){if(pe(l,o)){i=true;break}if(pe(o,l))t.splice(a,1);else return le}}if(i)continue}else if(t.some(i=>i===o))continue;t.push(o);}}return t.length===0?s.unknown:t.length===1?t[0]:{t:"intersection",of:t}}function fe(e){if(e.t==="union"){let r=e.of.map(fe);return r.some(t=>t===null)?null:$e(r)}if(e.t!=="object")return null;let n=Object.keys(e.props).map(r=>s.literal(r));return e.index&&n.push(e.index.key==="number"?s.number:s.string),n.length===0?{t:"union",of:[]}:n.length===1?n[0]:{t:"union",of:n}}function $e(e){let n=i=>i.t==="literal"&&typeof i.value=="string"?[i.value]:i.t==="union"?i.of.flatMap(n):[],r=e.filter(i=>i.t!=="string"&&i.t!=="number").map(n);if(r.length===0)return e[0];let t=r[0].filter(i=>r.every(a=>a.includes(i))),o=[...new Set(t)].map(i=>s.literal(i));return o.length===0?{t:"union",of:[]}:o.length===1?o[0]:{t:"union",of:o}}function ee(e,n){if(e=h(e),n=h(n),n.t==="union"){let r=n.of.map(t=>ee(e,t));return r.some(t=>t===null)?null:{t:"union",of:r}}if(e.t==="intersection"){let r=[];for(let t of e.of){let o=ee(h(t),n);if(o===null)return null;o.t!=="undefined"&&r.push(o);}return r.length===0?s.undefined:r.length===1?r[0]:b({of:r})}if(e.t==="object"){if(n.t==="literal"&&(typeof n.value=="string"||typeof n.value=="number")){let r=P(e.props,String(n.value));return r?r.optional?{t:"union",of:[r.type,{t:"undefined"}]}:r.type:typeof n.value=="number"&&e.index?.key==="number"||e.index?.key==="string"?e.index.value:s.undefined}if(e.index?.key==="string"&&n.t==="string"||e.index?.key==="number"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number"))return e.index.value}if(e.t==="tuple"){let r=e.flags?.findIndex(t=>t!=="req")??-1;if(r>=0){if(n.t==="literal"&&typeof n.value=="number")return n.value<r?e.elements[n.value]??s.undefined:e.elements.length?{t:"union",of:e.elements.slice(r)}:s.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:s.undefined}else {if(n.t==="literal"&&typeof n.value=="number")return e.elements[n.value]??s.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:s.undefined}}return e.t==="array"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number")?e.items:null}var Ie=Object.prototype.hasOwnProperty,P=(e,n)=>Ie.call(e,n)?e[n]:void 0;function L(e){if(e.t==="undefined")return {type:{t:"union",of:[]},hadUndefined:true};if(e.t==="union"&&e.of.some(n=>n.t==="undefined")){let n=e.of.filter(r=>r.t!=="undefined");return {type:n.length===1?n[0]:{t:"union",of:n},hadUndefined:true}}return {type:e,hadUndefined:false}}var G=(e,n)=>e.flags?.[n]??"req",se=e=>e==="rest"||e==="variadic",Oe=e=>!!e.flags?.some(se),q=e=>e.flags?.findIndex(se)??-1,Me=e=>{if(!e.flags)return e.elements.length;let n=e.flags.findIndex(r=>r!=="req");return n<0?e.elements.length:n};function K(e,n){let r=[],t=[],o=(i,a)=>{r.push(i),t.push(a);};for(let i=0;i<e.length;i++){let a=e[i],l=n[i]??"req";if(l!=="variadic"){o(a,l);continue}if(a.t==="tuple"){let c=a;for(let u=0;u<c.elements.length;u++)o(c.elements[u],G(c,u));}else a.t==="array"?o(a.items,"rest"):a.t==="any"?o(a,"rest"):o(a,"variadic");}return s.tuple(r,t)}function ce(e){let n=q(e);return n<0?{prefix:e.elements,rest:null,suffix:[]}:{prefix:e.elements.slice(0,n),rest:e.elements[n],suffix:e.elements.slice(n+1)}}function de(e,n,r){let t=ce(e),o=ce(n);if(o.rest===null){if(t.rest!==null)return false;let i=Me(n);return e.elements.length<i||e.elements.length>n.elements.length?false:e.elements.every((a,l)=>r(a,n.elements[l]))}if(t.rest===null){let i=t.prefix;if(i.length<o.prefix.length+o.suffix.length)return false;for(let a=0;a<o.prefix.length;a++)if(!r(i[a],o.prefix[a]))return false;for(let a=0;a<o.suffix.length;a++)if(!r(i[i.length-o.suffix.length+a],o.suffix[a]))return false;for(let a=o.prefix.length;a<i.length-o.suffix.length;a++)if(!r(i[a],o.rest))return false;return true}if(t.prefix.length>=o.prefix.length&&t.suffix.length>=o.suffix.length){for(let i=0;i<o.prefix.length;i++)if(!r(t.prefix[i],o.prefix[i]))return false;for(let i=o.prefix.length;i<t.prefix.length;i++)if(!r(t.prefix[i],o.rest))return false;if(!r(t.rest,o.rest))return false;for(let i=0;i<o.suffix.length;i++)if(!r(t.suffix[t.suffix.length-o.suffix.length+i],o.suffix[i]))return false;for(let i=0;i<t.suffix.length-o.suffix.length;i++)if(!r(t.suffix[i],o.rest))return false;return true}return false}function H(e,n,r){if(e.t==="array")return e;if(e.t==="tuple"){let t=e,o=t.elements.length,i=t.elements.slice(n,o-r),a=(t.flags??t.elements.map(()=>"req")).slice(n,o-r);return s.tuple(i,a)}return s.tuple([])}function m(e,n,r=new WeakSet){if(e.t!=="keyof"&&e.t!=="index"&&e.t!=="mapped"&&e.t!=="intersection"&&e.t!=="returnType"&&e.t!=="parameters"&&!Le(F(e),n))return e;switch(e.t){case "var":{let t=n[e.name];return t||(e.bound?{t:"var",name:e.name,bound:m(e.bound,n,r)}:e)}case "array":return {t:"array",items:m(e.items,n,r)};case "tuple":{let t=e.elements.map(o=>m(o,n,r));return e.flags?K(t,e.flags):{t:"tuple",elements:t}}case "union":return {t:"union",of:e.of.map(t=>m(t,n,r))};case "object":{if(r.has(e))return e;r.add(e);let t={};for(let i in e.props){let a=e.props[i];t[i]={type:m(a.type,n,r),optional:a.optional};}let o=e.index?{key:e.index.key,value:m(e.index.value,n,r)}:void 0;return r.delete(e),o?{t:"object",props:t,index:o}:{t:"object",props:t}}case "fn":{if(r.has(e))return e;r.add(e);let o={t:"fn",params:e.params.map(i=>({...i,type:m(i.type,n,r)})),returns:m(e.returns,n,r),...e.guard&&{guard:{param:e.guard.param,type:m(e.guard.type,n,r)}}};return r.delete(e),o}case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>m(t,n,r))};case "keyof":return h({t:"keyof",of:m(e.of,n,r)});case "index":return h({t:"index",obj:m(e.obj,n,r),key:m(e.key,n,r)});case "mapped":{let t={};for(let i in n)i!==e.key&&(t[i]=n[i]);let o={t:"mapped",key:e.key,over:m(e.over,n,r),body:m(e.body,t,r),optional:e.optional};return z(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,i=n[o],a=i?h(i):void 0,l=a?.t==="union"?a.of:a?.t==="boolean"?[s.literal(true),s.literal(false)]:null;if(l)return {t:"union",of:l.map(c=>m(e,{...n,[o]:c},r))}}let t=e.infer?.length?Object.fromEntries(Object.entries(n).filter(([o])=>!e.infer.includes(o))):n;return {t:"conditional",check:m(e.check,n,r),extends:m(e.extends,t,r),then:m(e.then,t,r),else:m(e.else,t,r),...e.infer?{infer:e.infer}:{}}}case "intersection":return b({of:e.of.map(t=>m(t,n,r))});case "returnType":return h({t:"returnType",fn:m(e.fn,n,r)});case "parameters":return h({t:"parameters",fn:m(e.fn,n,r)});default:return e}}var Pe=new Set,me=new WeakMap;function F(e){let n=me.get(e);if(n)return n;let r=new Set;y(e,r,new WeakSet);let t=r.size===0?Pe:r;return me.set(e,t),t}function y(e,n,r){switch(e.t){case "var":n.add(e.name),e.bound&&y(e.bound,n,r);return;case "array":y(e.items,n,r);return;case "tuple":for(let t of e.elements)y(t,n,r);return;case "union":for(let t of e.of)y(t,n,r);return;case "object":if(r.has(e))return;r.add(e);for(let t in e.props)y(e.props[t].type,n,r);e.index&&y(e.index.value,n,r);return;case "fn":if(r.has(e))return;r.add(e);for(let t of e.params)y(t.type,n,r);y(e.returns,n,r),e.guard&&y(e.guard.type,n,r);return;case "overload":for(let t of e.signatures){for(let o of t.params)y(o.type,n,r);y(t.returns,n,r);}return;case "apply":for(let t of e.args)y(t,n,r);return;case "keyof":y(e.of,n,r);return;case "index":y(e.obj,n,r),y(e.key,n,r);return;case "mapped":y(e.over,n,r),y(e.body,n,r);return;case "conditional":{if(y(e.check,n,r),!e.infer?.length){y(e.extends,n,r),y(e.then,n,r),y(e.else,n,r);return}let t=new Set;y(e.extends,t,r),y(e.then,t,r),y(e.else,t,r);for(let o of t)e.infer.includes(o)||n.add(o);return}case "intersection":for(let t of e.of)y(t,n,r);return;case "returnType":case "parameters":y(e.fn,n,r);return;default:return}}function Le(e,n){if(e.size===0)return false;for(let r of e)if(r in n)return true;return false}function z(e){let n=h(e.over);if(n.t==="string"||n.t==="number")return {t:"object",props:{},index:{key:n.t,value:m(e.body,{[e.key]:n})}};let r=We(n);if(r===null)return null;let t={};for(let o of r)t[o]={type:m(e.body,{[e.key]:s.literal(o)}),optional:e.optional};return {t:"object",props:t}}function We(e){if(e.t==="literal"&&typeof e.value=="string")return [e.value];if(e.t==="union"){let n=[];for(let r of e.of)if(r.t==="literal"&&typeof r.value=="string")n.push(r.value);else return null;return n}return null}function w(e,n){if(e.t!=="apply")return false;let r=n[e.name];return r!==void 0&&r.params.length===e.args.length}function E(e,n){if(e.t!=="apply")return e;let r=n[e.name];if(!r||r.params.length!==e.args.length)return e;let t={};return r.params.forEach((o,i)=>t[o]=e.args[i]),m(r.body,t)}function g(e){switch(e.t){case "literal":return `#${typeof e.value}:${String(e.value)}`;case "object":{let n=Object.keys(e.props).sort().map(t=>`${t}${e.props[t].optional?"?":""}:${g(e.props[t].type)}`).join(","),r=e.index?`,[${e.index.key}]:${g(e.index.value)}`:"";return `{${n}${r}}`}case "array":return `[${g(e.items)}]`;case "tuple":return `#tuple(${e.elements.map(g).join(",")})`;case "union":return `(${e.of.map(g).sort().join("|")})`;case "fn":return `(${e.params.map(n=>g(n.type)).join(",")})=>${e.guard?`is${e.guard.param}:${g(e.guard.type)}`:g(e.returns)}`;case "var":return `v:${e.name}`;case "apply":return `${e.name}<${e.args.map(g).join(",")}>`;case "intersection":return `&(${e.of.map(g).sort().join("&")})`;case "returnType":return `RT<${g(e.fn)}>`;default:return e.t}}var ye=50;function I(e,n={},r=0){if(r>ye)return e;if(e.t==="var")return e.bound?I(e.bound,n,r+1):e;if(w(e,n))return I(E(e,n),n,r+1);if(e.t==="mapped"){let t=z(e);if(t)return I(t,n,r+1)}if(e.t==="intersection")return b(e);if(e.t==="union"){let t=e.of.map(o=>I(o,n,r+1));return t.some((o,i)=>o!==e.of[i])?{t:"union",of:t}:e}return e}function R(e,n,r=0){if(r>ye)return e;let t=A(e,n);if(t!==e)return R(t,n,r+1);let o=I(e,n,r);return o===e?e:R(o,n,r+1)}function A(e,n={}){let r=h(e);if(r!==e)return r;switch(e.t){case "keyof":{let t=R(e.of,n);return t===e.of?e:h({...e,of:t})}case "index":{let t=R(e.obj,n),o=R(e.key,n);return t===e.obj&&o===e.key?e:h({...e,obj:t,key:o})}case "returnType":{let t=R(e.fn,n);return t===e.fn?e:h({...e,fn:t})}default:return e}}var Ue=1e3,J={maxTypeDepth:1e3,maxUnionMembers:1e3,maxOverloadSignatures:200},Q=J;function Be(e){Q={...J,...e};}function Fe(){Q=J;}function C(){return Q}var W=class extends Error{constructor(n=Q.maxTypeDepth){super(`type evaluation exceeded the depth limit (${n}) \u2014 the type is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},N=class extends Error{constructor(n,r=Q.maxUnionMembers){super(`union type is too complex to represent (${n} members exceeds limit ${r})`),this.name="UnionTooComplexError";}};var re=(e,n)=>({seen:new WeakMap,exp:new Set,schemes:e,depth:0,assumed:0,explain:n});function x(e,n,r){return e.explain?.out.push({path:[...e.explain.path],actual:n,expected:r,kind:"type"}),false}function ze(e,n,r={}){let t=[];return !p(e,n,re(r,{path:[],out:t}))&&t.length===0&&t.push({path:[],actual:e,expected:n,kind:"type"}),t}var ne=new WeakMap;function T(e,n,r={}){if(e===n)return true;if(Object.keys(r).length>0)return p(e,n,re(r));let t=ne.get(e)?.get(n);if(t!==void 0)return t;let o=p(e,n,re(r)),i=ne.get(e);return i||ne.set(e,i=new WeakMap),i.set(n,o),o}function Re(e,n,r={}){return T(e,n,r)&&T(n,e,r)}function V(e,n){return e.infer?.length||F(e.check).size>0||F(e.extends).size>0?null:T(e.check,e.extends,n)?e.then:e.else}function D(e,n,r=0){if(r>50)return e;let t=A(e,n.schemes);if(t!==e)return D(t,n,r+1);if(e.t==="conditional"){let o=V(e,n.schemes);if(o)return D(o,n,r+1)}return w(e,n.schemes)?D(E(e,n.schemes),n,r+1):e.t==="union"?v(e.of.map(o=>D(o,n,r+1))):e}function Z(e,n,r,t){if(!r.explain)return p(e,n,r);r.explain.path.push(t);try{return p(e,n,r)}finally{r.explain.path.pop();}}function p(e,n,r){if(r.depth>=C().maxTypeDepth)throw new W;r.depth++;try{if(e.t==="any"||n.t==="any"||n.t==="unknown")return !0;if(e.t==="unknown")return x(r,e,n);let t=A(e,r.schemes);if(t!==e)return p(t,n,r);let o=A(n,r.schemes);if(o!==n)return p(e,o,r);if(e.t==="mapped"){let u=z({...e,over:D(e.over,r)});if(u)return p(u,n,r)}if(n.t==="mapped"){let u=z({...n,over:D(n.over,r)});if(u)return p(e,u,r)}if(e.t==="conditional"){let u=V(e,r.schemes);if(u)return p(u,n,r)}if(n.t==="conditional"){let u=V(n,r.schemes);if(u)return p(e,u,r)}if(n.t==="intersection"){let u=b(n);return u.t!=="intersection"?p(e,u,r):u.of.every(d=>p(e,d,r))}if(e.t==="intersection"){let u=b(e);if(u.t!=="intersection")return p(u,n,r);if(u.of.some(d=>p(d,n,r)))return !0;if(n.t==="object"){let d=De(u.of);if(d)return p(d,n,r)}return !1}if(!(e.t==="apply"&&n.t==="apply"&&e.name===n.name&&e.args.length===n.args.length)&&(w(e,r.schemes)||w(n,r.schemes))){let u=`${g(e)}\u2264${g(n)}`;if(r.exp.has(u))return !0;r.exp.add(u);let d=p(E(e,r.schemes),E(n,r.schemes),r);return r.exp.delete(u),d}let a=r.seen.get(e);if(a?.has(n))return r.assumed++,!0;a||(a=new WeakSet,r.seen.set(e,a)),a.add(n);let l=r.assumed,c=Ae(e,n,r);return (!c||r.assumed!==l)&&a.delete(n),c}finally{r.depth--;}}function Ae(e,n,r){if(e.t==="union")return e.of.every(t=>p(t,n,r));if(e.t==="boolean"&&n.t==="union")return p(s.literal(true),n,r)&&p(s.literal(false),n,r);if(n.t==="union")return _e(e,n,r);if(n.t==="overload")return n.signatures.every(t=>p(e,t,r));if(e.t==="overload")return e.signatures.some(t=>p(t,n,r));switch(n.t){case "literal":return e.t==="literal"&&e.value===n.value?true:x(r,e,n);case "string":case "number":case "boolean":case "null":case "undefined":return e.t===n.t||e.t==="literal"&&Ce(e.value)===n.t?true:x(r,e,n);case "void":return e.t==="void"||e.t==="undefined"?true:x(r,e,n);case "array":return e.t==="array"?e.readonly&&!n.readonly?x(r,e,n):p(e.items,n.items,r):e.t==="tuple"?e.readonly&&!n.readonly?x(r,e,n):e.elements.every((t,o)=>Z(t,n.items,r,String(o))):x(r,e,n);case "tuple":{if(e.t!=="tuple"||e.readonly&&!n.readonly)return x(r,e,n);if(!e.flags&&!n.flags){if(e.elements.length!==n.elements.length)return x(r,e,n);for(let t=0;t<e.elements.length;t++)if(!Z(e.elements[t],n.elements[t],r,String(t)))return false;return true}return de(e,n,(t,o)=>p(t,o,r))}case "object":return e.t==="object"?Ke(e,n,r):Object.keys(n.props).length===0&&!n.index?e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:x(r,e,n):e.t==="array"&&n.index&&Object.values(n.props).every(t=>t.optional)&&p(e.items,n.index.value,r)?true:x(r,e,n);case "fn":return e.t==="fn"?Ne(e,n,r):x(r,e,n);case "var":return e.t==="var"&&e.name===n.name;case "typeQuery":return e.t==="typeQuery"&&e.path.length===n.path.length&&e.path.every((t,o)=>t===n.path[o]);case "keyof":return e.t==="keyof"&&p(e.of,n.of,r)&&p(n.of,e.of,r);case "index":return e.t==="index"&&p(e.obj,n.obj,r)&&p(n.obj,e.obj,r)&&p(e.key,n.key,r)&&p(n.key,e.key,r);case "mapped":return e.t==="mapped"&&e.key===n.key&&!!e.optional==!!n.optional&&p(e.over,n.over,r)&&p(n.over,e.over,r)&&p(e.body,n.body,r)&&p(n.body,e.body,r);case "conditional":return e.t==="conditional"&&p(e.check,n.check,r)&&p(n.check,e.check,r)&&p(e.extends,n.extends,r)&&p(n.extends,e.extends,r)&&p(e.then,n.then,r)&&p(e.else,n.else,r);case "apply":return e.t==="apply"&&e.name===n.name&&e.args.length===n.args.length&&e.args.every((t,o)=>p(t,n.args[o],r));case "returnType":return e.t==="returnType"&&p(e.fn,n.fn,r)&&p(n.fn,e.fn,r);case "parameters":return e.t==="parameters"&&p(e.fn,n.fn,r)&&p(n.fn,e.fn,r)}}var Ce=e=>typeof e;function De(e){let n=[];for(let i of e){let a=h(i);if(a.t!=="object")return null;n.push(a);}let r=new Set;for(let i of n)for(let a in i.props)r.add(a);let t={};for(let i of r){let a=[],l=true;for(let c of n){let u=c.props[i];u?(a.push(u.type),u.optional||(l=false)):c.index?.key==="string"&&(a.push(c.index.value),l=false);}t[i]={type:b({of:a}),optional:l};}let o;for(let i of n)i.index&&(o=o?{key:o.key,value:b({of:[o.value,i.index.value]})}:i.index);return o?{t:"object",props:t,index:o}:{t:"object",props:t}}function _e(e,n,r){let t=r.explain;if(!t)return n.of.some(a=>p(e,a,r));r.explain=void 0;let o;try{o=n.of.some(a=>p(e,a,r));}finally{r.explain=t;}if(o)return true;let i=qe(e,n,r);return i?p(e,i,r):x(r,e,n)}function qe(e,n,r){if(e.t!=="object")return null;let t=n.of.map(o=>I(o,r.schemes));for(let o in e.props){let i=e.props[o].type;if(i.t!=="literal")continue;let a=r.explain;r.explain=void 0;let l;try{l=n.of.filter((c,u)=>{let d=t[u];if(d.t!=="object")return !1;let f=P(d.props,o);return !!f&&p(i,f.type,r)});}finally{r.explain=a;}if(l.length===1)return l[0]}return null}function Ke(e,n,r){let t=false;for(let o in n.props)if(!(n.props[o].optional||P(e.props,o))){if(!r.explain)return false;r.explain.out.push({path:[...r.explain.path,o],expected:n.props[o].type,kind:"missing"}),t=true;}if(t)return false;for(let o in n.props){let i=n.props[o],a=P(e.props,o);if(!a)continue;if(a.optional&&!i.optional)return false;let l=i.optional?L(a.type).type:a.type;if(!Z(l,i.type,r,o))return false}if(n.index){for(let o in e.props)if(!Z(e.props[o].type,n.index.value,r,o))return false;if(e.index&&!p(e.index.value,n.index.value,r))return false}return true}function Ne(e,n,r){if(n.returns.t!=="void"&&n.returns.t!=="any"&&!p(e.returns,n.returns,r))return false;for(let t=0;t<e.params.length;t++){let o=e.params[t];if(o.variadic)break;let i=n.params[t];if(!i){if(o.optional)continue;return false}if(!p(i.type,o.type,r))return false}return !(n.guard&&(!e.guard||e.guard.param!==n.guard.param||!p(e.guard.type,n.guard.type,r)))}function v(e){let n=[];for(let o of e)o.t==="union"?n.push(...o.of):n.push(o);let r=C().maxUnionMembers;if(n.length>r)throw new N(n.length,r);if(n.some(o=>o.t==="any"))return s.any;let t=[];for(let o of n)if(!t.some(i=>T(o,i))){for(let i=t.length-1;i>=0;i--)T(t[i],o)&&t.splice(i,1);t.push(o);}if(t.some(o=>o.t==="literal"&&o.value===true)&&t.some(o=>o.t==="literal"&&o.value===false)){let o=t.filter(i=>!(i.t==="boolean"||i.t==="literal"&&typeof i.value=="boolean"));o.push(s.boolean),t.length=0,t.push(...o);}return t.length===1?t[0]:{t:"union",of:t}}function Qe(e,n){let r=new Set,t=new WeakSet,o=i=>{if(!t.has(i))switch(t.add(i),i.t){case "keyof":r.add("keyof"),o(i.of);break;case "index":r.add("indexed"),o(i.obj),o(i.key);break;case "mapped":r.add("mapped"),o(i.over),o(i.body);break;case "conditional":r.add("conditional"),i.infer?.length&&r.add("infer"),o(i.check),o(i.extends),o(i.then),o(i.else);break;case "returnType":r.add("returnType"),o(i.fn);break;case "parameters":r.add("parameters"),o(i.fn);break;case "tuple":r.add("tuple"),i.flags?.some(a=>a!=="req")&&r.add("variadic"),i.elements.forEach(o);break;case "intersection":r.add("intersection"),i.of.forEach(o);break;case "overload":r.add("overload");for(let a of i.signatures){for(let l of a.params)o(l.type);o(a.returns);}break;case "object":for(let a in i.props)o(i.props[a].type);i.index&&o(i.index.value);break;case "array":o(i.items);break;case "union":i.of.forEach(o);break;case "fn":for(let a of i.params)o(a.type);o(i.returns),i.guard&&o(i.guard.type);break;case "var":i.bound&&o(i.bound);break;case "apply":n&&i.name===n&&r.add("recursion"),i.args.forEach(o);break}};return o(e),r}var te=e=>typeof e=="string"?s.string:typeof e=="number"?s.number:s.boolean;function oe(e){return e.t==="literal"&&e.fresh?te(e.value):e}function Se(e){if(e.t==="literal")return e.fresh?te(e.value):e;if(e.t==="union"){let n=e.of.map(Se);return n.some((r,t)=>r!==e.of[t])?v(n):e}return e}function Ve(e){return j(e,new WeakSet)}function Ye(e){switch(e.t){case "array":return {t:"array",items:j(e.items,new WeakSet),...e.readonly?{readonly:true}:{}};case "tuple":return {t:"tuple",elements:e.elements.map(n=>j(n,new WeakSet)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return he(e,new WeakSet);case "fn":case "overload":return j(e,new WeakSet);default:return e}}function j(e,n){if(e.t==="literal")return e.fresh?te(e.value):e;if(n.has(e))return e;switch(e.t){case "array":return n.add(e),{t:"array",items:j(e.items,n),...e.readonly?{readonly:true}:{}};case "tuple":return n.add(e),{t:"tuple",elements:e.elements.map(r=>j(r,n)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return n.add(e),he(e,n);case "apply":return n.add(e),{t:"apply",name:e.name,args:e.args.map(r=>j(r,n))};case "fn":return n.add(e),{t:"fn",params:e.params.map(r=>({...r,type:j(r.type,n)})),returns:j(e.returns,n),...e.guard?{guard:{param:e.guard.param,type:j(e.guard.type,n)}}:{}};case "overload":return n.add(e),{t:"overload",signatures:e.signatures.map(r=>j(r,n))};default:return e}}function he(e,n){let r={};for(let o in e.props)r[o]={type:j(e.props[o].type,n),optional:e.props[o].optional};let t=e.index?{key:e.index.key,value:j(e.index.value,n)}:void 0;return t?{t:"object",props:r,index:t}:{t:"object",props:r}}var ge=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function Ge(e,n){if(T(n,e))return e;if(T(e,n))return n;let r=ge(e),t=ge(n);return !r||!t||r===t?v([e,n]):null}function k(e,n,r={}){if(e.t==="var"){let t=r[e.name];if(!t)return {...r,[e.name]:n};if(n.t==="any"||n.t==="unknown")return r;let o=Ge(t,n);return o?{...r,[e.name]:o}:r}if(n.t==="any"||n.t==="unknown")return r;switch(e.t){case "array":return n.t==="array"?k(e.items,n.items,r):null;case "tuple":{let t=e,o=q(t);if(o<0){if(n.t!=="tuple"||n.elements.length!==t.elements.length)return null;let f=r;for(let B=0;B<t.elements.length;B++)if(f=k(t.elements[B],n.elements[B],f),f===null)return null;return f}let i=o,a=t.elements.length-o-1,l=G(t,o),c=f=>l==="variadic"?f:f.t==="tuple"?f.elements.length?v(f.elements):s.unknown:f.t==="array"?f.items:f,u=r,d=(f,B)=>{u!==null&&(u=k(f,B,u));};if(n.t==="tuple"){if(n.elements.length<i+a)return null;for(let f=0;f<i;f++)d(t.elements[f],n.elements[f]);for(let f=0;f<a;f++)d(t.elements[o+1+f],n.elements[n.elements.length-a+f]);return u!==null&&(u=k(t.elements[o],c(H(n,i,a)),u)),u}if(n.t==="array"){for(let f=0;f<i;f++)d(t.elements[f],n.items);for(let f=0;f<a;f++)d(t.elements[o+1+f],n.items);return u!==null&&(u=k(t.elements[o],c(n),u)),u}return null}case "object":{if(n.t!=="object")return null;let t=r;for(let o in e.props){let i=e.props[o],a=n.props[o];if(!a){if(i.optional)continue;return null}if(t=k(i.type,a.type,t),t===null)return null}return t}case "fn":{if(n.t!=="fn")return null;let t=k(e.returns,n.returns,r);if(t===null)return null;let o=Math.min(e.params.length,n.params.length);for(let i=0;i<o;i++)if(t=k(e.params[i].type,n.params[i].type,t),t===null)return null;return e.guard&&n.guard&&(t=k(e.guard.type,n.guard.type,t)),t}case "apply":{if(n.t!=="apply"||n.name!==e.name||n.args.length!==e.args.length)return null;let t=r;for(let o=0;o<e.args.length;o++)if(t=k(e.args[o],n.args[o],t),t===null)return null;return t}default:return T(n,e)?r:null}}var xe="@rev",ie=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function O(e,n,r){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===n&&e.key.t==="var"&&e.key.name===r)return s.var(xe);switch(e.t){case "array":return {t:"array",items:O(e.items,n,r)};case "tuple":return {t:"tuple",elements:e.elements.map(t=>O(t,n,r)),...e.flags?{flags:e.flags}:{}};case "union":return {t:"union",of:e.of.map(t=>O(t,n,r))};case "fn":return {t:"fn",params:e.params.map(t=>({...t,type:O(t.type,n,r)})),returns:O(e.returns,n,r)};case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>O(t,n,r))};case "returnType":return {t:"returnType",fn:O(e.fn,n,r)};case "object":{let t={};for(let o in e.props)t[o]={type:O(e.props[o].type,n,r),optional:e.props[o].optional};return e.index?{t:"object",props:t,index:{key:e.index.key,value:O(e.index.value,n,r)}}:{t:"object",props:t}}default:return e}}function He(e,n,r){if(e.over.t!=="keyof"||e.over.of.t!=="var")return null;let t=e.over.of.name;if(r[t])return null;let o={};for(let i in n.props){let a=O(e.body,t,e.key),l=k(a,n.props[i].type,{})?.[xe];o[i]={type:l?oe(l):s.unknown,optional:n.props[i].optional};}return {...r,[t]:{t:"object",props:o}}}function ve(e,n,r){let t=r;for(let o=0;o<e.length&&o<n.length;o++){let i=e[o].type,a=n[o];if(ie(i)&&a.t==="object"){let l=He(i,a,t);l&&(t=l);}}return t}function Je(e,n){let r={};for(let o=0;o<e.params.length;o++){let i=e.params[o];if(i.variadic){for(let a=o;a<n.length;a++)if(r=k(i.type,n[a],r),r===null)return null;break}if(o>=n.length){if(i.optional)continue;return null}if(!ie(i.type)&&(r=k(i.type,n[o],r),r===null))return null}let t=ve(e.params,n,r);return {returns:m(e.returns,t),bindings:t}}function Ze(e,n){let r={};for(let t=0;t<e.params.length&&t<n.length;t++){let o=e.params[t];if(ie(o.type))continue;let i=k(o.type,n[t],r);i!==null&&(r=i);}return r=ve(e.params,n,r),{returns:m(e.returns,r),bindings:r}}function $(e,n,r,t,o){if(e.t==="var"&&r.has(e.name)){let i=o.get(e.name);i||o.set(e.name,i={co:[],contra:[]}),(t?i.contra:i.co).push(n);return}if(!(n.t==="any"||n.t==="unknown"))switch(e.t){case "array":n.t==="array"&&$(e.items,n.items,r,t,o);return;case "tuple":{let i=e,a=q(i);if(a<0){n.t==="tuple"&&n.elements.length===i.elements.length&&i.elements.forEach((d,f)=>$(d,n.elements[f],r,t,o));return}let l=a,c=i.elements.length-a-1,u=d=>$(i.elements[a],d,r,t,o);if(n.t==="tuple"){let d=n;if(d.elements.length<l+c)return;for(let f=0;f<l;f++)$(i.elements[f],d.elements[f],r,t,o);for(let f=0;f<c;f++)$(i.elements[a+1+f],d.elements[d.elements.length-c+f],r,t,o);u(H(d,l,c));}else if(n.t==="array"){for(let d=0;d<l;d++)$(i.elements[d],n.items,r,t,o);for(let d=0;d<c;d++)$(i.elements[a+1+d],n.items,r,t,o);u(n);}return}case "fn":n.t==="fn"&&(e.params.forEach((i,a)=>{let l=n.params[a];l&&$(i.type,l.type,r,!t,o);}),$(e.returns,n.returns,r,t,o));return;case "object":if(n.t==="object")for(let i in e.props)n.props[i]&&$(e.props[i].type,n.props[i].type,r,t,o);return;case "apply":n.t==="apply"&&n.name===e.name&&n.args.length===e.args.length&&e.args.forEach((i,a)=>$(i,n.args[a],r,t,o));return;default:return}}function Xe(e,n){if(e.length===1)return e[0];let t=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(i=>T(o,i,n)));return v(t)}var en=e=>e.t==="union"&&e.of.length===0;function nn(e,n){let r={};for(let[t,{co:o,contra:i}]of e){let a=o.length?v(o):void 0,l=i.length?Xe(i,n):void 0,c=a??l;a&&l&&(c=!en(a)&&a.t!=="any"&&T(a,l,n)?a:l),c&&(r[t]=c);}return r}function rn(e,n={},r=0){if(!e.infer?.length||F(e.check).size>0)return null;let t=new Map;$(e.extends,e.check,new Set(e.infer),false,t);let o=nn(t,n),i=new WeakSet,a=X(m(e.extends,o),n,i,r);return T(e.check,a,n)?X(m(e.then,o),n,i,r):X(m(e.else,o),n,i,r)}function X(e,n={},r=new WeakSet,t=0){let o=t,i=C().maxTypeDepth,a=l=>{switch(l.t){case "var":return s.unknown;case "array":return {t:"array",items:a(l.items)};case "tuple":{let c=l.elements.map(a);return l.flags?K(c,l.flags):{t:"tuple",elements:c}}case "union":return {t:"union",of:l.of.map(a)};case "object":{if(r.has(l))return l;r.add(l);let c={};for(let d in l.props){let f=l.props[d];c[d]={type:a(f.type),optional:f.optional};}let u=l.index?{key:l.index.key,value:a(l.index.value)}:void 0;return r.delete(l),u?{t:"object",props:c,index:u}:{t:"object",props:c}}case "fn":{if(r.has(l))return l;r.add(l);let u={t:"fn",params:l.params.map(d=>({...d,type:a(d.type)})),returns:a(l.returns),...l.guard&&{guard:{param:l.guard.param,type:a(l.guard.type)}}};return r.delete(l),u}case "apply":{if(w(l,n)){let c=E(l,n);if(c.t==="conditional"){if(o>=i)throw new W;o++;try{let u=a(c);if(u.t!=="conditional")return u}finally{o--;}}}return {t:"apply",name:l.name,args:l.args.map(a)}}case "conditional":{let c=l.infer?.length?rn(l,n,o):V(l,n);return c?a(c):{t:"conditional",check:a(l.check),extends:a(l.extends),then:a(l.then),else:a(l.else),...l.infer?{infer:l.infer}:{}}}case "intersection":return b({of:l.of.map(a)});case "returnType":return h({t:"returnType",fn:a(l.fn)});default:return l}};return a(e)}var tn=s.union([]);function ke(e,n){return ae(e,n,new WeakMap)}function on(e){return e.reduce(ke,tn)}function ae(e,n,r){if(e.t==="any"||n.t==="any")return s.any;if(e===n)return e;let t=r.get(e)?.get(n);if(t)return t;if(e.t==="object"&&n.t==="object")return an(e,n,r);if(e.t==="array"&&n.t==="array"){let o={t:"array",items:s.unknown};return be(r,e,n,o),o.items=ae(e.items,n.items,r),o}return v([e,n])}function an(e,n,r){let t={t:"object",props:{}};be(r,e,n,t);for(let o in e.props){let i=e.props[o],a=n.props[o];if(a){let l=ae(i.type,a.type,r);t.props[o]=i.optional||a.optional?{type:l,optional:true}:{type:l};}else t.props[o]={type:i.type,optional:true};}for(let o in n.props)o in e.props||(t.props[o]={type:n.props[o].type,optional:true});return t}function be(e,n,r,t){let o=e.get(n);o||(o=new WeakMap,e.set(n,o)),o.set(r,t);}var ln=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e);function S(e,n=new WeakSet){switch(e.t){case "any":case "unknown":case "string":case "number":case "boolean":case "null":case "undefined":case "void":return e.t;case "var":return e.name;case "typeQuery":return `typeof ${e.path.join(".")}`;case "literal":return typeof e.value=="string"?JSON.stringify(e.value):String(e.value);case "array":{let r=S(e.items,n),t=un(e.items)?`(${r})[]`:`${r}[]`;return e.readonly?`readonly ${t}`:t}case "tuple":{let t=`[${e.elements.map((o,i)=>{let a=e.flags?.[i]??"req",l=S(o,n),c=o.t==="union"?`(${l})`:l;return a==="rest"?`...${c}[]`:a==="variadic"?`...${l}`:a==="optional"?`${c}?`:l}).join(", ")}]`;return e.readonly?`readonly ${t}`:t}case "union":{if(n.has(e))return "\u2026";n.add(e);let r=e.of.length===0?"never":e.of.map(t=>S(t,n)).join(" | ");return n.delete(e),r}case "object":{if(n.has(e))return "\u2026";n.add(e);let r=Object.entries(e.props).map(([t,o])=>`${ln(t)?t:JSON.stringify(t)}${o.optional?"?":""}: ${S(o.type,n)}`);return e.index&&r.push(`[k: ${e.index.key}]: ${S(e.index.value,n)}`),n.delete(e),r.length===0?"{}":`{ ${r.join("; ")} }`}case "fn":{if(n.has(e))return "\u2026";n.add(e);let r=e.params.map(o=>{let i=o.variadic?"...":"",a=o.optional&&!o.variadic?"?":"";return `${i}${o.name}${a}: ${S(o.type,n)}`}).join(", "),t=e.guard?`${e.params[e.guard.param]?.name??`arg${e.guard.param}`} is ${S(e.guard.type,n)}`:S(e.returns,n);return n.delete(e),`(${r}) => ${t}`}case "apply":{if(n.has(e))return "\u2026";n.add(e);let r=e.args.length===0?e.name:`${e.name}<${e.args.map(t=>S(t,n)).join(", ")}>`;return n.delete(e),r}case "overload":{if(n.has(e))return "\u2026";n.add(e);let r=e.signatures.map(t=>S(t,n)).join(" & ");return n.delete(e),r}case "keyof":return `keyof ${S(e.of,n)}`;case "index":return `${S(e.obj,n)}[${S(e.key,n)}]`;case "mapped":{if(n.has(e))return "\u2026";n.add(e);let r=e.optional?"?":"",t=`{ [${e.key} in ${S(e.over,n)}]${r}: ${S(e.body,n)} }`;return n.delete(e),t}case "conditional":{if(n.has(e))return "\u2026";n.add(e);let r=`${S(e.check,n)} extends ${S(e.extends,n)} ? ${S(e.then,n)} : ${S(e.else,n)}`;return n.delete(e),r}case "intersection":return e.of.map(r=>r.t==="union"&&r.of.length>0?`(${S(r,n)})`:S(r,n)).join(" & ");case "returnType":return `ReturnType<${S(e.fn,n)}>`;case "parameters":return `Parameters<${S(e.fn,n)}>`}}function un(e){return e.t==="union"&&e.of.length>0||e.t==="fn"}function pn(e){if(e.length===0)return "value";let n=e[e.length-1];if(/^\d+$/.test(n)){let r=e.slice(0,-1);return r.length?`property '${r.join(".")}' at position ${n}`:`position ${n}`}return `property '${e.join(".")}'`}function fn(e){let n=e.filter(r=>r.kind==="missing");if(n.length&&n.length===e.length){let r=n.map(t=>`'${t.path.join(".")}'`).join(", ");return n.length===1?`property ${r} is missing`:`properties ${r} are missing`}return e.map(r=>`${pn(r.path)}: expected '${S(r.expected)}', got '${S(r.actual)}'`).join("; ")}function U(e,n=new WeakSet){switch(e.t){case "string":case "number":case "boolean":case "null":case "literal":return true;case "array":return n.has(e)?true:(n.add(e),U(L(e.items).type,n));case "tuple":return n.has(e)?true:(n.add(e),e.elements.every(r=>U(L(r).type,n)));case "object":{if(n.has(e))return true;n.add(e);let r=Object.values(e.props).every(o=>U(L(o.type).type,n)),t=!e.index||U(L(e.index.value).type,n);return r&&t}case "union":return n.has(e)?true:(n.add(e),e.of.every(r=>U(r,n)));case "intersection":return n.has(e)?true:(n.add(e),e.of.every(r=>U(r,n)));case "undefined":case "void":case "fn":case "overload":case "keyof":case "index":case "mapped":case "conditional":case "returnType":case "parameters":case "var":case "typeQuery":case "apply":case "any":case "unknown":return false}}function cn(e,n,r={}){let t=e;for(let o of n){let i=_(t,o,r);if(i===null)return null;t=i;}return {type:t,completions:Y(t,r)}}var sn=e=>e==="[]"||/^\d+$/.test(e);function _(e,n,r,t=new Set){if(e.t==="var")return e.bound?_(I(e,r),n,r,t):null;if(w(e,r)){let i=g(e);if(t.has(i))return null;t.add(i);let a=_(E(e,r),n,r,t);return t.delete(i),a}let o=h(e);if(o!==e)return _(o,n,r,t);switch(e.t){case "any":return e;case "object":{let i=P(e.props,n);return i?i.optional?v([i.type,{t:"undefined"}]):i.type:e.index?.key==="string"?e.index.value:null}case "array":return sn(n)?e.items:null;case "tuple":{let i=e.flags?.findIndex(c=>c!=="req")??-1,a=Number(n);if(!(Number.isInteger(a)&&a>=0))return null;if(i<0)return a<e.elements.length?e.elements[a]:null;if(a<i)return e.elements[a];let l=e.elements.slice(i);return l.length?v(l):null}case "union":{let i=e.of.map(a=>_(a,n,r,t)).filter(a=>a!==null);return i.length?v(i):null}case "intersection":{let i=e.of.map(a=>_(a,n,r,t)).filter(a=>a!==null);return i.length?b({of:i}):null}default:return null}}function Y(e,n,r=new WeakSet,t=new Set){if(e.t==="var")return e.bound?Y(I(e,n),n,r,t):[];if(w(e,n)){let i=g(e);if(t.has(i))return [];t.add(i);let a=Y(E(e,n),n,r,t);return t.delete(i),a}let o=h(e);if(o!==e)return Y(o,n,r,t);switch(e.t){case "object":return Object.entries(e.props).map(([i,a])=>({key:i,type:a.type,optional:!!a.optional}));case "array":return [{key:"[]",type:e.items,optional:false}];case "tuple":return e.elements.map((i,a)=>({key:String(a),type:i,optional:false}));case "union":case "intersection":{if(r.has(e))return [];r.add(e);let i=[],a=new Set;for(let l of e.of)for(let c of Y(l,n,r,t))a.has(c.key)||(a.add(c.key),i.push(c));return r.delete(e),i}default:return []}}exports.DEFAULT_TYPE_LIMITS=J;exports.TYPE_EVAL_DEPTH_LIMIT=Ue;exports.TypeEvalLimitError=W;exports.UnionTooComplexError=N;exports.apparentType=I;exports.configureTypeLimits=Be;exports.discover=cn;exports.equals=Re;exports.expand1=E;exports.flagAt=G;exports.format=S;exports.formatTypeDiff=fn;exports.groundVars=X;exports.instantiate=Je;exports.instantiateLoose=Ze;exports.isScheme=w;exports.isSerializable=U;exports.isVariadicTuple=Oe;exports.join=ke;exports.joinAll=on;exports.normalizeTuple=K;exports.normalizeUnion=v;exports.ownProp=P;exports.resetTypeLimits=Fe;exports.resolveOp=A;exports.resolveTypeOp=h;exports.restIndex=q;exports.s=s;exports.sliceTuple=H;exports.substitute=m;exports.subtype=T;exports.typeDiff=ze;exports.typeFeatures=Qe;exports.typeLimits=C;exports.unify=k;exports.widen=oe;exports.widenInferred=Ye;exports.widenLiteral=Se;exports.widenType=Ve;exports.withoutUndefined=L;
1
+ 'use strict';var M=e=>Object.freeze(e),s={any:M({t:"any"}),unknown:M({t:"unknown"}),string:M({t:"string"}),number:M({t:"number"}),boolean:M({t:"boolean"}),null:M({t:"null"}),undefined:M({t:"undefined"}),void:M({t:"void"}),literal:e=>({t:"literal",value:e}),object:(e,n)=>({t:"object",props:e,...n?{index:n}:{}}),record:(e,n="string")=>({t:"object",props:{},index:{key:n,value:e}}),array:(e,n)=>({t:"array",items:e,...n?{readonly:true}:{}}),tuple:(e,n,r)=>({t:"tuple",elements:e,...n&&n.some(t=>t!=="req")?{flags:n}:{},...r?{readonly:true}:{}}),fn:(e,n,r)=>({t:"fn",params:e,returns:n,...r?.length?{typeParams:r}:{}}),guard:(e,n,r=0)=>({t:"fn",params:e,returns:{t:"boolean"},guard:{param:r,type:n}}),overload:e=>({t:"overload",signatures:e}),keyof:e=>({t:"keyof",of:e}),index:(e,n)=>({t:"index",obj:e,key:n}),mapped:(e,n,r,t=false)=>({t:"mapped",key:e,over:n,body:r,optional:t}),conditional:(e,n,r,t,o)=>({t:"conditional",check:e,extends:n,then:r,else:t,...o&&o.length?{infer:o}:{}}),intersection:e=>({t:"intersection",of:e}),and:(e,n)=>({t:"intersection",of:[e,n]}),returnType:e=>({t:"returnType",fn:e}),parameters:e=>({t:"parameters",fn:e}),var:(e,n,r)=>({t:"var",name:e,bound:n,isConst:r}),typeQuery:e=>({t:"typeQuery",path:e}),apply:(e,n=[])=>({t:"apply",name:e,args:n}),promise:e=>({t:"apply",name:"Promise",args:[e]}),union:e=>{let n=[];for(let r of e)r.t==="union"?n.push(...r.of):n.push(r);return {t:"union",of:n}}};function h(e){return e.t==="keyof"?se(e.of)??e:e.t==="index"?ee(e.obj,e.key)??e:e.t==="returnType"?Ie(e.fn)??e:e.t==="parameters"?Me(e.fn)??e:e}var pe={t:"union",of:[]},$e=e=>e.t==="union"&&e.of.length===0;function Ie(e){return e.t==="fn"?e.returns:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1].returns:null}function Oe(e){if(e.t==="undefined")return e;let n=e.t==="union"?e.of:[e];return n.some(r=>r.t==="undefined")?e:{t:"union",of:[...n,{t:"undefined"}]}}function Me(e){let n=e.t==="fn"?e:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1]:null;if(!n)return null;let r=[],t=[];for(let o of n.params)o.variadic?(r.push(o.type.t==="array"?o.type.items:o.type),t.push("rest")):o.optional?(r.push(Oe(o.type)),t.push("optional")):(r.push(o.type),t.push("req"));return s.tuple(r,t)}var fe=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function ce(e,n){return e.t==="literal"&&n.t==="literal"?e.value===n.value:e.t==="literal"&&(n.t==="string"||n.t==="number"||n.t==="boolean")?typeof e.value===n.t:e.t===n.t&&(e.t==="string"||e.t==="number"||e.t==="boolean")}function b(e){let n=[],r=o=>{let i=h(o);i.t==="intersection"?i.of.forEach(r):n.push(i);};e.of.forEach(r);let t=[];for(let o of n){if(o.t==="any")return s.any;if($e(o))return pe;if(o.t!=="unknown"){if(fe(o)){let i=false;for(let a=t.length-1;a>=0;a--){let l=t[a];if(fe(l)){if(ce(l,o)){i=true;break}if(ce(o,l))t.splice(a,1);else return pe}}if(i)continue}else if(t.some(i=>i===o))continue;t.push(o);}}return t.length===0?s.unknown:t.length===1?t[0]:{t:"intersection",of:t}}function se(e){if(e.t==="union"){let r=e.of.map(se);return r.some(t=>t===null)?null:Le(r)}if(e.t!=="object")return null;let n=Object.keys(e.props).map(r=>s.literal(r));return e.index&&n.push(e.index.key==="number"?s.number:s.string),n.length===0?{t:"union",of:[]}:n.length===1?n[0]:{t:"union",of:n}}function Le(e){let n=i=>i.t==="literal"&&typeof i.value=="string"?[i.value]:i.t==="union"?i.of.flatMap(n):[],r=e.filter(i=>i.t!=="string"&&i.t!=="number").map(n);if(r.length===0)return e[0];let t=r[0].filter(i=>r.every(a=>a.includes(i))),o=[...new Set(t)].map(i=>s.literal(i));return o.length===0?{t:"union",of:[]}:o.length===1?o[0]:{t:"union",of:o}}function ee(e,n){if(e=h(e),n=h(n),n.t==="union"){let r=n.of.map(t=>ee(e,t));return r.some(t=>t===null)?null:{t:"union",of:r}}if(e.t==="intersection"){let r=[];for(let t of e.of){let o=ee(h(t),n);if(o===null)return null;o.t!=="undefined"&&r.push(o);}return r.length===0?s.undefined:r.length===1?r[0]:b({of:r})}if(e.t==="object"){if(n.t==="literal"&&(typeof n.value=="string"||typeof n.value=="number")){let r=L(e.props,String(n.value));return r?r.optional?{t:"union",of:[r.type,{t:"undefined"}]}:r.type:typeof n.value=="number"&&e.index?.key==="number"||e.index?.key==="string"?e.index.value:s.undefined}if(e.index?.key==="string"&&n.t==="string"||e.index?.key==="number"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number"))return e.index.value}if(e.t==="tuple"){let r=e.flags?.findIndex(t=>t!=="req")??-1;if(r>=0){if(n.t==="literal"&&typeof n.value=="number")return n.value<r?e.elements[n.value]??s.undefined:e.elements.length?{t:"union",of:e.elements.slice(r)}:s.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:s.undefined}else {if(n.t==="literal"&&typeof n.value=="number")return e.elements[n.value]??s.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:s.undefined}}return e.t==="array"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number")?e.items:null}var Pe=Object.prototype.hasOwnProperty,L=(e,n)=>Pe.call(e,n)?e[n]:void 0;function P(e){if(e.t==="undefined")return {type:{t:"union",of:[]},hadUndefined:true};if(e.t==="union"&&e.of.some(n=>n.t==="undefined")){let n=e.of.filter(r=>r.t!=="undefined");return {type:n.length===1?n[0]:{t:"union",of:n},hadUndefined:true}}return {type:e,hadUndefined:false}}var ne=e=>(+e).toString()===e;var G=(e,n)=>e.flags?.[n]??"req",me=e=>e==="rest"||e==="variadic",We=e=>!!e.flags?.some(me),N=e=>e.flags?.findIndex(me)??-1,Be=e=>{if(!e.flags)return e.elements.length;let n=e.flags.findIndex(r=>r!=="req");return n<0?e.elements.length:n};function K(e,n){let r=[],t=[],o=(i,a)=>{r.push(i),t.push(a);};for(let i=0;i<e.length;i++){let a=e[i],l=n[i]??"req";if(l!=="variadic"){o(a,l);continue}if(a.t==="tuple"){let c=a;for(let u=0;u<c.elements.length;u++)o(c.elements[u],G(c,u));}else a.t==="array"?o(a.items,"rest"):a.t==="any"?o(a,"rest"):o(a,"variadic");}return s.tuple(r,t)}function de(e){let n=N(e);return n<0?{prefix:e.elements,rest:null,suffix:[]}:{prefix:e.elements.slice(0,n),rest:e.elements[n],suffix:e.elements.slice(n+1)}}function ye(e,n,r){let t=de(e),o=de(n);if(o.rest===null){if(t.rest!==null)return false;let i=Be(n);return e.elements.length<i||e.elements.length>n.elements.length?false:e.elements.every((a,l)=>r(a,n.elements[l]))}if(t.rest===null){let i=t.prefix;if(i.length<o.prefix.length+o.suffix.length)return false;for(let a=0;a<o.prefix.length;a++)if(!r(i[a],o.prefix[a]))return false;for(let a=0;a<o.suffix.length;a++)if(!r(i[i.length-o.suffix.length+a],o.suffix[a]))return false;for(let a=o.prefix.length;a<i.length-o.suffix.length;a++)if(!r(i[a],o.rest))return false;return true}if(t.prefix.length>=o.prefix.length&&t.suffix.length>=o.suffix.length){for(let i=0;i<o.prefix.length;i++)if(!r(t.prefix[i],o.prefix[i]))return false;for(let i=o.prefix.length;i<t.prefix.length;i++)if(!r(t.prefix[i],o.rest))return false;if(!r(t.rest,o.rest))return false;for(let i=0;i<o.suffix.length;i++)if(!r(t.suffix[t.suffix.length-o.suffix.length+i],o.suffix[i]))return false;for(let i=0;i<t.suffix.length-o.suffix.length;i++)if(!r(t.suffix[i],o.rest))return false;return true}return false}function H(e,n,r){if(e.t==="array")return e;if(e.t==="tuple"){let t=e,o=t.elements.length,i=t.elements.slice(n,o-r),a=(t.flags??t.elements.map(()=>"req")).slice(n,o-r);return s.tuple(i,a)}return s.tuple([])}function m(e,n,r=new WeakSet){if(e.t!=="keyof"&&e.t!=="index"&&e.t!=="mapped"&&e.t!=="intersection"&&e.t!=="returnType"&&e.t!=="parameters"&&!ze(B(e),n))return e;switch(e.t){case "var":{let t=n[e.name];return t||(e.bound?{t:"var",name:e.name,bound:m(e.bound,n,r)}:e)}case "array":return {t:"array",items:m(e.items,n,r)};case "tuple":{let t=e.elements.map(o=>m(o,n,r));return e.flags?K(t,e.flags):{t:"tuple",elements:t}}case "union":return {t:"union",of:e.of.map(t=>m(t,n,r))};case "object":{if(r.has(e))return e;r.add(e);let t={};for(let i in e.props){let a=e.props[i];t[i]={type:m(a.type,n,r),optional:a.optional};}let o=e.index?{key:e.index.key,value:m(e.index.value,n,r)}:void 0;return r.delete(e),o?{t:"object",props:t,index:o}:{t:"object",props:t}}case "fn":{if(r.has(e))return e;r.add(e);let o={t:"fn",params:e.params.map(i=>({...i,type:m(i.type,n,r)})),returns:m(e.returns,n,r),...e.guard&&{guard:{param:e.guard.param,type:m(e.guard.type,n,r)}}};return r.delete(e),o}case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>m(t,n,r))};case "keyof":return h({t:"keyof",of:m(e.of,n,r)});case "index":return h({t:"index",obj:m(e.obj,n,r),key:m(e.key,n,r)});case "mapped":{let t={};for(let i in n)i!==e.key&&(t[i]=n[i]);let o={t:"mapped",key:e.key,over:m(e.over,n,r),body:m(e.body,t,r),optional:e.optional};return R(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,i=n[o],a=i?h(i):void 0,l=a?.t==="union"?a.of:a?.t==="boolean"?[s.literal(true),s.literal(false)]:null;if(l)return {t:"union",of:l.map(c=>m(e,{...n,[o]:c},r))}}let t=e.infer?.length?Object.fromEntries(Object.entries(n).filter(([o])=>!e.infer.includes(o))):n;return {t:"conditional",check:m(e.check,n,r),extends:m(e.extends,t,r),then:m(e.then,t,r),else:m(e.else,t,r),...e.infer?{infer:e.infer}:{}}}case "intersection":return b({of:e.of.map(t=>m(t,n,r))});case "returnType":return h({t:"returnType",fn:m(e.fn,n,r)});case "parameters":return h({t:"parameters",fn:m(e.fn,n,r)});default:return e}}var Ue=new Set,Se=new WeakMap;function B(e){let n=Se.get(e);if(n)return n;let r=new Set;y(e,r,new WeakSet);let t=r.size===0?Ue:r;return Se.set(e,t),t}function y(e,n,r){switch(e.t){case "var":n.add(e.name),e.bound&&y(e.bound,n,r);return;case "array":y(e.items,n,r);return;case "tuple":for(let t of e.elements)y(t,n,r);return;case "union":for(let t of e.of)y(t,n,r);return;case "object":if(r.has(e))return;r.add(e);for(let t in e.props)y(e.props[t].type,n,r);e.index&&y(e.index.value,n,r);return;case "fn":if(r.has(e))return;r.add(e);for(let t of e.params)y(t.type,n,r);y(e.returns,n,r),e.guard&&y(e.guard.type,n,r);return;case "overload":for(let t of e.signatures){for(let o of t.params)y(o.type,n,r);y(t.returns,n,r);}return;case "apply":for(let t of e.args)y(t,n,r);return;case "keyof":y(e.of,n,r);return;case "index":y(e.obj,n,r),y(e.key,n,r);return;case "mapped":y(e.over,n,r),y(e.body,n,r);return;case "conditional":{if(y(e.check,n,r),!e.infer?.length){y(e.extends,n,r),y(e.then,n,r),y(e.else,n,r);return}let t=new Set;y(e.extends,t,r),y(e.then,t,r),y(e.else,t,r);for(let o of t)e.infer.includes(o)||n.add(o);return}case "intersection":for(let t of e.of)y(t,n,r);return;case "returnType":case "parameters":y(e.fn,n,r);return;default:return}}function ze(e,n){if(e.size===0)return false;for(let r of e)if(r in n)return true;return false}function R(e){let n=h(e.over);if(n.t==="string"||n.t==="number")return {t:"object",props:{},index:{key:n.t,value:m(e.body,{[e.key]:n})}};let r=Fe(n);if(r===null)return null;let t={};for(let o of r)t[o]={type:m(e.body,{[e.key]:s.literal(o)}),optional:e.optional};return {t:"object",props:t}}function Fe(e){if(e.t==="literal"&&typeof e.value=="string")return [e.value];if(e.t==="union"){let n=[];for(let r of e.of)if(r.t==="literal"&&typeof r.value=="string")n.push(r.value);else return null;return n}return null}function j(e,n){if(e.t!=="apply")return false;let r=n[e.name];return r!==void 0&&r.params.length===e.args.length}function w(e,n){if(e.t!=="apply")return e;let r=n[e.name];if(!r||r.params.length!==e.args.length)return e;let t={};return r.params.forEach((o,i)=>t[o]=e.args[i]),m(r.body,t)}function g(e){switch(e.t){case "literal":return `#${typeof e.value}:${String(e.value)}`;case "object":{let n=Object.keys(e.props).sort().map(t=>`${t}${e.props[t].optional?"?":""}:${g(e.props[t].type)}`).join(","),r=e.index?`,[${e.index.key}]:${g(e.index.value)}`:"";return `{${n}${r}}`}case "array":return `[${g(e.items)}]`;case "tuple":return `#tuple(${e.elements.map(g).join(",")})`;case "union":return `(${e.of.map(g).sort().join("|")})`;case "fn":return `(${e.params.map(n=>g(n.type)).join(",")})=>${e.guard?`is${e.guard.param}:${g(e.guard.type)}`:g(e.returns)}`;case "var":return `v:${e.name}`;case "apply":return `${e.name}<${e.args.map(g).join(",")}>`;case "intersection":return `&(${e.of.map(g).sort().join("&")})`;case "returnType":return `RT<${g(e.fn)}>`;default:return e.t}}var he=50;function I(e,n={},r=0){if(r>he)return e;if(e.t==="var")return e.bound?I(e.bound,n,r+1):e;if(j(e,n))return I(w(e,n),n,r+1);if(e.t==="mapped"){let t=R(e);if(t)return I(t,n,r+1)}if(e.t==="intersection")return b(e);if(e.t==="union"){let t=e.of.map(o=>I(o,n,r+1));return t.some((o,i)=>o!==e.of[i])?{t:"union",of:t}:e}return e}function A(e,n,r=0){if(r>he)return e;let t=C(e,n);if(t!==e)return A(t,n,r+1);let o=I(e,n,r);return o===e?e:A(o,n,r+1)}function C(e,n={}){let r=h(e);if(r!==e)return r;switch(e.t){case "keyof":{let t=A(e.of,n);return t===e.of?e:h({...e,of:t})}case "index":{let t=A(e.obj,n),o=A(e.key,n);return t===e.obj&&o===e.key?e:h({...e,obj:t,key:o})}case "returnType":{let t=A(e.fn,n);return t===e.fn?e:h({...e,fn:t})}default:return e}}var Re=1e3,J={maxTypeDepth:1e3,maxUnionMembers:1e3,maxOverloadSignatures:200},V=J;function Ae(e){V={...J,...e};}function Ce(){V=J;}function D(){return V}var U=class extends Error{constructor(n=V.maxTypeDepth){super(`type evaluation exceeded the depth limit (${n}) \u2014 the type is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},Q=class extends Error{constructor(n,r=V.maxUnionMembers){super(`union type is too complex to represent (${n} members exceeds limit ${r})`),this.name="UnionTooComplexError";}};var re=e=>typeof e=="string"?s.string:typeof e=="number"?s.number:s.boolean;function te(e){return e.t==="literal"&&e.fresh?re(e.value):e}function ge(e){if(e.t==="literal")return e.fresh?re(e.value):e;if(e.t==="union"){let n=e.of.map(ge);return n.some((r,t)=>r!==e.of[t])?x(n):e}return e}function De(e){return E(e,new WeakSet)}function _e(e){switch(e.t){case "array":return {t:"array",items:E(e.items,new WeakSet),...e.readonly?{readonly:true}:{}};case "tuple":return {t:"tuple",elements:e.elements.map(n=>E(n,new WeakSet)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return xe(e,new WeakSet);case "fn":case "overload":return E(e,new WeakSet);default:return e}}function E(e,n){if(e.t==="literal")return e.fresh?re(e.value):e;if(n.has(e))return e;switch(e.t){case "array":return n.add(e),{t:"array",items:E(e.items,n),...e.readonly?{readonly:true}:{}};case "tuple":return n.add(e),{t:"tuple",elements:e.elements.map(r=>E(r,n)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return n.add(e),xe(e,n);case "apply":return n.add(e),{t:"apply",name:e.name,args:e.args.map(r=>E(r,n))};case "fn":return n.add(e),{t:"fn",params:e.params.map(r=>({...r,type:E(r.type,n)})),returns:E(e.returns,n),...e.guard?{guard:{param:e.guard.param,type:E(e.guard.type,n)}}:{}};case "overload":return n.add(e),{t:"overload",signatures:e.signatures.map(r=>E(r,n))};default:return e}}function xe(e,n){let r={};for(let o in e.props)r[o]={type:E(e.props[o].type,n),optional:e.props[o].optional};let t=e.index?{key:e.index.key,value:E(e.index.value,n)}:void 0;return t?{t:"object",props:r,index:t}:{t:"object",props:r}}var ve=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function qe(e,n){if(T(n,e))return e;if(T(e,n))return n;let r=ve(e),t=ve(n);return !r||!t||r===t?x([e,n]):null}function v(e,n,r={}){if(e.t==="var"){let t=r[e.name];if(!t)return {...r,[e.name]:n};if(n.t==="any"||n.t==="unknown")return r;let o=qe(t,n);return o?{...r,[e.name]:o}:r}if(n.t==="any"||n.t==="unknown")return r;switch(e.t){case "array":return n.t==="array"?v(e.items,n.items,r):null;case "tuple":{let t=e,o=N(t);if(o<0){if(n.t!=="tuple"||n.elements.length!==t.elements.length)return null;let f=r;for(let F=0;F<t.elements.length;F++)if(f=v(t.elements[F],n.elements[F],f),f===null)return null;return f}let i=o,a=t.elements.length-o-1,l=G(t,o),c=f=>l==="variadic"?f:f.t==="tuple"?f.elements.length?x(f.elements):s.unknown:f.t==="array"?f.items:f,u=r,d=(f,F)=>{u!==null&&(u=v(f,F,u));};if(n.t==="tuple"){if(n.elements.length<i+a)return null;for(let f=0;f<i;f++)d(t.elements[f],n.elements[f]);for(let f=0;f<a;f++)d(t.elements[o+1+f],n.elements[n.elements.length-a+f]);return u!==null&&(u=v(t.elements[o],c(H(n,i,a)),u)),u}if(n.t==="array"){for(let f=0;f<i;f++)d(t.elements[f],n.items);for(let f=0;f<a;f++)d(t.elements[o+1+f],n.items);return u!==null&&(u=v(t.elements[o],c(n),u)),u}return null}case "object":{if(n.t!=="object")return null;let t=r;for(let o in e.props){let i=e.props[o],a=n.props[o];if(!a){if(i.optional)continue;return null}if(t=v(i.type,a.type,t),t===null)return null}return t}case "fn":{if(n.t!=="fn")return null;let t=v(e.returns,n.returns,r);if(t===null)return null;let o=Math.min(e.params.length,n.params.length);for(let i=0;i<o;i++)if(t=v(e.params[i].type,n.params[i].type,t),t===null)return null;return e.guard&&n.guard&&(t=v(e.guard.type,n.guard.type,t)),t}case "apply":{if(n.t!=="apply"||n.name!==e.name||n.args.length!==e.args.length)return null;let t=r;for(let o=0;o<e.args.length;o++)if(t=v(e.args[o],n.args[o],t),t===null)return null;return t}default:return T(n,e)?r:null}}var ke="@rev",oe=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function O(e,n,r){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===n&&e.key.t==="var"&&e.key.name===r)return s.var(ke);switch(e.t){case "array":return {t:"array",items:O(e.items,n,r)};case "tuple":return {t:"tuple",elements:e.elements.map(t=>O(t,n,r)),...e.flags?{flags:e.flags}:{}};case "union":return {t:"union",of:e.of.map(t=>O(t,n,r))};case "fn":return {t:"fn",params:e.params.map(t=>({...t,type:O(t.type,n,r)})),returns:O(e.returns,n,r)};case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>O(t,n,r))};case "returnType":return {t:"returnType",fn:O(e.fn,n,r)};case "object":{let t={};for(let o in e.props)t[o]={type:O(e.props[o].type,n,r),optional:e.props[o].optional};return e.index?{t:"object",props:t,index:{key:e.index.key,value:O(e.index.value,n,r)}}:{t:"object",props:t}}default:return e}}function Ne(e,n,r){if(e.over.t!=="keyof"||e.over.of.t!=="var")return null;let t=e.over.of.name;if(r[t])return null;let o={};for(let i in n.props){let a=O(e.body,t,e.key),l=v(a,n.props[i].type,{})?.[ke];o[i]={type:l?te(l):s.unknown,optional:n.props[i].optional};}return {...r,[t]:{t:"object",props:o}}}function be(e,n,r){let t=r;for(let o=0;o<e.length&&o<n.length;o++){let i=e[o].type,a=n[o];if(oe(i)&&a.t==="object"){let l=Ne(i,a,t);l&&(t=l);}}return t}function Ke(e,n){let r={};for(let o=0;o<e.params.length;o++){let i=e.params[o];if(i.variadic){for(let a=o;a<n.length;a++)if(r=v(i.type,n[a],r),r===null)return null;break}if(o>=n.length){if(i.optional)continue;return null}if(!oe(i.type)&&(r=v(i.type,n[o],r),r===null))return null}let t=be(e.params,n,r);return {returns:m(e.returns,t),bindings:t}}function Qe(e,n){let r={};for(let t=0;t<e.params.length&&t<n.length;t++){let o=e.params[t];if(oe(o.type))continue;let i=v(o.type,n[t],r);i!==null&&(r=i);}return r=be(e.params,n,r),{returns:m(e.returns,r),bindings:r}}function $(e,n,r,t,o){if(e.t==="var"&&r.has(e.name)){let i=o.get(e.name);i||o.set(e.name,i={co:[],contra:[]}),(t?i.contra:i.co).push(n);return}if(!(n.t==="any"||n.t==="unknown"))switch(e.t){case "array":n.t==="array"&&$(e.items,n.items,r,t,o);return;case "tuple":{let i=e,a=N(i);if(a<0){n.t==="tuple"&&n.elements.length===i.elements.length&&i.elements.forEach((d,f)=>$(d,n.elements[f],r,t,o));return}let l=a,c=i.elements.length-a-1,u=d=>$(i.elements[a],d,r,t,o);if(n.t==="tuple"){let d=n;if(d.elements.length<l+c)return;for(let f=0;f<l;f++)$(i.elements[f],d.elements[f],r,t,o);for(let f=0;f<c;f++)$(i.elements[a+1+f],d.elements[d.elements.length-c+f],r,t,o);u(H(d,l,c));}else if(n.t==="array"){for(let d=0;d<l;d++)$(i.elements[d],n.items,r,t,o);for(let d=0;d<c;d++)$(i.elements[a+1+d],n.items,r,t,o);u(n);}return}case "fn":n.t==="fn"&&(e.params.forEach((i,a)=>{let l=n.params[a];l&&$(i.type,l.type,r,!t,o);}),$(e.returns,n.returns,r,t,o));return;case "object":if(n.t==="object")for(let i in e.props)n.props[i]&&$(e.props[i].type,n.props[i].type,r,t,o);return;case "apply":n.t==="apply"&&n.name===e.name&&n.args.length===e.args.length&&e.args.forEach((i,a)=>$(i,n.args[a],r,t,o));return;default:return}}function Ve(e,n){if(e.length===1)return e[0];let t=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(i=>T(o,i,n)));return x(t)}var Ye=e=>e.t==="union"&&e.of.length===0;function Te(e,n){let r={};for(let[t,{co:o,contra:i}]of e){let a=o.length?x(o):void 0,l=i.length?Ve(i,n):void 0,c=a??l;a&&l&&(c=!Ye(a)&&a.t!=="any"&&T(a,l,n)?a:l),c&&(r[t]=c);}return r}function je(e,n={}){let r=new Map;$(e.extends,e.check,new Set(e.infer??[]),false,r);let t={...Te(r,n)};for(let o of e.infer??[])o in t||(t[o]=s.unknown);return t}function Ge(e,n={},r=0){if(!e.infer?.length||B(e.check).size>0)return null;let t=new Map;$(e.extends,e.check,new Set(e.infer),false,t);let o=Te(t,n),i=new WeakSet,a=Z(m(e.extends,o),n,i,r);return T(e.check,a,n)?Z(m(e.then,o),n,i,r):Z(m(e.else,o),n,i,r)}function Z(e,n={},r=new WeakSet,t=0){let o=t,i=D().maxTypeDepth,a=l=>{switch(l.t){case "var":return s.unknown;case "array":return {t:"array",items:a(l.items)};case "tuple":{let c=l.elements.map(a);return l.flags?K(c,l.flags):{t:"tuple",elements:c}}case "union":return {t:"union",of:l.of.map(a)};case "object":{if(r.has(l))return l;r.add(l);let c={};for(let d in l.props){let f=l.props[d];c[d]={type:a(f.type),optional:f.optional};}let u=l.index?{key:l.index.key,value:a(l.index.value)}:void 0;return r.delete(l),u?{t:"object",props:c,index:u}:{t:"object",props:c}}case "fn":{if(r.has(l))return l;r.add(l);let u={t:"fn",params:l.params.map(d=>({...d,type:a(d.type)})),returns:a(l.returns),...l.guard&&{guard:{param:l.guard.param,type:a(l.guard.type)}}};return r.delete(l),u}case "apply":{if(j(l,n)){let c=w(l,n);if(c.t==="conditional"){if(o>=i)throw new U;o++;try{let u=a(c);if(u.t!=="conditional")return u}finally{o--;}}}return {t:"apply",name:l.name,args:l.args.map(a)}}case "conditional":{let c=l.infer?.length?Ge(l,n,o):W(l,n);return c?a(c):{t:"conditional",check:a(l.check),extends:a(l.extends),then:a(l.then),else:a(l.else),...l.infer?{infer:l.infer}:{}}}case "intersection":return b({of:l.of.map(a)});case "returnType":return h({t:"returnType",fn:a(l.fn)});default:return l}};return a(e)}var ae=(e,n)=>({seen:new WeakMap,exp:new Set,schemes:e,depth:0,assumed:0,explain:n});function k(e,n,r){return e.explain?.out.push({path:[...e.explain.path],actual:n,expected:r,kind:"type"}),false}function le(e,n,r=0){if(r>50)return e;if(j(e,n)){let t=w(e,n);if(t.t!=="conditional")return e;let o=W(t,n);return o?le(o,n,r+1):e}if(e.t==="conditional"){let t=W(e,n);return t?le(t,n,r+1):e}return e}function He(e,n,r={}){let t=[];return !p(e,n,ae(r,{path:[],out:t}))&&t.length===0&&t.push({path:[],actual:e,expected:n,kind:"type"}),t}var ie=new WeakMap;function T(e,n,r={}){if(e===n)return true;if(Object.keys(r).length>0)return p(e,n,ae(r));let t=ie.get(e)?.get(n);if(t!==void 0)return t;let o=p(e,n,ae(r)),i=ie.get(e);return i||ie.set(e,i=new WeakMap),i.set(n,o),o}function Je(e,n,r={}){return T(e,n,r)&&T(n,e,r)}function W(e,n){if(e.infer?.length){if(B(e.check).size>0)return null;let r=le(e.check,n),t=je({...e,check:r},n),o=m(e.extends,t);return T(r,o,n)?m(e.then,t):m(e.else,t)}return B(e.check).size>0||B(e.extends).size>0?null:T(e.check,e.extends,n)?e.then:e.else}function _(e,n,r=0){if(r>50)return e;let t=C(e,n.schemes);if(t!==e)return _(t,n,r+1);if(e.t==="conditional"){let o=W(e,n.schemes);if(o)return _(o,n,r+1)}return j(e,n.schemes)?_(w(e,n.schemes),n,r+1):e.t==="union"?x(e.of.map(o=>_(o,n,r+1))):e}function X(e,n,r,t){if(!r.explain)return p(e,n,r);r.explain.path.push(t);try{return p(e,n,r)}finally{r.explain.path.pop();}}function p(e,n,r){if(r.depth>=D().maxTypeDepth)throw new U;r.depth++;try{if(e.t==="any"||n.t==="any"||n.t==="unknown")return !0;if(e.t==="unknown")return k(r,e,n);let t=C(e,r.schemes);if(t!==e)return p(t,n,r);let o=C(n,r.schemes);if(o!==n)return p(e,o,r);if(e.t==="mapped"){let u=R({...e,over:_(e.over,r)});if(u)return p(u,n,r)}if(n.t==="mapped"){let u=R({...n,over:_(n.over,r)});if(u)return p(e,u,r)}if(e.t==="conditional"){let u=W(e,r.schemes);if(u)return p(u,n,r)}if(n.t==="conditional"){let u=W(n,r.schemes);if(u)return p(e,u,r)}if(n.t==="intersection"){let u=b(n);return u.t!=="intersection"?p(e,u,r):u.of.every(d=>p(e,d,r))}if(e.t==="intersection"){let u=b(e);if(u.t!=="intersection")return p(u,n,r);if(u.of.some(d=>p(d,n,r)))return !0;if(n.t==="object"){let d=en(u.of);if(d)return p(d,n,r)}return !1}if(!(e.t==="apply"&&n.t==="apply"&&e.name===n.name&&e.args.length===n.args.length)&&(j(e,r.schemes)||j(n,r.schemes))){let u=`${g(e)}\u2264${g(n)}`;if(r.exp.has(u))return !0;r.exp.add(u);let d=p(w(e,r.schemes),w(n,r.schemes),r);return r.exp.delete(u),d}let a=r.seen.get(e);if(a?.has(n))return r.assumed++,!0;a||(a=new WeakSet,r.seen.set(e,a)),a.add(n);let l=r.assumed,c=Ze(e,n,r);return (!c||r.assumed!==l)&&a.delete(n),c}finally{r.depth--;}}function Ze(e,n,r){if(e.t==="union")return e.of.every(t=>p(t,n,r));if(e.t==="boolean"&&n.t==="union")return p(s.literal(true),n,r)&&p(s.literal(false),n,r);if(n.t==="union")return nn(e,n,r);if(n.t==="overload")return n.signatures.every(t=>p(e,t,r));if(e.t==="overload")return e.signatures.some(t=>p(t,n,r));switch(n.t){case "literal":return e.t==="literal"&&e.value===n.value?true:k(r,e,n);case "string":case "number":case "boolean":case "null":case "undefined":return e.t===n.t||e.t==="literal"&&Xe(e.value)===n.t?true:k(r,e,n);case "void":return e.t==="void"||e.t==="undefined"?true:k(r,e,n);case "array":return e.t==="array"?e.readonly&&!n.readonly?k(r,e,n):p(e.items,n.items,r):e.t==="tuple"?e.readonly&&!n.readonly?k(r,e,n):e.elements.every((t,o)=>X(t,n.items,r,String(o))):k(r,e,n);case "tuple":{if(e.t!=="tuple"||e.readonly&&!n.readonly)return k(r,e,n);if(!e.flags&&!n.flags){if(e.elements.length!==n.elements.length)return k(r,e,n);for(let t=0;t<e.elements.length;t++)if(!X(e.elements[t],n.elements[t],r,String(t)))return false;return true}return ye(e,n,(t,o)=>p(t,o,r))}case "object":if(e.t==="object")return tn(e,n,r);if(Object.keys(n.props).length===0&&!n.index)return e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:k(r,e,n);if((e.t==="array"||e.t==="tuple")&&n.index){let t=e.t==="array"?[e.items]:e.elements;return n.index.key==="number"&&Object.values(n.props).every(o=>o.optional)&&t.every(o=>p(o,n.index.value,r))?true:k(r,e,n)}return k(r,e,n);case "fn":return e.t==="fn"?on(e,n,r):k(r,e,n);case "var":return e.t==="var"&&e.name===n.name;case "typeQuery":return e.t==="typeQuery"&&e.path.length===n.path.length&&e.path.every((t,o)=>t===n.path[o]);case "keyof":return e.t==="keyof"&&p(e.of,n.of,r)&&p(n.of,e.of,r);case "index":return e.t==="index"&&p(e.obj,n.obj,r)&&p(n.obj,e.obj,r)&&p(e.key,n.key,r)&&p(n.key,e.key,r);case "mapped":return e.t==="mapped"&&e.key===n.key&&!!e.optional==!!n.optional&&p(e.over,n.over,r)&&p(n.over,e.over,r)&&p(e.body,n.body,r)&&p(n.body,e.body,r);case "conditional":return e.t==="conditional"&&p(e.check,n.check,r)&&p(n.check,e.check,r)&&p(e.extends,n.extends,r)&&p(n.extends,e.extends,r)&&p(e.then,n.then,r)&&p(e.else,n.else,r);case "apply":return e.t==="apply"&&e.name===n.name&&e.args.length===n.args.length&&e.args.every((t,o)=>p(t,n.args[o],r));case "returnType":return e.t==="returnType"&&p(e.fn,n.fn,r)&&p(n.fn,e.fn,r);case "parameters":return e.t==="parameters"&&p(e.fn,n.fn,r)&&p(n.fn,e.fn,r)}}var Xe=e=>typeof e;function en(e){let n=[];for(let i of e){let a=h(i);if(a.t!=="object")return null;n.push(a);}let r=new Set;for(let i of n)for(let a in i.props)r.add(a);let t={};for(let i of r){let a=[],l=true;for(let c of n){let u=c.props[i];u?(a.push(u.type),u.optional||(l=false)):c.index?.key==="string"&&(a.push(c.index.value),l=false);}t[i]={type:b({of:a}),optional:l};}let o;for(let i of n)i.index&&(o=o?{key:o.key,value:b({of:[o.value,i.index.value]})}:i.index);return o?{t:"object",props:t,index:o}:{t:"object",props:t}}function nn(e,n,r){let t=r.explain;if(!t)return n.of.some(a=>p(e,a,r));r.explain=void 0;let o;try{o=n.of.some(a=>p(e,a,r));}finally{r.explain=t;}if(o)return true;let i=rn(e,n,r);return i?p(e,i,r):k(r,e,n)}function rn(e,n,r){if(e.t!=="object")return null;let t=n.of.map(o=>I(o,r.schemes));for(let o in e.props){let i=e.props[o].type;if(i.t!=="literal")continue;let a=r.explain;r.explain=void 0;let l;try{l=n.of.filter((c,u)=>{let d=t[u];if(d.t!=="object")return !1;let f=L(d.props,o);return !!f&&p(i,f.type,r)});}finally{r.explain=a;}if(l.length===1)return l[0]}return null}function tn(e,n,r){let t=false;for(let o in n.props)if(!(n.props[o].optional||L(e.props,o))){if(!r.explain)return false;r.explain.out.push({path:[...r.explain.path,o],expected:n.props[o].type,kind:"missing"}),t=true;}if(t)return false;for(let o in n.props){let i=n.props[o],a=L(e.props,o);if(!a)continue;if(a.optional&&!i.optional)return false;let l=i.optional?P(a.type).type:a.type;if(!X(l,i.type,r,o))return false}if(n.index){let o=n.index.key==="number";for(let i in e.props)if(!(o&&!ne(i))&&!X(e.props[i].type,n.index.value,r,i))return false;if(e.index&&!p(e.index.value,n.index.value,r))return false}return true}function on(e,n,r){if(n.returns.t!=="void"&&n.returns.t!=="any"&&!p(e.returns,n.returns,r))return false;for(let t=0;t<e.params.length;t++){let o=e.params[t];if(o.variadic)break;let i=n.params[t];if(!i){if(o.optional)continue;return false}if(!p(i.type,o.type,r))return false}return !(n.guard&&(!e.guard||e.guard.param!==n.guard.param||!p(e.guard.type,n.guard.type,r)))}function x(e){let n=[];for(let o of e)o.t==="union"?n.push(...o.of):n.push(o);let r=D().maxUnionMembers;if(n.length>r)throw new Q(n.length,r);if(n.some(o=>o.t==="any"))return s.any;let t=[];for(let o of n)if(!t.some(i=>T(o,i))){for(let i=t.length-1;i>=0;i--)T(t[i],o)&&t.splice(i,1);t.push(o);}if(t.some(o=>o.t==="literal"&&o.value===true)&&t.some(o=>o.t==="literal"&&o.value===false)){let o=t.filter(i=>!(i.t==="boolean"||i.t==="literal"&&typeof i.value=="boolean"));o.push(s.boolean),t.length=0,t.push(...o);}return t.length===1?t[0]:{t:"union",of:t}}function an(e,n){let r=new Set,t=new WeakSet,o=i=>{if(!t.has(i))switch(t.add(i),i.t){case "keyof":r.add("keyof"),o(i.of);break;case "index":r.add("indexed"),o(i.obj),o(i.key);break;case "mapped":r.add("mapped"),o(i.over),o(i.body);break;case "conditional":r.add("conditional"),i.infer?.length&&r.add("infer"),o(i.check),o(i.extends),o(i.then),o(i.else);break;case "returnType":r.add("returnType"),o(i.fn);break;case "parameters":r.add("parameters"),o(i.fn);break;case "tuple":r.add("tuple"),i.flags?.some(a=>a!=="req")&&r.add("variadic"),i.elements.forEach(o);break;case "intersection":r.add("intersection"),i.of.forEach(o);break;case "overload":r.add("overload");for(let a of i.signatures){for(let l of a.params)o(l.type);o(a.returns);}break;case "object":for(let a in i.props)o(i.props[a].type);i.index&&o(i.index.value);break;case "array":o(i.items);break;case "union":i.of.forEach(o);break;case "fn":for(let a of i.params)o(a.type);o(i.returns),i.guard&&o(i.guard.type);break;case "var":i.bound&&o(i.bound);break;case "apply":n&&i.name===n&&r.add("recursion"),i.args.forEach(o);break}};return o(e),r}var ln=s.union([]);function we(e,n){return ue(e,n,new WeakMap)}function un(e){return e.reduce(we,ln)}function ue(e,n,r){if(e.t==="any"||n.t==="any")return s.any;if(e===n)return e;let t=r.get(e)?.get(n);if(t)return t;if(e.t==="object"&&n.t==="object")return pn(e,n,r);if(e.t==="array"&&n.t==="array"){let o={t:"array",items:s.unknown};return Ee(r,e,n,o),o.items=ue(e.items,n.items,r),o}return x([e,n])}function pn(e,n,r){let t={t:"object",props:{}};Ee(r,e,n,t);for(let o in e.props){let i=e.props[o],a=n.props[o];if(a){let l=ue(i.type,a.type,r);t.props[o]=i.optional||a.optional?{type:l,optional:true}:{type:l};}else t.props[o]={type:i.type,optional:true};}for(let o in n.props)o in e.props||(t.props[o]={type:n.props[o].type,optional:true});return t}function Ee(e,n,r,t){let o=e.get(n);o||(o=new WeakMap,e.set(n,o)),o.set(r,t);}var fn=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e);function S(e,n=new WeakSet){switch(e.t){case "any":case "unknown":case "string":case "number":case "boolean":case "null":case "undefined":case "void":return e.t;case "var":return e.name;case "typeQuery":return `typeof ${e.path.join(".")}`;case "literal":return typeof e.value=="string"?JSON.stringify(e.value):String(e.value);case "array":{let r=S(e.items,n),t=cn(e.items)?`(${r})[]`:`${r}[]`;return e.readonly?`readonly ${t}`:t}case "tuple":{let t=`[${e.elements.map((o,i)=>{let a=e.flags?.[i]??"req",l=S(o,n),c=o.t==="union"?`(${l})`:l;return a==="rest"?`...${c}[]`:a==="variadic"?`...${l}`:a==="optional"?`${c}?`:l}).join(", ")}]`;return e.readonly?`readonly ${t}`:t}case "union":{if(n.has(e))return "\u2026";n.add(e);let r=e.of.length===0?"never":e.of.map(t=>S(t,n)).join(" | ");return n.delete(e),r}case "object":{if(n.has(e))return "\u2026";n.add(e);let r=Object.entries(e.props).map(([t,o])=>`${fn(t)?t:JSON.stringify(t)}${o.optional?"?":""}: ${S(o.type,n)}`);return e.index&&r.push(`[k: ${e.index.key}]: ${S(e.index.value,n)}`),n.delete(e),r.length===0?"{}":`{ ${r.join("; ")} }`}case "fn":{if(n.has(e))return "\u2026";n.add(e);let r=e.params.map(o=>{let i=o.variadic?"...":"",a=o.optional&&!o.variadic?"?":"";return `${i}${o.name}${a}: ${S(o.type,n)}`}).join(", "),t=e.guard?`${e.params[e.guard.param]?.name??`arg${e.guard.param}`} is ${S(e.guard.type,n)}`:S(e.returns,n);return n.delete(e),`(${r}) => ${t}`}case "apply":{if(n.has(e))return "\u2026";n.add(e);let r=e.args.length===0?e.name:`${e.name}<${e.args.map(t=>S(t,n)).join(", ")}>`;return n.delete(e),r}case "overload":{if(n.has(e))return "\u2026";n.add(e);let r=e.signatures.map(t=>S(t,n)).join(" & ");return n.delete(e),r}case "keyof":return `keyof ${S(e.of,n)}`;case "index":return `${S(e.obj,n)}[${S(e.key,n)}]`;case "mapped":{if(n.has(e))return "\u2026";n.add(e);let r=e.optional?"?":"",t=`{ [${e.key} in ${S(e.over,n)}]${r}: ${S(e.body,n)} }`;return n.delete(e),t}case "conditional":{if(n.has(e))return "\u2026";n.add(e);let r=`${S(e.check,n)} extends ${S(e.extends,n)} ? ${S(e.then,n)} : ${S(e.else,n)}`;return n.delete(e),r}case "intersection":return e.of.map(r=>r.t==="union"&&r.of.length>0?`(${S(r,n)})`:S(r,n)).join(" & ");case "returnType":return `ReturnType<${S(e.fn,n)}>`;case "parameters":return `Parameters<${S(e.fn,n)}>`}}function cn(e){return e.t==="union"&&e.of.length>0||e.t==="fn"}function sn(e){if(e.length===0)return "value";let n=e[e.length-1];if(/^\d+$/.test(n)){let r=e.slice(0,-1);return r.length?`property '${r.join(".")}' at position ${n}`:`position ${n}`}return `property '${e.join(".")}'`}function dn(e){let n=e.filter(r=>r.kind==="missing");if(n.length&&n.length===e.length){let r=n.map(t=>`'${t.path.join(".")}'`).join(", ");return n.length===1?`property ${r} is missing`:`properties ${r} are missing`}return e.map(r=>`${sn(r.path)}: expected '${S(r.expected)}', got '${S(r.actual)}'`).join("; ")}function z(e,n=new WeakSet){switch(e.t){case "string":case "number":case "boolean":case "null":case "literal":return true;case "array":return n.has(e)?true:(n.add(e),z(P(e.items).type,n));case "tuple":return n.has(e)?true:(n.add(e),e.elements.every(r=>z(P(r).type,n)));case "object":{if(n.has(e))return true;n.add(e);let r=Object.values(e.props).every(o=>z(P(o.type).type,n)),t=!e.index||z(P(e.index.value).type,n);return r&&t}case "union":return n.has(e)?true:(n.add(e),e.of.every(r=>z(r,n)));case "intersection":return n.has(e)?true:(n.add(e),e.of.every(r=>z(r,n)));case "undefined":case "void":case "fn":case "overload":case "keyof":case "index":case "mapped":case "conditional":case "returnType":case "parameters":case "var":case "typeQuery":case "apply":case "any":case "unknown":return false}}function mn(e,n,r={}){let t=e;for(let o of n){let i=q(t,o,r);if(i===null)return null;t=i;}return {type:t,completions:Y(t,r)}}var yn=e=>e==="[]"||/^\d+$/.test(e);function q(e,n,r,t=new Set){if(e.t==="var")return e.bound?q(I(e,r),n,r,t):null;if(j(e,r)){let i=g(e);if(t.has(i))return null;t.add(i);let a=q(w(e,r),n,r,t);return t.delete(i),a}let o=h(e);if(o!==e)return q(o,n,r,t);switch(e.t){case "any":return e;case "object":{let i=L(e.props,n);return i?i.optional?x([i.type,{t:"undefined"}]):i.type:e.index?.key==="string"?e.index.value:null}case "array":return yn(n)?e.items:null;case "tuple":{let i=e.flags?.findIndex(c=>c!=="req")??-1,a=Number(n);if(!(Number.isInteger(a)&&a>=0))return null;if(i<0)return a<e.elements.length?e.elements[a]:null;if(a<i)return e.elements[a];let l=e.elements.slice(i);return l.length?x(l):null}case "union":{let i=e.of.map(a=>q(a,n,r,t)).filter(a=>a!==null);return i.length?x(i):null}case "intersection":{let i=e.of.map(a=>q(a,n,r,t)).filter(a=>a!==null);return i.length?b({of:i}):null}default:return null}}function Y(e,n,r=new WeakSet,t=new Set){if(e.t==="var")return e.bound?Y(I(e,n),n,r,t):[];if(j(e,n)){let i=g(e);if(t.has(i))return [];t.add(i);let a=Y(w(e,n),n,r,t);return t.delete(i),a}let o=h(e);if(o!==e)return Y(o,n,r,t);switch(e.t){case "object":return Object.entries(e.props).map(([i,a])=>({key:i,type:a.type,optional:!!a.optional}));case "array":return [{key:"[]",type:e.items,optional:false}];case "tuple":return e.elements.map((i,a)=>({key:String(a),type:i,optional:false}));case "union":case "intersection":{if(r.has(e))return [];r.add(e);let i=[],a=new Set;for(let l of e.of)for(let c of Y(l,n,r,t))a.has(c.key)||(a.add(c.key),i.push(c));return r.delete(e),i}default:return []}}exports.DEFAULT_TYPE_LIMITS=J;exports.TYPE_EVAL_DEPTH_LIMIT=Re;exports.TypeEvalLimitError=U;exports.UnionTooComplexError=Q;exports.apparentType=I;exports.configureTypeLimits=Ae;exports.discover=mn;exports.equals=Je;exports.expand1=w;exports.flagAt=G;exports.format=S;exports.formatTypeDiff=dn;exports.groundVars=Z;exports.instantiate=Ke;exports.instantiateLoose=Qe;exports.isNumericLiteralName=ne;exports.isScheme=j;exports.isSerializable=z;exports.isVariadicTuple=We;exports.join=we;exports.joinAll=un;exports.normalizeTuple=K;exports.normalizeUnion=x;exports.ownProp=L;exports.resetTypeLimits=Ce;exports.resolveConditional=W;exports.resolveOp=C;exports.resolveTypeOp=h;exports.restIndex=N;exports.s=s;exports.sliceTuple=H;exports.substitute=m;exports.subtype=T;exports.typeDiff=He;exports.typeFeatures=an;exports.typeLimits=D;exports.unify=v;exports.widen=te;exports.widenInferred=_e;exports.widenLiteral=ge;exports.widenType=De;exports.withoutUndefined=P;
package/dist/index.d.cts CHANGED
@@ -221,6 +221,9 @@ type IndexSchema = Extract<Schema, {
221
221
  type MappedSchema = Extract<Schema, {
222
222
  t: "mapped";
223
223
  }>;
224
+ type ConditionalSchema = Extract<Schema, {
225
+ t: "conditional";
226
+ }>;
224
227
  type VarSchema = Extract<Schema, {
225
228
  t: "var";
226
229
  }>;
@@ -318,6 +321,13 @@ declare function withoutUndefined(t: Schema): {
318
321
  type: Schema;
319
322
  hadUndefined: boolean;
320
323
  };
324
+ /**
325
+ * Nome de propriedade NUMÉRICO canônico — o `isNumericLiteralName` do tsc: o texto é
326
+ * exatamente `ToString(ToNumber(texto))`. `"1"`, `"-1"`, `"0.5"`, `"1e+21"`, `"NaN"`,
327
+ * `"Infinity"` são; `"01"`, `"1.0"`, `"-0"`, `"1e3"`, `"x"` não. É o que uma index
328
+ * signature `number` alcança: só essas chaves; as demais ficam livres.
329
+ */
330
+ declare const isNumericLiteralName: (name: string) => boolean;
321
331
 
322
332
  /** A flag do elemento `i` de uma tupla (ausente = `req`). */
323
333
  declare const flagAt: (t: TupleSchema, i: number) => ElementFlag;
@@ -370,6 +380,14 @@ declare function typeDiff(a: Schema, b: Schema, schemes?: Schemes): Incompatibil
370
380
  declare function subtype(a: Schema, b: Schema, schemes?: Schemes): boolean;
371
381
  /** Igualdade estrutural: cada um é atribuível ao outro. */
372
382
  declare function equals(a: Schema, b: Schema, schemes?: Schemes): boolean;
383
+ /**
384
+ * Resolve um conditional `check extends ext ? then : else` escolhendo o ramo —
385
+ * **só quando o discriminante é ground** (sem `var` livre em `check`/`extends`),
386
+ * via `subtype(check, ext)`. Com var no discriminante → `null` (fica lazy até o
387
+ * `substitute` ligar as vars). Os ramos `then`/`else` podem ter vars (resolvem
388
+ * depois). É o análogo do `resolveTypeOp`/`resolveMapped` para conditionals.
389
+ */
390
+ declare function resolveConditional(c: ConditionalSchema, schemes: Schemes): Schema | null;
373
391
  /**
374
392
  * Normaliza uma união: achata, absorve `any`/`unknown`, deduplica e remove
375
393
  * membros subsumidos por outro (`string | "x"` → `string`). Colapsa união de um
@@ -562,4 +580,4 @@ interface Discovery {
562
580
  */
563
581
  declare function discover(schema: Schema, path: readonly string[], schemes?: Schemes): Discovery | null;
564
582
 
565
- export { type AnySchema, type ApplySchema, type ArraySchema, type Bindings, type Completion, DEFAULT_TYPE_LIMITS, type Discovery, type ElementFlag, type FnSchema, type GuardSig, type Incompatibility, type IncompatibilityKind, type IndexSchema, type Instantiation, type KeyofSchema, type LiteralSchema, type MappedSchema, type ObjectSchema, type OverloadSchema, type Param, type Prop, type ScalarSchema, type Schema, type Schemes, TYPE_EVAL_DEPTH_LIMIT, type TupleSchema, TypeEvalLimitError, type TypeEvalLimits, type TypeScheme, type UnionSchema, UnionTooComplexError, type UnknownSchema, type VarSchema, apparentType, configureTypeLimits, discover, equals, expand1, flagAt, format, formatTypeDiff, groundVars, instantiate, instantiateLoose, isScheme, isSerializable, isVariadicTuple, join, joinAll, normalizeTuple, normalizeUnion, ownProp, resetTypeLimits, resolveOp, resolveTypeOp, restIndex, s, sliceTuple, substitute, subtype, typeDiff, typeFeatures, typeLimits, unify, widen, widenInferred, widenLiteral, widenType, withoutUndefined };
583
+ export { type AnySchema, type ApplySchema, type ArraySchema, type Bindings, type Completion, DEFAULT_TYPE_LIMITS, type Discovery, type ElementFlag, type FnSchema, type GuardSig, type Incompatibility, type IncompatibilityKind, type IndexSchema, type Instantiation, type KeyofSchema, type LiteralSchema, type MappedSchema, type ObjectSchema, type OverloadSchema, type Param, type Prop, type ScalarSchema, type Schema, type Schemes, TYPE_EVAL_DEPTH_LIMIT, type TupleSchema, TypeEvalLimitError, type TypeEvalLimits, type TypeScheme, type UnionSchema, UnionTooComplexError, type UnknownSchema, type VarSchema, apparentType, configureTypeLimits, discover, equals, expand1, flagAt, format, formatTypeDiff, groundVars, instantiate, instantiateLoose, isNumericLiteralName, isScheme, isSerializable, isVariadicTuple, join, joinAll, normalizeTuple, normalizeUnion, ownProp, resetTypeLimits, resolveConditional, resolveOp, resolveTypeOp, restIndex, s, sliceTuple, substitute, subtype, typeDiff, typeFeatures, typeLimits, unify, widen, widenInferred, widenLiteral, widenType, withoutUndefined };
package/dist/index.d.ts CHANGED
@@ -221,6 +221,9 @@ type IndexSchema = Extract<Schema, {
221
221
  type MappedSchema = Extract<Schema, {
222
222
  t: "mapped";
223
223
  }>;
224
+ type ConditionalSchema = Extract<Schema, {
225
+ t: "conditional";
226
+ }>;
224
227
  type VarSchema = Extract<Schema, {
225
228
  t: "var";
226
229
  }>;
@@ -318,6 +321,13 @@ declare function withoutUndefined(t: Schema): {
318
321
  type: Schema;
319
322
  hadUndefined: boolean;
320
323
  };
324
+ /**
325
+ * Nome de propriedade NUMÉRICO canônico — o `isNumericLiteralName` do tsc: o texto é
326
+ * exatamente `ToString(ToNumber(texto))`. `"1"`, `"-1"`, `"0.5"`, `"1e+21"`, `"NaN"`,
327
+ * `"Infinity"` são; `"01"`, `"1.0"`, `"-0"`, `"1e3"`, `"x"` não. É o que uma index
328
+ * signature `number` alcança: só essas chaves; as demais ficam livres.
329
+ */
330
+ declare const isNumericLiteralName: (name: string) => boolean;
321
331
 
322
332
  /** A flag do elemento `i` de uma tupla (ausente = `req`). */
323
333
  declare const flagAt: (t: TupleSchema, i: number) => ElementFlag;
@@ -370,6 +380,14 @@ declare function typeDiff(a: Schema, b: Schema, schemes?: Schemes): Incompatibil
370
380
  declare function subtype(a: Schema, b: Schema, schemes?: Schemes): boolean;
371
381
  /** Igualdade estrutural: cada um é atribuível ao outro. */
372
382
  declare function equals(a: Schema, b: Schema, schemes?: Schemes): boolean;
383
+ /**
384
+ * Resolve um conditional `check extends ext ? then : else` escolhendo o ramo —
385
+ * **só quando o discriminante é ground** (sem `var` livre em `check`/`extends`),
386
+ * via `subtype(check, ext)`. Com var no discriminante → `null` (fica lazy até o
387
+ * `substitute` ligar as vars). Os ramos `then`/`else` podem ter vars (resolvem
388
+ * depois). É o análogo do `resolveTypeOp`/`resolveMapped` para conditionals.
389
+ */
390
+ declare function resolveConditional(c: ConditionalSchema, schemes: Schemes): Schema | null;
373
391
  /**
374
392
  * Normaliza uma união: achata, absorve `any`/`unknown`, deduplica e remove
375
393
  * membros subsumidos por outro (`string | "x"` → `string`). Colapsa união de um
@@ -562,4 +580,4 @@ interface Discovery {
562
580
  */
563
581
  declare function discover(schema: Schema, path: readonly string[], schemes?: Schemes): Discovery | null;
564
582
 
565
- export { type AnySchema, type ApplySchema, type ArraySchema, type Bindings, type Completion, DEFAULT_TYPE_LIMITS, type Discovery, type ElementFlag, type FnSchema, type GuardSig, type Incompatibility, type IncompatibilityKind, type IndexSchema, type Instantiation, type KeyofSchema, type LiteralSchema, type MappedSchema, type ObjectSchema, type OverloadSchema, type Param, type Prop, type ScalarSchema, type Schema, type Schemes, TYPE_EVAL_DEPTH_LIMIT, type TupleSchema, TypeEvalLimitError, type TypeEvalLimits, type TypeScheme, type UnionSchema, UnionTooComplexError, type UnknownSchema, type VarSchema, apparentType, configureTypeLimits, discover, equals, expand1, flagAt, format, formatTypeDiff, groundVars, instantiate, instantiateLoose, isScheme, isSerializable, isVariadicTuple, join, joinAll, normalizeTuple, normalizeUnion, ownProp, resetTypeLimits, resolveOp, resolveTypeOp, restIndex, s, sliceTuple, substitute, subtype, typeDiff, typeFeatures, typeLimits, unify, widen, widenInferred, widenLiteral, widenType, withoutUndefined };
583
+ export { type AnySchema, type ApplySchema, type ArraySchema, type Bindings, type Completion, DEFAULT_TYPE_LIMITS, type Discovery, type ElementFlag, type FnSchema, type GuardSig, type Incompatibility, type IncompatibilityKind, type IndexSchema, type Instantiation, type KeyofSchema, type LiteralSchema, type MappedSchema, type ObjectSchema, type OverloadSchema, type Param, type Prop, type ScalarSchema, type Schema, type Schemes, TYPE_EVAL_DEPTH_LIMIT, type TupleSchema, TypeEvalLimitError, type TypeEvalLimits, type TypeScheme, type UnionSchema, UnionTooComplexError, type UnknownSchema, type VarSchema, apparentType, configureTypeLimits, discover, equals, expand1, flagAt, format, formatTypeDiff, groundVars, instantiate, instantiateLoose, isNumericLiteralName, isScheme, isSerializable, isVariadicTuple, join, joinAll, normalizeTuple, normalizeUnion, ownProp, resetTypeLimits, resolveConditional, resolveOp, resolveTypeOp, restIndex, s, sliceTuple, substitute, subtype, typeDiff, typeFeatures, typeLimits, unify, widen, widenInferred, widenLiteral, widenType, withoutUndefined };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var M=e=>Object.freeze(e),s={any:M({t:"any"}),unknown:M({t:"unknown"}),string:M({t:"string"}),number:M({t:"number"}),boolean:M({t:"boolean"}),null:M({t:"null"}),undefined:M({t:"undefined"}),void:M({t:"void"}),literal:e=>({t:"literal",value:e}),object:(e,n)=>({t:"object",props:e,...n?{index:n}:{}}),record:(e,n="string")=>({t:"object",props:{},index:{key:n,value:e}}),array:(e,n)=>({t:"array",items:e,...n?{readonly:true}:{}}),tuple:(e,n,r)=>({t:"tuple",elements:e,...n&&n.some(t=>t!=="req")?{flags:n}:{},...r?{readonly:true}:{}}),fn:(e,n,r)=>({t:"fn",params:e,returns:n,...r?.length?{typeParams:r}:{}}),guard:(e,n,r=0)=>({t:"fn",params:e,returns:{t:"boolean"},guard:{param:r,type:n}}),overload:e=>({t:"overload",signatures:e}),keyof:e=>({t:"keyof",of:e}),index:(e,n)=>({t:"index",obj:e,key:n}),mapped:(e,n,r,t=false)=>({t:"mapped",key:e,over:n,body:r,optional:t}),conditional:(e,n,r,t,o)=>({t:"conditional",check:e,extends:n,then:r,else:t,...o&&o.length?{infer:o}:{}}),intersection:e=>({t:"intersection",of:e}),and:(e,n)=>({t:"intersection",of:[e,n]}),returnType:e=>({t:"returnType",fn:e}),parameters:e=>({t:"parameters",fn:e}),var:(e,n,r)=>({t:"var",name:e,bound:n,isConst:r}),typeQuery:e=>({t:"typeQuery",path:e}),apply:(e,n=[])=>({t:"apply",name:e,args:n}),promise:e=>({t:"apply",name:"Promise",args:[e]}),union:e=>{let n=[];for(let r of e)r.t==="union"?n.push(...r.of):n.push(r);return {t:"union",of:n}}};function h(e){return e.t==="keyof"?fe(e.of)??e:e.t==="index"?ee(e.obj,e.key)??e:e.t==="returnType"?je(e.fn)??e:e.t==="parameters"?Ee(e.fn)??e:e}var le={t:"union",of:[]},Te=e=>e.t==="union"&&e.of.length===0;function je(e){return e.t==="fn"?e.returns:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1].returns:null}function we(e){if(e.t==="undefined")return e;let n=e.t==="union"?e.of:[e];return n.some(r=>r.t==="undefined")?e:{t:"union",of:[...n,{t:"undefined"}]}}function Ee(e){let n=e.t==="fn"?e:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1]:null;if(!n)return null;let r=[],t=[];for(let o of n.params)o.variadic?(r.push(o.type.t==="array"?o.type.items:o.type),t.push("rest")):o.optional?(r.push(we(o.type)),t.push("optional")):(r.push(o.type),t.push("req"));return s.tuple(r,t)}var ue=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function pe(e,n){return e.t==="literal"&&n.t==="literal"?e.value===n.value:e.t==="literal"&&(n.t==="string"||n.t==="number"||n.t==="boolean")?typeof e.value===n.t:e.t===n.t&&(e.t==="string"||e.t==="number"||e.t==="boolean")}function b(e){let n=[],r=o=>{let i=h(o);i.t==="intersection"?i.of.forEach(r):n.push(i);};e.of.forEach(r);let t=[];for(let o of n){if(o.t==="any")return s.any;if(Te(o))return le;if(o.t!=="unknown"){if(ue(o)){let i=false;for(let a=t.length-1;a>=0;a--){let l=t[a];if(ue(l)){if(pe(l,o)){i=true;break}if(pe(o,l))t.splice(a,1);else return le}}if(i)continue}else if(t.some(i=>i===o))continue;t.push(o);}}return t.length===0?s.unknown:t.length===1?t[0]:{t:"intersection",of:t}}function fe(e){if(e.t==="union"){let r=e.of.map(fe);return r.some(t=>t===null)?null:$e(r)}if(e.t!=="object")return null;let n=Object.keys(e.props).map(r=>s.literal(r));return e.index&&n.push(e.index.key==="number"?s.number:s.string),n.length===0?{t:"union",of:[]}:n.length===1?n[0]:{t:"union",of:n}}function $e(e){let n=i=>i.t==="literal"&&typeof i.value=="string"?[i.value]:i.t==="union"?i.of.flatMap(n):[],r=e.filter(i=>i.t!=="string"&&i.t!=="number").map(n);if(r.length===0)return e[0];let t=r[0].filter(i=>r.every(a=>a.includes(i))),o=[...new Set(t)].map(i=>s.literal(i));return o.length===0?{t:"union",of:[]}:o.length===1?o[0]:{t:"union",of:o}}function ee(e,n){if(e=h(e),n=h(n),n.t==="union"){let r=n.of.map(t=>ee(e,t));return r.some(t=>t===null)?null:{t:"union",of:r}}if(e.t==="intersection"){let r=[];for(let t of e.of){let o=ee(h(t),n);if(o===null)return null;o.t!=="undefined"&&r.push(o);}return r.length===0?s.undefined:r.length===1?r[0]:b({of:r})}if(e.t==="object"){if(n.t==="literal"&&(typeof n.value=="string"||typeof n.value=="number")){let r=P(e.props,String(n.value));return r?r.optional?{t:"union",of:[r.type,{t:"undefined"}]}:r.type:typeof n.value=="number"&&e.index?.key==="number"||e.index?.key==="string"?e.index.value:s.undefined}if(e.index?.key==="string"&&n.t==="string"||e.index?.key==="number"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number"))return e.index.value}if(e.t==="tuple"){let r=e.flags?.findIndex(t=>t!=="req")??-1;if(r>=0){if(n.t==="literal"&&typeof n.value=="number")return n.value<r?e.elements[n.value]??s.undefined:e.elements.length?{t:"union",of:e.elements.slice(r)}:s.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:s.undefined}else {if(n.t==="literal"&&typeof n.value=="number")return e.elements[n.value]??s.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:s.undefined}}return e.t==="array"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number")?e.items:null}var Ie=Object.prototype.hasOwnProperty,P=(e,n)=>Ie.call(e,n)?e[n]:void 0;function L(e){if(e.t==="undefined")return {type:{t:"union",of:[]},hadUndefined:true};if(e.t==="union"&&e.of.some(n=>n.t==="undefined")){let n=e.of.filter(r=>r.t!=="undefined");return {type:n.length===1?n[0]:{t:"union",of:n},hadUndefined:true}}return {type:e,hadUndefined:false}}var G=(e,n)=>e.flags?.[n]??"req",se=e=>e==="rest"||e==="variadic",Oe=e=>!!e.flags?.some(se),q=e=>e.flags?.findIndex(se)??-1,Me=e=>{if(!e.flags)return e.elements.length;let n=e.flags.findIndex(r=>r!=="req");return n<0?e.elements.length:n};function K(e,n){let r=[],t=[],o=(i,a)=>{r.push(i),t.push(a);};for(let i=0;i<e.length;i++){let a=e[i],l=n[i]??"req";if(l!=="variadic"){o(a,l);continue}if(a.t==="tuple"){let c=a;for(let u=0;u<c.elements.length;u++)o(c.elements[u],G(c,u));}else a.t==="array"?o(a.items,"rest"):a.t==="any"?o(a,"rest"):o(a,"variadic");}return s.tuple(r,t)}function ce(e){let n=q(e);return n<0?{prefix:e.elements,rest:null,suffix:[]}:{prefix:e.elements.slice(0,n),rest:e.elements[n],suffix:e.elements.slice(n+1)}}function de(e,n,r){let t=ce(e),o=ce(n);if(o.rest===null){if(t.rest!==null)return false;let i=Me(n);return e.elements.length<i||e.elements.length>n.elements.length?false:e.elements.every((a,l)=>r(a,n.elements[l]))}if(t.rest===null){let i=t.prefix;if(i.length<o.prefix.length+o.suffix.length)return false;for(let a=0;a<o.prefix.length;a++)if(!r(i[a],o.prefix[a]))return false;for(let a=0;a<o.suffix.length;a++)if(!r(i[i.length-o.suffix.length+a],o.suffix[a]))return false;for(let a=o.prefix.length;a<i.length-o.suffix.length;a++)if(!r(i[a],o.rest))return false;return true}if(t.prefix.length>=o.prefix.length&&t.suffix.length>=o.suffix.length){for(let i=0;i<o.prefix.length;i++)if(!r(t.prefix[i],o.prefix[i]))return false;for(let i=o.prefix.length;i<t.prefix.length;i++)if(!r(t.prefix[i],o.rest))return false;if(!r(t.rest,o.rest))return false;for(let i=0;i<o.suffix.length;i++)if(!r(t.suffix[t.suffix.length-o.suffix.length+i],o.suffix[i]))return false;for(let i=0;i<t.suffix.length-o.suffix.length;i++)if(!r(t.suffix[i],o.rest))return false;return true}return false}function H(e,n,r){if(e.t==="array")return e;if(e.t==="tuple"){let t=e,o=t.elements.length,i=t.elements.slice(n,o-r),a=(t.flags??t.elements.map(()=>"req")).slice(n,o-r);return s.tuple(i,a)}return s.tuple([])}function m(e,n,r=new WeakSet){if(e.t!=="keyof"&&e.t!=="index"&&e.t!=="mapped"&&e.t!=="intersection"&&e.t!=="returnType"&&e.t!=="parameters"&&!Le(F(e),n))return e;switch(e.t){case "var":{let t=n[e.name];return t||(e.bound?{t:"var",name:e.name,bound:m(e.bound,n,r)}:e)}case "array":return {t:"array",items:m(e.items,n,r)};case "tuple":{let t=e.elements.map(o=>m(o,n,r));return e.flags?K(t,e.flags):{t:"tuple",elements:t}}case "union":return {t:"union",of:e.of.map(t=>m(t,n,r))};case "object":{if(r.has(e))return e;r.add(e);let t={};for(let i in e.props){let a=e.props[i];t[i]={type:m(a.type,n,r),optional:a.optional};}let o=e.index?{key:e.index.key,value:m(e.index.value,n,r)}:void 0;return r.delete(e),o?{t:"object",props:t,index:o}:{t:"object",props:t}}case "fn":{if(r.has(e))return e;r.add(e);let o={t:"fn",params:e.params.map(i=>({...i,type:m(i.type,n,r)})),returns:m(e.returns,n,r),...e.guard&&{guard:{param:e.guard.param,type:m(e.guard.type,n,r)}}};return r.delete(e),o}case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>m(t,n,r))};case "keyof":return h({t:"keyof",of:m(e.of,n,r)});case "index":return h({t:"index",obj:m(e.obj,n,r),key:m(e.key,n,r)});case "mapped":{let t={};for(let i in n)i!==e.key&&(t[i]=n[i]);let o={t:"mapped",key:e.key,over:m(e.over,n,r),body:m(e.body,t,r),optional:e.optional};return z(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,i=n[o],a=i?h(i):void 0,l=a?.t==="union"?a.of:a?.t==="boolean"?[s.literal(true),s.literal(false)]:null;if(l)return {t:"union",of:l.map(c=>m(e,{...n,[o]:c},r))}}let t=e.infer?.length?Object.fromEntries(Object.entries(n).filter(([o])=>!e.infer.includes(o))):n;return {t:"conditional",check:m(e.check,n,r),extends:m(e.extends,t,r),then:m(e.then,t,r),else:m(e.else,t,r),...e.infer?{infer:e.infer}:{}}}case "intersection":return b({of:e.of.map(t=>m(t,n,r))});case "returnType":return h({t:"returnType",fn:m(e.fn,n,r)});case "parameters":return h({t:"parameters",fn:m(e.fn,n,r)});default:return e}}var Pe=new Set,me=new WeakMap;function F(e){let n=me.get(e);if(n)return n;let r=new Set;y(e,r,new WeakSet);let t=r.size===0?Pe:r;return me.set(e,t),t}function y(e,n,r){switch(e.t){case "var":n.add(e.name),e.bound&&y(e.bound,n,r);return;case "array":y(e.items,n,r);return;case "tuple":for(let t of e.elements)y(t,n,r);return;case "union":for(let t of e.of)y(t,n,r);return;case "object":if(r.has(e))return;r.add(e);for(let t in e.props)y(e.props[t].type,n,r);e.index&&y(e.index.value,n,r);return;case "fn":if(r.has(e))return;r.add(e);for(let t of e.params)y(t.type,n,r);y(e.returns,n,r),e.guard&&y(e.guard.type,n,r);return;case "overload":for(let t of e.signatures){for(let o of t.params)y(o.type,n,r);y(t.returns,n,r);}return;case "apply":for(let t of e.args)y(t,n,r);return;case "keyof":y(e.of,n,r);return;case "index":y(e.obj,n,r),y(e.key,n,r);return;case "mapped":y(e.over,n,r),y(e.body,n,r);return;case "conditional":{if(y(e.check,n,r),!e.infer?.length){y(e.extends,n,r),y(e.then,n,r),y(e.else,n,r);return}let t=new Set;y(e.extends,t,r),y(e.then,t,r),y(e.else,t,r);for(let o of t)e.infer.includes(o)||n.add(o);return}case "intersection":for(let t of e.of)y(t,n,r);return;case "returnType":case "parameters":y(e.fn,n,r);return;default:return}}function Le(e,n){if(e.size===0)return false;for(let r of e)if(r in n)return true;return false}function z(e){let n=h(e.over);if(n.t==="string"||n.t==="number")return {t:"object",props:{},index:{key:n.t,value:m(e.body,{[e.key]:n})}};let r=We(n);if(r===null)return null;let t={};for(let o of r)t[o]={type:m(e.body,{[e.key]:s.literal(o)}),optional:e.optional};return {t:"object",props:t}}function We(e){if(e.t==="literal"&&typeof e.value=="string")return [e.value];if(e.t==="union"){let n=[];for(let r of e.of)if(r.t==="literal"&&typeof r.value=="string")n.push(r.value);else return null;return n}return null}function w(e,n){if(e.t!=="apply")return false;let r=n[e.name];return r!==void 0&&r.params.length===e.args.length}function E(e,n){if(e.t!=="apply")return e;let r=n[e.name];if(!r||r.params.length!==e.args.length)return e;let t={};return r.params.forEach((o,i)=>t[o]=e.args[i]),m(r.body,t)}function g(e){switch(e.t){case "literal":return `#${typeof e.value}:${String(e.value)}`;case "object":{let n=Object.keys(e.props).sort().map(t=>`${t}${e.props[t].optional?"?":""}:${g(e.props[t].type)}`).join(","),r=e.index?`,[${e.index.key}]:${g(e.index.value)}`:"";return `{${n}${r}}`}case "array":return `[${g(e.items)}]`;case "tuple":return `#tuple(${e.elements.map(g).join(",")})`;case "union":return `(${e.of.map(g).sort().join("|")})`;case "fn":return `(${e.params.map(n=>g(n.type)).join(",")})=>${e.guard?`is${e.guard.param}:${g(e.guard.type)}`:g(e.returns)}`;case "var":return `v:${e.name}`;case "apply":return `${e.name}<${e.args.map(g).join(",")}>`;case "intersection":return `&(${e.of.map(g).sort().join("&")})`;case "returnType":return `RT<${g(e.fn)}>`;default:return e.t}}var ye=50;function I(e,n={},r=0){if(r>ye)return e;if(e.t==="var")return e.bound?I(e.bound,n,r+1):e;if(w(e,n))return I(E(e,n),n,r+1);if(e.t==="mapped"){let t=z(e);if(t)return I(t,n,r+1)}if(e.t==="intersection")return b(e);if(e.t==="union"){let t=e.of.map(o=>I(o,n,r+1));return t.some((o,i)=>o!==e.of[i])?{t:"union",of:t}:e}return e}function R(e,n,r=0){if(r>ye)return e;let t=A(e,n);if(t!==e)return R(t,n,r+1);let o=I(e,n,r);return o===e?e:R(o,n,r+1)}function A(e,n={}){let r=h(e);if(r!==e)return r;switch(e.t){case "keyof":{let t=R(e.of,n);return t===e.of?e:h({...e,of:t})}case "index":{let t=R(e.obj,n),o=R(e.key,n);return t===e.obj&&o===e.key?e:h({...e,obj:t,key:o})}case "returnType":{let t=R(e.fn,n);return t===e.fn?e:h({...e,fn:t})}default:return e}}var Ue=1e3,J={maxTypeDepth:1e3,maxUnionMembers:1e3,maxOverloadSignatures:200},Q=J;function Be(e){Q={...J,...e};}function Fe(){Q=J;}function C(){return Q}var W=class extends Error{constructor(n=Q.maxTypeDepth){super(`type evaluation exceeded the depth limit (${n}) \u2014 the type is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},N=class extends Error{constructor(n,r=Q.maxUnionMembers){super(`union type is too complex to represent (${n} members exceeds limit ${r})`),this.name="UnionTooComplexError";}};var re=(e,n)=>({seen:new WeakMap,exp:new Set,schemes:e,depth:0,assumed:0,explain:n});function x(e,n,r){return e.explain?.out.push({path:[...e.explain.path],actual:n,expected:r,kind:"type"}),false}function ze(e,n,r={}){let t=[];return !p(e,n,re(r,{path:[],out:t}))&&t.length===0&&t.push({path:[],actual:e,expected:n,kind:"type"}),t}var ne=new WeakMap;function T(e,n,r={}){if(e===n)return true;if(Object.keys(r).length>0)return p(e,n,re(r));let t=ne.get(e)?.get(n);if(t!==void 0)return t;let o=p(e,n,re(r)),i=ne.get(e);return i||ne.set(e,i=new WeakMap),i.set(n,o),o}function Re(e,n,r={}){return T(e,n,r)&&T(n,e,r)}function V(e,n){return e.infer?.length||F(e.check).size>0||F(e.extends).size>0?null:T(e.check,e.extends,n)?e.then:e.else}function D(e,n,r=0){if(r>50)return e;let t=A(e,n.schemes);if(t!==e)return D(t,n,r+1);if(e.t==="conditional"){let o=V(e,n.schemes);if(o)return D(o,n,r+1)}return w(e,n.schemes)?D(E(e,n.schemes),n,r+1):e.t==="union"?v(e.of.map(o=>D(o,n,r+1))):e}function Z(e,n,r,t){if(!r.explain)return p(e,n,r);r.explain.path.push(t);try{return p(e,n,r)}finally{r.explain.path.pop();}}function p(e,n,r){if(r.depth>=C().maxTypeDepth)throw new W;r.depth++;try{if(e.t==="any"||n.t==="any"||n.t==="unknown")return !0;if(e.t==="unknown")return x(r,e,n);let t=A(e,r.schemes);if(t!==e)return p(t,n,r);let o=A(n,r.schemes);if(o!==n)return p(e,o,r);if(e.t==="mapped"){let u=z({...e,over:D(e.over,r)});if(u)return p(u,n,r)}if(n.t==="mapped"){let u=z({...n,over:D(n.over,r)});if(u)return p(e,u,r)}if(e.t==="conditional"){let u=V(e,r.schemes);if(u)return p(u,n,r)}if(n.t==="conditional"){let u=V(n,r.schemes);if(u)return p(e,u,r)}if(n.t==="intersection"){let u=b(n);return u.t!=="intersection"?p(e,u,r):u.of.every(d=>p(e,d,r))}if(e.t==="intersection"){let u=b(e);if(u.t!=="intersection")return p(u,n,r);if(u.of.some(d=>p(d,n,r)))return !0;if(n.t==="object"){let d=De(u.of);if(d)return p(d,n,r)}return !1}if(!(e.t==="apply"&&n.t==="apply"&&e.name===n.name&&e.args.length===n.args.length)&&(w(e,r.schemes)||w(n,r.schemes))){let u=`${g(e)}\u2264${g(n)}`;if(r.exp.has(u))return !0;r.exp.add(u);let d=p(E(e,r.schemes),E(n,r.schemes),r);return r.exp.delete(u),d}let a=r.seen.get(e);if(a?.has(n))return r.assumed++,!0;a||(a=new WeakSet,r.seen.set(e,a)),a.add(n);let l=r.assumed,c=Ae(e,n,r);return (!c||r.assumed!==l)&&a.delete(n),c}finally{r.depth--;}}function Ae(e,n,r){if(e.t==="union")return e.of.every(t=>p(t,n,r));if(e.t==="boolean"&&n.t==="union")return p(s.literal(true),n,r)&&p(s.literal(false),n,r);if(n.t==="union")return _e(e,n,r);if(n.t==="overload")return n.signatures.every(t=>p(e,t,r));if(e.t==="overload")return e.signatures.some(t=>p(t,n,r));switch(n.t){case "literal":return e.t==="literal"&&e.value===n.value?true:x(r,e,n);case "string":case "number":case "boolean":case "null":case "undefined":return e.t===n.t||e.t==="literal"&&Ce(e.value)===n.t?true:x(r,e,n);case "void":return e.t==="void"||e.t==="undefined"?true:x(r,e,n);case "array":return e.t==="array"?e.readonly&&!n.readonly?x(r,e,n):p(e.items,n.items,r):e.t==="tuple"?e.readonly&&!n.readonly?x(r,e,n):e.elements.every((t,o)=>Z(t,n.items,r,String(o))):x(r,e,n);case "tuple":{if(e.t!=="tuple"||e.readonly&&!n.readonly)return x(r,e,n);if(!e.flags&&!n.flags){if(e.elements.length!==n.elements.length)return x(r,e,n);for(let t=0;t<e.elements.length;t++)if(!Z(e.elements[t],n.elements[t],r,String(t)))return false;return true}return de(e,n,(t,o)=>p(t,o,r))}case "object":return e.t==="object"?Ke(e,n,r):Object.keys(n.props).length===0&&!n.index?e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:x(r,e,n):e.t==="array"&&n.index&&Object.values(n.props).every(t=>t.optional)&&p(e.items,n.index.value,r)?true:x(r,e,n);case "fn":return e.t==="fn"?Ne(e,n,r):x(r,e,n);case "var":return e.t==="var"&&e.name===n.name;case "typeQuery":return e.t==="typeQuery"&&e.path.length===n.path.length&&e.path.every((t,o)=>t===n.path[o]);case "keyof":return e.t==="keyof"&&p(e.of,n.of,r)&&p(n.of,e.of,r);case "index":return e.t==="index"&&p(e.obj,n.obj,r)&&p(n.obj,e.obj,r)&&p(e.key,n.key,r)&&p(n.key,e.key,r);case "mapped":return e.t==="mapped"&&e.key===n.key&&!!e.optional==!!n.optional&&p(e.over,n.over,r)&&p(n.over,e.over,r)&&p(e.body,n.body,r)&&p(n.body,e.body,r);case "conditional":return e.t==="conditional"&&p(e.check,n.check,r)&&p(n.check,e.check,r)&&p(e.extends,n.extends,r)&&p(n.extends,e.extends,r)&&p(e.then,n.then,r)&&p(e.else,n.else,r);case "apply":return e.t==="apply"&&e.name===n.name&&e.args.length===n.args.length&&e.args.every((t,o)=>p(t,n.args[o],r));case "returnType":return e.t==="returnType"&&p(e.fn,n.fn,r)&&p(n.fn,e.fn,r);case "parameters":return e.t==="parameters"&&p(e.fn,n.fn,r)&&p(n.fn,e.fn,r)}}var Ce=e=>typeof e;function De(e){let n=[];for(let i of e){let a=h(i);if(a.t!=="object")return null;n.push(a);}let r=new Set;for(let i of n)for(let a in i.props)r.add(a);let t={};for(let i of r){let a=[],l=true;for(let c of n){let u=c.props[i];u?(a.push(u.type),u.optional||(l=false)):c.index?.key==="string"&&(a.push(c.index.value),l=false);}t[i]={type:b({of:a}),optional:l};}let o;for(let i of n)i.index&&(o=o?{key:o.key,value:b({of:[o.value,i.index.value]})}:i.index);return o?{t:"object",props:t,index:o}:{t:"object",props:t}}function _e(e,n,r){let t=r.explain;if(!t)return n.of.some(a=>p(e,a,r));r.explain=void 0;let o;try{o=n.of.some(a=>p(e,a,r));}finally{r.explain=t;}if(o)return true;let i=qe(e,n,r);return i?p(e,i,r):x(r,e,n)}function qe(e,n,r){if(e.t!=="object")return null;let t=n.of.map(o=>I(o,r.schemes));for(let o in e.props){let i=e.props[o].type;if(i.t!=="literal")continue;let a=r.explain;r.explain=void 0;let l;try{l=n.of.filter((c,u)=>{let d=t[u];if(d.t!=="object")return !1;let f=P(d.props,o);return !!f&&p(i,f.type,r)});}finally{r.explain=a;}if(l.length===1)return l[0]}return null}function Ke(e,n,r){let t=false;for(let o in n.props)if(!(n.props[o].optional||P(e.props,o))){if(!r.explain)return false;r.explain.out.push({path:[...r.explain.path,o],expected:n.props[o].type,kind:"missing"}),t=true;}if(t)return false;for(let o in n.props){let i=n.props[o],a=P(e.props,o);if(!a)continue;if(a.optional&&!i.optional)return false;let l=i.optional?L(a.type).type:a.type;if(!Z(l,i.type,r,o))return false}if(n.index){for(let o in e.props)if(!Z(e.props[o].type,n.index.value,r,o))return false;if(e.index&&!p(e.index.value,n.index.value,r))return false}return true}function Ne(e,n,r){if(n.returns.t!=="void"&&n.returns.t!=="any"&&!p(e.returns,n.returns,r))return false;for(let t=0;t<e.params.length;t++){let o=e.params[t];if(o.variadic)break;let i=n.params[t];if(!i){if(o.optional)continue;return false}if(!p(i.type,o.type,r))return false}return !(n.guard&&(!e.guard||e.guard.param!==n.guard.param||!p(e.guard.type,n.guard.type,r)))}function v(e){let n=[];for(let o of e)o.t==="union"?n.push(...o.of):n.push(o);let r=C().maxUnionMembers;if(n.length>r)throw new N(n.length,r);if(n.some(o=>o.t==="any"))return s.any;let t=[];for(let o of n)if(!t.some(i=>T(o,i))){for(let i=t.length-1;i>=0;i--)T(t[i],o)&&t.splice(i,1);t.push(o);}if(t.some(o=>o.t==="literal"&&o.value===true)&&t.some(o=>o.t==="literal"&&o.value===false)){let o=t.filter(i=>!(i.t==="boolean"||i.t==="literal"&&typeof i.value=="boolean"));o.push(s.boolean),t.length=0,t.push(...o);}return t.length===1?t[0]:{t:"union",of:t}}function Qe(e,n){let r=new Set,t=new WeakSet,o=i=>{if(!t.has(i))switch(t.add(i),i.t){case "keyof":r.add("keyof"),o(i.of);break;case "index":r.add("indexed"),o(i.obj),o(i.key);break;case "mapped":r.add("mapped"),o(i.over),o(i.body);break;case "conditional":r.add("conditional"),i.infer?.length&&r.add("infer"),o(i.check),o(i.extends),o(i.then),o(i.else);break;case "returnType":r.add("returnType"),o(i.fn);break;case "parameters":r.add("parameters"),o(i.fn);break;case "tuple":r.add("tuple"),i.flags?.some(a=>a!=="req")&&r.add("variadic"),i.elements.forEach(o);break;case "intersection":r.add("intersection"),i.of.forEach(o);break;case "overload":r.add("overload");for(let a of i.signatures){for(let l of a.params)o(l.type);o(a.returns);}break;case "object":for(let a in i.props)o(i.props[a].type);i.index&&o(i.index.value);break;case "array":o(i.items);break;case "union":i.of.forEach(o);break;case "fn":for(let a of i.params)o(a.type);o(i.returns),i.guard&&o(i.guard.type);break;case "var":i.bound&&o(i.bound);break;case "apply":n&&i.name===n&&r.add("recursion"),i.args.forEach(o);break}};return o(e),r}var te=e=>typeof e=="string"?s.string:typeof e=="number"?s.number:s.boolean;function oe(e){return e.t==="literal"&&e.fresh?te(e.value):e}function Se(e){if(e.t==="literal")return e.fresh?te(e.value):e;if(e.t==="union"){let n=e.of.map(Se);return n.some((r,t)=>r!==e.of[t])?v(n):e}return e}function Ve(e){return j(e,new WeakSet)}function Ye(e){switch(e.t){case "array":return {t:"array",items:j(e.items,new WeakSet),...e.readonly?{readonly:true}:{}};case "tuple":return {t:"tuple",elements:e.elements.map(n=>j(n,new WeakSet)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return he(e,new WeakSet);case "fn":case "overload":return j(e,new WeakSet);default:return e}}function j(e,n){if(e.t==="literal")return e.fresh?te(e.value):e;if(n.has(e))return e;switch(e.t){case "array":return n.add(e),{t:"array",items:j(e.items,n),...e.readonly?{readonly:true}:{}};case "tuple":return n.add(e),{t:"tuple",elements:e.elements.map(r=>j(r,n)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return n.add(e),he(e,n);case "apply":return n.add(e),{t:"apply",name:e.name,args:e.args.map(r=>j(r,n))};case "fn":return n.add(e),{t:"fn",params:e.params.map(r=>({...r,type:j(r.type,n)})),returns:j(e.returns,n),...e.guard?{guard:{param:e.guard.param,type:j(e.guard.type,n)}}:{}};case "overload":return n.add(e),{t:"overload",signatures:e.signatures.map(r=>j(r,n))};default:return e}}function he(e,n){let r={};for(let o in e.props)r[o]={type:j(e.props[o].type,n),optional:e.props[o].optional};let t=e.index?{key:e.index.key,value:j(e.index.value,n)}:void 0;return t?{t:"object",props:r,index:t}:{t:"object",props:r}}var ge=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function Ge(e,n){if(T(n,e))return e;if(T(e,n))return n;let r=ge(e),t=ge(n);return !r||!t||r===t?v([e,n]):null}function k(e,n,r={}){if(e.t==="var"){let t=r[e.name];if(!t)return {...r,[e.name]:n};if(n.t==="any"||n.t==="unknown")return r;let o=Ge(t,n);return o?{...r,[e.name]:o}:r}if(n.t==="any"||n.t==="unknown")return r;switch(e.t){case "array":return n.t==="array"?k(e.items,n.items,r):null;case "tuple":{let t=e,o=q(t);if(o<0){if(n.t!=="tuple"||n.elements.length!==t.elements.length)return null;let f=r;for(let B=0;B<t.elements.length;B++)if(f=k(t.elements[B],n.elements[B],f),f===null)return null;return f}let i=o,a=t.elements.length-o-1,l=G(t,o),c=f=>l==="variadic"?f:f.t==="tuple"?f.elements.length?v(f.elements):s.unknown:f.t==="array"?f.items:f,u=r,d=(f,B)=>{u!==null&&(u=k(f,B,u));};if(n.t==="tuple"){if(n.elements.length<i+a)return null;for(let f=0;f<i;f++)d(t.elements[f],n.elements[f]);for(let f=0;f<a;f++)d(t.elements[o+1+f],n.elements[n.elements.length-a+f]);return u!==null&&(u=k(t.elements[o],c(H(n,i,a)),u)),u}if(n.t==="array"){for(let f=0;f<i;f++)d(t.elements[f],n.items);for(let f=0;f<a;f++)d(t.elements[o+1+f],n.items);return u!==null&&(u=k(t.elements[o],c(n),u)),u}return null}case "object":{if(n.t!=="object")return null;let t=r;for(let o in e.props){let i=e.props[o],a=n.props[o];if(!a){if(i.optional)continue;return null}if(t=k(i.type,a.type,t),t===null)return null}return t}case "fn":{if(n.t!=="fn")return null;let t=k(e.returns,n.returns,r);if(t===null)return null;let o=Math.min(e.params.length,n.params.length);for(let i=0;i<o;i++)if(t=k(e.params[i].type,n.params[i].type,t),t===null)return null;return e.guard&&n.guard&&(t=k(e.guard.type,n.guard.type,t)),t}case "apply":{if(n.t!=="apply"||n.name!==e.name||n.args.length!==e.args.length)return null;let t=r;for(let o=0;o<e.args.length;o++)if(t=k(e.args[o],n.args[o],t),t===null)return null;return t}default:return T(n,e)?r:null}}var xe="@rev",ie=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function O(e,n,r){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===n&&e.key.t==="var"&&e.key.name===r)return s.var(xe);switch(e.t){case "array":return {t:"array",items:O(e.items,n,r)};case "tuple":return {t:"tuple",elements:e.elements.map(t=>O(t,n,r)),...e.flags?{flags:e.flags}:{}};case "union":return {t:"union",of:e.of.map(t=>O(t,n,r))};case "fn":return {t:"fn",params:e.params.map(t=>({...t,type:O(t.type,n,r)})),returns:O(e.returns,n,r)};case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>O(t,n,r))};case "returnType":return {t:"returnType",fn:O(e.fn,n,r)};case "object":{let t={};for(let o in e.props)t[o]={type:O(e.props[o].type,n,r),optional:e.props[o].optional};return e.index?{t:"object",props:t,index:{key:e.index.key,value:O(e.index.value,n,r)}}:{t:"object",props:t}}default:return e}}function He(e,n,r){if(e.over.t!=="keyof"||e.over.of.t!=="var")return null;let t=e.over.of.name;if(r[t])return null;let o={};for(let i in n.props){let a=O(e.body,t,e.key),l=k(a,n.props[i].type,{})?.[xe];o[i]={type:l?oe(l):s.unknown,optional:n.props[i].optional};}return {...r,[t]:{t:"object",props:o}}}function ve(e,n,r){let t=r;for(let o=0;o<e.length&&o<n.length;o++){let i=e[o].type,a=n[o];if(ie(i)&&a.t==="object"){let l=He(i,a,t);l&&(t=l);}}return t}function Je(e,n){let r={};for(let o=0;o<e.params.length;o++){let i=e.params[o];if(i.variadic){for(let a=o;a<n.length;a++)if(r=k(i.type,n[a],r),r===null)return null;break}if(o>=n.length){if(i.optional)continue;return null}if(!ie(i.type)&&(r=k(i.type,n[o],r),r===null))return null}let t=ve(e.params,n,r);return {returns:m(e.returns,t),bindings:t}}function Ze(e,n){let r={};for(let t=0;t<e.params.length&&t<n.length;t++){let o=e.params[t];if(ie(o.type))continue;let i=k(o.type,n[t],r);i!==null&&(r=i);}return r=ve(e.params,n,r),{returns:m(e.returns,r),bindings:r}}function $(e,n,r,t,o){if(e.t==="var"&&r.has(e.name)){let i=o.get(e.name);i||o.set(e.name,i={co:[],contra:[]}),(t?i.contra:i.co).push(n);return}if(!(n.t==="any"||n.t==="unknown"))switch(e.t){case "array":n.t==="array"&&$(e.items,n.items,r,t,o);return;case "tuple":{let i=e,a=q(i);if(a<0){n.t==="tuple"&&n.elements.length===i.elements.length&&i.elements.forEach((d,f)=>$(d,n.elements[f],r,t,o));return}let l=a,c=i.elements.length-a-1,u=d=>$(i.elements[a],d,r,t,o);if(n.t==="tuple"){let d=n;if(d.elements.length<l+c)return;for(let f=0;f<l;f++)$(i.elements[f],d.elements[f],r,t,o);for(let f=0;f<c;f++)$(i.elements[a+1+f],d.elements[d.elements.length-c+f],r,t,o);u(H(d,l,c));}else if(n.t==="array"){for(let d=0;d<l;d++)$(i.elements[d],n.items,r,t,o);for(let d=0;d<c;d++)$(i.elements[a+1+d],n.items,r,t,o);u(n);}return}case "fn":n.t==="fn"&&(e.params.forEach((i,a)=>{let l=n.params[a];l&&$(i.type,l.type,r,!t,o);}),$(e.returns,n.returns,r,t,o));return;case "object":if(n.t==="object")for(let i in e.props)n.props[i]&&$(e.props[i].type,n.props[i].type,r,t,o);return;case "apply":n.t==="apply"&&n.name===e.name&&n.args.length===e.args.length&&e.args.forEach((i,a)=>$(i,n.args[a],r,t,o));return;default:return}}function Xe(e,n){if(e.length===1)return e[0];let t=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(i=>T(o,i,n)));return v(t)}var en=e=>e.t==="union"&&e.of.length===0;function nn(e,n){let r={};for(let[t,{co:o,contra:i}]of e){let a=o.length?v(o):void 0,l=i.length?Xe(i,n):void 0,c=a??l;a&&l&&(c=!en(a)&&a.t!=="any"&&T(a,l,n)?a:l),c&&(r[t]=c);}return r}function rn(e,n={},r=0){if(!e.infer?.length||F(e.check).size>0)return null;let t=new Map;$(e.extends,e.check,new Set(e.infer),false,t);let o=nn(t,n),i=new WeakSet,a=X(m(e.extends,o),n,i,r);return T(e.check,a,n)?X(m(e.then,o),n,i,r):X(m(e.else,o),n,i,r)}function X(e,n={},r=new WeakSet,t=0){let o=t,i=C().maxTypeDepth,a=l=>{switch(l.t){case "var":return s.unknown;case "array":return {t:"array",items:a(l.items)};case "tuple":{let c=l.elements.map(a);return l.flags?K(c,l.flags):{t:"tuple",elements:c}}case "union":return {t:"union",of:l.of.map(a)};case "object":{if(r.has(l))return l;r.add(l);let c={};for(let d in l.props){let f=l.props[d];c[d]={type:a(f.type),optional:f.optional};}let u=l.index?{key:l.index.key,value:a(l.index.value)}:void 0;return r.delete(l),u?{t:"object",props:c,index:u}:{t:"object",props:c}}case "fn":{if(r.has(l))return l;r.add(l);let u={t:"fn",params:l.params.map(d=>({...d,type:a(d.type)})),returns:a(l.returns),...l.guard&&{guard:{param:l.guard.param,type:a(l.guard.type)}}};return r.delete(l),u}case "apply":{if(w(l,n)){let c=E(l,n);if(c.t==="conditional"){if(o>=i)throw new W;o++;try{let u=a(c);if(u.t!=="conditional")return u}finally{o--;}}}return {t:"apply",name:l.name,args:l.args.map(a)}}case "conditional":{let c=l.infer?.length?rn(l,n,o):V(l,n);return c?a(c):{t:"conditional",check:a(l.check),extends:a(l.extends),then:a(l.then),else:a(l.else),...l.infer?{infer:l.infer}:{}}}case "intersection":return b({of:l.of.map(a)});case "returnType":return h({t:"returnType",fn:a(l.fn)});default:return l}};return a(e)}var tn=s.union([]);function ke(e,n){return ae(e,n,new WeakMap)}function on(e){return e.reduce(ke,tn)}function ae(e,n,r){if(e.t==="any"||n.t==="any")return s.any;if(e===n)return e;let t=r.get(e)?.get(n);if(t)return t;if(e.t==="object"&&n.t==="object")return an(e,n,r);if(e.t==="array"&&n.t==="array"){let o={t:"array",items:s.unknown};return be(r,e,n,o),o.items=ae(e.items,n.items,r),o}return v([e,n])}function an(e,n,r){let t={t:"object",props:{}};be(r,e,n,t);for(let o in e.props){let i=e.props[o],a=n.props[o];if(a){let l=ae(i.type,a.type,r);t.props[o]=i.optional||a.optional?{type:l,optional:true}:{type:l};}else t.props[o]={type:i.type,optional:true};}for(let o in n.props)o in e.props||(t.props[o]={type:n.props[o].type,optional:true});return t}function be(e,n,r,t){let o=e.get(n);o||(o=new WeakMap,e.set(n,o)),o.set(r,t);}var ln=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e);function S(e,n=new WeakSet){switch(e.t){case "any":case "unknown":case "string":case "number":case "boolean":case "null":case "undefined":case "void":return e.t;case "var":return e.name;case "typeQuery":return `typeof ${e.path.join(".")}`;case "literal":return typeof e.value=="string"?JSON.stringify(e.value):String(e.value);case "array":{let r=S(e.items,n),t=un(e.items)?`(${r})[]`:`${r}[]`;return e.readonly?`readonly ${t}`:t}case "tuple":{let t=`[${e.elements.map((o,i)=>{let a=e.flags?.[i]??"req",l=S(o,n),c=o.t==="union"?`(${l})`:l;return a==="rest"?`...${c}[]`:a==="variadic"?`...${l}`:a==="optional"?`${c}?`:l}).join(", ")}]`;return e.readonly?`readonly ${t}`:t}case "union":{if(n.has(e))return "\u2026";n.add(e);let r=e.of.length===0?"never":e.of.map(t=>S(t,n)).join(" | ");return n.delete(e),r}case "object":{if(n.has(e))return "\u2026";n.add(e);let r=Object.entries(e.props).map(([t,o])=>`${ln(t)?t:JSON.stringify(t)}${o.optional?"?":""}: ${S(o.type,n)}`);return e.index&&r.push(`[k: ${e.index.key}]: ${S(e.index.value,n)}`),n.delete(e),r.length===0?"{}":`{ ${r.join("; ")} }`}case "fn":{if(n.has(e))return "\u2026";n.add(e);let r=e.params.map(o=>{let i=o.variadic?"...":"",a=o.optional&&!o.variadic?"?":"";return `${i}${o.name}${a}: ${S(o.type,n)}`}).join(", "),t=e.guard?`${e.params[e.guard.param]?.name??`arg${e.guard.param}`} is ${S(e.guard.type,n)}`:S(e.returns,n);return n.delete(e),`(${r}) => ${t}`}case "apply":{if(n.has(e))return "\u2026";n.add(e);let r=e.args.length===0?e.name:`${e.name}<${e.args.map(t=>S(t,n)).join(", ")}>`;return n.delete(e),r}case "overload":{if(n.has(e))return "\u2026";n.add(e);let r=e.signatures.map(t=>S(t,n)).join(" & ");return n.delete(e),r}case "keyof":return `keyof ${S(e.of,n)}`;case "index":return `${S(e.obj,n)}[${S(e.key,n)}]`;case "mapped":{if(n.has(e))return "\u2026";n.add(e);let r=e.optional?"?":"",t=`{ [${e.key} in ${S(e.over,n)}]${r}: ${S(e.body,n)} }`;return n.delete(e),t}case "conditional":{if(n.has(e))return "\u2026";n.add(e);let r=`${S(e.check,n)} extends ${S(e.extends,n)} ? ${S(e.then,n)} : ${S(e.else,n)}`;return n.delete(e),r}case "intersection":return e.of.map(r=>r.t==="union"&&r.of.length>0?`(${S(r,n)})`:S(r,n)).join(" & ");case "returnType":return `ReturnType<${S(e.fn,n)}>`;case "parameters":return `Parameters<${S(e.fn,n)}>`}}function un(e){return e.t==="union"&&e.of.length>0||e.t==="fn"}function pn(e){if(e.length===0)return "value";let n=e[e.length-1];if(/^\d+$/.test(n)){let r=e.slice(0,-1);return r.length?`property '${r.join(".")}' at position ${n}`:`position ${n}`}return `property '${e.join(".")}'`}function fn(e){let n=e.filter(r=>r.kind==="missing");if(n.length&&n.length===e.length){let r=n.map(t=>`'${t.path.join(".")}'`).join(", ");return n.length===1?`property ${r} is missing`:`properties ${r} are missing`}return e.map(r=>`${pn(r.path)}: expected '${S(r.expected)}', got '${S(r.actual)}'`).join("; ")}function U(e,n=new WeakSet){switch(e.t){case "string":case "number":case "boolean":case "null":case "literal":return true;case "array":return n.has(e)?true:(n.add(e),U(L(e.items).type,n));case "tuple":return n.has(e)?true:(n.add(e),e.elements.every(r=>U(L(r).type,n)));case "object":{if(n.has(e))return true;n.add(e);let r=Object.values(e.props).every(o=>U(L(o.type).type,n)),t=!e.index||U(L(e.index.value).type,n);return r&&t}case "union":return n.has(e)?true:(n.add(e),e.of.every(r=>U(r,n)));case "intersection":return n.has(e)?true:(n.add(e),e.of.every(r=>U(r,n)));case "undefined":case "void":case "fn":case "overload":case "keyof":case "index":case "mapped":case "conditional":case "returnType":case "parameters":case "var":case "typeQuery":case "apply":case "any":case "unknown":return false}}function cn(e,n,r={}){let t=e;for(let o of n){let i=_(t,o,r);if(i===null)return null;t=i;}return {type:t,completions:Y(t,r)}}var sn=e=>e==="[]"||/^\d+$/.test(e);function _(e,n,r,t=new Set){if(e.t==="var")return e.bound?_(I(e,r),n,r,t):null;if(w(e,r)){let i=g(e);if(t.has(i))return null;t.add(i);let a=_(E(e,r),n,r,t);return t.delete(i),a}let o=h(e);if(o!==e)return _(o,n,r,t);switch(e.t){case "any":return e;case "object":{let i=P(e.props,n);return i?i.optional?v([i.type,{t:"undefined"}]):i.type:e.index?.key==="string"?e.index.value:null}case "array":return sn(n)?e.items:null;case "tuple":{let i=e.flags?.findIndex(c=>c!=="req")??-1,a=Number(n);if(!(Number.isInteger(a)&&a>=0))return null;if(i<0)return a<e.elements.length?e.elements[a]:null;if(a<i)return e.elements[a];let l=e.elements.slice(i);return l.length?v(l):null}case "union":{let i=e.of.map(a=>_(a,n,r,t)).filter(a=>a!==null);return i.length?v(i):null}case "intersection":{let i=e.of.map(a=>_(a,n,r,t)).filter(a=>a!==null);return i.length?b({of:i}):null}default:return null}}function Y(e,n,r=new WeakSet,t=new Set){if(e.t==="var")return e.bound?Y(I(e,n),n,r,t):[];if(w(e,n)){let i=g(e);if(t.has(i))return [];t.add(i);let a=Y(E(e,n),n,r,t);return t.delete(i),a}let o=h(e);if(o!==e)return Y(o,n,r,t);switch(e.t){case "object":return Object.entries(e.props).map(([i,a])=>({key:i,type:a.type,optional:!!a.optional}));case "array":return [{key:"[]",type:e.items,optional:false}];case "tuple":return e.elements.map((i,a)=>({key:String(a),type:i,optional:false}));case "union":case "intersection":{if(r.has(e))return [];r.add(e);let i=[],a=new Set;for(let l of e.of)for(let c of Y(l,n,r,t))a.has(c.key)||(a.add(c.key),i.push(c));return r.delete(e),i}default:return []}}export{J as DEFAULT_TYPE_LIMITS,Ue as TYPE_EVAL_DEPTH_LIMIT,W as TypeEvalLimitError,N as UnionTooComplexError,I as apparentType,Be as configureTypeLimits,cn as discover,Re as equals,E as expand1,G as flagAt,S as format,fn as formatTypeDiff,X as groundVars,Je as instantiate,Ze as instantiateLoose,w as isScheme,U as isSerializable,Oe as isVariadicTuple,ke as join,on as joinAll,K as normalizeTuple,v as normalizeUnion,P as ownProp,Fe as resetTypeLimits,A as resolveOp,h as resolveTypeOp,q as restIndex,s,H as sliceTuple,m as substitute,T as subtype,ze as typeDiff,Qe as typeFeatures,C as typeLimits,k as unify,oe as widen,Ye as widenInferred,Se as widenLiteral,Ve as widenType,L as withoutUndefined};
1
+ var M=e=>Object.freeze(e),s={any:M({t:"any"}),unknown:M({t:"unknown"}),string:M({t:"string"}),number:M({t:"number"}),boolean:M({t:"boolean"}),null:M({t:"null"}),undefined:M({t:"undefined"}),void:M({t:"void"}),literal:e=>({t:"literal",value:e}),object:(e,n)=>({t:"object",props:e,...n?{index:n}:{}}),record:(e,n="string")=>({t:"object",props:{},index:{key:n,value:e}}),array:(e,n)=>({t:"array",items:e,...n?{readonly:true}:{}}),tuple:(e,n,r)=>({t:"tuple",elements:e,...n&&n.some(t=>t!=="req")?{flags:n}:{},...r?{readonly:true}:{}}),fn:(e,n,r)=>({t:"fn",params:e,returns:n,...r?.length?{typeParams:r}:{}}),guard:(e,n,r=0)=>({t:"fn",params:e,returns:{t:"boolean"},guard:{param:r,type:n}}),overload:e=>({t:"overload",signatures:e}),keyof:e=>({t:"keyof",of:e}),index:(e,n)=>({t:"index",obj:e,key:n}),mapped:(e,n,r,t=false)=>({t:"mapped",key:e,over:n,body:r,optional:t}),conditional:(e,n,r,t,o)=>({t:"conditional",check:e,extends:n,then:r,else:t,...o&&o.length?{infer:o}:{}}),intersection:e=>({t:"intersection",of:e}),and:(e,n)=>({t:"intersection",of:[e,n]}),returnType:e=>({t:"returnType",fn:e}),parameters:e=>({t:"parameters",fn:e}),var:(e,n,r)=>({t:"var",name:e,bound:n,isConst:r}),typeQuery:e=>({t:"typeQuery",path:e}),apply:(e,n=[])=>({t:"apply",name:e,args:n}),promise:e=>({t:"apply",name:"Promise",args:[e]}),union:e=>{let n=[];for(let r of e)r.t==="union"?n.push(...r.of):n.push(r);return {t:"union",of:n}}};function h(e){return e.t==="keyof"?se(e.of)??e:e.t==="index"?ee(e.obj,e.key)??e:e.t==="returnType"?Ie(e.fn)??e:e.t==="parameters"?Me(e.fn)??e:e}var pe={t:"union",of:[]},$e=e=>e.t==="union"&&e.of.length===0;function Ie(e){return e.t==="fn"?e.returns:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1].returns:null}function Oe(e){if(e.t==="undefined")return e;let n=e.t==="union"?e.of:[e];return n.some(r=>r.t==="undefined")?e:{t:"union",of:[...n,{t:"undefined"}]}}function Me(e){let n=e.t==="fn"?e:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1]:null;if(!n)return null;let r=[],t=[];for(let o of n.params)o.variadic?(r.push(o.type.t==="array"?o.type.items:o.type),t.push("rest")):o.optional?(r.push(Oe(o.type)),t.push("optional")):(r.push(o.type),t.push("req"));return s.tuple(r,t)}var fe=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function ce(e,n){return e.t==="literal"&&n.t==="literal"?e.value===n.value:e.t==="literal"&&(n.t==="string"||n.t==="number"||n.t==="boolean")?typeof e.value===n.t:e.t===n.t&&(e.t==="string"||e.t==="number"||e.t==="boolean")}function b(e){let n=[],r=o=>{let i=h(o);i.t==="intersection"?i.of.forEach(r):n.push(i);};e.of.forEach(r);let t=[];for(let o of n){if(o.t==="any")return s.any;if($e(o))return pe;if(o.t!=="unknown"){if(fe(o)){let i=false;for(let a=t.length-1;a>=0;a--){let l=t[a];if(fe(l)){if(ce(l,o)){i=true;break}if(ce(o,l))t.splice(a,1);else return pe}}if(i)continue}else if(t.some(i=>i===o))continue;t.push(o);}}return t.length===0?s.unknown:t.length===1?t[0]:{t:"intersection",of:t}}function se(e){if(e.t==="union"){let r=e.of.map(se);return r.some(t=>t===null)?null:Le(r)}if(e.t!=="object")return null;let n=Object.keys(e.props).map(r=>s.literal(r));return e.index&&n.push(e.index.key==="number"?s.number:s.string),n.length===0?{t:"union",of:[]}:n.length===1?n[0]:{t:"union",of:n}}function Le(e){let n=i=>i.t==="literal"&&typeof i.value=="string"?[i.value]:i.t==="union"?i.of.flatMap(n):[],r=e.filter(i=>i.t!=="string"&&i.t!=="number").map(n);if(r.length===0)return e[0];let t=r[0].filter(i=>r.every(a=>a.includes(i))),o=[...new Set(t)].map(i=>s.literal(i));return o.length===0?{t:"union",of:[]}:o.length===1?o[0]:{t:"union",of:o}}function ee(e,n){if(e=h(e),n=h(n),n.t==="union"){let r=n.of.map(t=>ee(e,t));return r.some(t=>t===null)?null:{t:"union",of:r}}if(e.t==="intersection"){let r=[];for(let t of e.of){let o=ee(h(t),n);if(o===null)return null;o.t!=="undefined"&&r.push(o);}return r.length===0?s.undefined:r.length===1?r[0]:b({of:r})}if(e.t==="object"){if(n.t==="literal"&&(typeof n.value=="string"||typeof n.value=="number")){let r=L(e.props,String(n.value));return r?r.optional?{t:"union",of:[r.type,{t:"undefined"}]}:r.type:typeof n.value=="number"&&e.index?.key==="number"||e.index?.key==="string"?e.index.value:s.undefined}if(e.index?.key==="string"&&n.t==="string"||e.index?.key==="number"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number"))return e.index.value}if(e.t==="tuple"){let r=e.flags?.findIndex(t=>t!=="req")??-1;if(r>=0){if(n.t==="literal"&&typeof n.value=="number")return n.value<r?e.elements[n.value]??s.undefined:e.elements.length?{t:"union",of:e.elements.slice(r)}:s.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:s.undefined}else {if(n.t==="literal"&&typeof n.value=="number")return e.elements[n.value]??s.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:s.undefined}}return e.t==="array"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number")?e.items:null}var Pe=Object.prototype.hasOwnProperty,L=(e,n)=>Pe.call(e,n)?e[n]:void 0;function P(e){if(e.t==="undefined")return {type:{t:"union",of:[]},hadUndefined:true};if(e.t==="union"&&e.of.some(n=>n.t==="undefined")){let n=e.of.filter(r=>r.t!=="undefined");return {type:n.length===1?n[0]:{t:"union",of:n},hadUndefined:true}}return {type:e,hadUndefined:false}}var ne=e=>(+e).toString()===e;var G=(e,n)=>e.flags?.[n]??"req",me=e=>e==="rest"||e==="variadic",We=e=>!!e.flags?.some(me),N=e=>e.flags?.findIndex(me)??-1,Be=e=>{if(!e.flags)return e.elements.length;let n=e.flags.findIndex(r=>r!=="req");return n<0?e.elements.length:n};function K(e,n){let r=[],t=[],o=(i,a)=>{r.push(i),t.push(a);};for(let i=0;i<e.length;i++){let a=e[i],l=n[i]??"req";if(l!=="variadic"){o(a,l);continue}if(a.t==="tuple"){let c=a;for(let u=0;u<c.elements.length;u++)o(c.elements[u],G(c,u));}else a.t==="array"?o(a.items,"rest"):a.t==="any"?o(a,"rest"):o(a,"variadic");}return s.tuple(r,t)}function de(e){let n=N(e);return n<0?{prefix:e.elements,rest:null,suffix:[]}:{prefix:e.elements.slice(0,n),rest:e.elements[n],suffix:e.elements.slice(n+1)}}function ye(e,n,r){let t=de(e),o=de(n);if(o.rest===null){if(t.rest!==null)return false;let i=Be(n);return e.elements.length<i||e.elements.length>n.elements.length?false:e.elements.every((a,l)=>r(a,n.elements[l]))}if(t.rest===null){let i=t.prefix;if(i.length<o.prefix.length+o.suffix.length)return false;for(let a=0;a<o.prefix.length;a++)if(!r(i[a],o.prefix[a]))return false;for(let a=0;a<o.suffix.length;a++)if(!r(i[i.length-o.suffix.length+a],o.suffix[a]))return false;for(let a=o.prefix.length;a<i.length-o.suffix.length;a++)if(!r(i[a],o.rest))return false;return true}if(t.prefix.length>=o.prefix.length&&t.suffix.length>=o.suffix.length){for(let i=0;i<o.prefix.length;i++)if(!r(t.prefix[i],o.prefix[i]))return false;for(let i=o.prefix.length;i<t.prefix.length;i++)if(!r(t.prefix[i],o.rest))return false;if(!r(t.rest,o.rest))return false;for(let i=0;i<o.suffix.length;i++)if(!r(t.suffix[t.suffix.length-o.suffix.length+i],o.suffix[i]))return false;for(let i=0;i<t.suffix.length-o.suffix.length;i++)if(!r(t.suffix[i],o.rest))return false;return true}return false}function H(e,n,r){if(e.t==="array")return e;if(e.t==="tuple"){let t=e,o=t.elements.length,i=t.elements.slice(n,o-r),a=(t.flags??t.elements.map(()=>"req")).slice(n,o-r);return s.tuple(i,a)}return s.tuple([])}function m(e,n,r=new WeakSet){if(e.t!=="keyof"&&e.t!=="index"&&e.t!=="mapped"&&e.t!=="intersection"&&e.t!=="returnType"&&e.t!=="parameters"&&!ze(B(e),n))return e;switch(e.t){case "var":{let t=n[e.name];return t||(e.bound?{t:"var",name:e.name,bound:m(e.bound,n,r)}:e)}case "array":return {t:"array",items:m(e.items,n,r)};case "tuple":{let t=e.elements.map(o=>m(o,n,r));return e.flags?K(t,e.flags):{t:"tuple",elements:t}}case "union":return {t:"union",of:e.of.map(t=>m(t,n,r))};case "object":{if(r.has(e))return e;r.add(e);let t={};for(let i in e.props){let a=e.props[i];t[i]={type:m(a.type,n,r),optional:a.optional};}let o=e.index?{key:e.index.key,value:m(e.index.value,n,r)}:void 0;return r.delete(e),o?{t:"object",props:t,index:o}:{t:"object",props:t}}case "fn":{if(r.has(e))return e;r.add(e);let o={t:"fn",params:e.params.map(i=>({...i,type:m(i.type,n,r)})),returns:m(e.returns,n,r),...e.guard&&{guard:{param:e.guard.param,type:m(e.guard.type,n,r)}}};return r.delete(e),o}case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>m(t,n,r))};case "keyof":return h({t:"keyof",of:m(e.of,n,r)});case "index":return h({t:"index",obj:m(e.obj,n,r),key:m(e.key,n,r)});case "mapped":{let t={};for(let i in n)i!==e.key&&(t[i]=n[i]);let o={t:"mapped",key:e.key,over:m(e.over,n,r),body:m(e.body,t,r),optional:e.optional};return R(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,i=n[o],a=i?h(i):void 0,l=a?.t==="union"?a.of:a?.t==="boolean"?[s.literal(true),s.literal(false)]:null;if(l)return {t:"union",of:l.map(c=>m(e,{...n,[o]:c},r))}}let t=e.infer?.length?Object.fromEntries(Object.entries(n).filter(([o])=>!e.infer.includes(o))):n;return {t:"conditional",check:m(e.check,n,r),extends:m(e.extends,t,r),then:m(e.then,t,r),else:m(e.else,t,r),...e.infer?{infer:e.infer}:{}}}case "intersection":return b({of:e.of.map(t=>m(t,n,r))});case "returnType":return h({t:"returnType",fn:m(e.fn,n,r)});case "parameters":return h({t:"parameters",fn:m(e.fn,n,r)});default:return e}}var Ue=new Set,Se=new WeakMap;function B(e){let n=Se.get(e);if(n)return n;let r=new Set;y(e,r,new WeakSet);let t=r.size===0?Ue:r;return Se.set(e,t),t}function y(e,n,r){switch(e.t){case "var":n.add(e.name),e.bound&&y(e.bound,n,r);return;case "array":y(e.items,n,r);return;case "tuple":for(let t of e.elements)y(t,n,r);return;case "union":for(let t of e.of)y(t,n,r);return;case "object":if(r.has(e))return;r.add(e);for(let t in e.props)y(e.props[t].type,n,r);e.index&&y(e.index.value,n,r);return;case "fn":if(r.has(e))return;r.add(e);for(let t of e.params)y(t.type,n,r);y(e.returns,n,r),e.guard&&y(e.guard.type,n,r);return;case "overload":for(let t of e.signatures){for(let o of t.params)y(o.type,n,r);y(t.returns,n,r);}return;case "apply":for(let t of e.args)y(t,n,r);return;case "keyof":y(e.of,n,r);return;case "index":y(e.obj,n,r),y(e.key,n,r);return;case "mapped":y(e.over,n,r),y(e.body,n,r);return;case "conditional":{if(y(e.check,n,r),!e.infer?.length){y(e.extends,n,r),y(e.then,n,r),y(e.else,n,r);return}let t=new Set;y(e.extends,t,r),y(e.then,t,r),y(e.else,t,r);for(let o of t)e.infer.includes(o)||n.add(o);return}case "intersection":for(let t of e.of)y(t,n,r);return;case "returnType":case "parameters":y(e.fn,n,r);return;default:return}}function ze(e,n){if(e.size===0)return false;for(let r of e)if(r in n)return true;return false}function R(e){let n=h(e.over);if(n.t==="string"||n.t==="number")return {t:"object",props:{},index:{key:n.t,value:m(e.body,{[e.key]:n})}};let r=Fe(n);if(r===null)return null;let t={};for(let o of r)t[o]={type:m(e.body,{[e.key]:s.literal(o)}),optional:e.optional};return {t:"object",props:t}}function Fe(e){if(e.t==="literal"&&typeof e.value=="string")return [e.value];if(e.t==="union"){let n=[];for(let r of e.of)if(r.t==="literal"&&typeof r.value=="string")n.push(r.value);else return null;return n}return null}function j(e,n){if(e.t!=="apply")return false;let r=n[e.name];return r!==void 0&&r.params.length===e.args.length}function w(e,n){if(e.t!=="apply")return e;let r=n[e.name];if(!r||r.params.length!==e.args.length)return e;let t={};return r.params.forEach((o,i)=>t[o]=e.args[i]),m(r.body,t)}function g(e){switch(e.t){case "literal":return `#${typeof e.value}:${String(e.value)}`;case "object":{let n=Object.keys(e.props).sort().map(t=>`${t}${e.props[t].optional?"?":""}:${g(e.props[t].type)}`).join(","),r=e.index?`,[${e.index.key}]:${g(e.index.value)}`:"";return `{${n}${r}}`}case "array":return `[${g(e.items)}]`;case "tuple":return `#tuple(${e.elements.map(g).join(",")})`;case "union":return `(${e.of.map(g).sort().join("|")})`;case "fn":return `(${e.params.map(n=>g(n.type)).join(",")})=>${e.guard?`is${e.guard.param}:${g(e.guard.type)}`:g(e.returns)}`;case "var":return `v:${e.name}`;case "apply":return `${e.name}<${e.args.map(g).join(",")}>`;case "intersection":return `&(${e.of.map(g).sort().join("&")})`;case "returnType":return `RT<${g(e.fn)}>`;default:return e.t}}var he=50;function I(e,n={},r=0){if(r>he)return e;if(e.t==="var")return e.bound?I(e.bound,n,r+1):e;if(j(e,n))return I(w(e,n),n,r+1);if(e.t==="mapped"){let t=R(e);if(t)return I(t,n,r+1)}if(e.t==="intersection")return b(e);if(e.t==="union"){let t=e.of.map(o=>I(o,n,r+1));return t.some((o,i)=>o!==e.of[i])?{t:"union",of:t}:e}return e}function A(e,n,r=0){if(r>he)return e;let t=C(e,n);if(t!==e)return A(t,n,r+1);let o=I(e,n,r);return o===e?e:A(o,n,r+1)}function C(e,n={}){let r=h(e);if(r!==e)return r;switch(e.t){case "keyof":{let t=A(e.of,n);return t===e.of?e:h({...e,of:t})}case "index":{let t=A(e.obj,n),o=A(e.key,n);return t===e.obj&&o===e.key?e:h({...e,obj:t,key:o})}case "returnType":{let t=A(e.fn,n);return t===e.fn?e:h({...e,fn:t})}default:return e}}var Re=1e3,J={maxTypeDepth:1e3,maxUnionMembers:1e3,maxOverloadSignatures:200},V=J;function Ae(e){V={...J,...e};}function Ce(){V=J;}function D(){return V}var U=class extends Error{constructor(n=V.maxTypeDepth){super(`type evaluation exceeded the depth limit (${n}) \u2014 the type is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},Q=class extends Error{constructor(n,r=V.maxUnionMembers){super(`union type is too complex to represent (${n} members exceeds limit ${r})`),this.name="UnionTooComplexError";}};var re=e=>typeof e=="string"?s.string:typeof e=="number"?s.number:s.boolean;function te(e){return e.t==="literal"&&e.fresh?re(e.value):e}function ge(e){if(e.t==="literal")return e.fresh?re(e.value):e;if(e.t==="union"){let n=e.of.map(ge);return n.some((r,t)=>r!==e.of[t])?x(n):e}return e}function De(e){return E(e,new WeakSet)}function _e(e){switch(e.t){case "array":return {t:"array",items:E(e.items,new WeakSet),...e.readonly?{readonly:true}:{}};case "tuple":return {t:"tuple",elements:e.elements.map(n=>E(n,new WeakSet)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return xe(e,new WeakSet);case "fn":case "overload":return E(e,new WeakSet);default:return e}}function E(e,n){if(e.t==="literal")return e.fresh?re(e.value):e;if(n.has(e))return e;switch(e.t){case "array":return n.add(e),{t:"array",items:E(e.items,n),...e.readonly?{readonly:true}:{}};case "tuple":return n.add(e),{t:"tuple",elements:e.elements.map(r=>E(r,n)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return n.add(e),xe(e,n);case "apply":return n.add(e),{t:"apply",name:e.name,args:e.args.map(r=>E(r,n))};case "fn":return n.add(e),{t:"fn",params:e.params.map(r=>({...r,type:E(r.type,n)})),returns:E(e.returns,n),...e.guard?{guard:{param:e.guard.param,type:E(e.guard.type,n)}}:{}};case "overload":return n.add(e),{t:"overload",signatures:e.signatures.map(r=>E(r,n))};default:return e}}function xe(e,n){let r={};for(let o in e.props)r[o]={type:E(e.props[o].type,n),optional:e.props[o].optional};let t=e.index?{key:e.index.key,value:E(e.index.value,n)}:void 0;return t?{t:"object",props:r,index:t}:{t:"object",props:r}}var ve=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function qe(e,n){if(T(n,e))return e;if(T(e,n))return n;let r=ve(e),t=ve(n);return !r||!t||r===t?x([e,n]):null}function v(e,n,r={}){if(e.t==="var"){let t=r[e.name];if(!t)return {...r,[e.name]:n};if(n.t==="any"||n.t==="unknown")return r;let o=qe(t,n);return o?{...r,[e.name]:o}:r}if(n.t==="any"||n.t==="unknown")return r;switch(e.t){case "array":return n.t==="array"?v(e.items,n.items,r):null;case "tuple":{let t=e,o=N(t);if(o<0){if(n.t!=="tuple"||n.elements.length!==t.elements.length)return null;let f=r;for(let F=0;F<t.elements.length;F++)if(f=v(t.elements[F],n.elements[F],f),f===null)return null;return f}let i=o,a=t.elements.length-o-1,l=G(t,o),c=f=>l==="variadic"?f:f.t==="tuple"?f.elements.length?x(f.elements):s.unknown:f.t==="array"?f.items:f,u=r,d=(f,F)=>{u!==null&&(u=v(f,F,u));};if(n.t==="tuple"){if(n.elements.length<i+a)return null;for(let f=0;f<i;f++)d(t.elements[f],n.elements[f]);for(let f=0;f<a;f++)d(t.elements[o+1+f],n.elements[n.elements.length-a+f]);return u!==null&&(u=v(t.elements[o],c(H(n,i,a)),u)),u}if(n.t==="array"){for(let f=0;f<i;f++)d(t.elements[f],n.items);for(let f=0;f<a;f++)d(t.elements[o+1+f],n.items);return u!==null&&(u=v(t.elements[o],c(n),u)),u}return null}case "object":{if(n.t!=="object")return null;let t=r;for(let o in e.props){let i=e.props[o],a=n.props[o];if(!a){if(i.optional)continue;return null}if(t=v(i.type,a.type,t),t===null)return null}return t}case "fn":{if(n.t!=="fn")return null;let t=v(e.returns,n.returns,r);if(t===null)return null;let o=Math.min(e.params.length,n.params.length);for(let i=0;i<o;i++)if(t=v(e.params[i].type,n.params[i].type,t),t===null)return null;return e.guard&&n.guard&&(t=v(e.guard.type,n.guard.type,t)),t}case "apply":{if(n.t!=="apply"||n.name!==e.name||n.args.length!==e.args.length)return null;let t=r;for(let o=0;o<e.args.length;o++)if(t=v(e.args[o],n.args[o],t),t===null)return null;return t}default:return T(n,e)?r:null}}var ke="@rev",oe=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function O(e,n,r){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===n&&e.key.t==="var"&&e.key.name===r)return s.var(ke);switch(e.t){case "array":return {t:"array",items:O(e.items,n,r)};case "tuple":return {t:"tuple",elements:e.elements.map(t=>O(t,n,r)),...e.flags?{flags:e.flags}:{}};case "union":return {t:"union",of:e.of.map(t=>O(t,n,r))};case "fn":return {t:"fn",params:e.params.map(t=>({...t,type:O(t.type,n,r)})),returns:O(e.returns,n,r)};case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>O(t,n,r))};case "returnType":return {t:"returnType",fn:O(e.fn,n,r)};case "object":{let t={};for(let o in e.props)t[o]={type:O(e.props[o].type,n,r),optional:e.props[o].optional};return e.index?{t:"object",props:t,index:{key:e.index.key,value:O(e.index.value,n,r)}}:{t:"object",props:t}}default:return e}}function Ne(e,n,r){if(e.over.t!=="keyof"||e.over.of.t!=="var")return null;let t=e.over.of.name;if(r[t])return null;let o={};for(let i in n.props){let a=O(e.body,t,e.key),l=v(a,n.props[i].type,{})?.[ke];o[i]={type:l?te(l):s.unknown,optional:n.props[i].optional};}return {...r,[t]:{t:"object",props:o}}}function be(e,n,r){let t=r;for(let o=0;o<e.length&&o<n.length;o++){let i=e[o].type,a=n[o];if(oe(i)&&a.t==="object"){let l=Ne(i,a,t);l&&(t=l);}}return t}function Ke(e,n){let r={};for(let o=0;o<e.params.length;o++){let i=e.params[o];if(i.variadic){for(let a=o;a<n.length;a++)if(r=v(i.type,n[a],r),r===null)return null;break}if(o>=n.length){if(i.optional)continue;return null}if(!oe(i.type)&&(r=v(i.type,n[o],r),r===null))return null}let t=be(e.params,n,r);return {returns:m(e.returns,t),bindings:t}}function Qe(e,n){let r={};for(let t=0;t<e.params.length&&t<n.length;t++){let o=e.params[t];if(oe(o.type))continue;let i=v(o.type,n[t],r);i!==null&&(r=i);}return r=be(e.params,n,r),{returns:m(e.returns,r),bindings:r}}function $(e,n,r,t,o){if(e.t==="var"&&r.has(e.name)){let i=o.get(e.name);i||o.set(e.name,i={co:[],contra:[]}),(t?i.contra:i.co).push(n);return}if(!(n.t==="any"||n.t==="unknown"))switch(e.t){case "array":n.t==="array"&&$(e.items,n.items,r,t,o);return;case "tuple":{let i=e,a=N(i);if(a<0){n.t==="tuple"&&n.elements.length===i.elements.length&&i.elements.forEach((d,f)=>$(d,n.elements[f],r,t,o));return}let l=a,c=i.elements.length-a-1,u=d=>$(i.elements[a],d,r,t,o);if(n.t==="tuple"){let d=n;if(d.elements.length<l+c)return;for(let f=0;f<l;f++)$(i.elements[f],d.elements[f],r,t,o);for(let f=0;f<c;f++)$(i.elements[a+1+f],d.elements[d.elements.length-c+f],r,t,o);u(H(d,l,c));}else if(n.t==="array"){for(let d=0;d<l;d++)$(i.elements[d],n.items,r,t,o);for(let d=0;d<c;d++)$(i.elements[a+1+d],n.items,r,t,o);u(n);}return}case "fn":n.t==="fn"&&(e.params.forEach((i,a)=>{let l=n.params[a];l&&$(i.type,l.type,r,!t,o);}),$(e.returns,n.returns,r,t,o));return;case "object":if(n.t==="object")for(let i in e.props)n.props[i]&&$(e.props[i].type,n.props[i].type,r,t,o);return;case "apply":n.t==="apply"&&n.name===e.name&&n.args.length===e.args.length&&e.args.forEach((i,a)=>$(i,n.args[a],r,t,o));return;default:return}}function Ve(e,n){if(e.length===1)return e[0];let t=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(i=>T(o,i,n)));return x(t)}var Ye=e=>e.t==="union"&&e.of.length===0;function Te(e,n){let r={};for(let[t,{co:o,contra:i}]of e){let a=o.length?x(o):void 0,l=i.length?Ve(i,n):void 0,c=a??l;a&&l&&(c=!Ye(a)&&a.t!=="any"&&T(a,l,n)?a:l),c&&(r[t]=c);}return r}function je(e,n={}){let r=new Map;$(e.extends,e.check,new Set(e.infer??[]),false,r);let t={...Te(r,n)};for(let o of e.infer??[])o in t||(t[o]=s.unknown);return t}function Ge(e,n={},r=0){if(!e.infer?.length||B(e.check).size>0)return null;let t=new Map;$(e.extends,e.check,new Set(e.infer),false,t);let o=Te(t,n),i=new WeakSet,a=Z(m(e.extends,o),n,i,r);return T(e.check,a,n)?Z(m(e.then,o),n,i,r):Z(m(e.else,o),n,i,r)}function Z(e,n={},r=new WeakSet,t=0){let o=t,i=D().maxTypeDepth,a=l=>{switch(l.t){case "var":return s.unknown;case "array":return {t:"array",items:a(l.items)};case "tuple":{let c=l.elements.map(a);return l.flags?K(c,l.flags):{t:"tuple",elements:c}}case "union":return {t:"union",of:l.of.map(a)};case "object":{if(r.has(l))return l;r.add(l);let c={};for(let d in l.props){let f=l.props[d];c[d]={type:a(f.type),optional:f.optional};}let u=l.index?{key:l.index.key,value:a(l.index.value)}:void 0;return r.delete(l),u?{t:"object",props:c,index:u}:{t:"object",props:c}}case "fn":{if(r.has(l))return l;r.add(l);let u={t:"fn",params:l.params.map(d=>({...d,type:a(d.type)})),returns:a(l.returns),...l.guard&&{guard:{param:l.guard.param,type:a(l.guard.type)}}};return r.delete(l),u}case "apply":{if(j(l,n)){let c=w(l,n);if(c.t==="conditional"){if(o>=i)throw new U;o++;try{let u=a(c);if(u.t!=="conditional")return u}finally{o--;}}}return {t:"apply",name:l.name,args:l.args.map(a)}}case "conditional":{let c=l.infer?.length?Ge(l,n,o):W(l,n);return c?a(c):{t:"conditional",check:a(l.check),extends:a(l.extends),then:a(l.then),else:a(l.else),...l.infer?{infer:l.infer}:{}}}case "intersection":return b({of:l.of.map(a)});case "returnType":return h({t:"returnType",fn:a(l.fn)});default:return l}};return a(e)}var ae=(e,n)=>({seen:new WeakMap,exp:new Set,schemes:e,depth:0,assumed:0,explain:n});function k(e,n,r){return e.explain?.out.push({path:[...e.explain.path],actual:n,expected:r,kind:"type"}),false}function le(e,n,r=0){if(r>50)return e;if(j(e,n)){let t=w(e,n);if(t.t!=="conditional")return e;let o=W(t,n);return o?le(o,n,r+1):e}if(e.t==="conditional"){let t=W(e,n);return t?le(t,n,r+1):e}return e}function He(e,n,r={}){let t=[];return !p(e,n,ae(r,{path:[],out:t}))&&t.length===0&&t.push({path:[],actual:e,expected:n,kind:"type"}),t}var ie=new WeakMap;function T(e,n,r={}){if(e===n)return true;if(Object.keys(r).length>0)return p(e,n,ae(r));let t=ie.get(e)?.get(n);if(t!==void 0)return t;let o=p(e,n,ae(r)),i=ie.get(e);return i||ie.set(e,i=new WeakMap),i.set(n,o),o}function Je(e,n,r={}){return T(e,n,r)&&T(n,e,r)}function W(e,n){if(e.infer?.length){if(B(e.check).size>0)return null;let r=le(e.check,n),t=je({...e,check:r},n),o=m(e.extends,t);return T(r,o,n)?m(e.then,t):m(e.else,t)}return B(e.check).size>0||B(e.extends).size>0?null:T(e.check,e.extends,n)?e.then:e.else}function _(e,n,r=0){if(r>50)return e;let t=C(e,n.schemes);if(t!==e)return _(t,n,r+1);if(e.t==="conditional"){let o=W(e,n.schemes);if(o)return _(o,n,r+1)}return j(e,n.schemes)?_(w(e,n.schemes),n,r+1):e.t==="union"?x(e.of.map(o=>_(o,n,r+1))):e}function X(e,n,r,t){if(!r.explain)return p(e,n,r);r.explain.path.push(t);try{return p(e,n,r)}finally{r.explain.path.pop();}}function p(e,n,r){if(r.depth>=D().maxTypeDepth)throw new U;r.depth++;try{if(e.t==="any"||n.t==="any"||n.t==="unknown")return !0;if(e.t==="unknown")return k(r,e,n);let t=C(e,r.schemes);if(t!==e)return p(t,n,r);let o=C(n,r.schemes);if(o!==n)return p(e,o,r);if(e.t==="mapped"){let u=R({...e,over:_(e.over,r)});if(u)return p(u,n,r)}if(n.t==="mapped"){let u=R({...n,over:_(n.over,r)});if(u)return p(e,u,r)}if(e.t==="conditional"){let u=W(e,r.schemes);if(u)return p(u,n,r)}if(n.t==="conditional"){let u=W(n,r.schemes);if(u)return p(e,u,r)}if(n.t==="intersection"){let u=b(n);return u.t!=="intersection"?p(e,u,r):u.of.every(d=>p(e,d,r))}if(e.t==="intersection"){let u=b(e);if(u.t!=="intersection")return p(u,n,r);if(u.of.some(d=>p(d,n,r)))return !0;if(n.t==="object"){let d=en(u.of);if(d)return p(d,n,r)}return !1}if(!(e.t==="apply"&&n.t==="apply"&&e.name===n.name&&e.args.length===n.args.length)&&(j(e,r.schemes)||j(n,r.schemes))){let u=`${g(e)}\u2264${g(n)}`;if(r.exp.has(u))return !0;r.exp.add(u);let d=p(w(e,r.schemes),w(n,r.schemes),r);return r.exp.delete(u),d}let a=r.seen.get(e);if(a?.has(n))return r.assumed++,!0;a||(a=new WeakSet,r.seen.set(e,a)),a.add(n);let l=r.assumed,c=Ze(e,n,r);return (!c||r.assumed!==l)&&a.delete(n),c}finally{r.depth--;}}function Ze(e,n,r){if(e.t==="union")return e.of.every(t=>p(t,n,r));if(e.t==="boolean"&&n.t==="union")return p(s.literal(true),n,r)&&p(s.literal(false),n,r);if(n.t==="union")return nn(e,n,r);if(n.t==="overload")return n.signatures.every(t=>p(e,t,r));if(e.t==="overload")return e.signatures.some(t=>p(t,n,r));switch(n.t){case "literal":return e.t==="literal"&&e.value===n.value?true:k(r,e,n);case "string":case "number":case "boolean":case "null":case "undefined":return e.t===n.t||e.t==="literal"&&Xe(e.value)===n.t?true:k(r,e,n);case "void":return e.t==="void"||e.t==="undefined"?true:k(r,e,n);case "array":return e.t==="array"?e.readonly&&!n.readonly?k(r,e,n):p(e.items,n.items,r):e.t==="tuple"?e.readonly&&!n.readonly?k(r,e,n):e.elements.every((t,o)=>X(t,n.items,r,String(o))):k(r,e,n);case "tuple":{if(e.t!=="tuple"||e.readonly&&!n.readonly)return k(r,e,n);if(!e.flags&&!n.flags){if(e.elements.length!==n.elements.length)return k(r,e,n);for(let t=0;t<e.elements.length;t++)if(!X(e.elements[t],n.elements[t],r,String(t)))return false;return true}return ye(e,n,(t,o)=>p(t,o,r))}case "object":if(e.t==="object")return tn(e,n,r);if(Object.keys(n.props).length===0&&!n.index)return e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:k(r,e,n);if((e.t==="array"||e.t==="tuple")&&n.index){let t=e.t==="array"?[e.items]:e.elements;return n.index.key==="number"&&Object.values(n.props).every(o=>o.optional)&&t.every(o=>p(o,n.index.value,r))?true:k(r,e,n)}return k(r,e,n);case "fn":return e.t==="fn"?on(e,n,r):k(r,e,n);case "var":return e.t==="var"&&e.name===n.name;case "typeQuery":return e.t==="typeQuery"&&e.path.length===n.path.length&&e.path.every((t,o)=>t===n.path[o]);case "keyof":return e.t==="keyof"&&p(e.of,n.of,r)&&p(n.of,e.of,r);case "index":return e.t==="index"&&p(e.obj,n.obj,r)&&p(n.obj,e.obj,r)&&p(e.key,n.key,r)&&p(n.key,e.key,r);case "mapped":return e.t==="mapped"&&e.key===n.key&&!!e.optional==!!n.optional&&p(e.over,n.over,r)&&p(n.over,e.over,r)&&p(e.body,n.body,r)&&p(n.body,e.body,r);case "conditional":return e.t==="conditional"&&p(e.check,n.check,r)&&p(n.check,e.check,r)&&p(e.extends,n.extends,r)&&p(n.extends,e.extends,r)&&p(e.then,n.then,r)&&p(e.else,n.else,r);case "apply":return e.t==="apply"&&e.name===n.name&&e.args.length===n.args.length&&e.args.every((t,o)=>p(t,n.args[o],r));case "returnType":return e.t==="returnType"&&p(e.fn,n.fn,r)&&p(n.fn,e.fn,r);case "parameters":return e.t==="parameters"&&p(e.fn,n.fn,r)&&p(n.fn,e.fn,r)}}var Xe=e=>typeof e;function en(e){let n=[];for(let i of e){let a=h(i);if(a.t!=="object")return null;n.push(a);}let r=new Set;for(let i of n)for(let a in i.props)r.add(a);let t={};for(let i of r){let a=[],l=true;for(let c of n){let u=c.props[i];u?(a.push(u.type),u.optional||(l=false)):c.index?.key==="string"&&(a.push(c.index.value),l=false);}t[i]={type:b({of:a}),optional:l};}let o;for(let i of n)i.index&&(o=o?{key:o.key,value:b({of:[o.value,i.index.value]})}:i.index);return o?{t:"object",props:t,index:o}:{t:"object",props:t}}function nn(e,n,r){let t=r.explain;if(!t)return n.of.some(a=>p(e,a,r));r.explain=void 0;let o;try{o=n.of.some(a=>p(e,a,r));}finally{r.explain=t;}if(o)return true;let i=rn(e,n,r);return i?p(e,i,r):k(r,e,n)}function rn(e,n,r){if(e.t!=="object")return null;let t=n.of.map(o=>I(o,r.schemes));for(let o in e.props){let i=e.props[o].type;if(i.t!=="literal")continue;let a=r.explain;r.explain=void 0;let l;try{l=n.of.filter((c,u)=>{let d=t[u];if(d.t!=="object")return !1;let f=L(d.props,o);return !!f&&p(i,f.type,r)});}finally{r.explain=a;}if(l.length===1)return l[0]}return null}function tn(e,n,r){let t=false;for(let o in n.props)if(!(n.props[o].optional||L(e.props,o))){if(!r.explain)return false;r.explain.out.push({path:[...r.explain.path,o],expected:n.props[o].type,kind:"missing"}),t=true;}if(t)return false;for(let o in n.props){let i=n.props[o],a=L(e.props,o);if(!a)continue;if(a.optional&&!i.optional)return false;let l=i.optional?P(a.type).type:a.type;if(!X(l,i.type,r,o))return false}if(n.index){let o=n.index.key==="number";for(let i in e.props)if(!(o&&!ne(i))&&!X(e.props[i].type,n.index.value,r,i))return false;if(e.index&&!p(e.index.value,n.index.value,r))return false}return true}function on(e,n,r){if(n.returns.t!=="void"&&n.returns.t!=="any"&&!p(e.returns,n.returns,r))return false;for(let t=0;t<e.params.length;t++){let o=e.params[t];if(o.variadic)break;let i=n.params[t];if(!i){if(o.optional)continue;return false}if(!p(i.type,o.type,r))return false}return !(n.guard&&(!e.guard||e.guard.param!==n.guard.param||!p(e.guard.type,n.guard.type,r)))}function x(e){let n=[];for(let o of e)o.t==="union"?n.push(...o.of):n.push(o);let r=D().maxUnionMembers;if(n.length>r)throw new Q(n.length,r);if(n.some(o=>o.t==="any"))return s.any;let t=[];for(let o of n)if(!t.some(i=>T(o,i))){for(let i=t.length-1;i>=0;i--)T(t[i],o)&&t.splice(i,1);t.push(o);}if(t.some(o=>o.t==="literal"&&o.value===true)&&t.some(o=>o.t==="literal"&&o.value===false)){let o=t.filter(i=>!(i.t==="boolean"||i.t==="literal"&&typeof i.value=="boolean"));o.push(s.boolean),t.length=0,t.push(...o);}return t.length===1?t[0]:{t:"union",of:t}}function an(e,n){let r=new Set,t=new WeakSet,o=i=>{if(!t.has(i))switch(t.add(i),i.t){case "keyof":r.add("keyof"),o(i.of);break;case "index":r.add("indexed"),o(i.obj),o(i.key);break;case "mapped":r.add("mapped"),o(i.over),o(i.body);break;case "conditional":r.add("conditional"),i.infer?.length&&r.add("infer"),o(i.check),o(i.extends),o(i.then),o(i.else);break;case "returnType":r.add("returnType"),o(i.fn);break;case "parameters":r.add("parameters"),o(i.fn);break;case "tuple":r.add("tuple"),i.flags?.some(a=>a!=="req")&&r.add("variadic"),i.elements.forEach(o);break;case "intersection":r.add("intersection"),i.of.forEach(o);break;case "overload":r.add("overload");for(let a of i.signatures){for(let l of a.params)o(l.type);o(a.returns);}break;case "object":for(let a in i.props)o(i.props[a].type);i.index&&o(i.index.value);break;case "array":o(i.items);break;case "union":i.of.forEach(o);break;case "fn":for(let a of i.params)o(a.type);o(i.returns),i.guard&&o(i.guard.type);break;case "var":i.bound&&o(i.bound);break;case "apply":n&&i.name===n&&r.add("recursion"),i.args.forEach(o);break}};return o(e),r}var ln=s.union([]);function we(e,n){return ue(e,n,new WeakMap)}function un(e){return e.reduce(we,ln)}function ue(e,n,r){if(e.t==="any"||n.t==="any")return s.any;if(e===n)return e;let t=r.get(e)?.get(n);if(t)return t;if(e.t==="object"&&n.t==="object")return pn(e,n,r);if(e.t==="array"&&n.t==="array"){let o={t:"array",items:s.unknown};return Ee(r,e,n,o),o.items=ue(e.items,n.items,r),o}return x([e,n])}function pn(e,n,r){let t={t:"object",props:{}};Ee(r,e,n,t);for(let o in e.props){let i=e.props[o],a=n.props[o];if(a){let l=ue(i.type,a.type,r);t.props[o]=i.optional||a.optional?{type:l,optional:true}:{type:l};}else t.props[o]={type:i.type,optional:true};}for(let o in n.props)o in e.props||(t.props[o]={type:n.props[o].type,optional:true});return t}function Ee(e,n,r,t){let o=e.get(n);o||(o=new WeakMap,e.set(n,o)),o.set(r,t);}var fn=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e);function S(e,n=new WeakSet){switch(e.t){case "any":case "unknown":case "string":case "number":case "boolean":case "null":case "undefined":case "void":return e.t;case "var":return e.name;case "typeQuery":return `typeof ${e.path.join(".")}`;case "literal":return typeof e.value=="string"?JSON.stringify(e.value):String(e.value);case "array":{let r=S(e.items,n),t=cn(e.items)?`(${r})[]`:`${r}[]`;return e.readonly?`readonly ${t}`:t}case "tuple":{let t=`[${e.elements.map((o,i)=>{let a=e.flags?.[i]??"req",l=S(o,n),c=o.t==="union"?`(${l})`:l;return a==="rest"?`...${c}[]`:a==="variadic"?`...${l}`:a==="optional"?`${c}?`:l}).join(", ")}]`;return e.readonly?`readonly ${t}`:t}case "union":{if(n.has(e))return "\u2026";n.add(e);let r=e.of.length===0?"never":e.of.map(t=>S(t,n)).join(" | ");return n.delete(e),r}case "object":{if(n.has(e))return "\u2026";n.add(e);let r=Object.entries(e.props).map(([t,o])=>`${fn(t)?t:JSON.stringify(t)}${o.optional?"?":""}: ${S(o.type,n)}`);return e.index&&r.push(`[k: ${e.index.key}]: ${S(e.index.value,n)}`),n.delete(e),r.length===0?"{}":`{ ${r.join("; ")} }`}case "fn":{if(n.has(e))return "\u2026";n.add(e);let r=e.params.map(o=>{let i=o.variadic?"...":"",a=o.optional&&!o.variadic?"?":"";return `${i}${o.name}${a}: ${S(o.type,n)}`}).join(", "),t=e.guard?`${e.params[e.guard.param]?.name??`arg${e.guard.param}`} is ${S(e.guard.type,n)}`:S(e.returns,n);return n.delete(e),`(${r}) => ${t}`}case "apply":{if(n.has(e))return "\u2026";n.add(e);let r=e.args.length===0?e.name:`${e.name}<${e.args.map(t=>S(t,n)).join(", ")}>`;return n.delete(e),r}case "overload":{if(n.has(e))return "\u2026";n.add(e);let r=e.signatures.map(t=>S(t,n)).join(" & ");return n.delete(e),r}case "keyof":return `keyof ${S(e.of,n)}`;case "index":return `${S(e.obj,n)}[${S(e.key,n)}]`;case "mapped":{if(n.has(e))return "\u2026";n.add(e);let r=e.optional?"?":"",t=`{ [${e.key} in ${S(e.over,n)}]${r}: ${S(e.body,n)} }`;return n.delete(e),t}case "conditional":{if(n.has(e))return "\u2026";n.add(e);let r=`${S(e.check,n)} extends ${S(e.extends,n)} ? ${S(e.then,n)} : ${S(e.else,n)}`;return n.delete(e),r}case "intersection":return e.of.map(r=>r.t==="union"&&r.of.length>0?`(${S(r,n)})`:S(r,n)).join(" & ");case "returnType":return `ReturnType<${S(e.fn,n)}>`;case "parameters":return `Parameters<${S(e.fn,n)}>`}}function cn(e){return e.t==="union"&&e.of.length>0||e.t==="fn"}function sn(e){if(e.length===0)return "value";let n=e[e.length-1];if(/^\d+$/.test(n)){let r=e.slice(0,-1);return r.length?`property '${r.join(".")}' at position ${n}`:`position ${n}`}return `property '${e.join(".")}'`}function dn(e){let n=e.filter(r=>r.kind==="missing");if(n.length&&n.length===e.length){let r=n.map(t=>`'${t.path.join(".")}'`).join(", ");return n.length===1?`property ${r} is missing`:`properties ${r} are missing`}return e.map(r=>`${sn(r.path)}: expected '${S(r.expected)}', got '${S(r.actual)}'`).join("; ")}function z(e,n=new WeakSet){switch(e.t){case "string":case "number":case "boolean":case "null":case "literal":return true;case "array":return n.has(e)?true:(n.add(e),z(P(e.items).type,n));case "tuple":return n.has(e)?true:(n.add(e),e.elements.every(r=>z(P(r).type,n)));case "object":{if(n.has(e))return true;n.add(e);let r=Object.values(e.props).every(o=>z(P(o.type).type,n)),t=!e.index||z(P(e.index.value).type,n);return r&&t}case "union":return n.has(e)?true:(n.add(e),e.of.every(r=>z(r,n)));case "intersection":return n.has(e)?true:(n.add(e),e.of.every(r=>z(r,n)));case "undefined":case "void":case "fn":case "overload":case "keyof":case "index":case "mapped":case "conditional":case "returnType":case "parameters":case "var":case "typeQuery":case "apply":case "any":case "unknown":return false}}function mn(e,n,r={}){let t=e;for(let o of n){let i=q(t,o,r);if(i===null)return null;t=i;}return {type:t,completions:Y(t,r)}}var yn=e=>e==="[]"||/^\d+$/.test(e);function q(e,n,r,t=new Set){if(e.t==="var")return e.bound?q(I(e,r),n,r,t):null;if(j(e,r)){let i=g(e);if(t.has(i))return null;t.add(i);let a=q(w(e,r),n,r,t);return t.delete(i),a}let o=h(e);if(o!==e)return q(o,n,r,t);switch(e.t){case "any":return e;case "object":{let i=L(e.props,n);return i?i.optional?x([i.type,{t:"undefined"}]):i.type:e.index?.key==="string"?e.index.value:null}case "array":return yn(n)?e.items:null;case "tuple":{let i=e.flags?.findIndex(c=>c!=="req")??-1,a=Number(n);if(!(Number.isInteger(a)&&a>=0))return null;if(i<0)return a<e.elements.length?e.elements[a]:null;if(a<i)return e.elements[a];let l=e.elements.slice(i);return l.length?x(l):null}case "union":{let i=e.of.map(a=>q(a,n,r,t)).filter(a=>a!==null);return i.length?x(i):null}case "intersection":{let i=e.of.map(a=>q(a,n,r,t)).filter(a=>a!==null);return i.length?b({of:i}):null}default:return null}}function Y(e,n,r=new WeakSet,t=new Set){if(e.t==="var")return e.bound?Y(I(e,n),n,r,t):[];if(j(e,n)){let i=g(e);if(t.has(i))return [];t.add(i);let a=Y(w(e,n),n,r,t);return t.delete(i),a}let o=h(e);if(o!==e)return Y(o,n,r,t);switch(e.t){case "object":return Object.entries(e.props).map(([i,a])=>({key:i,type:a.type,optional:!!a.optional}));case "array":return [{key:"[]",type:e.items,optional:false}];case "tuple":return e.elements.map((i,a)=>({key:String(a),type:i,optional:false}));case "union":case "intersection":{if(r.has(e))return [];r.add(e);let i=[],a=new Set;for(let l of e.of)for(let c of Y(l,n,r,t))a.has(c.key)||(a.add(c.key),i.push(c));return r.delete(e),i}default:return []}}export{J as DEFAULT_TYPE_LIMITS,Re as TYPE_EVAL_DEPTH_LIMIT,U as TypeEvalLimitError,Q as UnionTooComplexError,I as apparentType,Ae as configureTypeLimits,mn as discover,Je as equals,w as expand1,G as flagAt,S as format,dn as formatTypeDiff,Z as groundVars,Ke as instantiate,Qe as instantiateLoose,ne as isNumericLiteralName,j as isScheme,z as isSerializable,We as isVariadicTuple,we as join,un as joinAll,K as normalizeTuple,x as normalizeUnion,L as ownProp,Ce as resetTypeLimits,W as resolveConditional,C as resolveOp,h as resolveTypeOp,N as restIndex,s,H as sliceTuple,m as substitute,T as subtype,He as typeDiff,an as typeFeatures,D as typeLimits,v as unify,te as widen,_e as widenInferred,ge as widenLiteral,De as widenType,P as withoutUndefined};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/type-core",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "TSLite type-core — o vocabulário Schema + a álgebra de tipos (subtype, unify, format, discover, …), puro e sem dependências. Compartilhado por checker, jsonschema, infer, validate.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",