@tslite/type-core 0.2.0 → 0.3.0

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 O=e=>Object.freeze(e),c={any:O({t:"any"}),unknown:O({t:"unknown"}),string:O({t:"string"}),number:O({t:"number"}),boolean:O({t:"boolean"}),null:O({t:"null"}),undefined:O({t:"undefined"}),void:O({t:"void"}),literal:e=>({t:"literal",value:e}),object:(e,t)=>({t:"object",props:e,...t?{index:t}:{}}),record:(e,t="string")=>({t:"object",props:{},index:{key:t,value:e}}),array:e=>({t:"array",items:e}),tuple:(e,t)=>({t:"tuple",elements:e,...t&&t.some(n=>n!=="req")?{flags:t}:{}}),fn:(e,t)=>({t:"fn",params:e,returns:t}),guard:(e,t,n=0)=>({t:"fn",params:e,returns:{t:"boolean"},guard:{param:n,type:t}}),overload:e=>({t:"overload",signatures:e}),keyof:e=>({t:"keyof",of:e}),index:(e,t)=>({t:"index",obj:e,key:t}),mapped:(e,t,n,r=false)=>({t:"mapped",key:e,over:t,body:n,optional:r}),conditional:(e,t,n,r,o)=>({t:"conditional",check:e,extends:t,then:n,else:r,...o&&o.length?{infer:o}:{}}),intersection:e=>({t:"intersection",of:e}),and:(e,t)=>({t:"intersection",of:[e,t]}),returnType:e=>({t:"returnType",fn:e}),parameters:e=>({t:"parameters",fn:e}),var:(e,t,n)=>({t:"var",name:e,bound:t,isConst:n}),apply:(e,t=[])=>({t:"apply",name:e,args:t}),promise:e=>({t:"apply",name:"Promise",args:[e]}),union:e=>{let t=[];for(let n of e)n.t==="union"?t.push(...n.of):t.push(n);return {t:"union",of:t}}};function h(e){return e.t==="keyof"?ae(e.of)??e:e.t==="index"?J(e.obj,e.key)??e:e.t==="returnType"?xe(e.fn)??e:e.t==="parameters"?ke(e.fn)??e:e}var re={t:"union",of:[]},ge=e=>e.t==="union"&&e.of.length===0;function xe(e){return e.t==="fn"?e.returns:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1].returns:null}function ve(e){if(e.t==="undefined")return e;let t=e.t==="union"?e.of:[e];return t.some(n=>n.t==="undefined")?e:{t:"union",of:[...t,{t:"undefined"}]}}function ke(e){let t=e.t==="fn"?e:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1]:null;if(!t)return null;let n=[],r=[];for(let o of t.params)o.variadic?(n.push(o.type.t==="array"?o.type.items:o.type),r.push("rest")):o.optional?(n.push(ve(o.type)),r.push("optional")):(n.push(o.type),r.push("req"));return c.tuple(n,r)}var oe=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function ie(e,t){return e.t==="literal"&&t.t==="literal"?e.value===t.value:e.t==="literal"&&(t.t==="string"||t.t==="number"||t.t==="boolean")?typeof e.value===t.t:e.t===t.t&&(e.t==="string"||e.t==="number"||e.t==="boolean")}function j(e){let t=[],n=o=>{let i=h(o);i.t==="intersection"?i.of.forEach(n):t.push(i);};e.of.forEach(n);let r=[];for(let o of t){if(o.t==="any")return c.any;if(ge(o))return re;if(o.t!=="unknown"){if(oe(o)){let i=false;for(let a=r.length-1;a>=0;a--){let l=r[a];if(oe(l)){if(ie(l,o)){i=true;break}if(ie(o,l))r.splice(a,1);else return re}}if(i)continue}else if(r.some(i=>i===o))continue;r.push(o);}}return r.length===0?c.unknown:r.length===1?r[0]:{t:"intersection",of:r}}function ae(e){if(e.t==="union"){let n=e.of.map(ae);return n.some(r=>r===null)?null:be(n)}if(e.t!=="object")return null;let t=Object.keys(e.props).map(n=>c.literal(n));return e.index&&t.push(e.index.key==="number"?c.number:c.string),t.length===0?{t:"union",of:[]}:t.length===1?t[0]:{t:"union",of:t}}function be(e){let t=i=>i.t==="literal"&&typeof i.value=="string"?[i.value]:i.t==="union"?i.of.flatMap(t):[],n=e.filter(i=>i.t!=="string"&&i.t!=="number").map(t);if(n.length===0)return e[0];let r=n[0].filter(i=>n.every(a=>a.includes(i))),o=[...new Set(r)].map(i=>c.literal(i));return o.length===0?{t:"union",of:[]}:o.length===1?o[0]:{t:"union",of:o}}function J(e,t){if(e=h(e),t=h(t),t.t==="union"){let n=t.of.map(r=>J(e,r));return n.some(r=>r===null)?null:{t:"union",of:n}}if(e.t==="intersection"){let n=[];for(let r of e.of){let o=J(h(r),t);if(o===null)return null;o.t!=="undefined"&&n.push(o);}return n.length===0?c.undefined:n.length===1?n[0]:j({of:n})}if(e.t==="object"){if(t.t==="literal"&&(typeof t.value=="string"||typeof t.value=="number")){let n=M(e.props,String(t.value));return n?n.optional?{t:"union",of:[n.type,{t:"undefined"}]}:n.type:typeof t.value=="number"&&e.index?.key==="number"||e.index?.key==="string"?e.index.value:c.undefined}if(e.index?.key==="string"&&t.t==="string"||e.index?.key==="number"&&(t.t==="number"||t.t==="literal"&&typeof t.value=="number"))return e.index.value}if(e.t==="tuple"){let n=e.flags?.findIndex(r=>r!=="req")??-1;if(n>=0){if(t.t==="literal"&&typeof t.value=="number")return t.value<n?e.elements[t.value]??c.undefined:e.elements.length?{t:"union",of:e.elements.slice(n)}:c.undefined;if(t.t==="number")return e.elements.length?{t:"union",of:e.elements}:c.undefined}else {if(t.t==="literal"&&typeof t.value=="number")return e.elements[t.value]??c.undefined;if(t.t==="number")return e.elements.length?{t:"union",of:e.elements}:c.undefined}}return e.t==="array"&&(t.t==="number"||t.t==="literal"&&typeof t.value=="number")?e.items:null}var je=Object.prototype.hasOwnProperty,M=(e,t)=>je.call(e,t)?e[t]:void 0;function B(e){if(e.t==="undefined")return {type:{t:"union",of:[]},hadUndefined:true};if(e.t==="union"&&e.of.some(t=>t.t==="undefined")){let t=e.of.filter(n=>n.t!=="undefined");return {type:t.length===1?t[0]:{t:"union",of:t},hadUndefined:true}}return {type:e,hadUndefined:false}}var K=(e,t)=>e.flags?.[t]??"req",ue=e=>e==="rest"||e==="variadic",Te=e=>!!e.flags?.some(ue),U=e=>e.flags?.findIndex(ue)??-1,we=e=>{if(!e.flags)return e.elements.length;let t=e.flags.findIndex(n=>n!=="req");return t<0?e.elements.length:t};function A(e,t){let n=[],r=[],o=(i,a)=>{n.push(i),r.push(a);};for(let i=0;i<e.length;i++){let a=e[i],l=t[i]??"req";if(l!=="variadic"){o(a,l);continue}if(a.t==="tuple"){let u=a;for(let d=0;d<u.elements.length;d++)o(u.elements[d],K(u,d));}else a.t==="array"?o(a.items,"rest"):a.t==="any"?o(a,"rest"):o(a,"variadic");}return c.tuple(n,r)}function le(e){let t=U(e);return t<0?{prefix:e.elements,rest:null,suffix:[]}:{prefix:e.elements.slice(0,t),rest:e.elements[t],suffix:e.elements.slice(t+1)}}function pe(e,t,n){let r=le(e),o=le(t);if(o.rest===null){if(r.rest!==null)return false;let i=we(t);return e.elements.length<i||e.elements.length>t.elements.length?false:e.elements.every((a,l)=>n(a,t.elements[l]))}if(r.rest===null){let i=r.prefix;if(i.length<o.prefix.length+o.suffix.length)return false;for(let a=0;a<o.prefix.length;a++)if(!n(i[a],o.prefix[a]))return false;for(let a=0;a<o.suffix.length;a++)if(!n(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(!n(i[a],o.rest))return false;return true}if(r.prefix.length>=o.prefix.length&&r.suffix.length>=o.suffix.length){for(let i=0;i<o.prefix.length;i++)if(!n(r.prefix[i],o.prefix[i]))return false;for(let i=o.prefix.length;i<r.prefix.length;i++)if(!n(r.prefix[i],o.rest))return false;if(!n(r.rest,o.rest))return false;for(let i=0;i<o.suffix.length;i++)if(!n(r.suffix[r.suffix.length-o.suffix.length+i],o.suffix[i]))return false;for(let i=0;i<r.suffix.length-o.suffix.length;i++)if(!n(r.suffix[i],o.rest))return false;return true}return false}function N(e,t,n){if(e.t==="array")return e;if(e.t==="tuple"){let r=e,o=r.elements.length,i=r.elements.slice(t,o-n),a=(r.flags??r.elements.map(()=>"req")).slice(t,o-n);return c.tuple(i,a)}return c.tuple([])}function s(e,t,n=new WeakSet){if(e.t!=="keyof"&&e.t!=="index"&&e.t!=="mapped"&&e.t!=="intersection"&&e.t!=="returnType"&&e.t!=="parameters"&&!$e(F(e),t))return e;switch(e.t){case "var":{let r=t[e.name];return r||(e.bound?{t:"var",name:e.name,bound:s(e.bound,t,n)}:e)}case "array":return {t:"array",items:s(e.items,t,n)};case "tuple":{let r=e.elements.map(o=>s(o,t,n));return e.flags?A(r,e.flags):{t:"tuple",elements:r}}case "union":return {t:"union",of:e.of.map(r=>s(r,t,n))};case "object":{if(n.has(e))return e;n.add(e);let r={};for(let i in e.props){let a=e.props[i];r[i]={type:s(a.type,t,n),optional:a.optional};}let o=e.index?{key:e.index.key,value:s(e.index.value,t,n)}:void 0;return n.delete(e),o?{t:"object",props:r,index:o}:{t:"object",props:r}}case "fn":{if(n.has(e))return e;n.add(e);let o={t:"fn",params:e.params.map(i=>({...i,type:s(i.type,t,n)})),returns:s(e.returns,t,n),...e.guard&&{guard:{param:e.guard.param,type:s(e.guard.type,t,n)}}};return n.delete(e),o}case "apply":return {t:"apply",name:e.name,args:e.args.map(r=>s(r,t,n))};case "keyof":return h({t:"keyof",of:s(e.of,t,n)});case "index":return h({t:"index",obj:s(e.obj,t,n),key:s(e.key,t,n)});case "mapped":{let r={};for(let i in t)i!==e.key&&(r[i]=t[i]);let o={t:"mapped",key:e.key,over:s(e.over,t,n),body:s(e.body,r,n),optional:e.optional};return V(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,i=t[o],a=i?h(i):void 0,l=a?.t==="union"?a.of:a?.t==="boolean"?[c.literal(true),c.literal(false)]:null;if(l)return {t:"union",of:l.map(u=>s(e,{...t,[o]:u},n))}}let r=e.infer?.length?Object.fromEntries(Object.entries(t).filter(([o])=>!e.infer.includes(o))):t;return {t:"conditional",check:s(e.check,t,n),extends:s(e.extends,r,n),then:s(e.then,r,n),else:s(e.else,r,n),...e.infer?{infer:e.infer}:{}}}case "intersection":return j({of:e.of.map(r=>s(r,t,n))});case "returnType":return h({t:"returnType",fn:s(e.fn,t,n)});case "parameters":return h({t:"parameters",fn:s(e.fn,t,n)});default:return e}}var Ee=new Set,fe=new WeakMap;function F(e){let t=fe.get(e);if(t)return t;let n=new Set;y(e,n,new WeakSet);let r=n.size===0?Ee:n;return fe.set(e,r),r}function y(e,t,n){switch(e.t){case "var":t.add(e.name),e.bound&&y(e.bound,t,n);return;case "array":y(e.items,t,n);return;case "tuple":for(let r of e.elements)y(r,t,n);return;case "union":for(let r of e.of)y(r,t,n);return;case "object":if(n.has(e))return;n.add(e);for(let r in e.props)y(e.props[r].type,t,n);e.index&&y(e.index.value,t,n);return;case "fn":if(n.has(e))return;n.add(e);for(let r of e.params)y(r.type,t,n);y(e.returns,t,n),e.guard&&y(e.guard.type,t,n);return;case "overload":for(let r of e.signatures){for(let o of r.params)y(o.type,t,n);y(r.returns,t,n);}return;case "apply":for(let r of e.args)y(r,t,n);return;case "keyof":y(e.of,t,n);return;case "index":y(e.obj,t,n),y(e.key,t,n);return;case "mapped":y(e.over,t,n),y(e.body,t,n);return;case "conditional":{if(y(e.check,t,n),!e.infer?.length){y(e.extends,t,n),y(e.then,t,n),y(e.else,t,n);return}let r=new Set;y(e.extends,r,n),y(e.then,r,n),y(e.else,r,n);for(let o of r)e.infer.includes(o)||t.add(o);return}case "intersection":for(let r of e.of)y(r,t,n);return;case "returnType":case "parameters":y(e.fn,t,n);return;default:return}}function $e(e,t){if(e.size===0)return false;for(let n of e)if(n in t)return true;return false}function V(e){let t=h(e.over);if(t.t==="string"||t.t==="number")return {t:"object",props:{},index:{key:t.t,value:s(e.body,{[e.key]:t})}};let n=Ie(t);if(n===null)return null;let r={};for(let o of n)r[o]={type:s(e.body,{[e.key]:c.literal(o)}),optional:e.optional};return {t:"object",props:r}}function Ie(e){if(e.t==="literal"&&typeof e.value=="string")return [e.value];if(e.t==="union"){let t=[];for(let n of e.of)if(n.t==="literal"&&typeof n.value=="string")t.push(n.value);else return null;return t}return null}function E(e,t){if(e.t!=="apply")return false;let n=t[e.name];return n!==void 0&&n.params.length===e.args.length}function $(e,t){if(e.t!=="apply")return e;let n=t[e.name];if(!n||n.params.length!==e.args.length)return e;let r={};return n.params.forEach((o,i)=>r[o]=e.args[i]),s(n.body,r)}function g(e){switch(e.t){case "literal":return `#${typeof e.value}:${String(e.value)}`;case "object":{let t=Object.keys(e.props).sort().map(r=>`${r}${e.props[r].optional?"?":""}:${g(e.props[r].type)}`).join(","),n=e.index?`,[${e.index.key}]:${g(e.index.value)}`:"";return `{${t}${n}}`}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(t=>g(t.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 Oe=1e3,Y={maxTypeDepth:1e3,maxUnionMembers:1e3,maxOverloadSignatures:200},D=Y;function Me(e){D={...Y,...e};}function Pe(){D=Y;}function R(){return D}var P=class extends Error{constructor(t=D.maxTypeDepth){super(`type evaluation exceeded the depth limit (${t}) \u2014 the type is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},C=class extends Error{constructor(t,n=D.maxUnionMembers){super(`union type is too complex to represent (${t} members exceeds limit ${n})`),this.name="UnionTooComplexError";}};var Q=(e,t)=>({seen:new WeakMap,exp:new Set,schemes:e,depth:0,explain:t});function w(e,t,n){return e.explain?.out.push({path:[...e.explain.path],actual:t,expected:n,kind:"type"}),false}function Le(e,t,n={}){let r=[];return !p(e,t,Q(n,{path:[],out:r}))&&r.length===0&&r.push({path:[],actual:e,expected:t,kind:"type"}),r}var Z=new WeakMap;function v(e,t,n={}){if(e===t)return true;if(Object.keys(n).length>0)return p(e,t,Q(n));let r=Z.get(e)?.get(t);if(r!==void 0)return r;let o=p(e,t,Q(n)),i=Z.get(e);return i||Z.set(e,i=new WeakMap),i.set(t,o),o}function We(e,t,n={}){return v(e,t,n)&&v(t,e,n)}function q(e,t){return e.infer?.length||F(e.check).size>0||F(e.extends).size>0?null:v(e.check,e.extends,t)?e.then:e.else}function z(e,t,n=0){if(n>50)return e;let r=h(e);if(r!==e)return z(r,t,n+1);if(e.t==="conditional"){let o=q(e,t.schemes);if(o)return z(o,t,n+1)}return E(e,t.schemes)?z($(e,t.schemes),t,n+1):e.t==="union"?k(e.of.map(o=>z(o,t,n+1))):e}function p(e,t,n){if(n.depth>=R().maxTypeDepth)throw new P;n.depth++;try{return Be(e,t,n)}finally{n.depth--;}}function X(e,t,n,r){if(!n.explain)return p(e,t,n);n.explain.path.push(r);try{return p(e,t,n)}finally{n.explain.path.pop();}}function Be(e,t,n){if(e.t==="any"||t.t==="any"||t.t==="unknown")return true;if(e.t==="unknown")return w(n,e,t);let r=h(e);if(r!==e)return p(r,t,n);let o=h(t);if(o!==t)return p(e,o,n);if(e.t==="mapped"){let l=V({...e,over:z(e.over,n)});if(l)return p(l,t,n)}if(t.t==="mapped"){let l=V({...t,over:z(t.over,n)});if(l)return p(e,l,n)}if(e.t==="conditional"){let l=q(e,n.schemes);if(l)return p(l,t,n)}if(t.t==="conditional"){let l=q(t,n.schemes);if(l)return p(e,l,n)}if(t.t==="intersection"){let l=j(t);return l.t!=="intersection"?p(e,l,n):l.of.every(u=>p(e,u,n))}if(e.t==="intersection"){let l=j(e);if(l.t!=="intersection")return p(l,t,n);if(l.of.some(u=>p(u,t,n)))return true;if(t.t==="object"){let u=Re(l.of);if(u)return p(u,t,n)}return false}if(!(e.t==="apply"&&t.t==="apply"&&e.name===t.name&&e.args.length===t.args.length)&&(E(e,n.schemes)||E(t,n.schemes))){let l=`${g(e)}\u2264${g(t)}`;if(n.exp.has(l))return true;n.exp.add(l);let u=p($(e,n.schemes),$(t,n.schemes),n);return n.exp.delete(l),u}let a=n.seen.get(e);if(a?.has(t))return true;if(a||(a=new WeakSet,n.seen.set(e,a)),a.add(t),e.t==="union")return e.of.every(l=>p(l,t,n));if(e.t==="boolean"&&t.t==="union")return p(c.literal(true),t,n)&&p(c.literal(false),t,n);if(t.t==="union")return t.of.some(l=>p(e,l,n));if(t.t==="overload")return t.signatures.every(l=>p(e,l,n));if(e.t==="overload")return e.signatures.some(l=>p(l,t,n));switch(t.t){case "literal":return e.t==="literal"&&e.value===t.value?true:w(n,e,t);case "string":case "number":case "boolean":case "null":case "undefined":return e.t===t.t||e.t==="literal"&&Fe(e.value)===t.t?true:w(n,e,t);case "void":return e.t==="void"||e.t==="undefined"?true:w(n,e,t);case "array":return e.t==="array"?p(e.items,t.items,n):e.t==="tuple"?e.elements.every(l=>p(l,t.items,n)):w(n,e,t);case "tuple":{if(e.t!=="tuple")return w(n,e,t);if(!e.flags&&!t.flags){if(e.elements.length!==t.elements.length)return w(n,e,t);for(let l=0;l<e.elements.length;l++)if(!X(e.elements[l],t.elements[l],n,String(l)))return false;return true}return pe(e,t,(l,u)=>p(l,u,n))}case "object":return e.t==="object"?ze(e,t,n):Object.keys(t.props).length===0&&!t.index?e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:w(n,e,t):e.t==="array"&&t.index&&Object.values(t.props).every(l=>l.optional)&&p(e.items,t.index.value,n)?true:w(n,e,t);case "fn":return e.t==="fn"?Ue(e,t,n):w(n,e,t);case "var":return e.t==="var"&&e.name===t.name;case "keyof":return e.t==="keyof"&&p(e.of,t.of,n)&&p(t.of,e.of,n);case "index":return e.t==="index"&&p(e.obj,t.obj,n)&&p(t.obj,e.obj,n)&&p(e.key,t.key,n)&&p(t.key,e.key,n);case "mapped":return e.t==="mapped"&&e.key===t.key&&!!e.optional==!!t.optional&&p(e.over,t.over,n)&&p(t.over,e.over,n)&&p(e.body,t.body,n)&&p(t.body,e.body,n);case "conditional":return e.t==="conditional"&&p(e.check,t.check,n)&&p(t.check,e.check,n)&&p(e.extends,t.extends,n)&&p(t.extends,e.extends,n)&&p(e.then,t.then,n)&&p(e.else,t.else,n);case "apply":return e.t==="apply"&&e.name===t.name&&e.args.length===t.args.length&&e.args.every((l,u)=>p(l,t.args[u],n));case "returnType":return e.t==="returnType"&&p(e.fn,t.fn,n)&&p(t.fn,e.fn,n);case "parameters":return e.t==="parameters"&&p(e.fn,t.fn,n)&&p(t.fn,e.fn,n)}}var Fe=e=>typeof e;function Re(e){let t=[];for(let i of e){let a=h(i);if(a.t!=="object")return null;t.push(a);}let n=new Set;for(let i of t)for(let a in i.props)n.add(a);let r={};for(let i of n){let a=[],l=true;for(let u of t){let d=u.props[i];d?(a.push(d.type),d.optional||(l=false)):u.index?.key==="string"&&(a.push(u.index.value),l=false);}r[i]={type:j({of:a}),optional:l};}let o;for(let i of t)i.index&&(o=o?{key:o.key,value:j({of:[o.value,i.index.value]})}:i.index);return o?{t:"object",props:r,index:o}:{t:"object",props:r}}function ze(e,t,n){let r=false;for(let o in t.props)if(!(t.props[o].optional||M(e.props,o))){if(!n.explain)return false;n.explain.out.push({path:[...n.explain.path,o],expected:t.props[o].type,kind:"missing"}),r=true;}if(r)return false;for(let o in t.props){let i=t.props[o],a=M(e.props,o);if(a&&(a.optional&&!i.optional||!X(a.type,i.type,n,o)))return false}if(t.index){for(let o in e.props)if(!X(e.props[o].type,t.index.value,n,o))return false;if(e.index&&!p(e.index.value,t.index.value,n))return false}return true}function Ue(e,t,n){if(t.returns.t!=="void"&&t.returns.t!=="any"&&!p(e.returns,t.returns,n))return false;for(let r=0;r<e.params.length;r++){let o=e.params[r];if(o.variadic)break;let i=t.params[r];if(!i){if(o.optional)continue;return false}if(!p(i.type,o.type,n))return false}return !(t.guard&&(!e.guard||e.guard.param!==t.guard.param||!p(e.guard.type,t.guard.type,n)))}function k(e){let t=[];for(let o of e)o.t==="union"?t.push(...o.of):t.push(o);let n=R().maxUnionMembers;if(t.length>n)throw new C(t.length,n);if(t.some(o=>o.t==="any"))return c.any;let r=[];for(let o of t)if(!r.some(i=>v(o,i))){for(let i=r.length-1;i>=0;i--)v(r[i],o)&&r.splice(i,1);r.push(o);}if(r.some(o=>o.t==="literal"&&o.value===true)&&r.some(o=>o.t==="literal"&&o.value===false)){let o=r.filter(i=>!(i.t==="boolean"||i.t==="literal"&&typeof i.value=="boolean"));o.push(c.boolean),r.length=0,r.push(...o);}return r.length===1?r[0]:{t:"union",of:r}}function Ae(e,t){let n=new Set,r=new WeakSet,o=i=>{if(!r.has(i))switch(r.add(i),i.t){case "keyof":n.add("keyof"),o(i.of);break;case "index":n.add("indexed"),o(i.obj),o(i.key);break;case "mapped":n.add("mapped"),o(i.over),o(i.body);break;case "conditional":n.add("conditional"),i.infer?.length&&n.add("infer"),o(i.check),o(i.extends),o(i.then),o(i.else);break;case "returnType":n.add("returnType"),o(i.fn);break;case "parameters":n.add("parameters"),o(i.fn);break;case "tuple":n.add("tuple"),i.flags?.some(a=>a!=="req")&&n.add("variadic"),i.elements.forEach(o);break;case "intersection":n.add("intersection"),i.of.forEach(o);break;case "overload":n.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":t&&i.name===t&&n.add("recursion"),i.args.forEach(o);break}};return o(e),n}var ce=e=>typeof e=="string"?c.string:typeof e=="number"?c.number:c.boolean;function ee(e){return e.t==="literal"&&e.fresh?ce(e.value):e}function Ce(e){return b(e,new WeakSet)}function De(e){switch(e.t){case "array":return {t:"array",items:b(e.items,new WeakSet)};case "tuple":return {t:"tuple",elements:e.elements.map(t=>b(t,new WeakSet)),...e.flags?{flags:e.flags}:{}};case "object":return se(e,new WeakSet);case "fn":case "overload":return b(e,new WeakSet);default:return e}}function b(e,t){if(e.t==="literal")return e.fresh?ce(e.value):e;if(t.has(e))return e;switch(e.t){case "array":return t.add(e),{t:"array",items:b(e.items,t)};case "tuple":return t.add(e),{t:"tuple",elements:e.elements.map(n=>b(n,t)),...e.flags?{flags:e.flags}:{}};case "object":return t.add(e),se(e,t);case "apply":return t.add(e),{t:"apply",name:e.name,args:e.args.map(n=>b(n,t))};case "fn":return t.add(e),{t:"fn",params:e.params.map(n=>({...n,type:b(n.type,t)})),returns:b(e.returns,t),...e.guard?{guard:{param:e.guard.param,type:b(e.guard.type,t)}}:{}};case "overload":return t.add(e),{t:"overload",signatures:e.signatures.map(n=>b(n,t))};default:return e}}function se(e,t){let n={};for(let o in e.props)n[o]={type:b(e.props[o].type,t),optional:e.props[o].optional};let r=e.index?{key:e.index.key,value:b(e.index.value,t)}:void 0;return r?{t:"object",props:n,index:r}:{t:"object",props:n}}var de=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function qe(e,t){if(v(t,e))return e;if(v(e,t))return t;let n=de(e),r=de(t);return !n||!r||n===r?k([e,t]):null}function x(e,t,n={}){if(e.t==="var"){let r=n[e.name];if(!r)return {...n,[e.name]:t};if(t.t==="any"||t.t==="unknown")return n;let o=qe(r,t);return o?{...n,[e.name]:o}:n}if(t.t==="any"||t.t==="unknown")return n;switch(e.t){case "array":return t.t==="array"?x(e.items,t.items,n):null;case "tuple":{let r=e,o=U(r);if(o<0){if(t.t!=="tuple"||t.elements.length!==r.elements.length)return null;let f=n;for(let W=0;W<r.elements.length;W++)if(f=x(r.elements[W],t.elements[W],f),f===null)return null;return f}let i=o,a=r.elements.length-o-1,l=K(r,o),u=f=>l==="variadic"?f:f.t==="tuple"?f.elements.length?k(f.elements):c.unknown:f.t==="array"?f.items:f,d=n,m=(f,W)=>{d!==null&&(d=x(f,W,d));};if(t.t==="tuple"){if(t.elements.length<i+a)return null;for(let f=0;f<i;f++)m(r.elements[f],t.elements[f]);for(let f=0;f<a;f++)m(r.elements[o+1+f],t.elements[t.elements.length-a+f]);return d!==null&&(d=x(r.elements[o],u(N(t,i,a)),d)),d}if(t.t==="array"){for(let f=0;f<i;f++)m(r.elements[f],t.items);for(let f=0;f<a;f++)m(r.elements[o+1+f],t.items);return d!==null&&(d=x(r.elements[o],u(t),d)),d}return null}case "object":{if(t.t!=="object")return null;let r=n;for(let o in e.props){let i=e.props[o],a=t.props[o];if(!a){if(i.optional)continue;return null}if(r=x(i.type,a.type,r),r===null)return null}return r}case "fn":{if(t.t!=="fn")return null;let r=x(e.returns,t.returns,n);if(r===null)return null;let o=Math.min(e.params.length,t.params.length);for(let i=0;i<o;i++)if(r=x(e.params[i].type,t.params[i].type,r),r===null)return null;return e.guard&&t.guard&&(r=x(e.guard.type,t.guard.type,r)),r}case "apply":{if(t.t!=="apply"||t.name!==e.name||t.args.length!==e.args.length)return null;let r=n;for(let o=0;o<e.args.length;o++)if(r=x(e.args[o],t.args[o],r),r===null)return null;return r}default:return v(t,e)?n:null}}var me="@rev",te=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function I(e,t,n){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===t&&e.key.t==="var"&&e.key.name===n)return c.var(me);switch(e.t){case "array":return {t:"array",items:I(e.items,t,n)};case "tuple":return {t:"tuple",elements:e.elements.map(r=>I(r,t,n)),...e.flags?{flags:e.flags}:{}};case "union":return {t:"union",of:e.of.map(r=>I(r,t,n))};case "fn":return {t:"fn",params:e.params.map(r=>({...r,type:I(r.type,t,n)})),returns:I(e.returns,t,n)};case "apply":return {t:"apply",name:e.name,args:e.args.map(r=>I(r,t,n))};case "returnType":return {t:"returnType",fn:I(e.fn,t,n)};case "object":{let r={};for(let o in e.props)r[o]={type:I(e.props[o].type,t,n),optional:e.props[o].optional};return e.index?{t:"object",props:r,index:{key:e.index.key,value:I(e.index.value,t,n)}}:{t:"object",props:r}}default:return e}}function _e(e,t,n){if(e.over.t!=="keyof"||e.over.of.t!=="var")return null;let r=e.over.of.name;if(n[r])return null;let o={};for(let i in t.props){let a=I(e.body,r,e.key),l=x(a,t.props[i].type,{})?.[me];o[i]={type:l?ee(l):c.unknown,optional:t.props[i].optional};}return {...n,[r]:{t:"object",props:o}}}function ye(e,t,n){let r=n;for(let o=0;o<e.length&&o<t.length;o++){let i=e[o].type,a=t[o];if(te(i)&&a.t==="object"){let l=_e(i,a,r);l&&(r=l);}}return r}function Ke(e,t){let n={};for(let o=0;o<e.params.length;o++){let i=e.params[o];if(i.variadic){for(let a=o;a<t.length;a++)if(n=x(i.type,t[a],n),n===null)return null;break}if(o>=t.length){if(i.optional)continue;return null}if(!te(i.type)&&(n=x(i.type,t[o],n),n===null))return null}let r=ye(e.params,t,n);return {returns:s(e.returns,r),bindings:r}}function Ne(e,t){let n={};for(let r=0;r<e.params.length&&r<t.length;r++){let o=e.params[r];if(te(o.type))continue;let i=x(o.type,t[r],n);i!==null&&(n=i);}return n=ye(e.params,t,n),{returns:s(e.returns,n),bindings:n}}function T(e,t,n,r,o){if(e.t==="var"&&n.has(e.name)){let i=o.get(e.name);i||o.set(e.name,i={co:[],contra:[]}),(r?i.contra:i.co).push(t);return}if(!(t.t==="any"||t.t==="unknown"))switch(e.t){case "array":t.t==="array"&&T(e.items,t.items,n,r,o);return;case "tuple":{let i=e,a=U(i);if(a<0){t.t==="tuple"&&t.elements.length===i.elements.length&&i.elements.forEach((m,f)=>T(m,t.elements[f],n,r,o));return}let l=a,u=i.elements.length-a-1,d=m=>T(i.elements[a],m,n,r,o);if(t.t==="tuple"){let m=t;if(m.elements.length<l+u)return;for(let f=0;f<l;f++)T(i.elements[f],m.elements[f],n,r,o);for(let f=0;f<u;f++)T(i.elements[a+1+f],m.elements[m.elements.length-u+f],n,r,o);d(N(m,l,u));}else if(t.t==="array"){for(let m=0;m<l;m++)T(i.elements[m],t.items,n,r,o);for(let m=0;m<u;m++)T(i.elements[a+1+m],t.items,n,r,o);d(t);}return}case "fn":t.t==="fn"&&(e.params.forEach((i,a)=>{let l=t.params[a];l&&T(i.type,l.type,n,!r,o);}),T(e.returns,t.returns,n,r,o));return;case "object":if(t.t==="object")for(let i in e.props)t.props[i]&&T(e.props[i].type,t.props[i].type,n,r,o);return;case "apply":t.t==="apply"&&t.name===e.name&&t.args.length===e.args.length&&e.args.forEach((i,a)=>T(i,t.args[a],n,r,o));return;default:return}}function Ve(e,t){if(e.length===1)return e[0];let r=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(i=>v(o,i,t)));return k(r)}var Ye=e=>e.t==="union"&&e.of.length===0;function Ge(e,t){let n={};for(let[r,{co:o,contra:i}]of e){let a=o.length?k(o):void 0,l=i.length?Ve(i,t):void 0,u=a??l;a&&l&&(u=!Ye(a)&&a.t!=="any"&&v(a,l,t)?a:l),u&&(n[r]=u);}return n}function He(e,t={},n=0){if(!e.infer?.length||F(e.check).size>0)return null;let r=new Map;T(e.extends,e.check,new Set(e.infer),false,r);let o=Ge(r,t),i=new WeakSet,a=G(s(e.extends,o),t,i,n);return v(e.check,a,t)?G(s(e.then,o),t,i,n):G(s(e.else,o),t,i,n)}function G(e,t={},n=new WeakSet,r=0){let o=r,i=R().maxTypeDepth,a=l=>{switch(l.t){case "var":return c.unknown;case "array":return {t:"array",items:a(l.items)};case "tuple":{let u=l.elements.map(a);return l.flags?A(u,l.flags):{t:"tuple",elements:u}}case "union":return {t:"union",of:l.of.map(a)};case "object":{if(n.has(l))return l;n.add(l);let u={};for(let m in l.props){let f=l.props[m];u[m]={type:a(f.type),optional:f.optional};}let d=l.index?{key:l.index.key,value:a(l.index.value)}:void 0;return n.delete(l),d?{t:"object",props:u,index:d}:{t:"object",props:u}}case "fn":{if(n.has(l))return l;n.add(l);let d={t:"fn",params:l.params.map(m=>({...m,type:a(m.type)})),returns:a(l.returns),...l.guard&&{guard:{param:l.guard.param,type:a(l.guard.type)}}};return n.delete(l),d}case "apply":{if(E(l,t)){let u=$(l,t);if(u.t==="conditional"){if(o>=i)throw new P;o++;try{let d=a(u);if(d.t!=="conditional")return d}finally{o--;}}}return {t:"apply",name:l.name,args:l.args.map(a)}}case "conditional":{let u=l.infer?.length?He(l,t,o):q(l,t);return u?a(u):{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 j({of:l.of.map(a)});case "returnType":return h({t:"returnType",fn:a(l.fn)});default:return l}};return a(e)}var Je=c.union([]);function Se(e,t){return ne(e,t,new WeakMap)}function Ze(e){return e.reduce(Se,Je)}function ne(e,t,n){if(e.t==="any"||t.t==="any")return c.any;if(e===t)return e;let r=n.get(e)?.get(t);if(r)return r;if(e.t==="object"&&t.t==="object")return Qe(e,t,n);if(e.t==="array"&&t.t==="array"){let o={t:"array",items:c.unknown};return he(n,e,t,o),o.items=ne(e.items,t.items,n),o}return k([e,t])}function Qe(e,t,n){let r={t:"object",props:{}};he(n,e,t,r);for(let o in e.props){let i=e.props[o],a=t.props[o];if(a){let l=ne(i.type,a.type,n);r.props[o]=i.optional||a.optional?{type:l,optional:true}:{type:l};}else r.props[o]={type:i.type,optional:true};}for(let o in t.props)o in e.props||(r.props[o]={type:t.props[o].type,optional:true});return r}function he(e,t,n,r){let o=e.get(t);o||(o=new WeakMap,e.set(t,o)),o.set(n,r);}var Xe=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e);function S(e,t=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 "literal":return typeof e.value=="string"?JSON.stringify(e.value):String(e.value);case "array":{let n=S(e.items,t);return et(e.items)?`(${n})[]`:`${n}[]`}case "tuple":return `[${e.elements.map((r,o)=>{let i=e.flags?.[o]??"req",a=S(r,t),l=r.t==="union"?`(${a})`:a;return i==="rest"?`...${l}[]`:i==="variadic"?`...${a}`:i==="optional"?`${l}?`:a}).join(", ")}]`;case "union":{if(t.has(e))return "\u2026";t.add(e);let n=e.of.length===0?"never":e.of.map(r=>S(r,t)).join(" | ");return t.delete(e),n}case "object":{if(t.has(e))return "\u2026";t.add(e);let n=Object.entries(e.props).map(([r,o])=>`${Xe(r)?r:JSON.stringify(r)}${o.optional?"?":""}: ${S(o.type,t)}`);return e.index&&n.push(`[k: ${e.index.key}]: ${S(e.index.value,t)}`),t.delete(e),n.length===0?"{}":`{ ${n.join("; ")} }`}case "fn":{if(t.has(e))return "\u2026";t.add(e);let n=e.params.map(o=>{let i=o.variadic?"...":"",a=o.optional&&!o.variadic?"?":"";return `${i}${o.name}${a}: ${S(o.type,t)}`}).join(", "),r=e.guard?`${e.params[e.guard.param]?.name??`arg${e.guard.param}`} is ${S(e.guard.type,t)}`:S(e.returns,t);return t.delete(e),`(${n}) => ${r}`}case "apply":{if(t.has(e))return "\u2026";t.add(e);let n=e.args.length===0?e.name:`${e.name}<${e.args.map(r=>S(r,t)).join(", ")}>`;return t.delete(e),n}case "overload":{if(t.has(e))return "\u2026";t.add(e);let n=e.signatures.map(r=>S(r,t)).join(" & ");return t.delete(e),n}case "keyof":return `keyof ${S(e.of,t)}`;case "index":return `${S(e.obj,t)}[${S(e.key,t)}]`;case "mapped":{if(t.has(e))return "\u2026";t.add(e);let n=e.optional?"?":"",r=`{ [${e.key} in ${S(e.over,t)}]${n}: ${S(e.body,t)} }`;return t.delete(e),r}case "conditional":{if(t.has(e))return "\u2026";t.add(e);let n=`${S(e.check,t)} extends ${S(e.extends,t)} ? ${S(e.then,t)} : ${S(e.else,t)}`;return t.delete(e),n}case "intersection":return e.of.map(n=>n.t==="union"&&n.of.length>0?`(${S(n,t)})`:S(n,t)).join(" & ");case "returnType":return `ReturnType<${S(e.fn,t)}>`;case "parameters":return `Parameters<${S(e.fn,t)}>`}}function et(e){return e.t==="union"&&e.of.length>0||e.t==="fn"}function tt(e){if(e.length===0)return "value";let t=e[e.length-1];if(/^\d+$/.test(t)){let n=e.slice(0,-1);return n.length?`property '${n.join(".")}' at position ${t}`:`position ${t}`}return `property '${e.join(".")}'`}function nt(e){let t=e.filter(n=>n.kind==="missing");if(t.length&&t.length===e.length){let n=t.map(r=>`'${r.path.join(".")}'`).join(", ");return t.length===1?`property ${n} is missing`:`properties ${n} are missing`}return e.map(n=>`${tt(n.path)}: expected '${S(n.expected)}', got '${S(n.actual)}'`).join("; ")}function L(e,t=new WeakSet){switch(e.t){case "string":case "number":case "boolean":case "null":case "literal":return true;case "array":return t.has(e)?true:(t.add(e),L(B(e.items).type,t));case "tuple":return t.has(e)?true:(t.add(e),e.elements.every(n=>L(B(n).type,t)));case "object":{if(t.has(e))return true;t.add(e);let n=Object.values(e.props).every(o=>L(B(o.type).type,t)),r=!e.index||L(B(e.index.value).type,t);return n&&r}case "union":return t.has(e)?true:(t.add(e),e.of.every(n=>L(n,t)));case "intersection":return t.has(e)?true:(t.add(e),e.of.every(n=>L(n,t)));case "undefined":case "void":case "fn":case "overload":case "keyof":case "index":case "mapped":case "conditional":case "returnType":case "parameters":case "var":case "apply":case "any":case "unknown":return false}}function rt(e,t,n={}){let r=e;for(let o of t){let i=_(r,o,n);if(i===null)return null;r=i;}return {type:r,completions:H(r,n)}}var ot=e=>e==="[]"||/^\d+$/.test(e);function _(e,t,n,r=new Set){if(E(e,n)){let i=g(e);if(r.has(i))return null;r.add(i);let a=_($(e,n),t,n,r);return r.delete(i),a}let o=h(e);if(o!==e)return _(o,t,n,r);switch(e.t){case "any":return e;case "object":{let i=M(e.props,t);return i?i.optional?k([i.type,{t:"undefined"}]):i.type:e.index?.key==="string"?e.index.value:null}case "array":return ot(t)?e.items:null;case "tuple":{let i=e.flags?.findIndex(u=>u!=="req")??-1,a=Number(t);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?k(l):null}case "union":{let i=e.of.map(a=>_(a,t,n,r)).filter(a=>a!==null);return i.length?k(i):null}case "intersection":{let i=e.of.map(a=>_(a,t,n,r)).filter(a=>a!==null);return i.length?j({of:i}):null}default:return null}}function H(e,t,n=new WeakSet,r=new Set){if(E(e,t)){let i=g(e);if(r.has(i))return [];r.add(i);let a=H($(e,t),t,n,r);return r.delete(i),a}let o=h(e);if(o!==e)return H(o,t,n,r);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(n.has(e))return [];n.add(e);let i=[],a=new Set;for(let l of e.of)for(let u of H(l,t,n,r))a.has(u.key)||(a.add(u.key),i.push(u));return n.delete(e),i}default:return []}}exports.DEFAULT_TYPE_LIMITS=Y;exports.TYPE_EVAL_DEPTH_LIMIT=Oe;exports.TypeEvalLimitError=P;exports.UnionTooComplexError=C;exports.configureTypeLimits=Me;exports.discover=rt;exports.equals=We;exports.expand1=$;exports.flagAt=K;exports.format=S;exports.formatTypeDiff=nt;exports.groundVars=G;exports.instantiate=Ke;exports.instantiateLoose=Ne;exports.isScheme=E;exports.isSerializable=L;exports.isVariadicTuple=Te;exports.join=Se;exports.joinAll=Ze;exports.normalizeTuple=A;exports.normalizeUnion=k;exports.ownProp=M;exports.resetTypeLimits=Pe;exports.resolveTypeOp=h;exports.restIndex=U;exports.s=c;exports.sliceTuple=N;exports.substitute=s;exports.subtype=v;exports.typeDiff=Le;exports.typeFeatures=Ae;exports.typeLimits=R;exports.unify=x;exports.widen=ee;exports.widenInferred=De;exports.widenType=Ce;exports.withoutUndefined=B;
1
+ 'use strict';var O=e=>Object.freeze(e),c={any:O({t:"any"}),unknown:O({t:"unknown"}),string:O({t:"string"}),number:O({t:"number"}),boolean:O({t:"boolean"}),null:O({t:"null"}),undefined:O({t:"undefined"}),void:O({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"?X(e.obj,e.key)??e:e.t==="returnType"?Te(e.fn)??e:e.t==="parameters"?Ee(e.fn)??e:e}var le={t:"union",of:[]},je=e=>e.t==="union"&&e.of.length===0;function Te(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 c.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 k(e){let n=[],r=o=>{let a=h(o);a.t==="intersection"?a.of.forEach(r):n.push(a);};e.of.forEach(r);let t=[];for(let o of n){if(o.t==="any")return c.any;if(je(o))return le;if(o.t!=="unknown"){if(ue(o)){let a=false;for(let i=t.length-1;i>=0;i--){let l=t[i];if(ue(l)){if(pe(l,o)){a=true;break}if(pe(o,l))t.splice(i,1);else return le}}if(a)continue}else if(t.some(a=>a===o))continue;t.push(o);}}return t.length===0?c.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=>c.literal(r));return e.index&&n.push(e.index.key==="number"?c.number:c.string),n.length===0?{t:"union",of:[]}:n.length===1?n[0]:{t:"union",of:n}}function $e(e){let n=a=>a.t==="literal"&&typeof a.value=="string"?[a.value]:a.t==="union"?a.of.flatMap(n):[],r=e.filter(a=>a.t!=="string"&&a.t!=="number").map(n);if(r.length===0)return e[0];let t=r[0].filter(a=>r.every(i=>i.includes(a))),o=[...new Set(t)].map(a=>c.literal(a));return o.length===0?{t:"union",of:[]}:o.length===1?o[0]:{t:"union",of:o}}function X(e,n){if(e=h(e),n=h(n),n.t==="union"){let r=n.of.map(t=>X(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=X(h(t),n);if(o===null)return null;o.t!=="undefined"&&r.push(o);}return r.length===0?c.undefined:r.length===1?r[0]:k({of:r})}if(e.t==="object"){if(n.t==="literal"&&(typeof n.value=="string"||typeof n.value=="number")){let r=M(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:c.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]??c.undefined:e.elements.length?{t:"union",of:e.elements.slice(r)}:c.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:c.undefined}else {if(n.t==="literal"&&typeof n.value=="number")return e.elements[n.value]??c.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:c.undefined}}return e.t==="array"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number")?e.items:null}var Ie=Object.prototype.hasOwnProperty,M=(e,n)=>Ie.call(e,n)?e[n]:void 0;function B(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 Y=(e,n)=>e.flags?.[n]??"req",se=e=>e==="rest"||e==="variadic",Oe=e=>!!e.flags?.some(se),_=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 q(e,n){let r=[],t=[],o=(a,i)=>{r.push(a),t.push(i);};for(let a=0;a<e.length;a++){let i=e[a],l=n[a]??"req";if(l!=="variadic"){o(i,l);continue}if(i.t==="tuple"){let u=i;for(let d=0;d<u.elements.length;d++)o(u.elements[d],Y(u,d));}else i.t==="array"?o(i.items,"rest"):i.t==="any"?o(i,"rest"):o(i,"variadic");}return c.tuple(r,t)}function ce(e){let 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 de(e,n,r){let t=ce(e),o=ce(n);if(o.rest===null){if(t.rest!==null)return false;let a=Me(n);return e.elements.length<a||e.elements.length>n.elements.length?false:e.elements.every((i,l)=>r(i,n.elements[l]))}if(t.rest===null){let a=t.prefix;if(a.length<o.prefix.length+o.suffix.length)return false;for(let i=0;i<o.prefix.length;i++)if(!r(a[i],o.prefix[i]))return false;for(let i=0;i<o.suffix.length;i++)if(!r(a[a.length-o.suffix.length+i],o.suffix[i]))return false;for(let i=o.prefix.length;i<a.length-o.suffix.length;i++)if(!r(a[i],o.rest))return false;return true}if(t.prefix.length>=o.prefix.length&&t.suffix.length>=o.suffix.length){for(let a=0;a<o.prefix.length;a++)if(!r(t.prefix[a],o.prefix[a]))return false;for(let a=o.prefix.length;a<t.prefix.length;a++)if(!r(t.prefix[a],o.rest))return false;if(!r(t.rest,o.rest))return false;for(let a=0;a<o.suffix.length;a++)if(!r(t.suffix[t.suffix.length-o.suffix.length+a],o.suffix[a]))return false;for(let a=0;a<t.suffix.length-o.suffix.length;a++)if(!r(t.suffix[a],o.rest))return false;return true}return false}function G(e,n,r){if(e.t==="array")return e;if(e.t==="tuple"){let t=e,o=t.elements.length,a=t.elements.slice(n,o-r),i=(t.flags??t.elements.map(()=>"req")).slice(n,o-r);return c.tuple(a,i)}return c.tuple([])}function s(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:s(e.bound,n,r)}:e)}case "array":return {t:"array",items:s(e.items,n,r)};case "tuple":{let t=e.elements.map(o=>s(o,n,r));return e.flags?q(t,e.flags):{t:"tuple",elements:t}}case "union":return {t:"union",of:e.of.map(t=>s(t,n,r))};case "object":{if(r.has(e))return e;r.add(e);let t={};for(let a in e.props){let i=e.props[a];t[a]={type:s(i.type,n,r),optional:i.optional};}let o=e.index?{key:e.index.key,value:s(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(a=>({...a,type:s(a.type,n,r)})),returns:s(e.returns,n,r),...e.guard&&{guard:{param:e.guard.param,type:s(e.guard.type,n,r)}}};return r.delete(e),o}case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>s(t,n,r))};case "keyof":return h({t:"keyof",of:s(e.of,n,r)});case "index":return h({t:"index",obj:s(e.obj,n,r),key:s(e.key,n,r)});case "mapped":{let t={};for(let a in n)a!==e.key&&(t[a]=n[a]);let o={t:"mapped",key:e.key,over:s(e.over,n,r),body:s(e.body,t,r),optional:e.optional};return z(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,a=n[o],i=a?h(a):void 0,l=i?.t==="union"?i.of:i?.t==="boolean"?[c.literal(true),c.literal(false)]:null;if(l)return {t:"union",of:l.map(u=>s(e,{...n,[o]:u},r))}}let t=e.infer?.length?Object.fromEntries(Object.entries(n).filter(([o])=>!e.infer.includes(o))):n;return {t:"conditional",check:s(e.check,n,r),extends:s(e.extends,t,r),then:s(e.then,t,r),else:s(e.else,t,r),...e.infer?{infer:e.infer}:{}}}case "intersection":return k({of:e.of.map(t=>s(t,n,r))});case "returnType":return h({t:"returnType",fn:s(e.fn,n,r)});case "parameters":return h({t:"parameters",fn:s(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:s(e.body,{[e.key]:n})}};let r=We(n);if(r===null)return null;let t={};for(let o of r)t[o]={type:s(e.body,{[e.key]:c.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,a)=>t[o]=e.args[a]),s(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 R(e,n={},r=0){if(r>ye)return e;if(e.t==="var")return e.bound?R(e.bound,n,r+1):e;if(w(e,n))return R(E(e,n),n,r+1);if(e.t==="mapped"){let t=z(e);if(t)return R(t,n,r+1)}if(e.t==="intersection")return k(e);if(e.t==="union"){let t=e.of.map(o=>R(o,n,r+1));return t.some((o,a)=>o!==e.of[a])?{t:"union",of:t}:e}return e}function U(e,n,r=0){if(r>ye)return e;let t=A(e,n);if(t!==e)return U(t,n,r+1);let o=R(e,n,r);return o===e?e:U(o,n,r+1)}function A(e,n={}){let r=h(e);if(r!==e)return r;switch(e.t){case "keyof":{let t=U(e.of,n);return t===e.of?e:h({...e,of:t})}case "index":{let t=U(e.obj,n),o=U(e.key,n);return t===e.obj&&o===e.key?e:h({...e,obj:t,key:o})}case "returnType":{let t=U(e.fn,n);return t===e.fn?e:h({...e,fn:t})}default:return e}}var Be=1e3,H={maxTypeDepth:1e3,maxUnionMembers:1e3,maxOverloadSignatures:200},N=H;function Fe(e){N={...H,...e};}function ze(){N=H;}function C(){return N}var P=class extends Error{constructor(n=N.maxTypeDepth){super(`type evaluation exceeded the depth limit (${n}) \u2014 the type is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},K=class extends Error{constructor(n,r=N.maxUnionMembers){super(`union type is too complex to represent (${n} members exceeds limit ${r})`),this.name="UnionTooComplexError";}};var ne=(e,n)=>({seen:new WeakMap,exp:new Set,schemes:e,depth:0,explain:n});function b(e,n,r){return e.explain?.out.push({path:[...e.explain.path],actual:n,expected:r,kind:"type"}),false}function Re(e,n,r={}){let t=[];return !p(e,n,ne(r,{path:[],out:t}))&&t.length===0&&t.push({path:[],actual:e,expected:n,kind:"type"}),t}var ee=new WeakMap;function j(e,n,r={}){if(e===n)return true;if(Object.keys(r).length>0)return p(e,n,ne(r));let t=ee.get(e)?.get(n);if(t!==void 0)return t;let o=p(e,n,ne(r)),a=ee.get(e);return a||ee.set(e,a=new WeakMap),a.set(n,o),o}function Ue(e,n,r={}){return j(e,n,r)&&j(n,e,r)}function Q(e,n){return e.infer?.length||F(e.check).size>0||F(e.extends).size>0?null:j(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=Q(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"?x(e.of.map(o=>D(o,n,r+1))):e}function p(e,n,r){if(r.depth>=C().maxTypeDepth)throw new P;r.depth++;try{return Ae(e,n,r)}finally{r.depth--;}}function re(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 Ae(e,n,r){if(e.t==="any"||n.t==="any"||n.t==="unknown")return true;if(e.t==="unknown")return b(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 l=z({...e,over:D(e.over,r)});if(l)return p(l,n,r)}if(n.t==="mapped"){let l=z({...n,over:D(n.over,r)});if(l)return p(e,l,r)}if(e.t==="conditional"){let l=Q(e,r.schemes);if(l)return p(l,n,r)}if(n.t==="conditional"){let l=Q(n,r.schemes);if(l)return p(e,l,r)}if(n.t==="intersection"){let l=k(n);return l.t!=="intersection"?p(e,l,r):l.of.every(u=>p(e,u,r))}if(e.t==="intersection"){let l=k(e);if(l.t!=="intersection")return p(l,n,r);if(l.of.some(u=>p(u,n,r)))return true;if(n.t==="object"){let u=De(l.of);if(u)return p(u,n,r)}return false}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 l=`${g(e)}\u2264${g(n)}`;if(r.exp.has(l))return true;r.exp.add(l);let u=p(E(e,r.schemes),E(n,r.schemes),r);return r.exp.delete(l),u}let i=r.seen.get(e);if(i?.has(n))return true;if(i||(i=new WeakSet,r.seen.set(e,i)),i.add(n),e.t==="union")return e.of.every(l=>p(l,n,r));if(e.t==="boolean"&&n.t==="union")return p(c.literal(true),n,r)&&p(c.literal(false),n,r);if(n.t==="union")return n.of.some(l=>p(e,l,r));if(n.t==="overload")return n.signatures.every(l=>p(e,l,r));if(e.t==="overload")return e.signatures.some(l=>p(l,n,r));switch(n.t){case "literal":return e.t==="literal"&&e.value===n.value?true:b(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:b(r,e,n);case "void":return e.t==="void"||e.t==="undefined"?true:b(r,e,n);case "array":return e.t==="array"?e.readonly&&!n.readonly?b(r,e,n):p(e.items,n.items,r):e.t==="tuple"?e.readonly&&!n.readonly?b(r,e,n):e.elements.every(l=>p(l,n.items,r)):b(r,e,n);case "tuple":{if(e.t!=="tuple"||e.readonly&&!n.readonly)return b(r,e,n);if(!e.flags&&!n.flags){if(e.elements.length!==n.elements.length)return b(r,e,n);for(let l=0;l<e.elements.length;l++)if(!re(e.elements[l],n.elements[l],r,String(l)))return false;return true}return de(e,n,(l,u)=>p(l,u,r))}case "object":return e.t==="object"?_e(e,n,r):Object.keys(n.props).length===0&&!n.index?e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:b(r,e,n):e.t==="array"&&n.index&&Object.values(n.props).every(l=>l.optional)&&p(e.items,n.index.value,r)?true:b(r,e,n);case "fn":return e.t==="fn"?qe(e,n,r):b(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((l,u)=>l===n.path[u]);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((l,u)=>p(l,n.args[u],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 a of e){let i=h(a);if(i.t!=="object")return null;n.push(i);}let r=new Set;for(let a of n)for(let i in a.props)r.add(i);let t={};for(let a of r){let i=[],l=true;for(let u of n){let d=u.props[a];d?(i.push(d.type),d.optional||(l=false)):u.index?.key==="string"&&(i.push(u.index.value),l=false);}t[a]={type:k({of:i}),optional:l};}let o;for(let a of n)a.index&&(o=o?{key:o.key,value:k({of:[o.value,a.index.value]})}:a.index);return o?{t:"object",props:t,index:o}:{t:"object",props:t}}function _e(e,n,r){let t=false;for(let o in n.props)if(!(n.props[o].optional||M(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 a=n.props[o],i=M(e.props,o);if(i&&(i.optional&&!a.optional||!re(i.type,a.type,r,o)))return false}if(n.index){for(let o in e.props)if(!re(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 qe(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 a=n.params[t];if(!a){if(o.optional)continue;return false}if(!p(a.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=C().maxUnionMembers;if(n.length>r)throw new K(n.length,r);if(n.some(o=>o.t==="any"))return c.any;let t=[];for(let o of n)if(!t.some(a=>j(o,a))){for(let a=t.length-1;a>=0;a--)j(t[a],o)&&t.splice(a,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(a=>!(a.t==="boolean"||a.t==="literal"&&typeof a.value=="boolean"));o.push(c.boolean),t.length=0,t.push(...o);}return t.length===1?t[0]:{t:"union",of:t}}function Ke(e,n){let r=new Set,t=new WeakSet,o=a=>{if(!t.has(a))switch(t.add(a),a.t){case "keyof":r.add("keyof"),o(a.of);break;case "index":r.add("indexed"),o(a.obj),o(a.key);break;case "mapped":r.add("mapped"),o(a.over),o(a.body);break;case "conditional":r.add("conditional"),a.infer?.length&&r.add("infer"),o(a.check),o(a.extends),o(a.then),o(a.else);break;case "returnType":r.add("returnType"),o(a.fn);break;case "parameters":r.add("parameters"),o(a.fn);break;case "tuple":r.add("tuple"),a.flags?.some(i=>i!=="req")&&r.add("variadic"),a.elements.forEach(o);break;case "intersection":r.add("intersection"),a.of.forEach(o);break;case "overload":r.add("overload");for(let i of a.signatures){for(let l of i.params)o(l.type);o(i.returns);}break;case "object":for(let i in a.props)o(a.props[i].type);a.index&&o(a.index.value);break;case "array":o(a.items);break;case "union":a.of.forEach(o);break;case "fn":for(let i of a.params)o(i.type);o(a.returns),a.guard&&o(a.guard.type);break;case "var":a.bound&&o(a.bound);break;case "apply":n&&a.name===n&&r.add("recursion"),a.args.forEach(o);break}};return o(e),r}var te=e=>typeof e=="string"?c.string:typeof e=="number"?c.number:c.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])?x(n):e}return e}function Ne(e){return T(e,new WeakSet)}function Qe(e){switch(e.t){case "array":return {t:"array",items:T(e.items,new WeakSet),...e.readonly?{readonly:true}:{}};case "tuple":return {t:"tuple",elements:e.elements.map(n=>T(n,new WeakSet)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return he(e,new WeakSet);case "fn":case "overload":return T(e,new WeakSet);default:return e}}function T(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:T(e.items,n),...e.readonly?{readonly:true}:{}};case "tuple":return n.add(e),{t:"tuple",elements:e.elements.map(r=>T(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=>T(r,n))};case "fn":return n.add(e),{t:"fn",params:e.params.map(r=>({...r,type:T(r.type,n)})),returns:T(e.returns,n),...e.guard?{guard:{param:e.guard.param,type:T(e.guard.type,n)}}:{}};case "overload":return n.add(e),{t:"overload",signatures:e.signatures.map(r=>T(r,n))};default:return e}}function he(e,n){let r={};for(let o in e.props)r[o]={type:T(e.props[o].type,n),optional:e.props[o].optional};let t=e.index?{key:e.index.key,value:T(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 Ve(e,n){if(j(n,e))return e;if(j(e,n))return n;let r=ge(e),t=ge(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=Ve(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=_(t);if(o<0){if(n.t!=="tuple"||n.elements.length!==t.elements.length)return null;let f=r;for(let W=0;W<t.elements.length;W++)if(f=v(t.elements[W],n.elements[W],f),f===null)return null;return f}let a=o,i=t.elements.length-o-1,l=Y(t,o),u=f=>l==="variadic"?f:f.t==="tuple"?f.elements.length?x(f.elements):c.unknown:f.t==="array"?f.items:f,d=r,m=(f,W)=>{d!==null&&(d=v(f,W,d));};if(n.t==="tuple"){if(n.elements.length<a+i)return null;for(let f=0;f<a;f++)m(t.elements[f],n.elements[f]);for(let f=0;f<i;f++)m(t.elements[o+1+f],n.elements[n.elements.length-i+f]);return d!==null&&(d=v(t.elements[o],u(G(n,a,i)),d)),d}if(n.t==="array"){for(let f=0;f<a;f++)m(t.elements[f],n.items);for(let f=0;f<i;f++)m(t.elements[o+1+f],n.items);return d!==null&&(d=v(t.elements[o],u(n),d)),d}return null}case "object":{if(n.t!=="object")return null;let t=r;for(let o in e.props){let a=e.props[o],i=n.props[o];if(!i){if(a.optional)continue;return null}if(t=v(a.type,i.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 a=0;a<o;a++)if(t=v(e.params[a].type,n.params[a].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 j(n,e)?r:null}}var xe="@rev",ae=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function I(e,n,r){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===n&&e.key.t==="var"&&e.key.name===r)return c.var(xe);switch(e.t){case "array":return {t:"array",items:I(e.items,n,r)};case "tuple":return {t:"tuple",elements:e.elements.map(t=>I(t,n,r)),...e.flags?{flags:e.flags}:{}};case "union":return {t:"union",of:e.of.map(t=>I(t,n,r))};case "fn":return {t:"fn",params:e.params.map(t=>({...t,type:I(t.type,n,r)})),returns:I(e.returns,n,r)};case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>I(t,n,r))};case "returnType":return {t:"returnType",fn:I(e.fn,n,r)};case "object":{let t={};for(let o in e.props)t[o]={type:I(e.props[o].type,n,r),optional:e.props[o].optional};return e.index?{t:"object",props:t,index:{key:e.index.key,value:I(e.index.value,n,r)}}:{t:"object",props:t}}default:return e}}function Ye(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 a in n.props){let i=I(e.body,t,e.key),l=v(i,n.props[a].type,{})?.[xe];o[a]={type:l?oe(l):c.unknown,optional:n.props[a].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 a=e[o].type,i=n[o];if(ae(a)&&i.t==="object"){let l=Ye(a,i,t);l&&(t=l);}}return t}function Ge(e,n){let r={};for(let o=0;o<e.params.length;o++){let a=e.params[o];if(a.variadic){for(let i=o;i<n.length;i++)if(r=v(a.type,n[i],r),r===null)return null;break}if(o>=n.length){if(a.optional)continue;return null}if(!ae(a.type)&&(r=v(a.type,n[o],r),r===null))return null}let t=ve(e.params,n,r);return {returns:s(e.returns,t),bindings:t}}function He(e,n){let r={};for(let t=0;t<e.params.length&&t<n.length;t++){let o=e.params[t];if(ae(o.type))continue;let a=v(o.type,n[t],r);a!==null&&(r=a);}return r=ve(e.params,n,r),{returns:s(e.returns,r),bindings:r}}function $(e,n,r,t,o){if(e.t==="var"&&r.has(e.name)){let a=o.get(e.name);a||o.set(e.name,a={co:[],contra:[]}),(t?a.contra:a.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 a=e,i=_(a);if(i<0){n.t==="tuple"&&n.elements.length===a.elements.length&&a.elements.forEach((m,f)=>$(m,n.elements[f],r,t,o));return}let l=i,u=a.elements.length-i-1,d=m=>$(a.elements[i],m,r,t,o);if(n.t==="tuple"){let m=n;if(m.elements.length<l+u)return;for(let f=0;f<l;f++)$(a.elements[f],m.elements[f],r,t,o);for(let f=0;f<u;f++)$(a.elements[i+1+f],m.elements[m.elements.length-u+f],r,t,o);d(G(m,l,u));}else if(n.t==="array"){for(let m=0;m<l;m++)$(a.elements[m],n.items,r,t,o);for(let m=0;m<u;m++)$(a.elements[i+1+m],n.items,r,t,o);d(n);}return}case "fn":n.t==="fn"&&(e.params.forEach((a,i)=>{let l=n.params[i];l&&$(a.type,l.type,r,!t,o);}),$(e.returns,n.returns,r,t,o));return;case "object":if(n.t==="object")for(let a in e.props)n.props[a]&&$(e.props[a].type,n.props[a].type,r,t,o);return;case "apply":n.t==="apply"&&n.name===e.name&&n.args.length===e.args.length&&e.args.forEach((a,i)=>$(a,n.args[i],r,t,o));return;default:return}}function Je(e,n){if(e.length===1)return e[0];let t=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(a=>j(o,a,n)));return x(t)}var Ze=e=>e.t==="union"&&e.of.length===0;function Xe(e,n){let r={};for(let[t,{co:o,contra:a}]of e){let i=o.length?x(o):void 0,l=a.length?Je(a,n):void 0,u=i??l;i&&l&&(u=!Ze(i)&&i.t!=="any"&&j(i,l,n)?i:l),u&&(r[t]=u);}return r}function en(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=Xe(t,n),a=new WeakSet,i=J(s(e.extends,o),n,a,r);return j(e.check,i,n)?J(s(e.then,o),n,a,r):J(s(e.else,o),n,a,r)}function J(e,n={},r=new WeakSet,t=0){let o=t,a=C().maxTypeDepth,i=l=>{switch(l.t){case "var":return c.unknown;case "array":return {t:"array",items:i(l.items)};case "tuple":{let u=l.elements.map(i);return l.flags?q(u,l.flags):{t:"tuple",elements:u}}case "union":return {t:"union",of:l.of.map(i)};case "object":{if(r.has(l))return l;r.add(l);let u={};for(let m in l.props){let f=l.props[m];u[m]={type:i(f.type),optional:f.optional};}let d=l.index?{key:l.index.key,value:i(l.index.value)}:void 0;return r.delete(l),d?{t:"object",props:u,index:d}:{t:"object",props:u}}case "fn":{if(r.has(l))return l;r.add(l);let d={t:"fn",params:l.params.map(m=>({...m,type:i(m.type)})),returns:i(l.returns),...l.guard&&{guard:{param:l.guard.param,type:i(l.guard.type)}}};return r.delete(l),d}case "apply":{if(w(l,n)){let u=E(l,n);if(u.t==="conditional"){if(o>=a)throw new P;o++;try{let d=i(u);if(d.t!=="conditional")return d}finally{o--;}}}return {t:"apply",name:l.name,args:l.args.map(i)}}case "conditional":{let u=l.infer?.length?en(l,n,o):Q(l,n);return u?i(u):{t:"conditional",check:i(l.check),extends:i(l.extends),then:i(l.then),else:i(l.else),...l.infer?{infer:l.infer}:{}}}case "intersection":return k({of:l.of.map(i)});case "returnType":return h({t:"returnType",fn:i(l.fn)});default:return l}};return i(e)}var nn=c.union([]);function ke(e,n){return ie(e,n,new WeakMap)}function rn(e){return e.reduce(ke,nn)}function ie(e,n,r){if(e.t==="any"||n.t==="any")return c.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 tn(e,n,r);if(e.t==="array"&&n.t==="array"){let o={t:"array",items:c.unknown};return be(r,e,n,o),o.items=ie(e.items,n.items,r),o}return x([e,n])}function tn(e,n,r){let t={t:"object",props:{}};be(r,e,n,t);for(let o in e.props){let a=e.props[o],i=n.props[o];if(i){let l=ie(a.type,i.type,r);t.props[o]=a.optional||i.optional?{type:l,optional:true}:{type:l};}else t.props[o]={type:a.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 on=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=an(e.items)?`(${r})[]`:`${r}[]`;return e.readonly?`readonly ${t}`:t}case "tuple":{let t=`[${e.elements.map((o,a)=>{let i=e.flags?.[a]??"req",l=S(o,n),u=o.t==="union"?`(${l})`:l;return i==="rest"?`...${u}[]`:i==="variadic"?`...${l}`:i==="optional"?`${u}?`: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])=>`${on(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 a=o.variadic?"...":"",i=o.optional&&!o.variadic?"?":"";return `${a}${o.name}${i}: ${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 an(e){return e.t==="union"&&e.of.length>0||e.t==="fn"}function ln(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 un(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=>`${ln(r.path)}: expected '${S(r.expected)}', got '${S(r.actual)}'`).join("; ")}function L(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),L(B(e.items).type,n));case "tuple":return n.has(e)?true:(n.add(e),e.elements.every(r=>L(B(r).type,n)));case "object":{if(n.has(e))return true;n.add(e);let r=Object.values(e.props).every(o=>L(B(o.type).type,n)),t=!e.index||L(B(e.index.value).type,n);return r&&t}case "union":return n.has(e)?true:(n.add(e),e.of.every(r=>L(r,n)));case "intersection":return n.has(e)?true:(n.add(e),e.of.every(r=>L(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 pn(e,n,r={}){let t=e;for(let o of n){let a=V(t,o,r);if(a===null)return null;t=a;}return {type:t,completions:Z(t,r)}}var fn=e=>e==="[]"||/^\d+$/.test(e);function V(e,n,r,t=new Set){if(w(e,r)){let a=g(e);if(t.has(a))return null;t.add(a);let i=V(E(e,r),n,r,t);return t.delete(a),i}let o=h(e);if(o!==e)return V(o,n,r,t);switch(e.t){case "any":return e;case "object":{let a=M(e.props,n);return a?a.optional?x([a.type,{t:"undefined"}]):a.type:e.index?.key==="string"?e.index.value:null}case "array":return fn(n)?e.items:null;case "tuple":{let a=e.flags?.findIndex(u=>u!=="req")??-1,i=Number(n);if(!(Number.isInteger(i)&&i>=0))return null;if(a<0)return i<e.elements.length?e.elements[i]:null;if(i<a)return e.elements[i];let l=e.elements.slice(a);return l.length?x(l):null}case "union":{let a=e.of.map(i=>V(i,n,r,t)).filter(i=>i!==null);return a.length?x(a):null}case "intersection":{let a=e.of.map(i=>V(i,n,r,t)).filter(i=>i!==null);return a.length?k({of:a}):null}default:return null}}function Z(e,n,r=new WeakSet,t=new Set){if(w(e,n)){let a=g(e);if(t.has(a))return [];t.add(a);let i=Z(E(e,n),n,r,t);return t.delete(a),i}let o=h(e);if(o!==e)return Z(o,n,r,t);switch(e.t){case "object":return Object.entries(e.props).map(([a,i])=>({key:a,type:i.type,optional:!!i.optional}));case "array":return [{key:"[]",type:e.items,optional:false}];case "tuple":return e.elements.map((a,i)=>({key:String(i),type:a,optional:false}));case "union":case "intersection":{if(r.has(e))return [];r.add(e);let a=[],i=new Set;for(let l of e.of)for(let u of Z(l,n,r,t))i.has(u.key)||(i.add(u.key),a.push(u));return r.delete(e),a}default:return []}}exports.DEFAULT_TYPE_LIMITS=H;exports.TYPE_EVAL_DEPTH_LIMIT=Be;exports.TypeEvalLimitError=P;exports.UnionTooComplexError=K;exports.apparentType=R;exports.configureTypeLimits=Fe;exports.discover=pn;exports.equals=Ue;exports.expand1=E;exports.flagAt=Y;exports.format=S;exports.formatTypeDiff=un;exports.groundVars=J;exports.instantiate=Ge;exports.instantiateLoose=He;exports.isScheme=w;exports.isSerializable=L;exports.isVariadicTuple=Oe;exports.join=ke;exports.joinAll=rn;exports.normalizeTuple=q;exports.normalizeUnion=x;exports.ownProp=M;exports.resetTypeLimits=ze;exports.resolveOp=A;exports.resolveTypeOp=h;exports.restIndex=_;exports.s=c;exports.sliceTuple=G;exports.substitute=s;exports.subtype=j;exports.typeDiff=Re;exports.typeFeatures=Ke;exports.typeLimits=C;exports.unify=v;exports.widen=oe;exports.widenInferred=Qe;exports.widenLiteral=Se;exports.widenType=Ne;exports.withoutUndefined=B;
package/dist/index.d.cts CHANGED
@@ -82,10 +82,18 @@ type Schema = {
82
82
  } | {
83
83
  readonly t: "array";
84
84
  readonly items: Schema;
85
+ /**
86
+ * `readonly T[]` (o `ReadonlyArray<T>` do TS). Só afeta a RELAÇÃO, e num
87
+ * sentido: `T[] ≤ readonly T[]`, mas **não** o contrário — dar um readonly
88
+ * onde se espera mutável perderia a garantia. TC28.
89
+ */
90
+ readonly readonly?: boolean;
85
91
  } | {
86
92
  readonly t: "tuple";
87
93
  readonly elements: readonly Schema[];
88
94
  readonly flags?: readonly ElementFlag[];
95
+ /** `readonly [A, B]` — mesma regra do array readonly (TC28). */
96
+ readonly readonly?: boolean;
89
97
  } | {
90
98
  readonly t: "union";
91
99
  readonly of: readonly Schema[];
@@ -95,6 +103,22 @@ type Schema = {
95
103
  readonly returns: Schema;
96
104
  /** Type predicate `(v) => v is S` — narrowing (ver `GuardSig`). */
97
105
  readonly guard?: GuardSig;
106
+ /**
107
+ * Os type params **DECLARADOS**, em ordem (`<T, U>`). Ausente = a assinatura
108
+ * **não é genérica** — que é o que o tsc diz quando `Signature.typeParameters`
109
+ * é `undefined`.
110
+ *
111
+ * Existe para o **argumento de tipo explícito** (`f<T>(x)`): sem ordem
112
+ * declarada não dá para saber a que `var` o 1º argumento se liga, nem checar
113
+ * aridade. O tsc carrega exatamente isto (`types.ts#Signature.typeParameters`)
114
+ * e **nunca** deriva a ordem por aparição — sem a lista, ele trata a chamada
115
+ * como não-genérica e reporta TS2558. Fazemos igual (TC27).
116
+ *
117
+ * Só os NOMES: a constraint continua no próprio `var` (`var.bound`, TC10), que
118
+ * é onde o `sigBounds` já a procura. Defaults (`<T = string>`) estão fora do
119
+ * vocabulário, então "mínimo" ≡ "total" na checagem de aridade.
120
+ */
121
+ readonly typeParams?: readonly string[];
98
122
  } | {
99
123
  readonly t: "overload";
100
124
  readonly signatures: readonly {
@@ -102,6 +126,8 @@ type Schema = {
102
126
  readonly params: readonly Param[];
103
127
  readonly returns: Schema;
104
128
  readonly guard?: GuardSig;
129
+ /** Type params DECLARADOS desta assinatura (ver o `fn` acima). */
130
+ readonly typeParams?: readonly string[];
105
131
  }[];
106
132
  } | {
107
133
  readonly t: "keyof";
@@ -137,6 +163,23 @@ type Schema = {
137
163
  readonly name: string;
138
164
  readonly bound?: Schema;
139
165
  readonly isConst?: boolean;
166
+ } | {
167
+ /**
168
+ * `typeof x` em posição de TIPO — o *type query* do TS.
169
+ *
170
+ * É o único nó do vocabulário que **não** se resolve pela álgebra: ele
171
+ * pergunta o tipo de um **VALOR**, e valor é assunto do escopo, que este
172
+ * package não conhece (zero-dep, por desenho). Quem resolve é o checker,
173
+ * no ponto de USO — espelhando o `getTypeFromTypeQueryNode` do tsc, que é
174
+ * lazy (`links.resolvedType`) pelo mesmo motivo.
175
+ *
176
+ * Um `typeQuery` que chegue à álgebra é sinal de que a resolução não
177
+ * aconteceu (nome inexistente — já reportado); os algoritmos o tratam como
178
+ * folha opaca, sem estourar.
179
+ */
180
+ readonly t: "typeQuery";
181
+ /** O entity name, em partes: `typeof obj.m` → `["obj", "m"]`. */
182
+ readonly path: readonly string[];
140
183
  } | {
141
184
  readonly t: "apply";
142
185
  readonly name: string;
@@ -211,10 +254,15 @@ declare const s: {
211
254
  readonly object: (props: Record<string, Prop>, index?: IndexSig) => Schema;
212
255
  /** `Record<K, V>` — objeto só com assinatura de índice `{ [k: K]: V }`. */
213
256
  readonly record: (value: Schema, key?: "string" | "number") => Schema;
214
- readonly array: (items: Schema) => Schema;
257
+ readonly array: (items: Schema, ro?: boolean) => Schema;
215
258
  /** Tupla fixa `[A, B]` — comprimento e posições conhecidos. */
216
- readonly tuple: (elements: readonly Schema[], flags?: readonly ElementFlag[]) => Schema;
217
- readonly fn: (params: Param[], returns: Schema) => Schema;
259
+ readonly tuple: (elements: readonly Schema[], flags?: readonly ElementFlag[], ro?: boolean) => Schema;
260
+ /**
261
+ * `typeParams` são os type params DECLARADOS, em ordem — omitir significa
262
+ * "não é genérica" (e um `f<T>(x)` sobre ela vira erro de aridade, como no tsc).
263
+ * As `var` do corpo continuam carregando a constraint (TC10).
264
+ */
265
+ readonly fn: (params: Param[], returns: Schema, typeParams?: readonly string[]) => Schema;
218
266
  /** Type predicate `(…) => v is S` — fn que devolve `boolean` e estreita o param `i`. */
219
267
  readonly guard: (params: Param[], type: Schema, param?: number) => Schema;
220
268
  /**
@@ -240,6 +288,11 @@ declare const s: {
240
288
  readonly returnType: (fn: Schema) => Schema;
241
289
  readonly parameters: (fn: Schema) => Schema;
242
290
  readonly var: (name: string, bound?: Schema, isConst?: boolean) => Schema;
291
+ /**
292
+ * `typeof x` em posição de tipo. Resolvido pelo **checker** (precisa do escopo
293
+ * de valor), não pela álgebra — ver o JSDoc do nó `typeQuery`.
294
+ */
295
+ readonly typeQuery: (path: readonly string[]) => Schema;
243
296
  /** Construtor de tipo aplicado: `apply("Map", [K, V])` ⇒ `Map<K, V>`. */
244
297
  readonly apply: (name: string, args?: readonly Schema[]) => Schema;
245
298
  /** Açúcar para `Promise<T>` — o que `await` desembrulha. */
@@ -420,9 +473,48 @@ declare function isScheme(t: Schema, schemes: Schemes): boolean;
420
473
  */
421
474
  declare function expand1(t: Schema, schemes: Schemes): Schema;
422
475
 
476
+ /**
477
+ * Normaliza `t` até a forma que dá para INSPECIONAR (ler props, extrair chaves):
478
+ *
479
+ * - `var T extends C` → `C` (a constraint; o `getBaseConstraintOfType` do tsc);
480
+ * - `apply("X")` COM scheme registrado → expande **um nível** e continua (lazy,
481
+ * para tipo recursivo terminar). Sem scheme, fica opaco — é a ilha nominal
482
+ * legítima (`Promise`, `Map`), TC2;
483
+ * - `mapped` concreto → o objeto resultante;
484
+ * - `intersection` → a forma canônica (membros aparentes);
485
+ * - o resto → ele mesmo.
486
+ *
487
+ * Idempotente e cycle-safe por profundidade. NÃO resolve operadores de tipo —
488
+ * isso é do `resolveTypeOp`; aqui só se prepara o OPERANDO (ver `resolveOp`).
489
+ */
490
+ declare function apparentType(t: Schema, schemes?: Schemes, depth?: number): Schema;
491
+ /**
492
+ * Resolve um operador de tipo (`keyof`/`T[K]`/`ReturnType`) **ciente de schemes**:
493
+ * normaliza o OPERANDO com {@link apparentType} e então resolve. É o que faz
494
+ * `keyof Property` virar `"id" | "title"` como no tsc.
495
+ *
496
+ * Devolve o próprio `t` quando não há o que resolver (operando genérico) — a
497
+ * mesma semântica do `resolveTypeOp`, então é substituível onde os `schemes`
498
+ * estiverem disponíveis.
499
+ */
500
+ declare function resolveOp(t: Schema, schemes?: Schemes): Schema;
501
+
423
502
  /** Alarga um literal FRESH pra sua base; mantém não-fresh e não-literais. Raso —
424
503
  * usado por elemento na CONSTRUÇÃO de array/object/tupla literal (no checker). */
425
504
  declare function widen(t: Schema): Schema;
505
+ /**
506
+ * O `getWidenedLiteralType` do tsc (`checker.ts:25661`): alarga literal **fresh**
507
+ * e **distribui sobre união** — `1 | 2` (frescos) vira `number`. Mantém não-fresh.
508
+ *
509
+ * É a regra do binding MUTÁVEL: `let n = 1` é `number`, `const c = 1` é `1`
510
+ * (`getWidenedLiteralTypeForInitializer`, `checker.ts:41456` — const/readonly
511
+ * mantém, o resto alarga). Sem isto, `let n = 1; n = 2` erraria, porque o binding
512
+ * teria ficado com o tipo `1`.
513
+ *
514
+ * Difere do `widen` (raso, sem união) e do `widenType` (fundo, entra em
515
+ * membro): aqui é só o TOPO, distribuindo em união — exatamente o do tsc.
516
+ */
517
+ declare function widenLiteral(t: Schema): Schema;
426
518
  /**
427
519
  * Widening TOTAL (`getWidenedType` do TS): alarga todo literal fresh, **inclusive
428
520
  * o do topo**. É a regra do **retorno de função** (`() => 1` → `() => number`;
@@ -470,4 +562,4 @@ interface Discovery {
470
562
  */
471
563
  declare function discover(schema: Schema, path: readonly string[], schemes?: Schemes): Discovery | null;
472
564
 
473
- 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, configureTypeLimits, discover, equals, expand1, flagAt, format, formatTypeDiff, groundVars, instantiate, instantiateLoose, isScheme, isSerializable, isVariadicTuple, join, joinAll, normalizeTuple, normalizeUnion, ownProp, resetTypeLimits, resolveTypeOp, restIndex, s, sliceTuple, substitute, subtype, typeDiff, typeFeatures, typeLimits, unify, widen, widenInferred, widenType, withoutUndefined };
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 };
package/dist/index.d.ts CHANGED
@@ -82,10 +82,18 @@ type Schema = {
82
82
  } | {
83
83
  readonly t: "array";
84
84
  readonly items: Schema;
85
+ /**
86
+ * `readonly T[]` (o `ReadonlyArray<T>` do TS). Só afeta a RELAÇÃO, e num
87
+ * sentido: `T[] ≤ readonly T[]`, mas **não** o contrário — dar um readonly
88
+ * onde se espera mutável perderia a garantia. TC28.
89
+ */
90
+ readonly readonly?: boolean;
85
91
  } | {
86
92
  readonly t: "tuple";
87
93
  readonly elements: readonly Schema[];
88
94
  readonly flags?: readonly ElementFlag[];
95
+ /** `readonly [A, B]` — mesma regra do array readonly (TC28). */
96
+ readonly readonly?: boolean;
89
97
  } | {
90
98
  readonly t: "union";
91
99
  readonly of: readonly Schema[];
@@ -95,6 +103,22 @@ type Schema = {
95
103
  readonly returns: Schema;
96
104
  /** Type predicate `(v) => v is S` — narrowing (ver `GuardSig`). */
97
105
  readonly guard?: GuardSig;
106
+ /**
107
+ * Os type params **DECLARADOS**, em ordem (`<T, U>`). Ausente = a assinatura
108
+ * **não é genérica** — que é o que o tsc diz quando `Signature.typeParameters`
109
+ * é `undefined`.
110
+ *
111
+ * Existe para o **argumento de tipo explícito** (`f<T>(x)`): sem ordem
112
+ * declarada não dá para saber a que `var` o 1º argumento se liga, nem checar
113
+ * aridade. O tsc carrega exatamente isto (`types.ts#Signature.typeParameters`)
114
+ * e **nunca** deriva a ordem por aparição — sem a lista, ele trata a chamada
115
+ * como não-genérica e reporta TS2558. Fazemos igual (TC27).
116
+ *
117
+ * Só os NOMES: a constraint continua no próprio `var` (`var.bound`, TC10), que
118
+ * é onde o `sigBounds` já a procura. Defaults (`<T = string>`) estão fora do
119
+ * vocabulário, então "mínimo" ≡ "total" na checagem de aridade.
120
+ */
121
+ readonly typeParams?: readonly string[];
98
122
  } | {
99
123
  readonly t: "overload";
100
124
  readonly signatures: readonly {
@@ -102,6 +126,8 @@ type Schema = {
102
126
  readonly params: readonly Param[];
103
127
  readonly returns: Schema;
104
128
  readonly guard?: GuardSig;
129
+ /** Type params DECLARADOS desta assinatura (ver o `fn` acima). */
130
+ readonly typeParams?: readonly string[];
105
131
  }[];
106
132
  } | {
107
133
  readonly t: "keyof";
@@ -137,6 +163,23 @@ type Schema = {
137
163
  readonly name: string;
138
164
  readonly bound?: Schema;
139
165
  readonly isConst?: boolean;
166
+ } | {
167
+ /**
168
+ * `typeof x` em posição de TIPO — o *type query* do TS.
169
+ *
170
+ * É o único nó do vocabulário que **não** se resolve pela álgebra: ele
171
+ * pergunta o tipo de um **VALOR**, e valor é assunto do escopo, que este
172
+ * package não conhece (zero-dep, por desenho). Quem resolve é o checker,
173
+ * no ponto de USO — espelhando o `getTypeFromTypeQueryNode` do tsc, que é
174
+ * lazy (`links.resolvedType`) pelo mesmo motivo.
175
+ *
176
+ * Um `typeQuery` que chegue à álgebra é sinal de que a resolução não
177
+ * aconteceu (nome inexistente — já reportado); os algoritmos o tratam como
178
+ * folha opaca, sem estourar.
179
+ */
180
+ readonly t: "typeQuery";
181
+ /** O entity name, em partes: `typeof obj.m` → `["obj", "m"]`. */
182
+ readonly path: readonly string[];
140
183
  } | {
141
184
  readonly t: "apply";
142
185
  readonly name: string;
@@ -211,10 +254,15 @@ declare const s: {
211
254
  readonly object: (props: Record<string, Prop>, index?: IndexSig) => Schema;
212
255
  /** `Record<K, V>` — objeto só com assinatura de índice `{ [k: K]: V }`. */
213
256
  readonly record: (value: Schema, key?: "string" | "number") => Schema;
214
- readonly array: (items: Schema) => Schema;
257
+ readonly array: (items: Schema, ro?: boolean) => Schema;
215
258
  /** Tupla fixa `[A, B]` — comprimento e posições conhecidos. */
216
- readonly tuple: (elements: readonly Schema[], flags?: readonly ElementFlag[]) => Schema;
217
- readonly fn: (params: Param[], returns: Schema) => Schema;
259
+ readonly tuple: (elements: readonly Schema[], flags?: readonly ElementFlag[], ro?: boolean) => Schema;
260
+ /**
261
+ * `typeParams` são os type params DECLARADOS, em ordem — omitir significa
262
+ * "não é genérica" (e um `f<T>(x)` sobre ela vira erro de aridade, como no tsc).
263
+ * As `var` do corpo continuam carregando a constraint (TC10).
264
+ */
265
+ readonly fn: (params: Param[], returns: Schema, typeParams?: readonly string[]) => Schema;
218
266
  /** Type predicate `(…) => v is S` — fn que devolve `boolean` e estreita o param `i`. */
219
267
  readonly guard: (params: Param[], type: Schema, param?: number) => Schema;
220
268
  /**
@@ -240,6 +288,11 @@ declare const s: {
240
288
  readonly returnType: (fn: Schema) => Schema;
241
289
  readonly parameters: (fn: Schema) => Schema;
242
290
  readonly var: (name: string, bound?: Schema, isConst?: boolean) => Schema;
291
+ /**
292
+ * `typeof x` em posição de tipo. Resolvido pelo **checker** (precisa do escopo
293
+ * de valor), não pela álgebra — ver o JSDoc do nó `typeQuery`.
294
+ */
295
+ readonly typeQuery: (path: readonly string[]) => Schema;
243
296
  /** Construtor de tipo aplicado: `apply("Map", [K, V])` ⇒ `Map<K, V>`. */
244
297
  readonly apply: (name: string, args?: readonly Schema[]) => Schema;
245
298
  /** Açúcar para `Promise<T>` — o que `await` desembrulha. */
@@ -420,9 +473,48 @@ declare function isScheme(t: Schema, schemes: Schemes): boolean;
420
473
  */
421
474
  declare function expand1(t: Schema, schemes: Schemes): Schema;
422
475
 
476
+ /**
477
+ * Normaliza `t` até a forma que dá para INSPECIONAR (ler props, extrair chaves):
478
+ *
479
+ * - `var T extends C` → `C` (a constraint; o `getBaseConstraintOfType` do tsc);
480
+ * - `apply("X")` COM scheme registrado → expande **um nível** e continua (lazy,
481
+ * para tipo recursivo terminar). Sem scheme, fica opaco — é a ilha nominal
482
+ * legítima (`Promise`, `Map`), TC2;
483
+ * - `mapped` concreto → o objeto resultante;
484
+ * - `intersection` → a forma canônica (membros aparentes);
485
+ * - o resto → ele mesmo.
486
+ *
487
+ * Idempotente e cycle-safe por profundidade. NÃO resolve operadores de tipo —
488
+ * isso é do `resolveTypeOp`; aqui só se prepara o OPERANDO (ver `resolveOp`).
489
+ */
490
+ declare function apparentType(t: Schema, schemes?: Schemes, depth?: number): Schema;
491
+ /**
492
+ * Resolve um operador de tipo (`keyof`/`T[K]`/`ReturnType`) **ciente de schemes**:
493
+ * normaliza o OPERANDO com {@link apparentType} e então resolve. É o que faz
494
+ * `keyof Property` virar `"id" | "title"` como no tsc.
495
+ *
496
+ * Devolve o próprio `t` quando não há o que resolver (operando genérico) — a
497
+ * mesma semântica do `resolveTypeOp`, então é substituível onde os `schemes`
498
+ * estiverem disponíveis.
499
+ */
500
+ declare function resolveOp(t: Schema, schemes?: Schemes): Schema;
501
+
423
502
  /** Alarga um literal FRESH pra sua base; mantém não-fresh e não-literais. Raso —
424
503
  * usado por elemento na CONSTRUÇÃO de array/object/tupla literal (no checker). */
425
504
  declare function widen(t: Schema): Schema;
505
+ /**
506
+ * O `getWidenedLiteralType` do tsc (`checker.ts:25661`): alarga literal **fresh**
507
+ * e **distribui sobre união** — `1 | 2` (frescos) vira `number`. Mantém não-fresh.
508
+ *
509
+ * É a regra do binding MUTÁVEL: `let n = 1` é `number`, `const c = 1` é `1`
510
+ * (`getWidenedLiteralTypeForInitializer`, `checker.ts:41456` — const/readonly
511
+ * mantém, o resto alarga). Sem isto, `let n = 1; n = 2` erraria, porque o binding
512
+ * teria ficado com o tipo `1`.
513
+ *
514
+ * Difere do `widen` (raso, sem união) e do `widenType` (fundo, entra em
515
+ * membro): aqui é só o TOPO, distribuindo em união — exatamente o do tsc.
516
+ */
517
+ declare function widenLiteral(t: Schema): Schema;
426
518
  /**
427
519
  * Widening TOTAL (`getWidenedType` do TS): alarga todo literal fresh, **inclusive
428
520
  * o do topo**. É a regra do **retorno de função** (`() => 1` → `() => number`;
@@ -470,4 +562,4 @@ interface Discovery {
470
562
  */
471
563
  declare function discover(schema: Schema, path: readonly string[], schemes?: Schemes): Discovery | null;
472
564
 
473
- 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, configureTypeLimits, discover, equals, expand1, flagAt, format, formatTypeDiff, groundVars, instantiate, instantiateLoose, isScheme, isSerializable, isVariadicTuple, join, joinAll, normalizeTuple, normalizeUnion, ownProp, resetTypeLimits, resolveTypeOp, restIndex, s, sliceTuple, substitute, subtype, typeDiff, typeFeatures, typeLimits, unify, widen, widenInferred, widenType, withoutUndefined };
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 };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var O=e=>Object.freeze(e),c={any:O({t:"any"}),unknown:O({t:"unknown"}),string:O({t:"string"}),number:O({t:"number"}),boolean:O({t:"boolean"}),null:O({t:"null"}),undefined:O({t:"undefined"}),void:O({t:"void"}),literal:e=>({t:"literal",value:e}),object:(e,t)=>({t:"object",props:e,...t?{index:t}:{}}),record:(e,t="string")=>({t:"object",props:{},index:{key:t,value:e}}),array:e=>({t:"array",items:e}),tuple:(e,t)=>({t:"tuple",elements:e,...t&&t.some(n=>n!=="req")?{flags:t}:{}}),fn:(e,t)=>({t:"fn",params:e,returns:t}),guard:(e,t,n=0)=>({t:"fn",params:e,returns:{t:"boolean"},guard:{param:n,type:t}}),overload:e=>({t:"overload",signatures:e}),keyof:e=>({t:"keyof",of:e}),index:(e,t)=>({t:"index",obj:e,key:t}),mapped:(e,t,n,r=false)=>({t:"mapped",key:e,over:t,body:n,optional:r}),conditional:(e,t,n,r,o)=>({t:"conditional",check:e,extends:t,then:n,else:r,...o&&o.length?{infer:o}:{}}),intersection:e=>({t:"intersection",of:e}),and:(e,t)=>({t:"intersection",of:[e,t]}),returnType:e=>({t:"returnType",fn:e}),parameters:e=>({t:"parameters",fn:e}),var:(e,t,n)=>({t:"var",name:e,bound:t,isConst:n}),apply:(e,t=[])=>({t:"apply",name:e,args:t}),promise:e=>({t:"apply",name:"Promise",args:[e]}),union:e=>{let t=[];for(let n of e)n.t==="union"?t.push(...n.of):t.push(n);return {t:"union",of:t}}};function h(e){return e.t==="keyof"?ae(e.of)??e:e.t==="index"?J(e.obj,e.key)??e:e.t==="returnType"?xe(e.fn)??e:e.t==="parameters"?ke(e.fn)??e:e}var re={t:"union",of:[]},ge=e=>e.t==="union"&&e.of.length===0;function xe(e){return e.t==="fn"?e.returns:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1].returns:null}function ve(e){if(e.t==="undefined")return e;let t=e.t==="union"?e.of:[e];return t.some(n=>n.t==="undefined")?e:{t:"union",of:[...t,{t:"undefined"}]}}function ke(e){let t=e.t==="fn"?e:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1]:null;if(!t)return null;let n=[],r=[];for(let o of t.params)o.variadic?(n.push(o.type.t==="array"?o.type.items:o.type),r.push("rest")):o.optional?(n.push(ve(o.type)),r.push("optional")):(n.push(o.type),r.push("req"));return c.tuple(n,r)}var oe=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function ie(e,t){return e.t==="literal"&&t.t==="literal"?e.value===t.value:e.t==="literal"&&(t.t==="string"||t.t==="number"||t.t==="boolean")?typeof e.value===t.t:e.t===t.t&&(e.t==="string"||e.t==="number"||e.t==="boolean")}function j(e){let t=[],n=o=>{let i=h(o);i.t==="intersection"?i.of.forEach(n):t.push(i);};e.of.forEach(n);let r=[];for(let o of t){if(o.t==="any")return c.any;if(ge(o))return re;if(o.t!=="unknown"){if(oe(o)){let i=false;for(let a=r.length-1;a>=0;a--){let l=r[a];if(oe(l)){if(ie(l,o)){i=true;break}if(ie(o,l))r.splice(a,1);else return re}}if(i)continue}else if(r.some(i=>i===o))continue;r.push(o);}}return r.length===0?c.unknown:r.length===1?r[0]:{t:"intersection",of:r}}function ae(e){if(e.t==="union"){let n=e.of.map(ae);return n.some(r=>r===null)?null:be(n)}if(e.t!=="object")return null;let t=Object.keys(e.props).map(n=>c.literal(n));return e.index&&t.push(e.index.key==="number"?c.number:c.string),t.length===0?{t:"union",of:[]}:t.length===1?t[0]:{t:"union",of:t}}function be(e){let t=i=>i.t==="literal"&&typeof i.value=="string"?[i.value]:i.t==="union"?i.of.flatMap(t):[],n=e.filter(i=>i.t!=="string"&&i.t!=="number").map(t);if(n.length===0)return e[0];let r=n[0].filter(i=>n.every(a=>a.includes(i))),o=[...new Set(r)].map(i=>c.literal(i));return o.length===0?{t:"union",of:[]}:o.length===1?o[0]:{t:"union",of:o}}function J(e,t){if(e=h(e),t=h(t),t.t==="union"){let n=t.of.map(r=>J(e,r));return n.some(r=>r===null)?null:{t:"union",of:n}}if(e.t==="intersection"){let n=[];for(let r of e.of){let o=J(h(r),t);if(o===null)return null;o.t!=="undefined"&&n.push(o);}return n.length===0?c.undefined:n.length===1?n[0]:j({of:n})}if(e.t==="object"){if(t.t==="literal"&&(typeof t.value=="string"||typeof t.value=="number")){let n=M(e.props,String(t.value));return n?n.optional?{t:"union",of:[n.type,{t:"undefined"}]}:n.type:typeof t.value=="number"&&e.index?.key==="number"||e.index?.key==="string"?e.index.value:c.undefined}if(e.index?.key==="string"&&t.t==="string"||e.index?.key==="number"&&(t.t==="number"||t.t==="literal"&&typeof t.value=="number"))return e.index.value}if(e.t==="tuple"){let n=e.flags?.findIndex(r=>r!=="req")??-1;if(n>=0){if(t.t==="literal"&&typeof t.value=="number")return t.value<n?e.elements[t.value]??c.undefined:e.elements.length?{t:"union",of:e.elements.slice(n)}:c.undefined;if(t.t==="number")return e.elements.length?{t:"union",of:e.elements}:c.undefined}else {if(t.t==="literal"&&typeof t.value=="number")return e.elements[t.value]??c.undefined;if(t.t==="number")return e.elements.length?{t:"union",of:e.elements}:c.undefined}}return e.t==="array"&&(t.t==="number"||t.t==="literal"&&typeof t.value=="number")?e.items:null}var je=Object.prototype.hasOwnProperty,M=(e,t)=>je.call(e,t)?e[t]:void 0;function B(e){if(e.t==="undefined")return {type:{t:"union",of:[]},hadUndefined:true};if(e.t==="union"&&e.of.some(t=>t.t==="undefined")){let t=e.of.filter(n=>n.t!=="undefined");return {type:t.length===1?t[0]:{t:"union",of:t},hadUndefined:true}}return {type:e,hadUndefined:false}}var K=(e,t)=>e.flags?.[t]??"req",ue=e=>e==="rest"||e==="variadic",Te=e=>!!e.flags?.some(ue),U=e=>e.flags?.findIndex(ue)??-1,we=e=>{if(!e.flags)return e.elements.length;let t=e.flags.findIndex(n=>n!=="req");return t<0?e.elements.length:t};function A(e,t){let n=[],r=[],o=(i,a)=>{n.push(i),r.push(a);};for(let i=0;i<e.length;i++){let a=e[i],l=t[i]??"req";if(l!=="variadic"){o(a,l);continue}if(a.t==="tuple"){let u=a;for(let d=0;d<u.elements.length;d++)o(u.elements[d],K(u,d));}else a.t==="array"?o(a.items,"rest"):a.t==="any"?o(a,"rest"):o(a,"variadic");}return c.tuple(n,r)}function le(e){let t=U(e);return t<0?{prefix:e.elements,rest:null,suffix:[]}:{prefix:e.elements.slice(0,t),rest:e.elements[t],suffix:e.elements.slice(t+1)}}function pe(e,t,n){let r=le(e),o=le(t);if(o.rest===null){if(r.rest!==null)return false;let i=we(t);return e.elements.length<i||e.elements.length>t.elements.length?false:e.elements.every((a,l)=>n(a,t.elements[l]))}if(r.rest===null){let i=r.prefix;if(i.length<o.prefix.length+o.suffix.length)return false;for(let a=0;a<o.prefix.length;a++)if(!n(i[a],o.prefix[a]))return false;for(let a=0;a<o.suffix.length;a++)if(!n(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(!n(i[a],o.rest))return false;return true}if(r.prefix.length>=o.prefix.length&&r.suffix.length>=o.suffix.length){for(let i=0;i<o.prefix.length;i++)if(!n(r.prefix[i],o.prefix[i]))return false;for(let i=o.prefix.length;i<r.prefix.length;i++)if(!n(r.prefix[i],o.rest))return false;if(!n(r.rest,o.rest))return false;for(let i=0;i<o.suffix.length;i++)if(!n(r.suffix[r.suffix.length-o.suffix.length+i],o.suffix[i]))return false;for(let i=0;i<r.suffix.length-o.suffix.length;i++)if(!n(r.suffix[i],o.rest))return false;return true}return false}function N(e,t,n){if(e.t==="array")return e;if(e.t==="tuple"){let r=e,o=r.elements.length,i=r.elements.slice(t,o-n),a=(r.flags??r.elements.map(()=>"req")).slice(t,o-n);return c.tuple(i,a)}return c.tuple([])}function s(e,t,n=new WeakSet){if(e.t!=="keyof"&&e.t!=="index"&&e.t!=="mapped"&&e.t!=="intersection"&&e.t!=="returnType"&&e.t!=="parameters"&&!$e(F(e),t))return e;switch(e.t){case "var":{let r=t[e.name];return r||(e.bound?{t:"var",name:e.name,bound:s(e.bound,t,n)}:e)}case "array":return {t:"array",items:s(e.items,t,n)};case "tuple":{let r=e.elements.map(o=>s(o,t,n));return e.flags?A(r,e.flags):{t:"tuple",elements:r}}case "union":return {t:"union",of:e.of.map(r=>s(r,t,n))};case "object":{if(n.has(e))return e;n.add(e);let r={};for(let i in e.props){let a=e.props[i];r[i]={type:s(a.type,t,n),optional:a.optional};}let o=e.index?{key:e.index.key,value:s(e.index.value,t,n)}:void 0;return n.delete(e),o?{t:"object",props:r,index:o}:{t:"object",props:r}}case "fn":{if(n.has(e))return e;n.add(e);let o={t:"fn",params:e.params.map(i=>({...i,type:s(i.type,t,n)})),returns:s(e.returns,t,n),...e.guard&&{guard:{param:e.guard.param,type:s(e.guard.type,t,n)}}};return n.delete(e),o}case "apply":return {t:"apply",name:e.name,args:e.args.map(r=>s(r,t,n))};case "keyof":return h({t:"keyof",of:s(e.of,t,n)});case "index":return h({t:"index",obj:s(e.obj,t,n),key:s(e.key,t,n)});case "mapped":{let r={};for(let i in t)i!==e.key&&(r[i]=t[i]);let o={t:"mapped",key:e.key,over:s(e.over,t,n),body:s(e.body,r,n),optional:e.optional};return V(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,i=t[o],a=i?h(i):void 0,l=a?.t==="union"?a.of:a?.t==="boolean"?[c.literal(true),c.literal(false)]:null;if(l)return {t:"union",of:l.map(u=>s(e,{...t,[o]:u},n))}}let r=e.infer?.length?Object.fromEntries(Object.entries(t).filter(([o])=>!e.infer.includes(o))):t;return {t:"conditional",check:s(e.check,t,n),extends:s(e.extends,r,n),then:s(e.then,r,n),else:s(e.else,r,n),...e.infer?{infer:e.infer}:{}}}case "intersection":return j({of:e.of.map(r=>s(r,t,n))});case "returnType":return h({t:"returnType",fn:s(e.fn,t,n)});case "parameters":return h({t:"parameters",fn:s(e.fn,t,n)});default:return e}}var Ee=new Set,fe=new WeakMap;function F(e){let t=fe.get(e);if(t)return t;let n=new Set;y(e,n,new WeakSet);let r=n.size===0?Ee:n;return fe.set(e,r),r}function y(e,t,n){switch(e.t){case "var":t.add(e.name),e.bound&&y(e.bound,t,n);return;case "array":y(e.items,t,n);return;case "tuple":for(let r of e.elements)y(r,t,n);return;case "union":for(let r of e.of)y(r,t,n);return;case "object":if(n.has(e))return;n.add(e);for(let r in e.props)y(e.props[r].type,t,n);e.index&&y(e.index.value,t,n);return;case "fn":if(n.has(e))return;n.add(e);for(let r of e.params)y(r.type,t,n);y(e.returns,t,n),e.guard&&y(e.guard.type,t,n);return;case "overload":for(let r of e.signatures){for(let o of r.params)y(o.type,t,n);y(r.returns,t,n);}return;case "apply":for(let r of e.args)y(r,t,n);return;case "keyof":y(e.of,t,n);return;case "index":y(e.obj,t,n),y(e.key,t,n);return;case "mapped":y(e.over,t,n),y(e.body,t,n);return;case "conditional":{if(y(e.check,t,n),!e.infer?.length){y(e.extends,t,n),y(e.then,t,n),y(e.else,t,n);return}let r=new Set;y(e.extends,r,n),y(e.then,r,n),y(e.else,r,n);for(let o of r)e.infer.includes(o)||t.add(o);return}case "intersection":for(let r of e.of)y(r,t,n);return;case "returnType":case "parameters":y(e.fn,t,n);return;default:return}}function $e(e,t){if(e.size===0)return false;for(let n of e)if(n in t)return true;return false}function V(e){let t=h(e.over);if(t.t==="string"||t.t==="number")return {t:"object",props:{},index:{key:t.t,value:s(e.body,{[e.key]:t})}};let n=Ie(t);if(n===null)return null;let r={};for(let o of n)r[o]={type:s(e.body,{[e.key]:c.literal(o)}),optional:e.optional};return {t:"object",props:r}}function Ie(e){if(e.t==="literal"&&typeof e.value=="string")return [e.value];if(e.t==="union"){let t=[];for(let n of e.of)if(n.t==="literal"&&typeof n.value=="string")t.push(n.value);else return null;return t}return null}function E(e,t){if(e.t!=="apply")return false;let n=t[e.name];return n!==void 0&&n.params.length===e.args.length}function $(e,t){if(e.t!=="apply")return e;let n=t[e.name];if(!n||n.params.length!==e.args.length)return e;let r={};return n.params.forEach((o,i)=>r[o]=e.args[i]),s(n.body,r)}function g(e){switch(e.t){case "literal":return `#${typeof e.value}:${String(e.value)}`;case "object":{let t=Object.keys(e.props).sort().map(r=>`${r}${e.props[r].optional?"?":""}:${g(e.props[r].type)}`).join(","),n=e.index?`,[${e.index.key}]:${g(e.index.value)}`:"";return `{${t}${n}}`}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(t=>g(t.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 Oe=1e3,Y={maxTypeDepth:1e3,maxUnionMembers:1e3,maxOverloadSignatures:200},D=Y;function Me(e){D={...Y,...e};}function Pe(){D=Y;}function R(){return D}var P=class extends Error{constructor(t=D.maxTypeDepth){super(`type evaluation exceeded the depth limit (${t}) \u2014 the type is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},C=class extends Error{constructor(t,n=D.maxUnionMembers){super(`union type is too complex to represent (${t} members exceeds limit ${n})`),this.name="UnionTooComplexError";}};var Q=(e,t)=>({seen:new WeakMap,exp:new Set,schemes:e,depth:0,explain:t});function w(e,t,n){return e.explain?.out.push({path:[...e.explain.path],actual:t,expected:n,kind:"type"}),false}function Le(e,t,n={}){let r=[];return !p(e,t,Q(n,{path:[],out:r}))&&r.length===0&&r.push({path:[],actual:e,expected:t,kind:"type"}),r}var Z=new WeakMap;function v(e,t,n={}){if(e===t)return true;if(Object.keys(n).length>0)return p(e,t,Q(n));let r=Z.get(e)?.get(t);if(r!==void 0)return r;let o=p(e,t,Q(n)),i=Z.get(e);return i||Z.set(e,i=new WeakMap),i.set(t,o),o}function We(e,t,n={}){return v(e,t,n)&&v(t,e,n)}function q(e,t){return e.infer?.length||F(e.check).size>0||F(e.extends).size>0?null:v(e.check,e.extends,t)?e.then:e.else}function z(e,t,n=0){if(n>50)return e;let r=h(e);if(r!==e)return z(r,t,n+1);if(e.t==="conditional"){let o=q(e,t.schemes);if(o)return z(o,t,n+1)}return E(e,t.schemes)?z($(e,t.schemes),t,n+1):e.t==="union"?k(e.of.map(o=>z(o,t,n+1))):e}function p(e,t,n){if(n.depth>=R().maxTypeDepth)throw new P;n.depth++;try{return Be(e,t,n)}finally{n.depth--;}}function X(e,t,n,r){if(!n.explain)return p(e,t,n);n.explain.path.push(r);try{return p(e,t,n)}finally{n.explain.path.pop();}}function Be(e,t,n){if(e.t==="any"||t.t==="any"||t.t==="unknown")return true;if(e.t==="unknown")return w(n,e,t);let r=h(e);if(r!==e)return p(r,t,n);let o=h(t);if(o!==t)return p(e,o,n);if(e.t==="mapped"){let l=V({...e,over:z(e.over,n)});if(l)return p(l,t,n)}if(t.t==="mapped"){let l=V({...t,over:z(t.over,n)});if(l)return p(e,l,n)}if(e.t==="conditional"){let l=q(e,n.schemes);if(l)return p(l,t,n)}if(t.t==="conditional"){let l=q(t,n.schemes);if(l)return p(e,l,n)}if(t.t==="intersection"){let l=j(t);return l.t!=="intersection"?p(e,l,n):l.of.every(u=>p(e,u,n))}if(e.t==="intersection"){let l=j(e);if(l.t!=="intersection")return p(l,t,n);if(l.of.some(u=>p(u,t,n)))return true;if(t.t==="object"){let u=Re(l.of);if(u)return p(u,t,n)}return false}if(!(e.t==="apply"&&t.t==="apply"&&e.name===t.name&&e.args.length===t.args.length)&&(E(e,n.schemes)||E(t,n.schemes))){let l=`${g(e)}\u2264${g(t)}`;if(n.exp.has(l))return true;n.exp.add(l);let u=p($(e,n.schemes),$(t,n.schemes),n);return n.exp.delete(l),u}let a=n.seen.get(e);if(a?.has(t))return true;if(a||(a=new WeakSet,n.seen.set(e,a)),a.add(t),e.t==="union")return e.of.every(l=>p(l,t,n));if(e.t==="boolean"&&t.t==="union")return p(c.literal(true),t,n)&&p(c.literal(false),t,n);if(t.t==="union")return t.of.some(l=>p(e,l,n));if(t.t==="overload")return t.signatures.every(l=>p(e,l,n));if(e.t==="overload")return e.signatures.some(l=>p(l,t,n));switch(t.t){case "literal":return e.t==="literal"&&e.value===t.value?true:w(n,e,t);case "string":case "number":case "boolean":case "null":case "undefined":return e.t===t.t||e.t==="literal"&&Fe(e.value)===t.t?true:w(n,e,t);case "void":return e.t==="void"||e.t==="undefined"?true:w(n,e,t);case "array":return e.t==="array"?p(e.items,t.items,n):e.t==="tuple"?e.elements.every(l=>p(l,t.items,n)):w(n,e,t);case "tuple":{if(e.t!=="tuple")return w(n,e,t);if(!e.flags&&!t.flags){if(e.elements.length!==t.elements.length)return w(n,e,t);for(let l=0;l<e.elements.length;l++)if(!X(e.elements[l],t.elements[l],n,String(l)))return false;return true}return pe(e,t,(l,u)=>p(l,u,n))}case "object":return e.t==="object"?ze(e,t,n):Object.keys(t.props).length===0&&!t.index?e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:w(n,e,t):e.t==="array"&&t.index&&Object.values(t.props).every(l=>l.optional)&&p(e.items,t.index.value,n)?true:w(n,e,t);case "fn":return e.t==="fn"?Ue(e,t,n):w(n,e,t);case "var":return e.t==="var"&&e.name===t.name;case "keyof":return e.t==="keyof"&&p(e.of,t.of,n)&&p(t.of,e.of,n);case "index":return e.t==="index"&&p(e.obj,t.obj,n)&&p(t.obj,e.obj,n)&&p(e.key,t.key,n)&&p(t.key,e.key,n);case "mapped":return e.t==="mapped"&&e.key===t.key&&!!e.optional==!!t.optional&&p(e.over,t.over,n)&&p(t.over,e.over,n)&&p(e.body,t.body,n)&&p(t.body,e.body,n);case "conditional":return e.t==="conditional"&&p(e.check,t.check,n)&&p(t.check,e.check,n)&&p(e.extends,t.extends,n)&&p(t.extends,e.extends,n)&&p(e.then,t.then,n)&&p(e.else,t.else,n);case "apply":return e.t==="apply"&&e.name===t.name&&e.args.length===t.args.length&&e.args.every((l,u)=>p(l,t.args[u],n));case "returnType":return e.t==="returnType"&&p(e.fn,t.fn,n)&&p(t.fn,e.fn,n);case "parameters":return e.t==="parameters"&&p(e.fn,t.fn,n)&&p(t.fn,e.fn,n)}}var Fe=e=>typeof e;function Re(e){let t=[];for(let i of e){let a=h(i);if(a.t!=="object")return null;t.push(a);}let n=new Set;for(let i of t)for(let a in i.props)n.add(a);let r={};for(let i of n){let a=[],l=true;for(let u of t){let d=u.props[i];d?(a.push(d.type),d.optional||(l=false)):u.index?.key==="string"&&(a.push(u.index.value),l=false);}r[i]={type:j({of:a}),optional:l};}let o;for(let i of t)i.index&&(o=o?{key:o.key,value:j({of:[o.value,i.index.value]})}:i.index);return o?{t:"object",props:r,index:o}:{t:"object",props:r}}function ze(e,t,n){let r=false;for(let o in t.props)if(!(t.props[o].optional||M(e.props,o))){if(!n.explain)return false;n.explain.out.push({path:[...n.explain.path,o],expected:t.props[o].type,kind:"missing"}),r=true;}if(r)return false;for(let o in t.props){let i=t.props[o],a=M(e.props,o);if(a&&(a.optional&&!i.optional||!X(a.type,i.type,n,o)))return false}if(t.index){for(let o in e.props)if(!X(e.props[o].type,t.index.value,n,o))return false;if(e.index&&!p(e.index.value,t.index.value,n))return false}return true}function Ue(e,t,n){if(t.returns.t!=="void"&&t.returns.t!=="any"&&!p(e.returns,t.returns,n))return false;for(let r=0;r<e.params.length;r++){let o=e.params[r];if(o.variadic)break;let i=t.params[r];if(!i){if(o.optional)continue;return false}if(!p(i.type,o.type,n))return false}return !(t.guard&&(!e.guard||e.guard.param!==t.guard.param||!p(e.guard.type,t.guard.type,n)))}function k(e){let t=[];for(let o of e)o.t==="union"?t.push(...o.of):t.push(o);let n=R().maxUnionMembers;if(t.length>n)throw new C(t.length,n);if(t.some(o=>o.t==="any"))return c.any;let r=[];for(let o of t)if(!r.some(i=>v(o,i))){for(let i=r.length-1;i>=0;i--)v(r[i],o)&&r.splice(i,1);r.push(o);}if(r.some(o=>o.t==="literal"&&o.value===true)&&r.some(o=>o.t==="literal"&&o.value===false)){let o=r.filter(i=>!(i.t==="boolean"||i.t==="literal"&&typeof i.value=="boolean"));o.push(c.boolean),r.length=0,r.push(...o);}return r.length===1?r[0]:{t:"union",of:r}}function Ae(e,t){let n=new Set,r=new WeakSet,o=i=>{if(!r.has(i))switch(r.add(i),i.t){case "keyof":n.add("keyof"),o(i.of);break;case "index":n.add("indexed"),o(i.obj),o(i.key);break;case "mapped":n.add("mapped"),o(i.over),o(i.body);break;case "conditional":n.add("conditional"),i.infer?.length&&n.add("infer"),o(i.check),o(i.extends),o(i.then),o(i.else);break;case "returnType":n.add("returnType"),o(i.fn);break;case "parameters":n.add("parameters"),o(i.fn);break;case "tuple":n.add("tuple"),i.flags?.some(a=>a!=="req")&&n.add("variadic"),i.elements.forEach(o);break;case "intersection":n.add("intersection"),i.of.forEach(o);break;case "overload":n.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":t&&i.name===t&&n.add("recursion"),i.args.forEach(o);break}};return o(e),n}var ce=e=>typeof e=="string"?c.string:typeof e=="number"?c.number:c.boolean;function ee(e){return e.t==="literal"&&e.fresh?ce(e.value):e}function Ce(e){return b(e,new WeakSet)}function De(e){switch(e.t){case "array":return {t:"array",items:b(e.items,new WeakSet)};case "tuple":return {t:"tuple",elements:e.elements.map(t=>b(t,new WeakSet)),...e.flags?{flags:e.flags}:{}};case "object":return se(e,new WeakSet);case "fn":case "overload":return b(e,new WeakSet);default:return e}}function b(e,t){if(e.t==="literal")return e.fresh?ce(e.value):e;if(t.has(e))return e;switch(e.t){case "array":return t.add(e),{t:"array",items:b(e.items,t)};case "tuple":return t.add(e),{t:"tuple",elements:e.elements.map(n=>b(n,t)),...e.flags?{flags:e.flags}:{}};case "object":return t.add(e),se(e,t);case "apply":return t.add(e),{t:"apply",name:e.name,args:e.args.map(n=>b(n,t))};case "fn":return t.add(e),{t:"fn",params:e.params.map(n=>({...n,type:b(n.type,t)})),returns:b(e.returns,t),...e.guard?{guard:{param:e.guard.param,type:b(e.guard.type,t)}}:{}};case "overload":return t.add(e),{t:"overload",signatures:e.signatures.map(n=>b(n,t))};default:return e}}function se(e,t){let n={};for(let o in e.props)n[o]={type:b(e.props[o].type,t),optional:e.props[o].optional};let r=e.index?{key:e.index.key,value:b(e.index.value,t)}:void 0;return r?{t:"object",props:n,index:r}:{t:"object",props:n}}var de=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function qe(e,t){if(v(t,e))return e;if(v(e,t))return t;let n=de(e),r=de(t);return !n||!r||n===r?k([e,t]):null}function x(e,t,n={}){if(e.t==="var"){let r=n[e.name];if(!r)return {...n,[e.name]:t};if(t.t==="any"||t.t==="unknown")return n;let o=qe(r,t);return o?{...n,[e.name]:o}:n}if(t.t==="any"||t.t==="unknown")return n;switch(e.t){case "array":return t.t==="array"?x(e.items,t.items,n):null;case "tuple":{let r=e,o=U(r);if(o<0){if(t.t!=="tuple"||t.elements.length!==r.elements.length)return null;let f=n;for(let W=0;W<r.elements.length;W++)if(f=x(r.elements[W],t.elements[W],f),f===null)return null;return f}let i=o,a=r.elements.length-o-1,l=K(r,o),u=f=>l==="variadic"?f:f.t==="tuple"?f.elements.length?k(f.elements):c.unknown:f.t==="array"?f.items:f,d=n,m=(f,W)=>{d!==null&&(d=x(f,W,d));};if(t.t==="tuple"){if(t.elements.length<i+a)return null;for(let f=0;f<i;f++)m(r.elements[f],t.elements[f]);for(let f=0;f<a;f++)m(r.elements[o+1+f],t.elements[t.elements.length-a+f]);return d!==null&&(d=x(r.elements[o],u(N(t,i,a)),d)),d}if(t.t==="array"){for(let f=0;f<i;f++)m(r.elements[f],t.items);for(let f=0;f<a;f++)m(r.elements[o+1+f],t.items);return d!==null&&(d=x(r.elements[o],u(t),d)),d}return null}case "object":{if(t.t!=="object")return null;let r=n;for(let o in e.props){let i=e.props[o],a=t.props[o];if(!a){if(i.optional)continue;return null}if(r=x(i.type,a.type,r),r===null)return null}return r}case "fn":{if(t.t!=="fn")return null;let r=x(e.returns,t.returns,n);if(r===null)return null;let o=Math.min(e.params.length,t.params.length);for(let i=0;i<o;i++)if(r=x(e.params[i].type,t.params[i].type,r),r===null)return null;return e.guard&&t.guard&&(r=x(e.guard.type,t.guard.type,r)),r}case "apply":{if(t.t!=="apply"||t.name!==e.name||t.args.length!==e.args.length)return null;let r=n;for(let o=0;o<e.args.length;o++)if(r=x(e.args[o],t.args[o],r),r===null)return null;return r}default:return v(t,e)?n:null}}var me="@rev",te=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function I(e,t,n){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===t&&e.key.t==="var"&&e.key.name===n)return c.var(me);switch(e.t){case "array":return {t:"array",items:I(e.items,t,n)};case "tuple":return {t:"tuple",elements:e.elements.map(r=>I(r,t,n)),...e.flags?{flags:e.flags}:{}};case "union":return {t:"union",of:e.of.map(r=>I(r,t,n))};case "fn":return {t:"fn",params:e.params.map(r=>({...r,type:I(r.type,t,n)})),returns:I(e.returns,t,n)};case "apply":return {t:"apply",name:e.name,args:e.args.map(r=>I(r,t,n))};case "returnType":return {t:"returnType",fn:I(e.fn,t,n)};case "object":{let r={};for(let o in e.props)r[o]={type:I(e.props[o].type,t,n),optional:e.props[o].optional};return e.index?{t:"object",props:r,index:{key:e.index.key,value:I(e.index.value,t,n)}}:{t:"object",props:r}}default:return e}}function _e(e,t,n){if(e.over.t!=="keyof"||e.over.of.t!=="var")return null;let r=e.over.of.name;if(n[r])return null;let o={};for(let i in t.props){let a=I(e.body,r,e.key),l=x(a,t.props[i].type,{})?.[me];o[i]={type:l?ee(l):c.unknown,optional:t.props[i].optional};}return {...n,[r]:{t:"object",props:o}}}function ye(e,t,n){let r=n;for(let o=0;o<e.length&&o<t.length;o++){let i=e[o].type,a=t[o];if(te(i)&&a.t==="object"){let l=_e(i,a,r);l&&(r=l);}}return r}function Ke(e,t){let n={};for(let o=0;o<e.params.length;o++){let i=e.params[o];if(i.variadic){for(let a=o;a<t.length;a++)if(n=x(i.type,t[a],n),n===null)return null;break}if(o>=t.length){if(i.optional)continue;return null}if(!te(i.type)&&(n=x(i.type,t[o],n),n===null))return null}let r=ye(e.params,t,n);return {returns:s(e.returns,r),bindings:r}}function Ne(e,t){let n={};for(let r=0;r<e.params.length&&r<t.length;r++){let o=e.params[r];if(te(o.type))continue;let i=x(o.type,t[r],n);i!==null&&(n=i);}return n=ye(e.params,t,n),{returns:s(e.returns,n),bindings:n}}function T(e,t,n,r,o){if(e.t==="var"&&n.has(e.name)){let i=o.get(e.name);i||o.set(e.name,i={co:[],contra:[]}),(r?i.contra:i.co).push(t);return}if(!(t.t==="any"||t.t==="unknown"))switch(e.t){case "array":t.t==="array"&&T(e.items,t.items,n,r,o);return;case "tuple":{let i=e,a=U(i);if(a<0){t.t==="tuple"&&t.elements.length===i.elements.length&&i.elements.forEach((m,f)=>T(m,t.elements[f],n,r,o));return}let l=a,u=i.elements.length-a-1,d=m=>T(i.elements[a],m,n,r,o);if(t.t==="tuple"){let m=t;if(m.elements.length<l+u)return;for(let f=0;f<l;f++)T(i.elements[f],m.elements[f],n,r,o);for(let f=0;f<u;f++)T(i.elements[a+1+f],m.elements[m.elements.length-u+f],n,r,o);d(N(m,l,u));}else if(t.t==="array"){for(let m=0;m<l;m++)T(i.elements[m],t.items,n,r,o);for(let m=0;m<u;m++)T(i.elements[a+1+m],t.items,n,r,o);d(t);}return}case "fn":t.t==="fn"&&(e.params.forEach((i,a)=>{let l=t.params[a];l&&T(i.type,l.type,n,!r,o);}),T(e.returns,t.returns,n,r,o));return;case "object":if(t.t==="object")for(let i in e.props)t.props[i]&&T(e.props[i].type,t.props[i].type,n,r,o);return;case "apply":t.t==="apply"&&t.name===e.name&&t.args.length===e.args.length&&e.args.forEach((i,a)=>T(i,t.args[a],n,r,o));return;default:return}}function Ve(e,t){if(e.length===1)return e[0];let r=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(i=>v(o,i,t)));return k(r)}var Ye=e=>e.t==="union"&&e.of.length===0;function Ge(e,t){let n={};for(let[r,{co:o,contra:i}]of e){let a=o.length?k(o):void 0,l=i.length?Ve(i,t):void 0,u=a??l;a&&l&&(u=!Ye(a)&&a.t!=="any"&&v(a,l,t)?a:l),u&&(n[r]=u);}return n}function He(e,t={},n=0){if(!e.infer?.length||F(e.check).size>0)return null;let r=new Map;T(e.extends,e.check,new Set(e.infer),false,r);let o=Ge(r,t),i=new WeakSet,a=G(s(e.extends,o),t,i,n);return v(e.check,a,t)?G(s(e.then,o),t,i,n):G(s(e.else,o),t,i,n)}function G(e,t={},n=new WeakSet,r=0){let o=r,i=R().maxTypeDepth,a=l=>{switch(l.t){case "var":return c.unknown;case "array":return {t:"array",items:a(l.items)};case "tuple":{let u=l.elements.map(a);return l.flags?A(u,l.flags):{t:"tuple",elements:u}}case "union":return {t:"union",of:l.of.map(a)};case "object":{if(n.has(l))return l;n.add(l);let u={};for(let m in l.props){let f=l.props[m];u[m]={type:a(f.type),optional:f.optional};}let d=l.index?{key:l.index.key,value:a(l.index.value)}:void 0;return n.delete(l),d?{t:"object",props:u,index:d}:{t:"object",props:u}}case "fn":{if(n.has(l))return l;n.add(l);let d={t:"fn",params:l.params.map(m=>({...m,type:a(m.type)})),returns:a(l.returns),...l.guard&&{guard:{param:l.guard.param,type:a(l.guard.type)}}};return n.delete(l),d}case "apply":{if(E(l,t)){let u=$(l,t);if(u.t==="conditional"){if(o>=i)throw new P;o++;try{let d=a(u);if(d.t!=="conditional")return d}finally{o--;}}}return {t:"apply",name:l.name,args:l.args.map(a)}}case "conditional":{let u=l.infer?.length?He(l,t,o):q(l,t);return u?a(u):{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 j({of:l.of.map(a)});case "returnType":return h({t:"returnType",fn:a(l.fn)});default:return l}};return a(e)}var Je=c.union([]);function Se(e,t){return ne(e,t,new WeakMap)}function Ze(e){return e.reduce(Se,Je)}function ne(e,t,n){if(e.t==="any"||t.t==="any")return c.any;if(e===t)return e;let r=n.get(e)?.get(t);if(r)return r;if(e.t==="object"&&t.t==="object")return Qe(e,t,n);if(e.t==="array"&&t.t==="array"){let o={t:"array",items:c.unknown};return he(n,e,t,o),o.items=ne(e.items,t.items,n),o}return k([e,t])}function Qe(e,t,n){let r={t:"object",props:{}};he(n,e,t,r);for(let o in e.props){let i=e.props[o],a=t.props[o];if(a){let l=ne(i.type,a.type,n);r.props[o]=i.optional||a.optional?{type:l,optional:true}:{type:l};}else r.props[o]={type:i.type,optional:true};}for(let o in t.props)o in e.props||(r.props[o]={type:t.props[o].type,optional:true});return r}function he(e,t,n,r){let o=e.get(t);o||(o=new WeakMap,e.set(t,o)),o.set(n,r);}var Xe=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e);function S(e,t=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 "literal":return typeof e.value=="string"?JSON.stringify(e.value):String(e.value);case "array":{let n=S(e.items,t);return et(e.items)?`(${n})[]`:`${n}[]`}case "tuple":return `[${e.elements.map((r,o)=>{let i=e.flags?.[o]??"req",a=S(r,t),l=r.t==="union"?`(${a})`:a;return i==="rest"?`...${l}[]`:i==="variadic"?`...${a}`:i==="optional"?`${l}?`:a}).join(", ")}]`;case "union":{if(t.has(e))return "\u2026";t.add(e);let n=e.of.length===0?"never":e.of.map(r=>S(r,t)).join(" | ");return t.delete(e),n}case "object":{if(t.has(e))return "\u2026";t.add(e);let n=Object.entries(e.props).map(([r,o])=>`${Xe(r)?r:JSON.stringify(r)}${o.optional?"?":""}: ${S(o.type,t)}`);return e.index&&n.push(`[k: ${e.index.key}]: ${S(e.index.value,t)}`),t.delete(e),n.length===0?"{}":`{ ${n.join("; ")} }`}case "fn":{if(t.has(e))return "\u2026";t.add(e);let n=e.params.map(o=>{let i=o.variadic?"...":"",a=o.optional&&!o.variadic?"?":"";return `${i}${o.name}${a}: ${S(o.type,t)}`}).join(", "),r=e.guard?`${e.params[e.guard.param]?.name??`arg${e.guard.param}`} is ${S(e.guard.type,t)}`:S(e.returns,t);return t.delete(e),`(${n}) => ${r}`}case "apply":{if(t.has(e))return "\u2026";t.add(e);let n=e.args.length===0?e.name:`${e.name}<${e.args.map(r=>S(r,t)).join(", ")}>`;return t.delete(e),n}case "overload":{if(t.has(e))return "\u2026";t.add(e);let n=e.signatures.map(r=>S(r,t)).join(" & ");return t.delete(e),n}case "keyof":return `keyof ${S(e.of,t)}`;case "index":return `${S(e.obj,t)}[${S(e.key,t)}]`;case "mapped":{if(t.has(e))return "\u2026";t.add(e);let n=e.optional?"?":"",r=`{ [${e.key} in ${S(e.over,t)}]${n}: ${S(e.body,t)} }`;return t.delete(e),r}case "conditional":{if(t.has(e))return "\u2026";t.add(e);let n=`${S(e.check,t)} extends ${S(e.extends,t)} ? ${S(e.then,t)} : ${S(e.else,t)}`;return t.delete(e),n}case "intersection":return e.of.map(n=>n.t==="union"&&n.of.length>0?`(${S(n,t)})`:S(n,t)).join(" & ");case "returnType":return `ReturnType<${S(e.fn,t)}>`;case "parameters":return `Parameters<${S(e.fn,t)}>`}}function et(e){return e.t==="union"&&e.of.length>0||e.t==="fn"}function tt(e){if(e.length===0)return "value";let t=e[e.length-1];if(/^\d+$/.test(t)){let n=e.slice(0,-1);return n.length?`property '${n.join(".")}' at position ${t}`:`position ${t}`}return `property '${e.join(".")}'`}function nt(e){let t=e.filter(n=>n.kind==="missing");if(t.length&&t.length===e.length){let n=t.map(r=>`'${r.path.join(".")}'`).join(", ");return t.length===1?`property ${n} is missing`:`properties ${n} are missing`}return e.map(n=>`${tt(n.path)}: expected '${S(n.expected)}', got '${S(n.actual)}'`).join("; ")}function L(e,t=new WeakSet){switch(e.t){case "string":case "number":case "boolean":case "null":case "literal":return true;case "array":return t.has(e)?true:(t.add(e),L(B(e.items).type,t));case "tuple":return t.has(e)?true:(t.add(e),e.elements.every(n=>L(B(n).type,t)));case "object":{if(t.has(e))return true;t.add(e);let n=Object.values(e.props).every(o=>L(B(o.type).type,t)),r=!e.index||L(B(e.index.value).type,t);return n&&r}case "union":return t.has(e)?true:(t.add(e),e.of.every(n=>L(n,t)));case "intersection":return t.has(e)?true:(t.add(e),e.of.every(n=>L(n,t)));case "undefined":case "void":case "fn":case "overload":case "keyof":case "index":case "mapped":case "conditional":case "returnType":case "parameters":case "var":case "apply":case "any":case "unknown":return false}}function rt(e,t,n={}){let r=e;for(let o of t){let i=_(r,o,n);if(i===null)return null;r=i;}return {type:r,completions:H(r,n)}}var ot=e=>e==="[]"||/^\d+$/.test(e);function _(e,t,n,r=new Set){if(E(e,n)){let i=g(e);if(r.has(i))return null;r.add(i);let a=_($(e,n),t,n,r);return r.delete(i),a}let o=h(e);if(o!==e)return _(o,t,n,r);switch(e.t){case "any":return e;case "object":{let i=M(e.props,t);return i?i.optional?k([i.type,{t:"undefined"}]):i.type:e.index?.key==="string"?e.index.value:null}case "array":return ot(t)?e.items:null;case "tuple":{let i=e.flags?.findIndex(u=>u!=="req")??-1,a=Number(t);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?k(l):null}case "union":{let i=e.of.map(a=>_(a,t,n,r)).filter(a=>a!==null);return i.length?k(i):null}case "intersection":{let i=e.of.map(a=>_(a,t,n,r)).filter(a=>a!==null);return i.length?j({of:i}):null}default:return null}}function H(e,t,n=new WeakSet,r=new Set){if(E(e,t)){let i=g(e);if(r.has(i))return [];r.add(i);let a=H($(e,t),t,n,r);return r.delete(i),a}let o=h(e);if(o!==e)return H(o,t,n,r);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(n.has(e))return [];n.add(e);let i=[],a=new Set;for(let l of e.of)for(let u of H(l,t,n,r))a.has(u.key)||(a.add(u.key),i.push(u));return n.delete(e),i}default:return []}}export{Y as DEFAULT_TYPE_LIMITS,Oe as TYPE_EVAL_DEPTH_LIMIT,P as TypeEvalLimitError,C as UnionTooComplexError,Me as configureTypeLimits,rt as discover,We as equals,$ as expand1,K as flagAt,S as format,nt as formatTypeDiff,G as groundVars,Ke as instantiate,Ne as instantiateLoose,E as isScheme,L as isSerializable,Te as isVariadicTuple,Se as join,Ze as joinAll,A as normalizeTuple,k as normalizeUnion,M as ownProp,Pe as resetTypeLimits,h as resolveTypeOp,U as restIndex,c as s,N as sliceTuple,s as substitute,v as subtype,Le as typeDiff,Ae as typeFeatures,R as typeLimits,x as unify,ee as widen,De as widenInferred,Ce as widenType,B as withoutUndefined};
1
+ var O=e=>Object.freeze(e),c={any:O({t:"any"}),unknown:O({t:"unknown"}),string:O({t:"string"}),number:O({t:"number"}),boolean:O({t:"boolean"}),null:O({t:"null"}),undefined:O({t:"undefined"}),void:O({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"?X(e.obj,e.key)??e:e.t==="returnType"?Te(e.fn)??e:e.t==="parameters"?Ee(e.fn)??e:e}var le={t:"union",of:[]},je=e=>e.t==="union"&&e.of.length===0;function Te(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 c.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 k(e){let n=[],r=o=>{let a=h(o);a.t==="intersection"?a.of.forEach(r):n.push(a);};e.of.forEach(r);let t=[];for(let o of n){if(o.t==="any")return c.any;if(je(o))return le;if(o.t!=="unknown"){if(ue(o)){let a=false;for(let i=t.length-1;i>=0;i--){let l=t[i];if(ue(l)){if(pe(l,o)){a=true;break}if(pe(o,l))t.splice(i,1);else return le}}if(a)continue}else if(t.some(a=>a===o))continue;t.push(o);}}return t.length===0?c.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=>c.literal(r));return e.index&&n.push(e.index.key==="number"?c.number:c.string),n.length===0?{t:"union",of:[]}:n.length===1?n[0]:{t:"union",of:n}}function $e(e){let n=a=>a.t==="literal"&&typeof a.value=="string"?[a.value]:a.t==="union"?a.of.flatMap(n):[],r=e.filter(a=>a.t!=="string"&&a.t!=="number").map(n);if(r.length===0)return e[0];let t=r[0].filter(a=>r.every(i=>i.includes(a))),o=[...new Set(t)].map(a=>c.literal(a));return o.length===0?{t:"union",of:[]}:o.length===1?o[0]:{t:"union",of:o}}function X(e,n){if(e=h(e),n=h(n),n.t==="union"){let r=n.of.map(t=>X(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=X(h(t),n);if(o===null)return null;o.t!=="undefined"&&r.push(o);}return r.length===0?c.undefined:r.length===1?r[0]:k({of:r})}if(e.t==="object"){if(n.t==="literal"&&(typeof n.value=="string"||typeof n.value=="number")){let r=M(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:c.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]??c.undefined:e.elements.length?{t:"union",of:e.elements.slice(r)}:c.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:c.undefined}else {if(n.t==="literal"&&typeof n.value=="number")return e.elements[n.value]??c.undefined;if(n.t==="number")return e.elements.length?{t:"union",of:e.elements}:c.undefined}}return e.t==="array"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number")?e.items:null}var Ie=Object.prototype.hasOwnProperty,M=(e,n)=>Ie.call(e,n)?e[n]:void 0;function B(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 Y=(e,n)=>e.flags?.[n]??"req",se=e=>e==="rest"||e==="variadic",Oe=e=>!!e.flags?.some(se),_=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 q(e,n){let r=[],t=[],o=(a,i)=>{r.push(a),t.push(i);};for(let a=0;a<e.length;a++){let i=e[a],l=n[a]??"req";if(l!=="variadic"){o(i,l);continue}if(i.t==="tuple"){let u=i;for(let d=0;d<u.elements.length;d++)o(u.elements[d],Y(u,d));}else i.t==="array"?o(i.items,"rest"):i.t==="any"?o(i,"rest"):o(i,"variadic");}return c.tuple(r,t)}function ce(e){let 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 de(e,n,r){let t=ce(e),o=ce(n);if(o.rest===null){if(t.rest!==null)return false;let a=Me(n);return e.elements.length<a||e.elements.length>n.elements.length?false:e.elements.every((i,l)=>r(i,n.elements[l]))}if(t.rest===null){let a=t.prefix;if(a.length<o.prefix.length+o.suffix.length)return false;for(let i=0;i<o.prefix.length;i++)if(!r(a[i],o.prefix[i]))return false;for(let i=0;i<o.suffix.length;i++)if(!r(a[a.length-o.suffix.length+i],o.suffix[i]))return false;for(let i=o.prefix.length;i<a.length-o.suffix.length;i++)if(!r(a[i],o.rest))return false;return true}if(t.prefix.length>=o.prefix.length&&t.suffix.length>=o.suffix.length){for(let a=0;a<o.prefix.length;a++)if(!r(t.prefix[a],o.prefix[a]))return false;for(let a=o.prefix.length;a<t.prefix.length;a++)if(!r(t.prefix[a],o.rest))return false;if(!r(t.rest,o.rest))return false;for(let a=0;a<o.suffix.length;a++)if(!r(t.suffix[t.suffix.length-o.suffix.length+a],o.suffix[a]))return false;for(let a=0;a<t.suffix.length-o.suffix.length;a++)if(!r(t.suffix[a],o.rest))return false;return true}return false}function G(e,n,r){if(e.t==="array")return e;if(e.t==="tuple"){let t=e,o=t.elements.length,a=t.elements.slice(n,o-r),i=(t.flags??t.elements.map(()=>"req")).slice(n,o-r);return c.tuple(a,i)}return c.tuple([])}function s(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:s(e.bound,n,r)}:e)}case "array":return {t:"array",items:s(e.items,n,r)};case "tuple":{let t=e.elements.map(o=>s(o,n,r));return e.flags?q(t,e.flags):{t:"tuple",elements:t}}case "union":return {t:"union",of:e.of.map(t=>s(t,n,r))};case "object":{if(r.has(e))return e;r.add(e);let t={};for(let a in e.props){let i=e.props[a];t[a]={type:s(i.type,n,r),optional:i.optional};}let o=e.index?{key:e.index.key,value:s(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(a=>({...a,type:s(a.type,n,r)})),returns:s(e.returns,n,r),...e.guard&&{guard:{param:e.guard.param,type:s(e.guard.type,n,r)}}};return r.delete(e),o}case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>s(t,n,r))};case "keyof":return h({t:"keyof",of:s(e.of,n,r)});case "index":return h({t:"index",obj:s(e.obj,n,r),key:s(e.key,n,r)});case "mapped":{let t={};for(let a in n)a!==e.key&&(t[a]=n[a]);let o={t:"mapped",key:e.key,over:s(e.over,n,r),body:s(e.body,t,r),optional:e.optional};return z(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,a=n[o],i=a?h(a):void 0,l=i?.t==="union"?i.of:i?.t==="boolean"?[c.literal(true),c.literal(false)]:null;if(l)return {t:"union",of:l.map(u=>s(e,{...n,[o]:u},r))}}let t=e.infer?.length?Object.fromEntries(Object.entries(n).filter(([o])=>!e.infer.includes(o))):n;return {t:"conditional",check:s(e.check,n,r),extends:s(e.extends,t,r),then:s(e.then,t,r),else:s(e.else,t,r),...e.infer?{infer:e.infer}:{}}}case "intersection":return k({of:e.of.map(t=>s(t,n,r))});case "returnType":return h({t:"returnType",fn:s(e.fn,n,r)});case "parameters":return h({t:"parameters",fn:s(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:s(e.body,{[e.key]:n})}};let r=We(n);if(r===null)return null;let t={};for(let o of r)t[o]={type:s(e.body,{[e.key]:c.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,a)=>t[o]=e.args[a]),s(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 R(e,n={},r=0){if(r>ye)return e;if(e.t==="var")return e.bound?R(e.bound,n,r+1):e;if(w(e,n))return R(E(e,n),n,r+1);if(e.t==="mapped"){let t=z(e);if(t)return R(t,n,r+1)}if(e.t==="intersection")return k(e);if(e.t==="union"){let t=e.of.map(o=>R(o,n,r+1));return t.some((o,a)=>o!==e.of[a])?{t:"union",of:t}:e}return e}function U(e,n,r=0){if(r>ye)return e;let t=A(e,n);if(t!==e)return U(t,n,r+1);let o=R(e,n,r);return o===e?e:U(o,n,r+1)}function A(e,n={}){let r=h(e);if(r!==e)return r;switch(e.t){case "keyof":{let t=U(e.of,n);return t===e.of?e:h({...e,of:t})}case "index":{let t=U(e.obj,n),o=U(e.key,n);return t===e.obj&&o===e.key?e:h({...e,obj:t,key:o})}case "returnType":{let t=U(e.fn,n);return t===e.fn?e:h({...e,fn:t})}default:return e}}var Be=1e3,H={maxTypeDepth:1e3,maxUnionMembers:1e3,maxOverloadSignatures:200},N=H;function Fe(e){N={...H,...e};}function ze(){N=H;}function C(){return N}var P=class extends Error{constructor(n=N.maxTypeDepth){super(`type evaluation exceeded the depth limit (${n}) \u2014 the type is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},K=class extends Error{constructor(n,r=N.maxUnionMembers){super(`union type is too complex to represent (${n} members exceeds limit ${r})`),this.name="UnionTooComplexError";}};var ne=(e,n)=>({seen:new WeakMap,exp:new Set,schemes:e,depth:0,explain:n});function b(e,n,r){return e.explain?.out.push({path:[...e.explain.path],actual:n,expected:r,kind:"type"}),false}function Re(e,n,r={}){let t=[];return !p(e,n,ne(r,{path:[],out:t}))&&t.length===0&&t.push({path:[],actual:e,expected:n,kind:"type"}),t}var ee=new WeakMap;function j(e,n,r={}){if(e===n)return true;if(Object.keys(r).length>0)return p(e,n,ne(r));let t=ee.get(e)?.get(n);if(t!==void 0)return t;let o=p(e,n,ne(r)),a=ee.get(e);return a||ee.set(e,a=new WeakMap),a.set(n,o),o}function Ue(e,n,r={}){return j(e,n,r)&&j(n,e,r)}function Q(e,n){return e.infer?.length||F(e.check).size>0||F(e.extends).size>0?null:j(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=Q(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"?x(e.of.map(o=>D(o,n,r+1))):e}function p(e,n,r){if(r.depth>=C().maxTypeDepth)throw new P;r.depth++;try{return Ae(e,n,r)}finally{r.depth--;}}function re(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 Ae(e,n,r){if(e.t==="any"||n.t==="any"||n.t==="unknown")return true;if(e.t==="unknown")return b(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 l=z({...e,over:D(e.over,r)});if(l)return p(l,n,r)}if(n.t==="mapped"){let l=z({...n,over:D(n.over,r)});if(l)return p(e,l,r)}if(e.t==="conditional"){let l=Q(e,r.schemes);if(l)return p(l,n,r)}if(n.t==="conditional"){let l=Q(n,r.schemes);if(l)return p(e,l,r)}if(n.t==="intersection"){let l=k(n);return l.t!=="intersection"?p(e,l,r):l.of.every(u=>p(e,u,r))}if(e.t==="intersection"){let l=k(e);if(l.t!=="intersection")return p(l,n,r);if(l.of.some(u=>p(u,n,r)))return true;if(n.t==="object"){let u=De(l.of);if(u)return p(u,n,r)}return false}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 l=`${g(e)}\u2264${g(n)}`;if(r.exp.has(l))return true;r.exp.add(l);let u=p(E(e,r.schemes),E(n,r.schemes),r);return r.exp.delete(l),u}let i=r.seen.get(e);if(i?.has(n))return true;if(i||(i=new WeakSet,r.seen.set(e,i)),i.add(n),e.t==="union")return e.of.every(l=>p(l,n,r));if(e.t==="boolean"&&n.t==="union")return p(c.literal(true),n,r)&&p(c.literal(false),n,r);if(n.t==="union")return n.of.some(l=>p(e,l,r));if(n.t==="overload")return n.signatures.every(l=>p(e,l,r));if(e.t==="overload")return e.signatures.some(l=>p(l,n,r));switch(n.t){case "literal":return e.t==="literal"&&e.value===n.value?true:b(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:b(r,e,n);case "void":return e.t==="void"||e.t==="undefined"?true:b(r,e,n);case "array":return e.t==="array"?e.readonly&&!n.readonly?b(r,e,n):p(e.items,n.items,r):e.t==="tuple"?e.readonly&&!n.readonly?b(r,e,n):e.elements.every(l=>p(l,n.items,r)):b(r,e,n);case "tuple":{if(e.t!=="tuple"||e.readonly&&!n.readonly)return b(r,e,n);if(!e.flags&&!n.flags){if(e.elements.length!==n.elements.length)return b(r,e,n);for(let l=0;l<e.elements.length;l++)if(!re(e.elements[l],n.elements[l],r,String(l)))return false;return true}return de(e,n,(l,u)=>p(l,u,r))}case "object":return e.t==="object"?_e(e,n,r):Object.keys(n.props).length===0&&!n.index?e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:b(r,e,n):e.t==="array"&&n.index&&Object.values(n.props).every(l=>l.optional)&&p(e.items,n.index.value,r)?true:b(r,e,n);case "fn":return e.t==="fn"?qe(e,n,r):b(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((l,u)=>l===n.path[u]);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((l,u)=>p(l,n.args[u],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 a of e){let i=h(a);if(i.t!=="object")return null;n.push(i);}let r=new Set;for(let a of n)for(let i in a.props)r.add(i);let t={};for(let a of r){let i=[],l=true;for(let u of n){let d=u.props[a];d?(i.push(d.type),d.optional||(l=false)):u.index?.key==="string"&&(i.push(u.index.value),l=false);}t[a]={type:k({of:i}),optional:l};}let o;for(let a of n)a.index&&(o=o?{key:o.key,value:k({of:[o.value,a.index.value]})}:a.index);return o?{t:"object",props:t,index:o}:{t:"object",props:t}}function _e(e,n,r){let t=false;for(let o in n.props)if(!(n.props[o].optional||M(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 a=n.props[o],i=M(e.props,o);if(i&&(i.optional&&!a.optional||!re(i.type,a.type,r,o)))return false}if(n.index){for(let o in e.props)if(!re(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 qe(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 a=n.params[t];if(!a){if(o.optional)continue;return false}if(!p(a.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=C().maxUnionMembers;if(n.length>r)throw new K(n.length,r);if(n.some(o=>o.t==="any"))return c.any;let t=[];for(let o of n)if(!t.some(a=>j(o,a))){for(let a=t.length-1;a>=0;a--)j(t[a],o)&&t.splice(a,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(a=>!(a.t==="boolean"||a.t==="literal"&&typeof a.value=="boolean"));o.push(c.boolean),t.length=0,t.push(...o);}return t.length===1?t[0]:{t:"union",of:t}}function Ke(e,n){let r=new Set,t=new WeakSet,o=a=>{if(!t.has(a))switch(t.add(a),a.t){case "keyof":r.add("keyof"),o(a.of);break;case "index":r.add("indexed"),o(a.obj),o(a.key);break;case "mapped":r.add("mapped"),o(a.over),o(a.body);break;case "conditional":r.add("conditional"),a.infer?.length&&r.add("infer"),o(a.check),o(a.extends),o(a.then),o(a.else);break;case "returnType":r.add("returnType"),o(a.fn);break;case "parameters":r.add("parameters"),o(a.fn);break;case "tuple":r.add("tuple"),a.flags?.some(i=>i!=="req")&&r.add("variadic"),a.elements.forEach(o);break;case "intersection":r.add("intersection"),a.of.forEach(o);break;case "overload":r.add("overload");for(let i of a.signatures){for(let l of i.params)o(l.type);o(i.returns);}break;case "object":for(let i in a.props)o(a.props[i].type);a.index&&o(a.index.value);break;case "array":o(a.items);break;case "union":a.of.forEach(o);break;case "fn":for(let i of a.params)o(i.type);o(a.returns),a.guard&&o(a.guard.type);break;case "var":a.bound&&o(a.bound);break;case "apply":n&&a.name===n&&r.add("recursion"),a.args.forEach(o);break}};return o(e),r}var te=e=>typeof e=="string"?c.string:typeof e=="number"?c.number:c.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])?x(n):e}return e}function Ne(e){return T(e,new WeakSet)}function Qe(e){switch(e.t){case "array":return {t:"array",items:T(e.items,new WeakSet),...e.readonly?{readonly:true}:{}};case "tuple":return {t:"tuple",elements:e.elements.map(n=>T(n,new WeakSet)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}};case "object":return he(e,new WeakSet);case "fn":case "overload":return T(e,new WeakSet);default:return e}}function T(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:T(e.items,n),...e.readonly?{readonly:true}:{}};case "tuple":return n.add(e),{t:"tuple",elements:e.elements.map(r=>T(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=>T(r,n))};case "fn":return n.add(e),{t:"fn",params:e.params.map(r=>({...r,type:T(r.type,n)})),returns:T(e.returns,n),...e.guard?{guard:{param:e.guard.param,type:T(e.guard.type,n)}}:{}};case "overload":return n.add(e),{t:"overload",signatures:e.signatures.map(r=>T(r,n))};default:return e}}function he(e,n){let r={};for(let o in e.props)r[o]={type:T(e.props[o].type,n),optional:e.props[o].optional};let t=e.index?{key:e.index.key,value:T(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 Ve(e,n){if(j(n,e))return e;if(j(e,n))return n;let r=ge(e),t=ge(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=Ve(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=_(t);if(o<0){if(n.t!=="tuple"||n.elements.length!==t.elements.length)return null;let f=r;for(let W=0;W<t.elements.length;W++)if(f=v(t.elements[W],n.elements[W],f),f===null)return null;return f}let a=o,i=t.elements.length-o-1,l=Y(t,o),u=f=>l==="variadic"?f:f.t==="tuple"?f.elements.length?x(f.elements):c.unknown:f.t==="array"?f.items:f,d=r,m=(f,W)=>{d!==null&&(d=v(f,W,d));};if(n.t==="tuple"){if(n.elements.length<a+i)return null;for(let f=0;f<a;f++)m(t.elements[f],n.elements[f]);for(let f=0;f<i;f++)m(t.elements[o+1+f],n.elements[n.elements.length-i+f]);return d!==null&&(d=v(t.elements[o],u(G(n,a,i)),d)),d}if(n.t==="array"){for(let f=0;f<a;f++)m(t.elements[f],n.items);for(let f=0;f<i;f++)m(t.elements[o+1+f],n.items);return d!==null&&(d=v(t.elements[o],u(n),d)),d}return null}case "object":{if(n.t!=="object")return null;let t=r;for(let o in e.props){let a=e.props[o],i=n.props[o];if(!i){if(a.optional)continue;return null}if(t=v(a.type,i.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 a=0;a<o;a++)if(t=v(e.params[a].type,n.params[a].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 j(n,e)?r:null}}var xe="@rev",ae=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function I(e,n,r){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===n&&e.key.t==="var"&&e.key.name===r)return c.var(xe);switch(e.t){case "array":return {t:"array",items:I(e.items,n,r)};case "tuple":return {t:"tuple",elements:e.elements.map(t=>I(t,n,r)),...e.flags?{flags:e.flags}:{}};case "union":return {t:"union",of:e.of.map(t=>I(t,n,r))};case "fn":return {t:"fn",params:e.params.map(t=>({...t,type:I(t.type,n,r)})),returns:I(e.returns,n,r)};case "apply":return {t:"apply",name:e.name,args:e.args.map(t=>I(t,n,r))};case "returnType":return {t:"returnType",fn:I(e.fn,n,r)};case "object":{let t={};for(let o in e.props)t[o]={type:I(e.props[o].type,n,r),optional:e.props[o].optional};return e.index?{t:"object",props:t,index:{key:e.index.key,value:I(e.index.value,n,r)}}:{t:"object",props:t}}default:return e}}function Ye(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 a in n.props){let i=I(e.body,t,e.key),l=v(i,n.props[a].type,{})?.[xe];o[a]={type:l?oe(l):c.unknown,optional:n.props[a].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 a=e[o].type,i=n[o];if(ae(a)&&i.t==="object"){let l=Ye(a,i,t);l&&(t=l);}}return t}function Ge(e,n){let r={};for(let o=0;o<e.params.length;o++){let a=e.params[o];if(a.variadic){for(let i=o;i<n.length;i++)if(r=v(a.type,n[i],r),r===null)return null;break}if(o>=n.length){if(a.optional)continue;return null}if(!ae(a.type)&&(r=v(a.type,n[o],r),r===null))return null}let t=ve(e.params,n,r);return {returns:s(e.returns,t),bindings:t}}function He(e,n){let r={};for(let t=0;t<e.params.length&&t<n.length;t++){let o=e.params[t];if(ae(o.type))continue;let a=v(o.type,n[t],r);a!==null&&(r=a);}return r=ve(e.params,n,r),{returns:s(e.returns,r),bindings:r}}function $(e,n,r,t,o){if(e.t==="var"&&r.has(e.name)){let a=o.get(e.name);a||o.set(e.name,a={co:[],contra:[]}),(t?a.contra:a.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 a=e,i=_(a);if(i<0){n.t==="tuple"&&n.elements.length===a.elements.length&&a.elements.forEach((m,f)=>$(m,n.elements[f],r,t,o));return}let l=i,u=a.elements.length-i-1,d=m=>$(a.elements[i],m,r,t,o);if(n.t==="tuple"){let m=n;if(m.elements.length<l+u)return;for(let f=0;f<l;f++)$(a.elements[f],m.elements[f],r,t,o);for(let f=0;f<u;f++)$(a.elements[i+1+f],m.elements[m.elements.length-u+f],r,t,o);d(G(m,l,u));}else if(n.t==="array"){for(let m=0;m<l;m++)$(a.elements[m],n.items,r,t,o);for(let m=0;m<u;m++)$(a.elements[i+1+m],n.items,r,t,o);d(n);}return}case "fn":n.t==="fn"&&(e.params.forEach((a,i)=>{let l=n.params[i];l&&$(a.type,l.type,r,!t,o);}),$(e.returns,n.returns,r,t,o));return;case "object":if(n.t==="object")for(let a in e.props)n.props[a]&&$(e.props[a].type,n.props[a].type,r,t,o);return;case "apply":n.t==="apply"&&n.name===e.name&&n.args.length===e.args.length&&e.args.forEach((a,i)=>$(a,n.args[i],r,t,o));return;default:return}}function Je(e,n){if(e.length===1)return e[0];let t=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(a=>j(o,a,n)));return x(t)}var Ze=e=>e.t==="union"&&e.of.length===0;function Xe(e,n){let r={};for(let[t,{co:o,contra:a}]of e){let i=o.length?x(o):void 0,l=a.length?Je(a,n):void 0,u=i??l;i&&l&&(u=!Ze(i)&&i.t!=="any"&&j(i,l,n)?i:l),u&&(r[t]=u);}return r}function en(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=Xe(t,n),a=new WeakSet,i=J(s(e.extends,o),n,a,r);return j(e.check,i,n)?J(s(e.then,o),n,a,r):J(s(e.else,o),n,a,r)}function J(e,n={},r=new WeakSet,t=0){let o=t,a=C().maxTypeDepth,i=l=>{switch(l.t){case "var":return c.unknown;case "array":return {t:"array",items:i(l.items)};case "tuple":{let u=l.elements.map(i);return l.flags?q(u,l.flags):{t:"tuple",elements:u}}case "union":return {t:"union",of:l.of.map(i)};case "object":{if(r.has(l))return l;r.add(l);let u={};for(let m in l.props){let f=l.props[m];u[m]={type:i(f.type),optional:f.optional};}let d=l.index?{key:l.index.key,value:i(l.index.value)}:void 0;return r.delete(l),d?{t:"object",props:u,index:d}:{t:"object",props:u}}case "fn":{if(r.has(l))return l;r.add(l);let d={t:"fn",params:l.params.map(m=>({...m,type:i(m.type)})),returns:i(l.returns),...l.guard&&{guard:{param:l.guard.param,type:i(l.guard.type)}}};return r.delete(l),d}case "apply":{if(w(l,n)){let u=E(l,n);if(u.t==="conditional"){if(o>=a)throw new P;o++;try{let d=i(u);if(d.t!=="conditional")return d}finally{o--;}}}return {t:"apply",name:l.name,args:l.args.map(i)}}case "conditional":{let u=l.infer?.length?en(l,n,o):Q(l,n);return u?i(u):{t:"conditional",check:i(l.check),extends:i(l.extends),then:i(l.then),else:i(l.else),...l.infer?{infer:l.infer}:{}}}case "intersection":return k({of:l.of.map(i)});case "returnType":return h({t:"returnType",fn:i(l.fn)});default:return l}};return i(e)}var nn=c.union([]);function ke(e,n){return ie(e,n,new WeakMap)}function rn(e){return e.reduce(ke,nn)}function ie(e,n,r){if(e.t==="any"||n.t==="any")return c.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 tn(e,n,r);if(e.t==="array"&&n.t==="array"){let o={t:"array",items:c.unknown};return be(r,e,n,o),o.items=ie(e.items,n.items,r),o}return x([e,n])}function tn(e,n,r){let t={t:"object",props:{}};be(r,e,n,t);for(let o in e.props){let a=e.props[o],i=n.props[o];if(i){let l=ie(a.type,i.type,r);t.props[o]=a.optional||i.optional?{type:l,optional:true}:{type:l};}else t.props[o]={type:a.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 on=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=an(e.items)?`(${r})[]`:`${r}[]`;return e.readonly?`readonly ${t}`:t}case "tuple":{let t=`[${e.elements.map((o,a)=>{let i=e.flags?.[a]??"req",l=S(o,n),u=o.t==="union"?`(${l})`:l;return i==="rest"?`...${u}[]`:i==="variadic"?`...${l}`:i==="optional"?`${u}?`: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])=>`${on(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 a=o.variadic?"...":"",i=o.optional&&!o.variadic?"?":"";return `${a}${o.name}${i}: ${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 an(e){return e.t==="union"&&e.of.length>0||e.t==="fn"}function ln(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 un(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=>`${ln(r.path)}: expected '${S(r.expected)}', got '${S(r.actual)}'`).join("; ")}function L(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),L(B(e.items).type,n));case "tuple":return n.has(e)?true:(n.add(e),e.elements.every(r=>L(B(r).type,n)));case "object":{if(n.has(e))return true;n.add(e);let r=Object.values(e.props).every(o=>L(B(o.type).type,n)),t=!e.index||L(B(e.index.value).type,n);return r&&t}case "union":return n.has(e)?true:(n.add(e),e.of.every(r=>L(r,n)));case "intersection":return n.has(e)?true:(n.add(e),e.of.every(r=>L(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 pn(e,n,r={}){let t=e;for(let o of n){let a=V(t,o,r);if(a===null)return null;t=a;}return {type:t,completions:Z(t,r)}}var fn=e=>e==="[]"||/^\d+$/.test(e);function V(e,n,r,t=new Set){if(w(e,r)){let a=g(e);if(t.has(a))return null;t.add(a);let i=V(E(e,r),n,r,t);return t.delete(a),i}let o=h(e);if(o!==e)return V(o,n,r,t);switch(e.t){case "any":return e;case "object":{let a=M(e.props,n);return a?a.optional?x([a.type,{t:"undefined"}]):a.type:e.index?.key==="string"?e.index.value:null}case "array":return fn(n)?e.items:null;case "tuple":{let a=e.flags?.findIndex(u=>u!=="req")??-1,i=Number(n);if(!(Number.isInteger(i)&&i>=0))return null;if(a<0)return i<e.elements.length?e.elements[i]:null;if(i<a)return e.elements[i];let l=e.elements.slice(a);return l.length?x(l):null}case "union":{let a=e.of.map(i=>V(i,n,r,t)).filter(i=>i!==null);return a.length?x(a):null}case "intersection":{let a=e.of.map(i=>V(i,n,r,t)).filter(i=>i!==null);return a.length?k({of:a}):null}default:return null}}function Z(e,n,r=new WeakSet,t=new Set){if(w(e,n)){let a=g(e);if(t.has(a))return [];t.add(a);let i=Z(E(e,n),n,r,t);return t.delete(a),i}let o=h(e);if(o!==e)return Z(o,n,r,t);switch(e.t){case "object":return Object.entries(e.props).map(([a,i])=>({key:a,type:i.type,optional:!!i.optional}));case "array":return [{key:"[]",type:e.items,optional:false}];case "tuple":return e.elements.map((a,i)=>({key:String(i),type:a,optional:false}));case "union":case "intersection":{if(r.has(e))return [];r.add(e);let a=[],i=new Set;for(let l of e.of)for(let u of Z(l,n,r,t))i.has(u.key)||(i.add(u.key),a.push(u));return r.delete(e),a}default:return []}}export{H as DEFAULT_TYPE_LIMITS,Be as TYPE_EVAL_DEPTH_LIMIT,P as TypeEvalLimitError,K as UnionTooComplexError,R as apparentType,Fe as configureTypeLimits,pn as discover,Ue as equals,E as expand1,Y as flagAt,S as format,un as formatTypeDiff,J as groundVars,Ge as instantiate,He as instantiateLoose,w as isScheme,L as isSerializable,Oe as isVariadicTuple,ke as join,rn as joinAll,q as normalizeTuple,x as normalizeUnion,M as ownProp,ze as resetTypeLimits,A as resolveOp,h as resolveTypeOp,_ as restIndex,c as s,G as sliceTuple,s as substitute,j as subtype,Re as typeDiff,Ke as typeFeatures,C as typeLimits,v as unify,oe as widen,Qe as widenInferred,Se as widenLiteral,Ne as widenType,B as withoutUndefined};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/type-core",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
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",