@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 +1 -1
- package/dist/index.d.cts +96 -4
- package/dist/index.d.ts +96 -4
- package/dist/index.js +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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.
|
|
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",
|