@tslite/checker 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec');var $e=(e={})=>core.rootScope(e),T=(e,n)=>core.childScope(e,n),v=(e,n)=>core.lookup(e,n),pe=e=>core.visibleNames(e),wn=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:$e(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),En=(e,n)=>e.types[n],vn=(e,n)=>e.schemes[n];var Le={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic",unsupported:"semantic","forbidden-member":"semantic","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","cast-unsound":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},k=(e,n,t)=>({code:e,kind:Le[e],severity:"error",node:n,message:t}),B=(e,n,t,r="error")=>({code:e,kind:Le[e],severity:r,node:n,message:t}),S={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r).filter(o=>o.path.length>0),a=s.length?` ${typeCore.formatTypeDiff(s)}.`:"";return k("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${a}`)},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(r=>typeCore.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>k("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(r)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),forbiddenMember:(e,n)=>k("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),castUnsound:(e,n,t)=>B("cast-unsound",e,`Conversion of type '${typeCore.format(n)}' to type '${typeCore.format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning")};function Z(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function ce(e,n,t={}){return n.flatMap(r=>r(e,t))}function U(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var Pn=e=>Array.isArray(e)?e:[e],Ve=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function me(e,n="error"){return t=>{let r=[];return U(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(B("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function Ue(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return U(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let p=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);p.length&&s.push(B("type-feature-not-allowed",a,`authoring type feature${p.length>1?"s":""} '${p.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function N(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>N(t.type,n))||!!e.index&&N(e.index.value,n);case "array":return N(e.items,n);case "tuple":return e.elements.some(t=>N(t,n));case "union":case "intersection":return e.of.some(t=>N(t,n));case "fn":return e.params.some(t=>N(t.type,n))||N(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>N(r.type,n))||N(t.returns,n));case "keyof":return N(e.of,n);case "index":return N(e.obj,n)||N(e.key,n);case "mapped":return N(e.over,n)||N(e.body,n);case "conditional":return N(e.check,n)||N(e.extends,n)||N(e.then,n)||N(e.else,n);case "returnType":case "parameters":return N(e.fn,n);case "apply":return e.args.some(t=>N(t,n));default:return false}}function qe(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return U(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&N(o)){r.push(B("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function ye(e,n="error"){let t=new Set(e);return r=>{let s=[];return U(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(B("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(B("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function ee(e,n,t={}){let r=new Set(Pn(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(p,c)=>{let m=r.has(p.type),h=m?c+1:c;m&&h>n&&i.push(B("too-deep",p,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let y of core.childrenOf(p))l(y,h);};return l(o,0),i}}var fe=(e=3,n="error")=>ee(Ve,e,{hint:"use a pipe instead of nesting functions",severity:n}),de=(e,n="error")=>ee("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),he=(e,n="error")=>ee("MemberExpression",e,{severity:n});function ge(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(B("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of core.childrenOf(a))s(i,o+1);};return s(t,0),r}}function Se(e,n="error"){return t=>{let r=0;return U(t,()=>{r++;}),r>e?[B("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function be(e,n="error"){return t=>{let r=[];return U(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(B("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Ne(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[B("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function ne(e){let n=[me(e),Ue(e),qe(e)];return e.hostAllow!=="*"&&n.push(ye([...e.hostAllow])),n}function Fn(e){return ne(capability.compileProfile(e))}var J=e=>e.typeAnnotation,ke=e=>e.returnType,F=e=>e.type==="Identifier"?e.name:null,Ke=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?F(n.id):null}return F(e)},z=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function _e(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function Be(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=Be(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function we(e){let n=e;if(n.regex||n.bigint)return typeCore.s.unknown;let t=n.value;return t===null?typeCore.s.null:t===void 0?typeCore.s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:typeCore.s.unknown}var q=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):we(e)},Ee=e=>e.type==="ArrowFunctionExpression",We=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,se=e=>We(e)?e.args[0]:e,X=e=>We(e)?e:typeCore.s.promise(e);function te(e){return e.t==="tuple"?true:e.t==="array"?te(e.items):e.t==="union"?e.of.some(te):false}function re(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>re(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&re(e.bound):false}var j=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=typeCore.expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function Je(e){let n=ke(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:F(r)??`arg${s}`,type:J(r)??typeCore.s.unknown})),returns:e.async?X(n):n}:null}var M={then:{},else:{}},nn=new Set(["string","number","boolean","undefined","function","object"]),ze={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function tn(e,n){switch(n){case "string":return e.t==="string"||e.t==="literal"&&typeof e.value=="string";case "number":return e.t==="number"||e.t==="literal"&&typeof e.value=="number";case "boolean":return e.t==="boolean"||e.t==="literal"&&typeof e.value=="boolean";case "undefined":return e.t==="undefined";case "function":return e.t==="fn"||e.t==="overload";case "object":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="null";default:return false}}var $n=typeCore.s.literal(true),Ln=typeCore.s.literal(false),x=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[$n,Ln]:[e];function Xe(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function Gn(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=x(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function Vn(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=x(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function Un(e,n){if(!nn.has(n))return null;if(e.t==="unknown"||e.t==="any")return ze[n]??e;let t=x(e).filter(r=>tn(r,n));return t.length?typeCore.normalizeUnion(t):ze[n]??e}function qn(e,n){if(!nn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=x(e).filter(r=>!tn(r,n));return t.length?typeCore.normalizeUnion(t):null}function Ye(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=q(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function He(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=q(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Qe(e,n,t,r,s){let a=x(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let p=o(l);return r?!!p&&typeCore.subtype(t,p,s):!(p&&typeCore.subtype(p,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function Ze(e,n,t){let r=x(e),s=o=>o.t==="object"&&(n in o.props||!!o.index),a=r.filter(o=>t?s(o):!s(o));return a.length&&a.length<r.length?typeCore.normalizeUnion(a):null}function Kn(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function _n(e,n,t){let r=x(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var Wn=e=>e.t==="null"||e.t==="undefined",rn=e=>Wn(e)||e.t==="literal"&&!e.value,Jn=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=x(e),t=n.filter(r=>!rn(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},zn=e=>{let n=x(e),t=n.filter(rn);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},en=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,O=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Xn=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function Q(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let y=r.left,b=r.right;if(y.type==="Literal"&&typeof y.value=="string"&&b.type==="Identifier"){let g=b.name,E=v(n,g);if(!E)return M;let V=String(y.value);return O(g,Ze(E,V,true),Ze(E,V,false))}return M}if(!Xn(r.operator))return M;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=Xe(a,o)??Xe(o,a);if(i){let y=v(n,i.name);if(!y)return M;let b=Un(y,i.tag),g=qn(y,i.tag);return s?O(i.name,g,b):O(i.name,b,g)}let l=en(a),p=en(o),c=l?o:p?a:null;if((l||p)&&c?.type==="Identifier"){let y=c.name,b=v(n,y);if(!b)return M;let E=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??p],V=x(b),je=V.filter(le=>E.includes(le.t)),ie=V.filter(le=>!E.includes(le.t)),xe=je.length?typeCore.normalizeUnion(je):null,Me=ie.length&&ie.length<V.length?typeCore.normalizeUnion(ie):null;return s?O(y,Me,xe):O(y,xe,Me)}let m=Ye(a,o)??Ye(o,a);if(m){let y=v(n,m.name);if(!y)return M;let b=Kn(y,m.lit,t),g=_n(y,m.lit,t);return s?O(m.name,g,b):O(m.name,b,g)}let h=He(a,o)??He(o,a);if(h){let y=v(n,h.name);if(!y)return M;let b=Qe(y,h.prop,h.lit,true,t),g=Qe(y,h.prop,h.lit,false,t);return s?O(h.name,g,b):O(h.name,b,g)}return M}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=Q(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Hn(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=v(n,r);if(s)return O(r,Jn(s),zn(s))}return M}function Yn(e,n){if(e.t==="fn")return e.guard??null;if(e.t==="overload"){for(let t of e.signatures)if(t.guard&&t.params.length===n)return t.guard}return null}function Hn(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=v(n,r.name);if(!s)return null;let a=Yn(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=v(n,i);return l?O(i,Gn(l,a.type,t),Vn(l,a.type,t)):null}var _=(e,n)=>Object.keys(n).length?T(e,n):e;function Y(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":{let n=e.body;return n.length>0&&Y(n[n.length-1])}case "IfStatement":{let n=e;return !!n.alternate&&Y(n.consequent)&&Y(n.alternate)}default:return false}}var yt=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ft(e){let n=[];return e.maxDepth!==void 0&&n.push(ge(e.maxDepth)),e.maxNodes!==void 0&&n.push(Se(e.maxNodes)),e.maxArgs!==void 0&&n.push(be(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(fe(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(de(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(he(e.memberDepth)),n}function cn(e,n,t={}){let r={...yt(n.types),...n.schemes,...ht(e)},s={overlay:new WeakMap,sink:Z(),env:n,schemes:r,importNames:new Set},a=t.profile?capability.compileProfile(t.profile):void 0;a&&typeCore.configureTypeLimits(a.typeLimits);try{let o,i=gt(e,s);try{o=f(e,i,s);}catch(c){if(c instanceof typeCore.TypeEvalLimitError)s.sink.report(B("too-deep",e,c.message));else if(c instanceof typeCore.UnionTooComplexError)s.sink.report(B("too-complex-union",e,c.message));else throw c;o=typeCore.s.unknown;}let l=[];a&&l.push(...ne(a)),t.limits&&l.push(...ft(t.limits)),t.resultType&&l.push(Ne(t.resultType,r));let p=l.length?[...s.sink.all,...ce(e,l,{overlay:s.overlay})]:s.sink.all;return {type:o,overlay:s.overlay,diagnostics:p}}finally{a&&typeCore.resetTypeLimits();}}function dt(e,n,t={}){let r=cn(e,n,t),s={},a=new Map,o,i=p=>{let c=[];if(p.type==="VariableDeclaration")for(let m of p.declarations){let h=F(m.id),y=r.overlay.get(m);h&&y&&(s[h]=y.type,c.push(h));}else if(p.type==="FunctionDeclaration"){let m=p.id?.name,h=r.overlay.get(p);m&&h&&(s[m]=h.type,c.push(m));}return c};for(let p of e.body??[])if(p.type==="VariableDeclaration"||p.type==="FunctionDeclaration")i(p);else if(p.type==="ExportNamedDeclaration"){let c=p;if(c.declaration)for(let m of i(c.declaration))a.set(m,m);else for(let m of c.specifiers)a.set(m.exported.name,m.local.name);}else if(p.type==="ExportDefaultDeclaration"){let c=r.overlay.get(p.declaration);o=c?c.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[p,c]of a)s[c]&&(l[p]={type:s[c]});o!==void 0&&(l.default={type:o});}else for(let p in s)l[p]={type:s[p]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var ht=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function gt(e,n){let t=n.env.modules,r={};core.walk(e,{ImportDeclaration(s){let a=s,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=typeCore.s.unknown;return}for(let l of a.specifiers){let p=l.local.name;if(p in r){n.sink.report(S.cannotRedeclare(l.local,p));continue}if(l.type==="ImportNamespaceSpecifier"){r[p]=i;continue}let c=l.type==="ImportSpecifier"?l.imported.name:"default",m=typeCore.discover(i,[c],n.schemes);m?r[p]=m.type:(n.sink.report(S.noSuchMember(l,i,c)),r[p]=typeCore.s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?T(n.env.scope,r):n.env.scope}var d=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function f(e,n,t,r){switch(e.type){case mn:return e.schema;case "JSXElement":case "JSXFragment":return d(t,e,f(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return d(t,e,we(e),n);case "Identifier":{let s=e.name,a=v(n,s);return a===void 0?s==="undefined"?d(t,e,typeCore.s.undefined,n):(t.sink.report(S.unknownName(e,s)),d(t,e,typeCore.s.unknown,n)):d(t,e,a,n)}case "MemberExpression":return d(t,e,Nt(e,n,t),n);case "CallExpression":return d(t,e,Et(e,n,t,r),n);case "ArrowFunctionExpression":return Oe(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),d(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),d(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),d(t,e,typeCore.s.unknown,n);case "BlockStatement":return d(t,e,Pe(e,n,t),n);case "ReturnStatement":{let s=e.argument;return d(t,e,s?f(s,n,t):typeCore.s.unknown,n)}case "IfStatement":return I(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return I(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "AssignmentExpression":{let s=e;return f(s.left,n,t),d(t,e,f(s.right,n,t),n)}case "UpdateExpression":return f(e.argument,n,t),d(t,e,typeCore.s.number,n);case "ExpressionStatement":return d(t,e,f(e.expression,n,t),n);case "VariableDeclaration":return ae(e,n,t),d(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":return d(t,e,typeCore.s.unknown,n);case "BinaryExpression":return d(t,e,xt(e,n,t),n);case "LogicalExpression":{let s=e,a=f(s.left,n,t),o=f(s.right,n,t);return d(t,e,Mt(s.operator,a,o),n)}case "UnaryExpression":return d(t,e,Gt(e,n,t),n);case "ConditionalExpression":{let s=e;f(s.test,n,t);let a=Q(s.test,n,t.schemes),o=f(s.consequent,_(n,a.then),t),i=f(s.alternate,_(n,a.else),t);return d(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return d(t,e,Vt(e,n,t),n);case "ArrayExpression":return d(t,e,gn(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions)f(s,n,t);return d(t,e,typeCore.s.string,n)}case "AwaitExpression":{let s=e.argument,a=s?f(s,n,t):typeCore.s.unknown;return d(t,e,se(a),n)}case "Program":return Ie(e.body,n,t,new Set(t.importNames)),d(t,e,typeCore.s.unknown,n);case "JsonExpression":return d(t,e,Ce(e.body,n,t,e),n);case "ChainExpression":return d(t,e,typeCore.normalizeUnion([f(e.expression,n,t),typeCore.s.undefined]),n);case "TSAsExpression":{let s=e,a=f(s.expression,n,t),o=s.typeAnnotation;return !typeCore.subtype(a,o,t.schemes)&&!typeCore.subtype(o,a,t.schemes)&&t.sink.report(S.castUnsound(e,a,o)),d(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),d(t,e,typeCore.s.unknown,n)}}var St=new Set(["constructor","prototype","__proto__"]);function bt(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function Nt(e,n,t){let r=f(e.object,n,t),s=bt(e);if(s!==null&&St.has(s))return t.sink.report(S.forbiddenMember(e,s)),typeCore.s.unknown;if(e.computed){let i=f(e.property,n,t),l=typeCore.resolveTypeOp(typeCore.s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&an(e,r,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(r,[a],t.schemes);return o?o.type:(an(e,r,a,t),typeCore.s.unknown)}function an(e,n,t,r){let s=typeCore.isScheme(n,r.schemes)?typeCore.expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(S.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(S.notObject(e,n));}function kt(e,n,t){if(!e||e.type!=="Identifier")return;let r=e.name;if(v(n,r)===void 0)return;let s=t.schemes[r];return s&&s.params.length===0?s.body:void 0}function Bt(e,n,t,r){let s=j(f(n[0],t,r),r.schemes),o=(s.t==="fn"?s:s.t==="overload"?s.signatures[0]:void 0)?.params[0]?.type,i=n.length>1?f(n[1],t,r):typeCore.s.undefined;if(o){let l=typeCore.typeDiff(i,o,r.schemes);l.length&&r.sink.report(S.propsMismatch(n[1]??e,o,typeCore.formatTypeDiff(l)));}return d(r,e,typeCore.s.boolean,t)}var mn="TSLiteSyntheticArg",wt=e=>({type:mn,schema:e});function yn(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=j(f(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(wt(l));else s={elem:i.t==="array"?i.items:typeCore.s.unknown,node:a};}return {nodes:r,spread:s}}function Et(e,n,t,r){let s=e.arguments,a=Be(e.callee);if(a){let p=t.env.accessors?.[a];if(p){let c=_e(s);if(c){let m=typeCore.discover(p,c,t.schemes);return m?m.type:(t.sink.report(S.noSuchMember(e,p,c.join("."))),typeCore.s.unknown)}return s.forEach(m=>f(m,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let p=kt(s[0],n,t);for(let c=1;c<s.length;c++)f(s[c],n,t);return p??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return Bt(e,s,n,t);let o=f(e.callee,n,t);if(o.t==="any")return s.forEach(p=>f(p,n,t)),typeCore.s.any;if(o.t==="overload")return At(e,o,n,t,r);if(o.t!=="fn")return s.forEach(p=>f(p,n,t)),t.sink.report(S.notCallable(e,o)),typeCore.s.unknown;let i=yn(s,n,t),l=i.nodes.map(p=>fn(p,n,t));return dn(e,o,i.nodes,l,n,t,i.spread,r)}function fn(e,n,t){if(Ee(e))return typeCore.s.any;if(e.type!=="CallExpression")return f(e,n,t);let r=Z(),s=f(e,n,{...t,sink:r});return r.hasErrors()?typeCore.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function dn(e,n,t,r,s,a,o=null,i){let l=m=>{if(!i)return m;let h=typeCore.substitute(n.returns,m);if(h.t==="fn"&&i.t==="fn"){let y=m,b=Math.min(h.params.length,i.params.length);for(let g=0;g<b;g++)y=typeCore.unify(h.params[g].type,i.params[g].type,y)??y;return typeCore.unify(h.returns,i.returns,y)??y}return typeCore.unify(h,i,m)??m},p=l(typeCore.instantiateLoose(n,r).bindings);t.forEach((m,h)=>{if(Ee(m)){let y=typeCore.widenType(typeCore.substitute(n.params[h]?.type??typeCore.s.any,p));r[h]=Oe(m,s,a,y);}else if(m.type==="CallExpression"&&r[h].t==="any")r[h]=f(m,s,a,typeCore.substitute(n.params[h]?.type??typeCore.s.unknown,p));else if(m.type==="Literal"){let y=n.params[h]?.type??typeCore.s.unknown,b=y.t==="var"?y.bound?typeCore.substitute(y.bound,p):y:typeCore.substitute(y,p);re(b)&&(r[h]=d(a,m,q(m),s));}else if(m.type==="ArrayExpression"){let y=typeCore.substitute(n.params[h]?.type??typeCore.s.unknown,p);te(y)&&(r[h]=Sn(m,y,s,a));}});let c=l(typeCore.instantiateLoose(n,r).bindings);return Dt(e,n,c,a),Ot(e,n,r,c,a,t,o),t.forEach((m,h)=>{let y=n.params[h];m.type==="ObjectExpression"&&y&&!y.variadic&&Fe(m,typeCore.substitute(y.type,c),a);}),typeCore.widenInferred(typeCore.groundVars(typeCore.substitute(n.returns,c),a.schemes))}var on=new WeakMap;function vt(e){let n=on.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)w(s.type,t,r);return w(e.returns,t,r),on.set(e,t),t}function w(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":w(e.items,n,t);return;case "union":for(let r of e.of)w(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)w(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)w(r.type,n,t);w(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)w(s.type,n,t);w(r.returns,n,t);}return;case "apply":for(let r of e.args)w(r,n,t);return;case "keyof":w(e.of,n,t);return;case "index":w(e.obj,n,t),w(e.key,n,t);return;case "mapped":w(e.over,n,t),w(e.body,n,t);return;default:return}}function Dt(e,n,t,r){let s=vt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=typeCore.substitute(o,t);typeCore.subtype(i,l,r.schemes)||r.sink.report(S.constraintViolation(e,a,i,l));}}function At(e,n,t,r,s){let a=yn(e.arguments,t,r),o=a.nodes,i=o.map(c=>fn(c,t,r)),l=c=>a.spread?Ct(c,o.length):Tt(c,o.length),p=n.signatures.find(c=>l(c)&&Rt(c,i,r));if(!p){let c=n.signatures.filter(l);c.length===1?p=c[0]:n.signatures.length===1&&(p=n.signatures[0]);}return p?dn(e,p,o,i,t,r,a.spread,s):(r.sink.report(S.noMatchingOverload(e,n,i)),typeCore.s.unknown)}function Ct(e,n){let t=0,r=false;for(let s of e.params)s.variadic?r=true:s.optional||t++;return n>=t&&(r||n<e.params.length)}function Tt(e,n){let t=0;for(let r of e.params){if(r.variadic)return n>=t;r.optional||t++;}return n>=t&&n<=e.params.length}function Rt(e,n,t){let{bindings:r}=typeCore.instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic)return true;if(s>=n.length){if(!a.optional)return false;continue}if(!typeCore.subtype(n[s],typeCore.substitute(a.type,r),t.schemes))return false}return true}function Ot(e,n,t,r,s,a=e.arguments??[],o=null){let i=p=>a[p]??e;for(let p=0;p<n.params.length;p++){let c=n.params[p];if(c.variadic)break;let m=typeCore.substitute(c.type,r);if(p>=t.length){!c.optional&&!o&&s.sink.report(S.missingArgument(e,c.name,m));continue}typeCore.subtype(t[p],m,s.schemes)||s.sink.report(S.notAssignable(i(p),t[p],m,s.schemes));}let l=n.params.find(p=>p.variadic);if(o){let p=t.length,c=n.params.filter(m=>!m.optional&&!m.variadic).length;if(!(p>=c&&(l||p<n.params.length))){s.sink.report(S.spreadArgument(o.node));return}if(l){let m=typeCore.substitute(l.type,r),h=m.t==="array"?m.items:typeCore.s.unknown;typeCore.subtype(o.elem,h,s.schemes)||s.sink.report(S.notAssignable(o.node,o.elem,h,s.schemes));}return}!l&&t.length>n.params.length&&s.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function L(e,n,t,r){let s=j(n,r.schemes);switch(e.type){case "Literal":{let o=q(e);return typeCore.subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),d(r,e,n,t)}case "ArrayExpression":{if(s.t==="array"){for(let o of e.elements){if(!o)continue;let i=o;i.type==="SpreadElement"?L(i.argument,n,t,r):L(i,s.items,t,r);}return d(r,e,n,t)}break}case "ObjectExpression":{if(s.t==="object"){let o={};for(let l of e.properties){let p=l;if(p.type==="SpreadElement"){f(p.argument,t,r);continue}let c=p,m=z(c),h=m!==null?typeCore.ownProp(s.props,m)?.type:void 0,y=h?L(c.value,h,t,r):f(c.value,t,r);m!==null&&(o[m]={type:y}),d(r,p,y,t);}let i={t:"object",props:o};return typeCore.subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),d(r,e,n,t)}break}case "ArrowFunctionExpression":{if(s.t==="fn"){let o=Oe(e,t,r,s);return typeCore.subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),d(r,e,n,t)}break}case "ConditionalExpression":{let o=e;return f(o.test,t,r),L(o.consequent,n,t,r),L(o.alternate,n,t,r),d(r,e,n,t)}}let a=f(e,t,r);return typeCore.subtype(a,n,r.schemes)||r.sink.report(S.notAssignable(e,a,n,r.schemes)),d(r,e,a,t)}function Oe(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a={},o=e.params.map((h,y)=>{let b=h,g=F(b),E=J(b)??s?.params[y]?.type??typeCore.s.unknown;return g?a[g]=E:b.type!=="Identifier"&&G(b,E,a,n,t),t.overlay.set(b,{type:E,scope:n}),{name:g??`arg${y}`,type:E}}),i=T(n,a),l=e.body,p=ke(e);if(l.type!=="BlockStatement"&&p){let h=e.async?se(p):p;L(l,h,i,t);let y=e.async?X(p):p;return d(t,e,{t:"fn",params:o,returns:y},n)}let c=l.type==="BlockStatement"?d(t,l,Pe(l,i,t,new Set(Object.keys(a))),i):f(l,i,t),m=e.async?X(c):c;if(p){let h=e.async?se(p):p,y=e.async?c:m;typeCore.subtype(y,h,t.schemes)||t.sink.report(S.notAssignable(l,m,p,t.schemes));let b=e.async?X(p):p;return d(t,e,{t:"fn",params:o,returns:b},n)}return d(t,e,{t:"fn",params:o,returns:typeCore.widenType(m)},n)}function W(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?W(n.argument):W(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?W(n.argument):W(n):[]);case "AssignmentPattern":return W(e.left);default:return []}}function hn(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>W(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?hn(e.declaration):[]}function Pe(e,n,t,r=new Set){let{returns:s}=Ie(e.body,n,t,r);return s.length?typeCore.normalizeUnion(s):typeCore.s.unknown}function Ie(e,n,t,r=new Set){let s=n,a=[];for(let o of e){let i=o;for(let l of hn(i))r.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):r.add(l.name);if(i.type==="VariableDeclaration")s=ae(i,s,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")s=ae(l.declaration,s,t);else if(l.declaration?.type==="FunctionDeclaration"){let p=f(l.declaration,s,t),c=F(l.declaration.id);c&&(s=T(s,{[c]:p}));}else for(let p of l.specifiers)v(s,p.local.name)===void 0&&t.sink.report(S.unknownName(p.local,p.local.name));}else if(i.type==="ExportDefaultDeclaration")f(i.declaration,s,t);else if(i.type==="FunctionDeclaration"){let l=f(i,s,t),p=F(i.id);p&&(s=T(s,{[p]:l}));}else if(i.type==="IfStatement"){a.push(...I(i,s,t));let l=i;!l.alternate&&Y(l.consequent)&&(s=_(s,Q(l.test,s,t.schemes).else));}else a.push(...I(i,s,t));}return {scope:s,returns:a}}function I(e,n,t){switch(e.type){case "ReturnStatement":{let r=e.argument,s=r?f(r,n,t):typeCore.s.unknown;return d(t,e,s,n),[s]}case "IfStatement":{let r=e;f(r.test,n,t);let s=Q(r.test,n,t.schemes),a=I(r.consequent,_(n,s.then),t);return r.alternate&&a.push(...I(r.alternate,_(n,s.else),t)),d(t,e,typeCore.s.unknown,n),a}case "BlockStatement":{let r=Pe(e,n,t);return d(t,e,r,n),r.t==="unknown"?[]:[r]}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let r=e,s=n;r.init&&(r.init.type==="VariableDeclaration"?s=ae(r.init,s,t):f(r.init,s,t)),r.test&&f(r.test,s,t),r.update&&f(r.update,s,t);let a=I(r.body,s,t);return d(t,e,typeCore.s.unknown,n),a}case "ForOfStatement":case "ForInStatement":{let r=e,s=f(r.right,n,t),a=e.type==="ForOfStatement"?s.t==="array"?s.items:typeCore.s.unknown:typeCore.s.string,o=Ke(r.left),i=o?T(n,{[o]:a}):n,l=I(r.body,i,t);return d(t,e,typeCore.s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return d(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let r=e.argument;return r&&f(r,n,t),d(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let r=e,s=I(r.block,n,t);if(r.handler){let a=r.handler.param,o=a?F(a):null,i=o?T(n,{[o]:typeCore.s.unknown}):n;s.push(...I(r.handler.body,i,t));}return r.finalizer&&s.push(...I(r.finalizer,n,t)),d(t,e,typeCore.s.unknown,n),s}case "SwitchStatement":{let r=e;f(r.discriminant,n,t);let s=n,a=[];for(let o of r.cases){o.test&&f(o.test,s,t);let i=Ie(o.consequent,s,t);s=i.scope,a.push(...i.returns);}return d(t,e,typeCore.s.unknown,n),a}default:return f(e,n,t),[]}}function Pt(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function It(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function Ft(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return typeCore.s.object(t,e.index)}function jt(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function G(e,n,t,r,s){switch(e.type){case "Identifier":{let a=J(e)??n;t[e.name]=a,s.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=typeCore.widenType(f(a.right,r,s)),{type:i}=typeCore.withoutUndefined(n),l=i.t==="unknown"?o:typeCore.normalizeUnion([i,o]);G(a.left,l,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){G(o.argument,Ft(n,a),t,r,s);continue}let i=o,l=z(i);l!=null&&a.push(l);let p=l!=null?Pt(n,l,s):typeCore.s.unknown;G(i.value,p,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?G(i.argument,jt(n,o),t,r,s):G(i,It(n,o),t,r,s);});return}}}function Fe(e,n,t){let r=j(n,t.schemes),a=(r.t==="union"?r.of.map(o=>j(o,t.schemes)):[r]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=z(i);if(l===null)continue;let p=a.filter(c=>l in c.props);if(!p.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&Fe(i.value,p[0].props[l].type,t);}}function ae(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=F(a),i=J(a);if(!s.init){t.sink.report(S.constNeedsInit(s)),o&&(r[o]=i??typeCore.s.unknown);continue}let l=i??(s.init.type==="ArrowFunctionExpression"?Je(s.init):null),p=o&&l?T(n,{[o]:l}):n,c;i?(L(s.init,i,p,t),s.init.type==="ObjectExpression"&&Fe(s.init,i,t),c=i):c=f(s.init,p,t),d(t,s,c,n),o?r[o]=c:G(a,c,r,n,t);}return d(t,e,typeCore.s.unknown,n),T(n,r)}function xt(e,n,t){let r=f(e.left,n,t),s=f(e.right,n,t),a=e.operator;return a==="+"?typeCore.subtype(r,typeCore.s.string)||typeCore.subtype(s,typeCore.s.string)?typeCore.s.string:typeCore.s.number:$t.has(a)?typeCore.s.number:typeCore.s.boolean}var ln={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},De=e=>e.t==="null"||e.t==="undefined";function Mt(e,n,t){if(n.t==="any"||n.t==="unknown")return typeCore.normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[typeCore.s.literal(true),typeCore.s.literal(false)]:[n];if(e==="??")return typeCore.normalizeUnion([...r.filter(a=>!De(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!De(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>De(a)?[a]:a.t==="literal"?a.value?[]:[a]:ln[a.t]?[ln[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var $t=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),Lt=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function Gt(e,n,t){let r=f(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:typeCore.s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:typeCore.s.number;case "+":case "~":return typeCore.s.number;case "typeof":return Lt;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function Vt(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let p of e.properties){let c=p;if(c.type==="SpreadElement"){let g=j(f(c.argument,n,t),t.schemes);if(g.t==="object"){for(let E in g.props)r[E]=g.props[E];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let m=c,h=f(m.value,n,t),y=typeCore.widen(h);if(d(t,c,h,n),m.computed){let g=j(f(m.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:y},a.push(y)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:y},a.push(y),o.push(y)):g.t==="string"?(i=true,a.push(y)):g.t==="number"&&(l=true,a.push(y),o.push(y));continue}let b=z(m);b!==null&&(r[b]={type:y},a.push(y),/^\d+$/.test(b)&&o.push(y));}return i?s={key:"string",type:typeCore.normalizeUnion(a)}:l&&(s={key:"number",type:typeCore.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function gn(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=j(f(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(typeCore.widen(f(a,n,t)));}return typeCore.s.array(r.length?typeCore.normalizeUnion(r):typeCore.s.unknown)}function Sn(e,n,t,r){let s=j(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,p)=>l.type==="ArrayExpression"?Sn(l,p,t,r):typeCore.widen(f(l,t,r));if(s.t==="tuple"&&o&&a.length===s.elements.length){let l=a.map((p,c)=>i(p,s.elements[c]));return d(r,e,{t:"tuple",elements:l},t)}if(s.t==="array"){let l=[];for(let p of a){if(!p)continue;let c=p;if(c.type==="SpreadElement"){f(c.argument,t,r);continue}l.push(i(c,s.items));}return d(r,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return gn(e,t,r)}function Ce(e,n,t,r){if(e===null)return typeCore.s.null;switch(typeof e){case "string":return typeCore.s.string;case "number":return typeCore.s.number;case "boolean":return typeCore.s.boolean;case "object":break;default:return typeCore.s.unknown}if(Array.isArray(e)){let o=e.map(i=>Ce(i,n,t,r));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let s=e;if(core.AST_MARKER in s){let o;try{o=codec.fromJson(s);}catch{return t.sink.report(S.unsupported(r,`'#ast: ${String(s[core.AST_MARKER])}'`)),typeCore.s.unknown}return f(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:Ce(s[o],n,t,r)};return {t:"object",props:a}}var Ut=(e,n)=>({...e,typeAnnotation:n}),qt=(e,n)=>({...e,returnType:n}),Kt=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Wt(e,n){return e.get(n)?.type}function Jt(e,n){return e.get(n)?.scope}function zt(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function Xt(e,n){let t=e.get(n)?.scope;return t?[...pe(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}function Yt(e,n){return e.filter(t=>t.node===n)}exports.FUNCTION_KINDS=Ve;exports.annotate=Ut;exports.annotateReturn=qt;exports.asExpression=Kt;exports.calleeAllowlist=ye;exports.capabilityNodes=me;exports.check=cn;exports.childScope=T;exports.createEnv=wn;exports.createSink=Z;exports.diag=S;exports.diagnosticsAt=Yt;exports.extractModuleType=dt;exports.fromCapability=Fn;exports.guard=ce;exports.guardsFromCompiled=ne;exports.lookup=v;exports.makeDiagnostic=B;exports.maxArgs=be;exports.maxCallNesting=de;exports.maxDepth=ge;exports.maxFunctionNesting=fe;exports.maxNestingOf=ee;exports.maxNodes=Se;exports.memberCompletions=zt;exports.memberDepth=he;exports.resolveNamed=En;exports.resolveScheme=vn;exports.resultType=Ne;exports.rootScope=$e;exports.scopeAt=Jt;exports.scopeCompletions=Xt;exports.typeAt=Wt;exports.visibleNames=pe;Object.keys(typeCore).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return typeCore[k]}})});
1
+ 'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec');var un=(e={})=>core.rootScope(e),I=(e,n)=>core.childScope(e,n),A=(e,n)=>core.lookup(e,n),Ee=e=>core.visibleNames(e),et=(e={},n={},t={},s={},r=new Set,a=new Set,o={})=>({scope:un(e),types:n,schemes:t,accessors:s,asserters:r,matchers:a,modules:o}),nt=(e,n)=>e.types[n],tt=(e,n)=>e.schemes[n];var cn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},k=(e,n,t)=>({code:e,kind:cn[e],severity:"error",node:n,message:t}),E=(e,n,t,s="error")=>({code:e,kind:cn[e],severity:s,node:n,message:t}),S={notAssignable:(e,n,t,s={})=>{let r=typeCore.typeDiff(n,t,s).filter(o=>o.path.length>0),a=r.length?` ${typeCore.formatTypeDiff(r)}.`:"";return k("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${a}`)},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(s=>typeCore.format(s)).join(", ")}).`),constraintViolation:(e,n,t,s)=>k("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(s)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>k("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>k("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>E("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>k("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>k("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>E("cast-unsound",e,`Conversion of type '${typeCore.format(n)}' to type '${typeCore.format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning")};function ee(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Ae(e,n,t={}){return n.flatMap(s=>s(e,t))}function X(e,n){let t=s=>{n(s);for(let r of core.childrenOf(s))t(r);};t(e);}var ut=e=>Array.isArray(e)?e:[e],mn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function De(e,n="error"){return t=>{let s=[];return X(t,r=>{let a=capability.nodeViolation(r,e);a&&s.push(E("node-not-allowed",r,`'${a}' is not allowed by the capability profile.`,n));}),s}}function dn(e,n="error"){let t=e.typeTier;return s=>{if(t==="author")return [];let r=[];return X(s,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);u.length&&r.push(E("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),r}}function b(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>b(t.type,n))||!!e.index&&b(e.index.value,n);case "array":return b(e.items,n);case "tuple":return e.elements.some(t=>b(t,n));case "union":case "intersection":return e.of.some(t=>b(t,n));case "fn":return e.params.some(t=>b(t.type,n))||b(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(s=>b(s.type,n))||b(t.returns,n));case "keyof":return b(e.of,n);case "index":return b(e.obj,n)||b(e.key,n);case "mapped":return b(e.over,n)||b(e.body,n);case "conditional":return b(e.check,n)||b(e.extends,n)||b(e.then,n)||b(e.else,n);case "returnType":case "parameters":return b(e.fn,n);case "apply":return e.args.some(t=>b(t,n));default:return false}}function fn(e,n="error"){return t=>{if(!e.typeStrict)return [];let s=[];return X(t,r=>{let a=r;for(let o of [a.typeAnnotation,a.returnType])if(o&&b(o)){s.push(E("any-not-allowed",r,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),s}}function Ce(e,n="error"){let t=new Set(e);return s=>{let r=[];return X(s,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")r.push(E("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||r.push(E("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),r}}function de(e,n,t={}){let s=new Set(ut(e)),r=t.severity??"error",a=[...s].join("/");return o=>{let i=[],l=(u,p)=>{let m=s.has(u.type),f=m?p+1:p;m&&f>n&&i.push(E("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,r));for(let d of core.childrenOf(u))l(d,f);};return l(o,0),i}}var Te=(e=3,n="error")=>de(mn,e,{hint:"use a pipe instead of nesting functions",severity:n}),Re=(e,n="error")=>de("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),Pe=(e,n="error")=>de("MemberExpression",e,{severity:n});function Oe(e,n="error"){return t=>{let s=[],r=(a,o)=>{if(o>e){s.push(E("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of core.childrenOf(a))r(i,o+1);};return r(t,0),s}}function Ie(e,n="error"){return t=>{let s=0;return X(t,()=>{s++;}),s>e?[E("too-large",t,`Expression has ${s} nodes (max ${e}).`,n)]:[]}}function Fe(e,n="error"){return t=>{let s=[];return X(t,r=>{if(r.type==="CallExpression"){let a=r.arguments;a&&a.length>e&&s.push(E("too-large",r,`Call has ${a.length} arguments (max ${e}).`,n));}}),s}}function Me(e,n={},t="error"){return (s,r)=>{let a=r.overlay?.get(s)?.type;return a?typeCore.subtype(a,e,n)?[]:[E("wrong-result-type",s,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function fe(e){let n=[De(e),dn(e),fn(e)];return e.hostAllow!=="*"&&n.push(Ce([...e.hostAllow])),n}function pt(e){return fe(capability.compileProfile(e))}var W=e=>({bindings:new Map,parent:e}),hn=e=>e.charCodeAt(0)===95;function ye(e,n,t,s,r,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:s,kind:r,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function te(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)te(s,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let s=t.path[0];typeof s=="string"&&he(n,s);return}for(let s of Object.keys(t))te(t[s],n);}function gn(e,n){let t=e;te(t.typeAnnotation,n),te(t.returnType,n);}function he(e,n){for(let t=e;t;t=t.parent){let s=t.bindings.get(n);if(s){s.used=true;return}}}function x(e,n,t,s,r,a){if(e)switch(e.type){case "Identifier":{let o=e.name;gn(e,n),ye(n,t,o,e,s,r||a&&hn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let m=l&&p<o.length-1;if(u.type==="RestElement")x(u.argument,n,t,s,r,false);else {let f=u;f.computed&&B(f.key,n,t),x(f.value,n,t,s,r||m,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;x(i.type==="RestElement"?i.argument:i,n,t,s,r,true);}return}case "AssignmentPattern":x(e.left,n,t,s,r,a);return;case "RestElement":x(e.argument,n,t,s,r,true);return;default:return}}function ne(e,n,t){if(e)switch(e.type){case "AssignmentPattern":B(e.right,n,t),ne(e.left,n,t);return;case "ObjectPattern":for(let s of e.properties)ne(s.type==="RestElement"?s.argument:s.value,n,t);return;case "ArrayPattern":for(let s of e.elements)s&&ne(s,n,t);return;case "RestElement":ne(e.argument,n,t);return;default:return}}function yn(e,n,t,s){for(let r of e.declarations)x(r.id,n,t,"local",s,false),B(r.init,n,t);}function je(e,n,t){let s=e,r=W(n),a=s.params??[];for(let o of a)x(o,r,t,"parameter",false,true);for(let o of a)ne(o,r,t);B(s.body,r,t);}function B(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(gn(e,n),e.type){case "Identifier":he(n,e.name);return;case "MemberExpression":{let s=e;B(s.object,n,t),s.computed&&B(s.property,n,t);return}case "Property":{let s=e;s.computed&&B(s.key,n,t),B(s.value,n,t);return}case "Program":case "BlockStatement":{let s=W(n);for(let r of e.body??[])B(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":je(e,n,t);return;case "FunctionDeclaration":{let s=e.id;s&&ye(n,t,s.name,s,"local",false),je(e,n,t);return}case "CatchClause":{let s=e,r=W(n);x(s.param,r,t,"local",true,false),B(s.body,r,t);return}case "SwitchStatement":{let s=e;B(s.discriminant,n,t);let r=W(n);for(let a of s.cases){B(a.test,r,t);for(let o of a.consequent??[])B(o,r,t);}return}case "ForStatement":{let s=e,r=W(n);B(s.init,r,t),B(s.test,r,t),B(s.update,r,t),B(s.body,r,t);return}case "ForOfStatement":case "ForInStatement":{let s=e;B(s.right,n,t);let r=W(n),a=s.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)x(o.id,r,t,"local",false,true);else B(a,r,t);B(s.body,r,t);return}case "VariableDeclaration":yn(e,n,t,false);return;case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&ye(n,t,r.name,r,"import",hn(r.name));}return}case "ExportNamedDeclaration":{let s=e;if(s.declaration){let r=s.declaration;if(r.type==="VariableDeclaration")yn(r,n,t,true);else if(r.type==="FunctionDeclaration"){let a=r.id;a&&ye(n,t,a.name,a,"local",true),je(r,n,t);}else B(r,n,t);}else for(let r of s.specifiers)he(n,r.local.name);return}case "TSAsExpression":B(e.expression,n,t);return;case "TSTypeAliasDeclaration":te(e.typeAnnotation,n);return;case "JsonExpression":Ue(e.body,n,t);return;case "JSXOpeningElement":{let s=e;Sn(s.name,n);for(let r of s.attributes??[])B(r,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":B(e.value,n,t);return;default:{let s=core.VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)B(i,n,t);else B(o,n,t);}return}}}function Sn(e,n,t){e&&(e.type==="JSXIdentifier"?he(n,e.name):e.type==="JSXMemberExpression"&&Sn(e.object,n));}function Ue(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ue(r,n,t);return}let s=e;if(core.AST_MARKER in s){try{B(codec.fromJson(s),n,t);}catch{}return}for(let r of Object.keys(s))Ue(s[r],n,t);}function $e(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};B(e,W(void 0),t);let s=[];for(let r of t.all)r.used||r.exempt||(r.kind==="parameter"?n.parameters:n.locals)&&s.push(S.unusedName(r.node,r.name));return s}var ht=new Set(["const","import"]),se=e=>({binds:new Map,parent:e});function gt(e,n){for(let t=e;t;t=t.parent){let s=t.binds.get(n);if(s)return s}}function q(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?q(n.argument):q(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?q(n):[]);case "AssignmentPattern":return q(e.left);case "RestElement":return q(e.argument);default:return []}}var ge=(e,n,t)=>{for(let s of q(n))e.binds.set(s.name,t);};function Le(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of q(e))Le(a,n,t);return}let s=e.name,r=gt(n,s);r&&ht.has(r)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,s,r==="import"?"import":"const")));}function C(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let s=e;Le(s.left,n,t),C(s.right,n,t);return}case "UpdateExpression":{Le(e.argument,n,t);return}case "Program":case "BlockStatement":{let s=se(n);for(let r of e.body??[])C(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=se(n);for(let a of s.params??[])ge(r,a,"param");C(s.body,r,t);return}case "CatchClause":{let s=e,r=se(n);ge(r,s.param,"param"),C(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=se(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)ge(r,o.id,a.kind);else a&&C(a,r,t);C(s.right,n,t),C(s.test,r,t),C(s.update,r,t),C(s.body,r,t);return}case "VariableDeclaration":{let s=e;for(let r of s.declarations)C(r.init,n,t),ge(n,r.id,s.kind);return}case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&n.binds.set(r.name,"import");}return}case "ExportNamedDeclaration":{let s=e;s.declaration&&C(s.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":C(e.expression,n,t);return;default:{let s=core.VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)C(i,n,t);else C(o,n,t);}return}}}function Ve(e){let n={out:[],invalid:new WeakSet};return C(e,se(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var re=e=>({decls:new Map,parent:e});function Nt(e,n){for(let t=e;t;t=t.parent){let s=t.decls.get(n);if(s)return s}}function z(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?z(n.argument):z(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?z(n):[]);case "AssignmentPattern":return z(e.left);case "RestElement":return z(e.argument);default:return []}}var Se=(e,n)=>{for(let t of z(n))e.decls.set(t.name,t);};function v(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let s=Nt(n,e.name);s&&s!==e&&t.set(e,s);return}case "MemberExpression":{let s=e;v(s.object,n,t),s.computed&&v(s.property,n,t);return}case "Property":{let s=e;s.computed&&v(s.key,n,t),v(s.value,n,t);return}case "Program":case "BlockStatement":{let s=re(n);for(let r of e.body??[])v(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=e.id;r&&n.decls.set(r.name,r);let a=re(n);for(let o of s.params??[])Se(a,o);v(s.body,a,t);return}case "CatchClause":{let s=e,r=re(n);Se(r,s.param),v(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=re(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Se(r,o.id);else a&&v(a,r,t);v(s.right,n,t),v(s.test,r,t),v(s.update,r,t),v(s.body,r,t);return}case "VariableDeclaration":{for(let s of e.declarations)Se(n,s.id),v(s.init,n,t);return}case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&n.decls.set(r.name,r);}return}case "TSTypeAliasDeclaration":{let s=e.id;s&&n.decls.set(s.name,s);return}case "TSAsExpression":v(e.expression,n,t);return;default:{let s=core.VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)v(i,n,t);else v(o,n,t);}return}}}function Bt(e){let n=new WeakMap;return v(e,re(void 0),n),n}var xe=e=>e.typeAnnotation,Ge=e=>e.returnType,$=e=>e.type==="Identifier"?e.name:null,Nn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?$(n.id):null}return $(e)},oe=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function Bn(e){let n=s=>s&&s.type==="Literal"&&typeof s.value=="string"?s.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let s=[];for(let r of e[0].elements){let a=n(r);if(a===null)return null;s.push(a);}return s}let t=[];for(let s of e){let r=n(s);if(r===null)return null;t.push(r);}return t.length?t:null}function Ke(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=Ke(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Je(e){let n=e;if(n.regex||n.bigint)return typeCore.s.unknown;let t=n.value;return t===null?typeCore.s.null:t===void 0?typeCore.s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:typeCore.s.unknown}var Q=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):Je(e)},We=e=>e.type==="ArrowFunctionExpression",bn=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Be=e=>bn(e)?e.args[0]:e,ie=e=>bn(e)?e:typeCore.s.promise(e);function ae(e){return e.t==="tuple"?true:e.t==="array"?ae(e.items):e.t==="union"?e.of.some(ae):false}function Ne(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Ne(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Ne(e.bound):false}var L=(e,n)=>{let t=e;for(let s=0;s<50&&t.t==="apply";s++){let r=typeCore.expand1(t,n);if(r===t||r.t==="apply"&&r.name===t.name)break;t=r;}return t};function kn(e){let n=Ge(e);return n?{t:"fn",params:e.params.map((s,r)=>({name:$(s)??`arg${r}`,type:xe(s)??typeCore.s.unknown})),returns:e.async?ie(n):n}:null}var G={then:{},else:{}},Rn=new Set(["string","number","boolean","undefined","function","object"]),wn={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function Pn(e,n){switch(n){case "string":return e.t==="string"||e.t==="literal"&&typeof e.value=="string";case "number":return e.t==="number"||e.t==="literal"&&typeof e.value=="number";case "boolean":return e.t==="boolean"||e.t==="literal"&&typeof e.value=="boolean";case "undefined":return e.t==="undefined";case "function":return e.t==="fn"||e.t==="overload";case "object":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="null";default:return false}}var Et=typeCore.s.literal(true),vt=typeCore.s.literal(false),V=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Et,vt]:[e];function En(e,n){let t=e,s=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof s.value=="string"?{name:t.argument.name,tag:s.value}:null}function At(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let s=V(e).filter(r=>typeCore.subtype(r,n,t));return s.length?typeCore.normalizeUnion(s):n}function Dt(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let s=V(e).filter(r=>!typeCore.subtype(r,n,t));return s.length?typeCore.normalizeUnion(s):null}function Ct(e,n){if(!Rn.has(n))return null;if(e.t==="unknown"||e.t==="any")return wn[n]??e;let t=V(e).filter(s=>Pn(s,n));return t.length?typeCore.normalizeUnion(t):wn[n]??e}function Tt(e,n){if(!Rn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=V(e).filter(s=>!Pn(s,n));return t.length?typeCore.normalizeUnion(t):null}function vn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=Q(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function An(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=Q(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Dn(e,n,t,s,r){let a=V(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return s?!!u&&typeCore.subtype(t,u,r):!(u&&typeCore.subtype(u,t,r))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function Cn(e,n,t){let s=V(e),r=o=>o.t==="object"&&(n in o.props||!!o.index),a=s.filter(o=>t?r(o):!r(o));return a.length&&a.length<s.length?typeCore.normalizeUnion(a):null}function Rt(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function Pt(e,n,t){let s=V(e),r=s.filter(a=>!typeCore.equals(a,n,t));return r.length&&r.length<s.length?typeCore.normalizeUnion(r):null}var Ot=e=>e.t==="null"||e.t==="undefined",On=e=>Ot(e)||e.t==="literal"&&!e.value,It=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=V(e),t=n.filter(s=>!On(s));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Ft=e=>{let n=V(e),t=n.filter(On);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Tn=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,M=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Mt=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function ce(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let d=s.left,N=s.right;if(d.type==="Literal"&&typeof d.value=="string"&&N.type==="Identifier"){let g=N.name,w=A(n,g);if(!w)return G;let F=String(d.value);return M(g,Cn(w,F,true),Cn(w,F,false))}return G}if(!Mt(s.operator))return G;let r=s.operator==="!=="||s.operator==="!=",a=s.left,o=s.right,i=En(a,o)??En(o,a);if(i){let d=A(n,i.name);if(!d)return G;let N=Ct(d,i.tag),g=Tt(d,i.tag);return r?M(i.name,g,N):M(i.name,N,g)}let l=Tn(a),u=Tn(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let d=p.name,N=A(n,d);if(!N)return G;let w=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],F=V(N),an=F.filter(we=>w.includes(we.t)),ke=F.filter(we=>!w.includes(we.t)),on=an.length?typeCore.normalizeUnion(an):null,ln=ke.length&&ke.length<F.length?typeCore.normalizeUnion(ke):null;return r?M(d,ln,on):M(d,on,ln)}let m=vn(a,o)??vn(o,a);if(m){let d=A(n,m.name);if(!d)return G;let N=Rt(d,m.lit,t),g=Pt(d,m.lit,t);return r?M(m.name,g,N):M(m.name,N,g)}let f=An(a,o)??An(o,a);if(f){let d=A(n,f.name);if(!d)return G;let N=Dn(d,f.prop,f.lit,true,t),g=Dn(d,f.prop,f.lit,false,t);return r?M(f.name,g,N):M(f.name,N,g)}return G}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=ce(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=Ut(e,n,t);if(s)return s}if(e.type==="Identifier"){let s=e.name,r=A(n,s);if(r)return M(s,It(r),Ft(r))}return G}function jt(e,n){if(e.t==="fn")return e.guard??null;if(e.t==="overload"){for(let t of e.signatures)if(t.guard&&t.params.length===n)return t.guard}return null}function Ut(e,n,t){let s=e.callee;if(s.type!=="Identifier")return null;let r=A(n,s.name);if(!r)return null;let a=jt(r,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=A(n,i);return l?M(i,At(l,a.type,t),Dt(l,a.type,t)):null}var H=(e,n)=>Object.keys(n).length?I(e,n):e;function le(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":{let n=e.body;return n.length>0&&le(n[n.length-1])}case "IfStatement":{let n=e;return !!n.alternate&&le(n.consequent)&&le(n.alternate)}default:return false}}var es=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ns(e){let n=[];return e.maxDepth!==void 0&&n.push(Oe(e.maxDepth)),e.maxNodes!==void 0&&n.push(Ie(e.maxNodes)),e.maxArgs!==void 0&&n.push(Fe(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Te(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(Re(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(Pe(e.memberDepth)),n}function Vn(e,n,t={}){let s={...es(n.types),...n.schemes,...ss(e)},r=Ve(e),a={overlay:new WeakMap,sink:ee(),env:n,schemes:s,importNames:new Set,resolvedSchemes:new Set,invalidTargets:r.invalidTargets},o=t.profile?capability.compileProfile(t.profile):void 0;o&&typeCore.configureTypeLimits(o.typeLimits);try{let i,l=rs(e,a);try{i=y(e,l,a);}catch(m){if(m instanceof typeCore.TypeEvalLimitError)a.sink.report(E("too-deep",e,m.message));else if(m instanceof typeCore.UnionTooComplexError)a.sink.report(E("too-complex-union",e,m.message));else throw m;i=typeCore.s.unknown;}let u=[];o&&u.push(...fe(o)),t.limits&&u.push(...ns(t.limits)),t.resultType&&u.push(Me(t.resultType,s));let p=[...a.sink.all,...r.diagnostics,...t.unused?$e(e,t.unused):[],...u.length?Ae(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p}}finally{o&&typeCore.resetTypeLimits();}}function ts(e,n,t={}){let s=Vn(e,n,t),r={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let m of u.declarations){let f=$(m.id),d=s.overlay.get(m);f&&d&&(r[f]=d.type,p.push(f));}else if(u.type==="FunctionDeclaration"){let m=u.id?.name,f=s.overlay.get(u);m&&f&&(r[m]=f.type,p.push(m));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let m of i(p.declaration))a.set(m,m);else for(let m of p.specifiers)a.set(m.exported.name,m.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=s.overlay.get(u.declaration);o=p?p.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)r[p]&&(l[u]={type:r[p]});o!==void 0&&(l.default={type:o});}else for(let u in r)l[u]={type:r[u]};return {type:{t:"object",props:l},diagnostics:s.diagnostics}}var ss=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let s=t;s.id?.name&&s.typeAnnotation&&(n[s.id.name]={params:s.typeParameters??[],body:s.typeAnnotation});}}),n};function rs(e,n){let t=n.env.modules,s={};core.walk(e,{ImportDeclaration(r){let a=r,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)s[l.local.name]=typeCore.s.unknown;return}for(let l of a.specifiers){let u=l.local.name;if(u in s){n.sink.report(S.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){s[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",m=typeCore.discover(i,[p],n.schemes);m?s[u]=m.type:(n.sink.report(S.noSuchMember(l,i,p)),s[u]=typeCore.s.unknown);}}});for(let r in s)n.importNames.add(r);return Object.keys(s).length?I(n.env.scope,s):n.env.scope}var h=(e,n,t,s)=>(e.overlay.set(n,{type:t,scope:s}),t);function y(e,n,t,s){switch(e.type){case xn:return e.schema;case "JSXElement":case "JSXFragment":return h(t,e,y(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return h(t,e,Je(e),n);case "Identifier":{let r=e.name,a=A(n,r);return a===void 0?r==="undefined"?h(t,e,typeCore.s.undefined,n):(t.sink.report(S.unknownName(e,r)),h(t,e,typeCore.s.unknown,n)):h(t,e,a,n)}case "MemberExpression":return h(t,e,is(e,n,t),n);case "CallExpression":return h(t,e,ps(e,n,t,s),n);case "ArrowFunctionExpression":return en(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),h(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),h(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),h(t,e,typeCore.s.unknown,n);case "BlockStatement":return h(t,e,nn(e,n,t),n);case "ReturnStatement":{let r=e.argument;return h(t,e,r?y(r,n,t):typeCore.s.unknown,n)}case "IfStatement":return U(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return U(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "AssignmentExpression":{let r=e,a=r.left,o=y(a,n,t);if(a.type==="MemberExpression"){let i=t.overlay.get(a.object)?.type,l=i&&typeCore.apparentType(i,t.schemes);l&&(l.t==="array"||l.t==="tuple")&&l.readonly&&t.sink.report(S.readonlyWrite(a,l));}if(r.operator==="="&&!t.invalidTargets.has(a)){let i=J(r.right,o,n,t);return h(t,e,i,n)}return h(t,e,y(r.right,n,t),n)}case "UpdateExpression":return y(e.argument,n,t),h(t,e,typeCore.s.number,n);case "ExpressionStatement":return h(t,e,y(e.expression,n,t),n);case "VariableDeclaration":return be(e,n,t),h(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":{let r=e.id?.name,a=r?t.schemes[r]:void 0;return h(t,e,a?hs(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return h(t,e,Ds(e,n,t),n);case "LogicalExpression":{let r=e,a=y(r.left,n,t),o=y(r.right,n,t);return h(t,e,Cs(r.operator,a,o),n)}case "UnaryExpression":return h(t,e,Ps(e,n,t),n);case "ConditionalExpression":{let r=e;y(r.test,n,t);let a=ce(r.test,n,t.schemes),o=y(r.consequent,H(n,a.then),t),i=y(r.alternate,H(n,a.else),t);return h(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return h(t,e,Os(e,n,t),n);case "ArrayExpression":return h(t,e,zn(e,n,t),n);case "TemplateLiteral":{for(let r of e.expressions)y(r,n,t);return h(t,e,typeCore.s.string,n)}case "AwaitExpression":{let r=e.argument,a=r?y(r,n,t):typeCore.s.unknown;return h(t,e,Be(a),n)}case "Program":return tn(e.body,n,t,new Set(t.importNames)),h(t,e,typeCore.s.unknown,n);case "JsonExpression":return h(t,e,ze(e.body,n,t,e),n);case "ChainExpression":return h(t,e,typeCore.normalizeUnion([y(e.expression,n,t),typeCore.s.undefined]),n);case "TSAsExpression":{let r=e,a=y(r.expression,n,t),o=me(r.typeAnnotation,n,t,e);return !typeCore.subtype(a,o,t.schemes)&&!typeCore.subtype(o,a,t.schemes)&&t.sink.report(S.castUnsound(e,a,o)),h(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),h(t,e,typeCore.s.unknown,n)}}var as=new Set(["constructor","prototype","__proto__"]);function os(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function is(e,n,t){let s=y(e.object,n,t),r=os(e);if(r!==null&&as.has(r))return t.sink.report(S.forbiddenMember(e,r)),typeCore.s.unknown;if(e.computed){let i=y(e.property,n,t),l=typeCore.resolveTypeOp(typeCore.s.index(s,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&Fn(e,s,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(s,[a],t.schemes);return o?o.type:(Fn(e,s,a,t),typeCore.s.unknown)}function Fn(e,n,t,s){let r=typeCore.isScheme(n,s.schemes)?typeCore.expand1(n,s.schemes):n;r.t==="object"||r.t==="array"||r.t==="tuple"||r.t==="union"?s.sink.report(S.noSuchMember(e,n,t)):r.t!=="any"&&r.t!=="unknown"&&s.sink.report(S.notObject(e,n));}function ls(e,n,t){if(!e||e.type!=="Identifier")return;let s=e.name;if(A(n,s)===void 0)return;let r=t.schemes[s];return r&&r.params.length===0?r.body:void 0}function us(e,n,t,s){let r=L(y(n[0],t,s),s.schemes),o=(r.t==="fn"?r:r.t==="overload"?r.signatures[0]:void 0)?.params[0]?.type,i=n.length>1?y(n[1],t,s):typeCore.s.undefined;if(o){let l=typeCore.typeDiff(i,o,s.schemes);l.length&&s.sink.report(S.propsMismatch(n[1]??e,o,typeCore.formatTypeDiff(l)));}return h(s,e,typeCore.s.boolean,t)}var xn="TSLiteSyntheticArg",cs=e=>({type:xn,schema:e});function Gn(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let s=[],r=null;for(let a of e){if(a.type!=="SpreadElement"){s.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)s.push(l);continue}let i=L(y(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)s.push(cs(l));else r={elem:i.t==="array"?i.items:typeCore.s.unknown,node:a};}return {nodes:s,spread:r}}function ps(e,n,t,s){let r=e.arguments,a=Ke(e.callee);if(a){let m=t.env.accessors?.[a];if(m){let f=Bn(r);if(f){let d=typeCore.discover(m,f,t.schemes);return d?d.type:(t.sink.report(S.noSuchMember(e,m,f.join("."))),typeCore.s.unknown)}return r.forEach(d=>y(d,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let m=ls(r[0],n,t);for(let f=1;f<r.length;f++)y(r[f],n,t);return m??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return us(e,r,n,t);let o=y(e.callee,n,t);if(o.t==="any")return r.forEach(m=>y(m,n,t)),typeCore.s.any;if(o.t==="overload")return ds(e,o,n,t,s);if(o.t!=="fn")return r.forEach(m=>y(m,n,t)),t.sink.report(S.notCallable(e,o)),typeCore.s.unknown;let i=Gn(r,n,t),l=i.nodes.map(m=>Kn(m,n,t)),u=qn(e),p=!u||_n(o,u.length);return p||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),Jn(e,o,i.nodes,l,n,t,i.spread,s,p?u:void 0)}function Kn(e,n,t){if(We(e))return typeCore.s.any;if(e.type!=="CallExpression")return y(e,n,t);let s=ee(),r=y(e,n,{...t,sink:s});return s.hasErrors()?typeCore.s.any:(s.all.forEach(a=>t.sink.report(a)),r)}function Jn(e,n,t,s,r,a,o=null,i,l){let u=d=>{if(!i)return d;let N=typeCore.substitute(n.returns,d);if(N.t==="fn"&&i.t==="fn"){let g=d,w=Math.min(N.params.length,i.params.length);for(let F=0;F<w;F++)g=typeCore.unify(N.params[F].type,i.params[F].type,g)??g;return typeCore.unify(N.returns,i.returns,g)??g}return typeCore.unify(N,i,d)??d},p=l?Ss(e,n,l,a):void 0,m=p??u(typeCore.instantiateLoose(n,s).bindings);t.forEach((d,N)=>{if(We(d)){let g=typeCore.widenType(typeCore.substitute(n.params[N]?.type??typeCore.s.any,m));s[N]=en(d,r,a,g);}else if(d.type==="CallExpression"&&s[N].t==="any")s[N]=y(d,r,a,typeCore.substitute(n.params[N]?.type??typeCore.s.unknown,m));else if(d.type==="Literal"){let g=n.params[N]?.type??typeCore.s.unknown,w=g.t==="var"?g.bound?typeCore.substitute(g.bound,m):g:typeCore.substitute(g,m);Ne(w)&&(s[N]=h(a,d,Q(d),r));}else if(d.type==="ArrayExpression"){let g=typeCore.substitute(n.params[N]?.type??typeCore.s.unknown,m);ae(g)&&(s[N]=rn(d,g,r,a));}});let f=p??u(typeCore.instantiateLoose(n,s).bindings);return p||ms(e,n,f,a),ks(e,n,s,f,a,t,o),t.forEach((d,N)=>{let g=n.params[N];d.type==="ObjectExpression"&&g&&!g.variadic&&sn(d,typeCore.substitute(g.type,f),a);}),typeCore.widenInferred(typeCore.groundVars(typeCore.substitute(n.returns,f),a.schemes))}var Mn=new WeakMap;function Wn(e){let n=Mn.get(e);if(n)return n;let t=new Map,s=new WeakSet;for(let r of e.params)T(r.type,t,s);return T(e.returns,t,s),Mn.set(e,t),t}function T(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":T(e.items,n,t);return;case "union":for(let s of e.of)T(s,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let s in e.props)T(e.props[s].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let s of e.params)T(s.type,n,t);T(e.returns,n,t);return;case "overload":for(let s of e.signatures){for(let r of s.params)T(r.type,n,t);T(s.returns,n,t);}return;case "apply":for(let s of e.args)T(s,n,t);return;case "keyof":T(e.of,n,t);return;case "index":T(e.obj,n,t),T(e.key,n,t);return;case "mapped":T(e.over,n,t),T(e.body,n,t);return;default:return}}function ms(e,n,t,s){let r=Wn(n);if(r.size!==0)for(let[a,o]of r){let i=t[a];if(!i)continue;let l=typeCore.substitute(o,t);typeCore.subtype(i,l,s.schemes)||s.sink.report(S.constraintViolation(e,a,i,l));}}function ds(e,n,t,s,r){let a=Gn(e.arguments,t,s),o=a.nodes,i=o.map(p=>Kn(p,t,s)),l=qn(e),u=l?n.signatures.filter(p=>_n(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((m,f)=>Math.max(m,f.typeParams?.length??0),0);return s.sink.report(S.wrongTypeArgumentCount(e,p,l.length)),jn(e,n.signatures,a,o,i,t,s,r,void 0)}return jn(e,u,a,o,i,t,s,r,l)}function jn(e,n,t,s,r,a,o,i,l){let u={t:"overload",signatures:n},p=f=>t.spread?Ns(f,s.length):Bs(f,s.length),m=u.signatures.find(f=>p(f)&&bs(f,r,o));if(!m){let f=u.signatures.filter(p);f.length===1?m=f[0]:u.signatures.length===1&&(m=u.signatures[0]);}return m?Jn(e,m,s,r,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,r)),typeCore.s.unknown)}function fs(e,n,t,s){let r=A(n,e[0]);if(r===void 0)return t.sink.report(S.unknownName(s,e[0])),typeCore.s.unknown;let a=e.slice(1),o=a.length?typeCore.discover(r,a,t.schemes)?.type:r;return o?o.t==="literal"?typeCore.s.literal(o.value):o:(t.sink.report(S.noSuchMember(s,r,a.join("."))),typeCore.s.unknown)}function me(e,n,t,s){let r=a=>{if(Array.isArray(a)){let u=false,p=a.map(m=>{let f=r(m);return f!==m&&(u=true),f});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return fs(o.path,n,t,s);o.t==="apply"&&typeof o.name=="string"&&ys(o.name,n,t,s);let i=false,l={};for(let u of Object.keys(o)){let p=r(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return r(e)}function ys(e,n,t,s){if(t.resolvedSchemes.has(e))return;let r=t.schemes[e];if(!r)return;t.resolvedSchemes.add(e);let a=me(r.body,n,t,s);a!==r.body&&(t.schemes[e]={...r,body:a});}function hs(e,n,t,s,r){let a={...t,sink:ee(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=me(e,n,a,s);return a.sink.hasErrors()?e:r?o:typeCore.groundVars(o,t.schemes)}var Ze=(e,n,t)=>{let s=xe(e);return s===void 0?s:me(s,n,t,e)},gs=(e,n,t)=>{let s=Ge(e);return s===void 0?s:me(s,n,t,e)},qn=e=>{let n=e.typeArguments;return n?.length?n:void 0},_n=(e,n)=>(e.typeParams?.length??0)===n;function Ss(e,n,t,s){let r=n.typeParams??[],a={};r.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Wn(n)){let u=o[i];if(!u)continue;let p=typeCore.groundVars(typeCore.substitute(l,o),s.schemes);typeCore.subtype(u,p,s.schemes)||s.sink.report(S.constraintViolation(e,i,u,p));}return o}function Ns(e,n){let t=0,s=false;for(let r of e.params)r.variadic?s=true:r.optional||t++;return n>=t&&(s||n<e.params.length)}function Bs(e,n){let t=0;for(let s of e.params){if(s.variadic)return n>=t;s.optional||t++;}return n>=t&&n<=e.params.length}function bs(e,n,t){let{bindings:s}=typeCore.instantiateLoose(e,n);for(let r=0;r<e.params.length;r++){let a=e.params[r];if(a.variadic)return true;if(r>=n.length){if(!a.optional)return false;continue}if(!typeCore.subtype(n[r],typeCore.substitute(a.type,s),t.schemes))return false}return true}function ks(e,n,t,s,r,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic)break;let m=typeCore.substitute(p.type,s);if(u>=t.length){!p.optional&&!o&&r.sink.report(S.missingArgument(e,p.name,m));continue}typeCore.subtype(t[u],m,r.schemes)||r.sink.report(S.notAssignable(i(u),t[u],m,r.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(m=>!m.optional&&!m.variadic).length;if(!(u>=p&&(l||u<n.params.length))){r.sink.report(S.spreadArgument(o.node));return}if(l){let m=typeCore.substitute(l.type,s),f=m.t==="array"?m.items:typeCore.s.unknown;typeCore.subtype(o.elem,f,r.schemes)||r.sink.report(S.notAssignable(o.node,o.elem,f,r.schemes));}return}!l&&t.length>n.params.length&&r.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function J(e,n,t,s){let r=L(n,s.schemes);switch(e.type){case "Literal":{let o=Q(e);return typeCore.subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,n,t)}case "ArrayExpression":{if(ae(r)){let o=rn(e,r,t,s);return typeCore.subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,o,t)}if(r.t==="array"){for(let o of e.elements){if(!o)continue;let i=o;i.type==="SpreadElement"?J(i.argument,n,t,s):J(i,r.items,t,s);}return h(s,e,n,t)}break}case "ObjectExpression":{if(r.t==="object"){let o={};for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){y(u.argument,t,s);continue}let p=u,m=oe(p),f=m!==null?typeCore.ownProp(r.props,m)?.type:void 0,d=f?J(p.value,f,t,s):y(p.value,t,s);m!==null&&(o[m]={type:d}),h(s,u,d,t);}let i={t:"object",props:o};return typeCore.subtype(i,n,s.schemes)||s.sink.report(S.notAssignable(e,i,n,s.schemes)),h(s,e,n,t)}break}case "ArrowFunctionExpression":{if(r.t==="fn"){let o=en(e,t,s,r);return typeCore.subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,n,t)}break}case "ConditionalExpression":{let o=e;return y(o.test,t,s),J(o.consequent,n,t,s),J(o.alternate,n,t,s),h(s,e,n,t)}}let a=y(e,t,s);return typeCore.subtype(a,n,s.schemes)||s.sink.report(S.notAssignable(e,a,n,s.schemes)),h(s,e,a,t)}function en(e,n,t,s){let r=s&&s.t==="fn"?s:void 0,a={},o=e.params.map((f,d)=>{let N=f,g=$(N),w=Ze(N,n,t)??r?.params[d]?.type??typeCore.s.unknown;return g?a[g]=w:N.type!=="Identifier"&&_(N,w,a,n,t),t.overlay.set(N,{type:w,scope:n}),{name:g??`arg${d}`,type:w}}),i=I(n,a),l=e.body,u=gs(e,n,t);if(l.type!=="BlockStatement"&&u){let f=e.async?Be(u):u;J(l,f,i,t);let d=e.async?ie(u):u;return h(t,e,{t:"fn",params:o,returns:d},n)}let p=l.type==="BlockStatement"?h(t,l,nn(l,i,t,new Set(Object.keys(a))),i):y(l,i,t),m=e.async?ie(p):p;if(u){let f=e.async?Be(u):u,d=e.async?p:m;typeCore.subtype(d,f,t.schemes)||t.sink.report(S.notAssignable(l,m,u,t.schemes));let N=e.async?ie(u):u;return h(t,e,{t:"fn",params:o,returns:N},n)}return h(t,e,{t:"fn",params:o,returns:typeCore.widenType(m)},n)}function Z(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?Z(n.argument):Z(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?Z(n.argument):Z(n):[]);case "AssignmentPattern":return Z(e.left);default:return []}}function Xn(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>Z(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Xn(e.declaration):[]}function nn(e,n,t,s=new Set){let{returns:r}=tn(e.body,n,t,s);return r.length?typeCore.normalizeUnion(r):typeCore.s.unknown}function tn(e,n,t,s=new Set){let r=n,a=[];for(let o of e){let i=o;for(let l of Xn(i))s.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):s.add(l.name);if(i.type==="VariableDeclaration")r=be(i,r,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")r=be(l.declaration,r,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=y(l.declaration,r,t),p=$(l.declaration.id);p&&(r=I(r,{[p]:u}));}else for(let u of l.specifiers)A(r,u.local.name)===void 0&&t.sink.report(S.unknownName(u.local,u.local.name));}else if(i.type==="ExportDefaultDeclaration")y(i.declaration,r,t);else if(i.type==="FunctionDeclaration"){let l=y(i,r,t),u=$(i.id);u&&(r=I(r,{[u]:l}));}else if(i.type==="IfStatement"){a.push(...U(i,r,t));let l=i;!l.alternate&&le(l.consequent)&&(r=H(r,ce(l.test,r,t.schemes).else));}else a.push(...U(i,r,t));}return {scope:r,returns:a}}function U(e,n,t){switch(e.type){case "ReturnStatement":{let s=e.argument,r=s?y(s,n,t):typeCore.s.unknown;return h(t,e,r,n),[r]}case "IfStatement":{let s=e;y(s.test,n,t);let r=ce(s.test,n,t.schemes),a=U(s.consequent,H(n,r.then),t);return s.alternate&&a.push(...U(s.alternate,H(n,r.else),t)),h(t,e,typeCore.s.unknown,n),a}case "BlockStatement":{let s=nn(e,n,t);return h(t,e,s,n),s.t==="unknown"?[]:[s]}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,r=n;s.init&&(s.init.type==="VariableDeclaration"?r=be(s.init,r,t):y(s.init,r,t)),s.test&&y(s.test,r,t),s.update&&y(s.update,r,t);let a=U(s.body,r,t);return h(t,e,typeCore.s.unknown,n),a}case "ForOfStatement":case "ForInStatement":{let s=e,r=y(s.right,n,t),a=e.type==="ForOfStatement"?r.t==="array"?r.items:typeCore.s.unknown:typeCore.s.string,o=Nn(s.left),i=o?I(n,{[o]:a}):n,l=U(s.body,i,t);return h(t,e,typeCore.s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return h(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&y(s,n,t),h(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let s=e,r=U(s.block,n,t);if(s.handler){let a=s.handler.param,o=a?$(a):null,i=o?I(n,{[o]:typeCore.s.unknown}):n;r.push(...U(s.handler.body,i,t));}return s.finalizer&&r.push(...U(s.finalizer,n,t)),h(t,e,typeCore.s.unknown,n),r}case "SwitchStatement":{let s=e;y(s.discriminant,n,t);let r=n,a=[];for(let o of s.cases){o.test&&y(o.test,r,t);let i=tn(o.consequent,r,t);r=i.scope,a.push(...i.returns);}return h(t,e,typeCore.s.unknown,n),a}default:return y(e,n,t),[]}}function ws(e,n,t){let s=typeCore.discover(e,[n],t.schemes);return s?s.type:typeCore.s.unknown}function Es(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function vs(e,n){if(e.t!=="object")return e;let t={};for(let s in e.props)n.includes(s)||(t[s]=e.props[s]);return typeCore.s.object(t,e.index)}function As(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function _(e,n,t,s,r){switch(e.type){case "Identifier":{let a=Ze(e,s,r)??n;t[e.name]=a,r.overlay.set(e,{type:a,scope:s});return}case "AssignmentPattern":{let a=e,o=typeCore.widenType(y(a.right,s,r)),{type:i}=typeCore.withoutUndefined(n),l=i.t==="unknown"?o:typeCore.normalizeUnion([i,o]);_(a.left,l,t,s,r);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){_(o.argument,vs(n,a),t,s,r);continue}let i=o,l=oe(i);l!=null&&a.push(l);let u=l!=null?ws(n,l,r):typeCore.s.unknown;_(i.value,u,t,s,r);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?_(i.argument,As(n,o),t,s,r):_(i,Es(n,o),t,s,r);});return}}}function sn(e,n,t){let s=L(n,t.schemes),a=(s.t==="union"?s.of.map(o=>L(o,t.schemes)):[s]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=oe(i);if(l===null)continue;let u=a.filter(p=>l in p.props);if(!u.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&sn(i.value,u[0].props[l].type,t);}}function be(e,n,t){let s={};for(let r of e.declarations){let a=r.id,o=$(a),i=Ze(a,n,t);if(!r.init){t.sink.report(S.constNeedsInit(r)),o&&(s[o]=i??typeCore.s.unknown);continue}let l=i??(r.init.type==="ArrowFunctionExpression"?kn(r.init):null),u=o&&l?I(n,{[o]:l}):n,p;i?(J(r.init,i,u,t),r.init.type==="ObjectExpression"&&sn(r.init,i,t),p=i):(p=y(r.init,u,t),e.kind!=="const"&&(p=typeCore.widenLiteral(p))),h(t,r,p,n),o?s[o]=p:_(a,p,s,n,t);}return h(t,e,typeCore.s.unknown,n),I(n,s)}function Ds(e,n,t){let s=y(e.left,n,t),r=y(e.right,n,t),a=e.operator;return a==="+"?typeCore.subtype(s,typeCore.s.string)||typeCore.subtype(r,typeCore.s.string)?typeCore.s.string:typeCore.s.number:Ts.has(a)?typeCore.s.number:typeCore.s.boolean}var Un={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},_e=e=>e.t==="null"||e.t==="undefined";function Cs(e,n,t){if(n.t==="any"||n.t==="unknown")return typeCore.normalizeUnion([n,t]);let s=n.t==="union"?[...n.of]:n.t==="boolean"?[typeCore.s.literal(true),typeCore.s.literal(false)]:[n];if(e==="??")return typeCore.normalizeUnion([...s.filter(a=>!_e(a)),t]);if(e==="||")return typeCore.normalizeUnion([...s.filter(a=>!_e(a)&&!(a.t==="literal"&&!a.value)),t]);let r=s.flatMap(a=>_e(a)?[a]:a.t==="literal"?a.value?[]:[a]:Un[a.t]?[Un[a.t]]:[]);return typeCore.normalizeUnion([...r,t])}var Ts=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),Rs=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function Ps(e,n,t){let s=y(e.argument,n,t);switch(e.operator){case "!":return s.t==="literal"?{t:"literal",value:!s.value,fresh:true}:typeCore.s.boolean;case "-":return s.t==="literal"&&typeof s.value=="number"?{t:"literal",value:-s.value,fresh:true}:typeCore.s.number;case "+":case "~":return typeCore.s.number;case "typeof":return Rs;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function Os(e,n,t){let s={},r,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=L(y(p.argument,n,t),t.schemes);if(g.t==="object"){for(let w in g.props)s[w]=g.props[w];g.index&&(r={key:g.index.key,type:g.index.value});}continue}let m=p,f=y(m.value,n,t),d=typeCore.widen(f);if(h(t,p,f,n),m.computed){let g=L(y(m.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(s[g.value]={type:d},a.push(d)):g.t==="literal"&&typeof g.value=="number"?(s[String(g.value)]={type:d},a.push(d),o.push(d)):g.t==="string"?(i=true,a.push(d)):g.t==="number"&&(l=true,a.push(d),o.push(d));continue}let N=oe(m);N!==null&&(s[N]={type:d},a.push(d),/^\d+$/.test(N)&&o.push(d));}return i?r={key:"string",type:typeCore.normalizeUnion(a)}:l&&(r={key:"number",type:typeCore.normalizeUnion(o)}),r?{t:"object",props:s,index:{key:r.key,value:r.type}}:{t:"object",props:s}}function zn(e,n,t){let s=[];for(let r of e.elements){if(!r)continue;let a=r;if(a.type==="SpreadElement"){let o=L(y(a.argument,n,t),t.schemes);o.t==="array"?s.push(o.items):o.t==="tuple"&&s.push(...o.elements);continue}s.push(typeCore.widen(y(a,n,t)));}return typeCore.s.array(s.length?typeCore.normalizeUnion(s):typeCore.s.unknown)}function rn(e,n,t,s){let r=L(n,s.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?rn(l,u,t,s):typeCore.widen(y(l,t,s));if(r.t==="tuple"&&o&&a.length===r.elements.length){let l=a.map((u,p)=>i(u,r.elements[p]));return h(s,e,{t:"tuple",elements:l},t)}if(r.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){y(p.argument,t,s);continue}l.push(i(p,r.items));}return h(s,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return zn(e,t,s)}function ze(e,n,t,s){if(e===null)return typeCore.s.null;switch(typeof e){case "string":return typeCore.s.string;case "number":return typeCore.s.number;case "boolean":return typeCore.s.boolean;case "object":break;default:return typeCore.s.unknown}if(Array.isArray(e)){let o=e.map(i=>ze(i,n,t,s));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let r=e;if(core.AST_MARKER in r){let o;try{o=codec.fromJson(r);}catch{return t.sink.report(S.unsupported(s,`'#ast: ${String(r[core.AST_MARKER])}'`)),typeCore.s.unknown}return y(o,n,t)}let a={};for(let o of Object.keys(r))a[o]={type:ze(r[o],n,t,s)};return {t:"object",props:a}}var Is=(e,n)=>({...e,typeAnnotation:n}),Fs=(e,n)=>({...e,returnType:n}),Ms=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Us(e,n){return e.get(n)?.type}function $s(e,n){return e.get(n)?.scope}function Ls(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function Vs(e,n){let t=e.get(n)?.scope;return t?[...Ee(t)].map(([s,r])=>({key:s,type:r,optional:false})):[]}function xs(e,n){return e.filter(t=>t.node===n)}exports.FUNCTION_KINDS=mn;exports.annotate=Is;exports.annotateReturn=Fs;exports.asExpression=Ms;exports.calleeAllowlist=Ce;exports.capabilityNodes=De;exports.check=Vn;exports.childScope=I;exports.collectBindings=Bt;exports.collectMutations=Ve;exports.collectUnused=$e;exports.createEnv=et;exports.createSink=ee;exports.diag=S;exports.diagnosticsAt=xs;exports.extractModuleType=ts;exports.fromCapability=pt;exports.guard=Ae;exports.guardsFromCompiled=fe;exports.lookup=A;exports.makeDiagnostic=E;exports.maxArgs=Fe;exports.maxCallNesting=Re;exports.maxDepth=Oe;exports.maxFunctionNesting=Te;exports.maxNestingOf=de;exports.maxNodes=Ie;exports.memberCompletions=Ls;exports.memberDepth=Pe;exports.resolveNamed=nt;exports.resolveScheme=tt;exports.resultType=Me;exports.rootScope=un;exports.scopeAt=$s;exports.scopeCompletions=Vs;exports.typeAt=Us;exports.visibleNames=Ee;Object.keys(typeCore).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return typeCore[k]}})});
package/dist/index.d.cts CHANGED
@@ -80,7 +80,7 @@ declare const resolveNamed: (env: Env, name: string) => Schema | undefined;
80
80
  declare const resolveScheme: (env: Env, name: string) => TypeScheme | undefined;
81
81
 
82
82
  type Severity = "error" | "warning";
83
- type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "const-needs-init" | "cannot-redeclare" | "unknown-module" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "unsupported" | "forbidden-member" | "cast-unsound" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
83
+ type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "const-needs-init" | "cannot-redeclare" | "unknown-module" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "wrong-type-argument-count" | "unsupported" | "forbidden-member" | "unused-name" | "assign-to-const" | "readonly-write" | "cast-unsound" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
84
84
  /**
85
85
  * A **classe** do diagnóstico — espelha a divisão de passes do `tsc` (que nós
86
86
  * fundimos num walk só): `semantic` é o que o **binder** do tsc pega (validade do
@@ -127,7 +127,33 @@ declare const diag: {
127
127
  noMatchingOverload: (node: BaseNode, type: Schema, argTypes: readonly Schema[]) => Diagnostic;
128
128
  constraintViolation: (node: BaseNode, name: string, actual: Schema, bound: Schema) => Diagnostic;
129
129
  unsupported: (node: BaseNode, what: string) => Diagnostic;
130
+ /**
131
+ * Argumento de tipo explícito com aridade errada. Assinatura **sem** type params
132
+ * declarados conta como `expected: 0` — é o que o tsc faz quando
133
+ * `Signature.typeParameters` é `undefined` (ele nunca infere a lista). Mensagem no
134
+ * texto do TS2558.
135
+ */
136
+ wrongTypeArgumentCount: (node: BaseNode, expected: number, got: number) => Diagnostic;
130
137
  forbiddenMember: (node: BaseNode, key: string) => Diagnostic;
138
+ /**
139
+ * Binding declarado e nunca lido. **Warning**, não erro: é higiene, não
140
+ * incompatibilidade — e o consumidor de editor o renderiza APAGADO (marker
141
+ * `Unnecessary`), não sublinhado. Mensagem no texto do TS6133.
142
+ */
143
+ unusedName: (node: BaseNode, name: string) => Diagnostic;
144
+ /**
145
+ * Reatribuição de um binding IMUTÁVEL. Não é capability: a capability decide se
146
+ * `=` existe na Linguagem; se um `const` pode ser reatribuído é outra pergunta, e
147
+ * a resposta é sempre não (D9 — o piso é `const`). Mensagem no texto do TS2588 /
148
+ * TS2632 (import). Ver `mutation.ts`.
149
+ */
150
+ assignToConst: (node: BaseNode, name: string, kind: "const" | "import") => Diagnostic;
151
+ /**
152
+ * Escrita num alvo `readonly` (`readonly T[]`). É a outra metade do modificador:
153
+ * a relação (TC29) diz quem pode ser ATRIBUÍDO a quem; isto diz quem pode ser
154
+ * ESCRITO. Sem os dois, `readonly` seria só decoração. Texto do TS2542.
155
+ */
156
+ readonlyWrite: (node: BaseNode, target: Schema) => Diagnostic;
131
157
  /**
132
158
  * Cast (`x as T`) entre tipos que não se sobrepõem em nenhum sentido. Warning
133
159
  * (não erro): o cast é um escape-hatch explícito — `unknown`/`any` passam
@@ -146,6 +172,37 @@ interface DiagnosticSink {
146
172
  /** Cria um coletor vazio. */
147
173
  declare function createSink(): DiagnosticSink;
148
174
 
175
+ /** Liga a análise de não-usados. Dois eixos independentes, como no tsc. */
176
+ interface UnusedOptions {
177
+ /** ≅ `noUnusedLocals`: `const` e `import` nunca lidos. */
178
+ readonly locals?: boolean;
179
+ /** ≅ `noUnusedParameters`: parâmetros de arrow nunca lidos. */
180
+ readonly parameters?: boolean;
181
+ }
182
+ /**
183
+ * Coleta os bindings declarados e nunca lidos, como diagnósticos `unused-name`
184
+ * (severidade **warning** — é aviso de higiene, não erro de tipo).
185
+ *
186
+ * **Fora de escopo, de propósito** (limitação declarada, nunca divergência —
187
+ * [[tslite-is-ts-subset]]):
188
+ *
189
+ * - **`type X = …` não-usado** (o TS6196 do tsc). Num TSLite, um alias de `.d.ts`
190
+ * é contrato ENTRE arquivos por construção — a gramática não tem `export type`
191
+ * (playground ARCHITECTURE §5), então "não usado neste arquivo" não significa
192
+ * não usado. Reportar daria falso-positivo em todo `.d.ts`.
193
+ * - **Write-only** (`let x = 1; x = 2` sem leitura — o `noUnusedLocals_writeOnly`
194
+ * do tsc). Aqui a atribuição conta como leitura, então reportamos MENOS.
195
+ * Mutação é capability gated (D9), então o caso é raro.
196
+ *
197
+ * **Diferença de MENSAGEM conhecida** (o comportamento bate; a apresentação não —
198
+ * mesmo precedente do D2/D18): o tsc agrupa (`All variables are unused` /
199
+ * `All destructured elements are unused`) quando TODOS os nomes de uma declaração
200
+ * caem. Aqui cada nome sai como um diagnóstico próprio, porque o consumidor é o
201
+ * editor: o fade precisa do range POR NOME, e um diagnóstico na lista inteira não
202
+ * apagaria os nomes individualmente.
203
+ */
204
+ declare function collectUnused(root: BaseNode, opts: UnusedOptions): Diagnostic[];
205
+
149
206
  /** O overlay de tipos: tipo + escopo de cada nó, por referência (ESTree não tem id). */
150
207
  type TypeOverlay = WeakMap<BaseNode, {
151
208
  readonly type: Schema;
@@ -195,6 +252,12 @@ interface CheckOptions {
195
252
  * `resultType`. Reporta `wrong-result-type`. (Ex.: uma condition deve ser `boolean`.)
196
253
  */
197
254
  readonly resultType?: Schema;
255
+ /**
256
+ * Análise de bindings declarados e nunca lidos (`unused-name`, **warning**).
257
+ * Opt-in e com dois eixos independentes, como o `noUnusedLocals` /
258
+ * `noUnusedParameters` do tsc. Ver [`unused`](./unused.ts) para as isenções.
259
+ */
260
+ readonly unused?: UnusedOptions;
198
261
  }
199
262
  declare function check(node: Node, env: Env, opts?: CheckOptions): CheckResult;
200
263
  /**
@@ -269,6 +332,40 @@ declare function guardsFromCompiled(c: CompiledProfile): Profile;
269
332
  */
270
333
  declare function fromCapability(profile: CapabilityProfile): Profile;
271
334
 
335
+ /**
336
+ * Diagnósticos de reatribuição de binding imutável (`const`, `import`).
337
+ *
338
+ * **Sempre roda** — não é opt-in nem gateado por capability, porque `const` é o
339
+ * piso da Linguagem (D9). Um profile que liga mutação libera `let`, não `const`.
340
+ *
341
+ * Roda **ANTES** do walk, e devolve também os alvos recusados: o walk pula a
342
+ * checagem de assignability neles, para não cascatear. É a ordem do tsc — *"to
343
+ * avoid cascading errors check assignability only if 'isReference' check succeeded
344
+ * and no errors were reported"* (`checker.ts:41076`). Sem isso `const c = 1; c = 2`
345
+ * reportaria DOIS erros, sendo que o segundo (`2 ⊄ 1`) é consequência do primeiro.
346
+ */
347
+ declare function collectMutations(root: BaseNode): {
348
+ readonly diagnostics: readonly Diagnostic[];
349
+ readonly invalidTargets: WeakSet<BaseNode>;
350
+ };
351
+
352
+ /** Referência → o `Identifier` que a DECLARA. Por referência, como o overlay. */
353
+ type BindingMap = WeakMap<BaseNode, BaseNode>;
354
+ /**
355
+ * Mapeia cada REFERÊNCIA ao `Identifier` que a declara.
356
+ *
357
+ * É a base de "ir para a definição" (e, no futuro, rename / find-references).
358
+ * **Não** é chamado pelo `check`: é consulta de editor, e o checker roda
359
+ * por-keystroke — quem quer, paga.
360
+ *
361
+ * **Limites** (ambos por ausência de posição, não por preguiça):
362
+ * - **membro** (`obj.price`) não resolve: exigiria a origem do tipo, e `Schema`
363
+ * não carrega posição;
364
+ * - **nome de tipo em ANOTAÇÃO** (`r: RawViaCep`) não resolve: a anotação é
365
+ * `Schema` apagável, não nó (E6). O nome de um `type X = …` resolve.
366
+ */
367
+ declare function collectBindings(root: BaseNode): BindingMap;
368
+
272
369
  /** Anota uma ligação/parâmetro: `x` → `x: T`. */
273
370
  declare const annotate: <N extends BaseNode>(node: N, type: Schema) => N & {
274
371
  typeAnnotation: Schema;
@@ -300,4 +397,4 @@ declare function scopeCompletions(overlay: TypeOverlay, node: BaseNode): readonl
300
397
  /** Os diagnósticos que apontam para `node`. */
301
398
  declare function diagnosticsAt(diagnostics: readonly Diagnostic[], node: BaseNode): readonly Diagnostic[];
302
399
 
303
- export { type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, type Profile, type Scope, type Severity, type TypeOverlay, annotate, annotateReturn, asExpression, calleeAllowlist, capabilityNodes, check, childScope, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, visibleNames };
400
+ export { type BindingMap, type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, type Profile, type Scope, type Severity, type TypeOverlay, type UnusedOptions, annotate, annotateReturn, asExpression, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, visibleNames };
package/dist/index.d.ts CHANGED
@@ -80,7 +80,7 @@ declare const resolveNamed: (env: Env, name: string) => Schema | undefined;
80
80
  declare const resolveScheme: (env: Env, name: string) => TypeScheme | undefined;
81
81
 
82
82
  type Severity = "error" | "warning";
83
- type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "const-needs-init" | "cannot-redeclare" | "unknown-module" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "unsupported" | "forbidden-member" | "cast-unsound" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
83
+ type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "const-needs-init" | "cannot-redeclare" | "unknown-module" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "wrong-type-argument-count" | "unsupported" | "forbidden-member" | "unused-name" | "assign-to-const" | "readonly-write" | "cast-unsound" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
84
84
  /**
85
85
  * A **classe** do diagnóstico — espelha a divisão de passes do `tsc` (que nós
86
86
  * fundimos num walk só): `semantic` é o que o **binder** do tsc pega (validade do
@@ -127,7 +127,33 @@ declare const diag: {
127
127
  noMatchingOverload: (node: BaseNode, type: Schema, argTypes: readonly Schema[]) => Diagnostic;
128
128
  constraintViolation: (node: BaseNode, name: string, actual: Schema, bound: Schema) => Diagnostic;
129
129
  unsupported: (node: BaseNode, what: string) => Diagnostic;
130
+ /**
131
+ * Argumento de tipo explícito com aridade errada. Assinatura **sem** type params
132
+ * declarados conta como `expected: 0` — é o que o tsc faz quando
133
+ * `Signature.typeParameters` é `undefined` (ele nunca infere a lista). Mensagem no
134
+ * texto do TS2558.
135
+ */
136
+ wrongTypeArgumentCount: (node: BaseNode, expected: number, got: number) => Diagnostic;
130
137
  forbiddenMember: (node: BaseNode, key: string) => Diagnostic;
138
+ /**
139
+ * Binding declarado e nunca lido. **Warning**, não erro: é higiene, não
140
+ * incompatibilidade — e o consumidor de editor o renderiza APAGADO (marker
141
+ * `Unnecessary`), não sublinhado. Mensagem no texto do TS6133.
142
+ */
143
+ unusedName: (node: BaseNode, name: string) => Diagnostic;
144
+ /**
145
+ * Reatribuição de um binding IMUTÁVEL. Não é capability: a capability decide se
146
+ * `=` existe na Linguagem; se um `const` pode ser reatribuído é outra pergunta, e
147
+ * a resposta é sempre não (D9 — o piso é `const`). Mensagem no texto do TS2588 /
148
+ * TS2632 (import). Ver `mutation.ts`.
149
+ */
150
+ assignToConst: (node: BaseNode, name: string, kind: "const" | "import") => Diagnostic;
151
+ /**
152
+ * Escrita num alvo `readonly` (`readonly T[]`). É a outra metade do modificador:
153
+ * a relação (TC29) diz quem pode ser ATRIBUÍDO a quem; isto diz quem pode ser
154
+ * ESCRITO. Sem os dois, `readonly` seria só decoração. Texto do TS2542.
155
+ */
156
+ readonlyWrite: (node: BaseNode, target: Schema) => Diagnostic;
131
157
  /**
132
158
  * Cast (`x as T`) entre tipos que não se sobrepõem em nenhum sentido. Warning
133
159
  * (não erro): o cast é um escape-hatch explícito — `unknown`/`any` passam
@@ -146,6 +172,37 @@ interface DiagnosticSink {
146
172
  /** Cria um coletor vazio. */
147
173
  declare function createSink(): DiagnosticSink;
148
174
 
175
+ /** Liga a análise de não-usados. Dois eixos independentes, como no tsc. */
176
+ interface UnusedOptions {
177
+ /** ≅ `noUnusedLocals`: `const` e `import` nunca lidos. */
178
+ readonly locals?: boolean;
179
+ /** ≅ `noUnusedParameters`: parâmetros de arrow nunca lidos. */
180
+ readonly parameters?: boolean;
181
+ }
182
+ /**
183
+ * Coleta os bindings declarados e nunca lidos, como diagnósticos `unused-name`
184
+ * (severidade **warning** — é aviso de higiene, não erro de tipo).
185
+ *
186
+ * **Fora de escopo, de propósito** (limitação declarada, nunca divergência —
187
+ * [[tslite-is-ts-subset]]):
188
+ *
189
+ * - **`type X = …` não-usado** (o TS6196 do tsc). Num TSLite, um alias de `.d.ts`
190
+ * é contrato ENTRE arquivos por construção — a gramática não tem `export type`
191
+ * (playground ARCHITECTURE §5), então "não usado neste arquivo" não significa
192
+ * não usado. Reportar daria falso-positivo em todo `.d.ts`.
193
+ * - **Write-only** (`let x = 1; x = 2` sem leitura — o `noUnusedLocals_writeOnly`
194
+ * do tsc). Aqui a atribuição conta como leitura, então reportamos MENOS.
195
+ * Mutação é capability gated (D9), então o caso é raro.
196
+ *
197
+ * **Diferença de MENSAGEM conhecida** (o comportamento bate; a apresentação não —
198
+ * mesmo precedente do D2/D18): o tsc agrupa (`All variables are unused` /
199
+ * `All destructured elements are unused`) quando TODOS os nomes de uma declaração
200
+ * caem. Aqui cada nome sai como um diagnóstico próprio, porque o consumidor é o
201
+ * editor: o fade precisa do range POR NOME, e um diagnóstico na lista inteira não
202
+ * apagaria os nomes individualmente.
203
+ */
204
+ declare function collectUnused(root: BaseNode, opts: UnusedOptions): Diagnostic[];
205
+
149
206
  /** O overlay de tipos: tipo + escopo de cada nó, por referência (ESTree não tem id). */
150
207
  type TypeOverlay = WeakMap<BaseNode, {
151
208
  readonly type: Schema;
@@ -195,6 +252,12 @@ interface CheckOptions {
195
252
  * `resultType`. Reporta `wrong-result-type`. (Ex.: uma condition deve ser `boolean`.)
196
253
  */
197
254
  readonly resultType?: Schema;
255
+ /**
256
+ * Análise de bindings declarados e nunca lidos (`unused-name`, **warning**).
257
+ * Opt-in e com dois eixos independentes, como o `noUnusedLocals` /
258
+ * `noUnusedParameters` do tsc. Ver [`unused`](./unused.ts) para as isenções.
259
+ */
260
+ readonly unused?: UnusedOptions;
198
261
  }
199
262
  declare function check(node: Node, env: Env, opts?: CheckOptions): CheckResult;
200
263
  /**
@@ -269,6 +332,40 @@ declare function guardsFromCompiled(c: CompiledProfile): Profile;
269
332
  */
270
333
  declare function fromCapability(profile: CapabilityProfile): Profile;
271
334
 
335
+ /**
336
+ * Diagnósticos de reatribuição de binding imutável (`const`, `import`).
337
+ *
338
+ * **Sempre roda** — não é opt-in nem gateado por capability, porque `const` é o
339
+ * piso da Linguagem (D9). Um profile que liga mutação libera `let`, não `const`.
340
+ *
341
+ * Roda **ANTES** do walk, e devolve também os alvos recusados: o walk pula a
342
+ * checagem de assignability neles, para não cascatear. É a ordem do tsc — *"to
343
+ * avoid cascading errors check assignability only if 'isReference' check succeeded
344
+ * and no errors were reported"* (`checker.ts:41076`). Sem isso `const c = 1; c = 2`
345
+ * reportaria DOIS erros, sendo que o segundo (`2 ⊄ 1`) é consequência do primeiro.
346
+ */
347
+ declare function collectMutations(root: BaseNode): {
348
+ readonly diagnostics: readonly Diagnostic[];
349
+ readonly invalidTargets: WeakSet<BaseNode>;
350
+ };
351
+
352
+ /** Referência → o `Identifier` que a DECLARA. Por referência, como o overlay. */
353
+ type BindingMap = WeakMap<BaseNode, BaseNode>;
354
+ /**
355
+ * Mapeia cada REFERÊNCIA ao `Identifier` que a declara.
356
+ *
357
+ * É a base de "ir para a definição" (e, no futuro, rename / find-references).
358
+ * **Não** é chamado pelo `check`: é consulta de editor, e o checker roda
359
+ * por-keystroke — quem quer, paga.
360
+ *
361
+ * **Limites** (ambos por ausência de posição, não por preguiça):
362
+ * - **membro** (`obj.price`) não resolve: exigiria a origem do tipo, e `Schema`
363
+ * não carrega posição;
364
+ * - **nome de tipo em ANOTAÇÃO** (`r: RawViaCep`) não resolve: a anotação é
365
+ * `Schema` apagável, não nó (E6). O nome de um `type X = …` resolve.
366
+ */
367
+ declare function collectBindings(root: BaseNode): BindingMap;
368
+
272
369
  /** Anota uma ligação/parâmetro: `x` → `x: T`. */
273
370
  declare const annotate: <N extends BaseNode>(node: N, type: Schema) => N & {
274
371
  typeAnnotation: Schema;
@@ -300,4 +397,4 @@ declare function scopeCompletions(overlay: TypeOverlay, node: BaseNode): readonl
300
397
  /** Os diagnósticos que apontam para `node`. */
301
398
  declare function diagnosticsAt(diagnostics: readonly Diagnostic[], node: BaseNode): readonly Diagnostic[];
302
399
 
303
- export { type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, type Profile, type Scope, type Severity, type TypeOverlay, annotate, annotateReturn, asExpression, calleeAllowlist, capabilityNodes, check, childScope, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, visibleNames };
400
+ export { type BindingMap, type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, type Profile, type Scope, type Severity, type TypeOverlay, type UnusedOptions, annotate, annotateReturn, asExpression, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, visibleNames };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,withoutUndefined,widen,unify,ownProp,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,AST_MARKER,childrenOf}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var $e=(e={})=>rootScope(e),T=(e,n)=>childScope(e,n),v=(e,n)=>lookup(e,n),pe=e=>visibleNames(e),wn=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:$e(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),En=(e,n)=>e.types[n],vn=(e,n)=>e.schemes[n];var Le={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic",unsupported:"semantic","forbidden-member":"semantic","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","cast-unsound":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},k=(e,n,t)=>({code:e,kind:Le[e],severity:"error",node:n,message:t}),B=(e,n,t,r="error")=>({code:e,kind:Le[e],severity:r,node:n,message:t}),S={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r).filter(o=>o.path.length>0),a=s.length?` ${formatTypeDiff(s)}.`:"";return k("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${a}`)},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>k("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),forbiddenMember:(e,n)=>k("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),castUnsound:(e,n,t)=>B("cast-unsound",e,`Conversion of type '${format(n)}' to type '${format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning")};function Z(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function ce(e,n,t={}){return n.flatMap(r=>r(e,t))}function U(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var Pn=e=>Array.isArray(e)?e:[e],Ve=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function me(e,n="error"){return t=>{let r=[];return U(t,s=>{let a=nodeViolation(s,e);a&&r.push(B("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function Ue(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return U(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let p=typeFeatureViolations(typeFeatures(l,i),t);p.length&&s.push(B("type-feature-not-allowed",a,`authoring type feature${p.length>1?"s":""} '${p.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function N(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>N(t.type,n))||!!e.index&&N(e.index.value,n);case "array":return N(e.items,n);case "tuple":return e.elements.some(t=>N(t,n));case "union":case "intersection":return e.of.some(t=>N(t,n));case "fn":return e.params.some(t=>N(t.type,n))||N(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>N(r.type,n))||N(t.returns,n));case "keyof":return N(e.of,n);case "index":return N(e.obj,n)||N(e.key,n);case "mapped":return N(e.over,n)||N(e.body,n);case "conditional":return N(e.check,n)||N(e.extends,n)||N(e.then,n)||N(e.else,n);case "returnType":case "parameters":return N(e.fn,n);case "apply":return e.args.some(t=>N(t,n));default:return false}}function qe(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return U(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&N(o)){r.push(B("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function ye(e,n="error"){let t=new Set(e);return r=>{let s=[];return U(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(B("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(B("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function ee(e,n,t={}){let r=new Set(Pn(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(p,c)=>{let m=r.has(p.type),h=m?c+1:c;m&&h>n&&i.push(B("too-deep",p,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let y of childrenOf(p))l(y,h);};return l(o,0),i}}var fe=(e=3,n="error")=>ee(Ve,e,{hint:"use a pipe instead of nesting functions",severity:n}),de=(e,n="error")=>ee("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),he=(e,n="error")=>ee("MemberExpression",e,{severity:n});function ge(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(B("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of childrenOf(a))s(i,o+1);};return s(t,0),r}}function Se(e,n="error"){return t=>{let r=0;return U(t,()=>{r++;}),r>e?[B("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function be(e,n="error"){return t=>{let r=[];return U(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(B("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Ne(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[B("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function ne(e){let n=[me(e),Ue(e),qe(e)];return e.hostAllow!=="*"&&n.push(ye([...e.hostAllow])),n}function Fn(e){return ne(compileProfile(e))}var J=e=>e.typeAnnotation,ke=e=>e.returnType,F=e=>e.type==="Identifier"?e.name:null,Ke=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?F(n.id):null}return F(e)},z=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function _e(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function Be(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=Be(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function we(e){let n=e;if(n.regex||n.bigint)return s.unknown;let t=n.value;return t===null?s.null:t===void 0?s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:s.unknown}var q=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):we(e)},Ee=e=>e.type==="ArrowFunctionExpression",We=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,se=e=>We(e)?e.args[0]:e,X=e=>We(e)?e:s.promise(e);function te(e){return e.t==="tuple"?true:e.t==="array"?te(e.items):e.t==="union"?e.of.some(te):false}function re(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>re(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&re(e.bound):false}var j=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function Je(e){let n=ke(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:F(r)??`arg${s$1}`,type:J(r)??s.unknown})),returns:e.async?X(n):n}:null}var M={then:{},else:{}},nn=new Set(["string","number","boolean","undefined","function","object"]),ze={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function tn(e,n){switch(n){case "string":return e.t==="string"||e.t==="literal"&&typeof e.value=="string";case "number":return e.t==="number"||e.t==="literal"&&typeof e.value=="number";case "boolean":return e.t==="boolean"||e.t==="literal"&&typeof e.value=="boolean";case "undefined":return e.t==="undefined";case "function":return e.t==="fn"||e.t==="overload";case "object":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="null";default:return false}}var $n=s.literal(true),Ln=s.literal(false),x=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[$n,Ln]:[e];function Xe(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function Gn(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=x(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function Vn(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=x(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function Un(e,n){if(!nn.has(n))return null;if(e.t==="unknown"||e.t==="any")return ze[n]??e;let t=x(e).filter(r=>tn(r,n));return t.length?normalizeUnion(t):ze[n]??e}function qn(e,n){if(!nn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=x(e).filter(r=>!tn(r,n));return t.length?normalizeUnion(t):null}function Ye(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=q(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function He(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=q(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Qe(e,n,t,r,s){let a=x(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let p=o(l);return r?!!p&&subtype(t,p,s):!(p&&subtype(p,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function Ze(e,n,t){let r=x(e),s=o=>o.t==="object"&&(n in o.props||!!o.index),a=r.filter(o=>t?s(o):!s(o));return a.length&&a.length<r.length?normalizeUnion(a):null}function Kn(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function _n(e,n,t){let r=x(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var Wn=e=>e.t==="null"||e.t==="undefined",rn=e=>Wn(e)||e.t==="literal"&&!e.value,Jn=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=x(e),t=n.filter(r=>!rn(r));return t.length&&t.length<n.length?normalizeUnion(t):null},zn=e=>{let n=x(e),t=n.filter(rn);return t.length&&t.length<n.length?normalizeUnion(t):null},en=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,O=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Xn=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function Q(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let y=r.left,b=r.right;if(y.type==="Literal"&&typeof y.value=="string"&&b.type==="Identifier"){let g=b.name,E=v(n,g);if(!E)return M;let V=String(y.value);return O(g,Ze(E,V,true),Ze(E,V,false))}return M}if(!Xn(r.operator))return M;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=Xe(a,o)??Xe(o,a);if(i){let y=v(n,i.name);if(!y)return M;let b=Un(y,i.tag),g=qn(y,i.tag);return s?O(i.name,g,b):O(i.name,b,g)}let l=en(a),p=en(o),c=l?o:p?a:null;if((l||p)&&c?.type==="Identifier"){let y=c.name,b=v(n,y);if(!b)return M;let E=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??p],V=x(b),je=V.filter(le=>E.includes(le.t)),ie=V.filter(le=>!E.includes(le.t)),xe=je.length?normalizeUnion(je):null,Me=ie.length&&ie.length<V.length?normalizeUnion(ie):null;return s?O(y,Me,xe):O(y,xe,Me)}let m=Ye(a,o)??Ye(o,a);if(m){let y=v(n,m.name);if(!y)return M;let b=Kn(y,m.lit,t),g=_n(y,m.lit,t);return s?O(m.name,g,b):O(m.name,b,g)}let h=He(a,o)??He(o,a);if(h){let y=v(n,h.name);if(!y)return M;let b=Qe(y,h.prop,h.lit,true,t),g=Qe(y,h.prop,h.lit,false,t);return s?O(h.name,g,b):O(h.name,b,g)}return M}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=Q(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Hn(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=v(n,r);if(s)return O(r,Jn(s),zn(s))}return M}function Yn(e,n){if(e.t==="fn")return e.guard??null;if(e.t==="overload"){for(let t of e.signatures)if(t.guard&&t.params.length===n)return t.guard}return null}function Hn(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=v(n,r.name);if(!s)return null;let a=Yn(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=v(n,i);return l?O(i,Gn(l,a.type,t),Vn(l,a.type,t)):null}var _=(e,n)=>Object.keys(n).length?T(e,n):e;function Y(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":{let n=e.body;return n.length>0&&Y(n[n.length-1])}case "IfStatement":{let n=e;return !!n.alternate&&Y(n.consequent)&&Y(n.alternate)}default:return false}}var yt=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ft(e){let n=[];return e.maxDepth!==void 0&&n.push(ge(e.maxDepth)),e.maxNodes!==void 0&&n.push(Se(e.maxNodes)),e.maxArgs!==void 0&&n.push(be(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(fe(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(de(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(he(e.memberDepth)),n}function cn(e,n,t={}){let r={...yt(n.types),...n.schemes,...ht(e)},s$1={overlay:new WeakMap,sink:Z(),env:n,schemes:r,importNames:new Set},a=t.profile?compileProfile(t.profile):void 0;a&&configureTypeLimits(a.typeLimits);try{let o,i=gt(e,s$1);try{o=f(e,i,s$1);}catch(c){if(c instanceof TypeEvalLimitError)s$1.sink.report(B("too-deep",e,c.message));else if(c instanceof UnionTooComplexError)s$1.sink.report(B("too-complex-union",e,c.message));else throw c;o=s.unknown;}let l=[];a&&l.push(...ne(a)),t.limits&&l.push(...ft(t.limits)),t.resultType&&l.push(Ne(t.resultType,r));let p=l.length?[...s$1.sink.all,...ce(e,l,{overlay:s$1.overlay})]:s$1.sink.all;return {type:o,overlay:s$1.overlay,diagnostics:p}}finally{a&&resetTypeLimits();}}function dt(e,n,t={}){let r=cn(e,n,t),s$1={},a=new Map,o,i=p=>{let c=[];if(p.type==="VariableDeclaration")for(let m of p.declarations){let h=F(m.id),y=r.overlay.get(m);h&&y&&(s$1[h]=y.type,c.push(h));}else if(p.type==="FunctionDeclaration"){let m=p.id?.name,h=r.overlay.get(p);m&&h&&(s$1[m]=h.type,c.push(m));}return c};for(let p of e.body??[])if(p.type==="VariableDeclaration"||p.type==="FunctionDeclaration")i(p);else if(p.type==="ExportNamedDeclaration"){let c=p;if(c.declaration)for(let m of i(c.declaration))a.set(m,m);else for(let m of c.specifiers)a.set(m.exported.name,m.local.name);}else if(p.type==="ExportDefaultDeclaration"){let c=r.overlay.get(p.declaration);o=c?c.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[p,c]of a)s$1[c]&&(l[p]={type:s$1[c]});o!==void 0&&(l.default={type:o});}else for(let p in s$1)l[p]={type:s$1[p]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var ht=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function gt(e,n){let t=n.env.modules,r={};walk(e,{ImportDeclaration(s$1){let a=s$1,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=s.unknown;return}for(let l of a.specifiers){let p=l.local.name;if(p in r){n.sink.report(S.cannotRedeclare(l.local,p));continue}if(l.type==="ImportNamespaceSpecifier"){r[p]=i;continue}let c=l.type==="ImportSpecifier"?l.imported.name:"default",m=discover(i,[c],n.schemes);m?r[p]=m.type:(n.sink.report(S.noSuchMember(l,i,c)),r[p]=s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?T(n.env.scope,r):n.env.scope}var d=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function f(e,n,t,r){switch(e.type){case mn:return e.schema;case "JSXElement":case "JSXFragment":return d(t,e,f(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return d(t,e,we(e),n);case "Identifier":{let s$1=e.name,a=v(n,s$1);return a===void 0?s$1==="undefined"?d(t,e,s.undefined,n):(t.sink.report(S.unknownName(e,s$1)),d(t,e,s.unknown,n)):d(t,e,a,n)}case "MemberExpression":return d(t,e,Nt(e,n,t),n);case "CallExpression":return d(t,e,Et(e,n,t,r),n);case "ArrowFunctionExpression":return Oe(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),d(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),d(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),d(t,e,s.unknown,n);case "BlockStatement":return d(t,e,Pe(e,n,t),n);case "ReturnStatement":{let s$1=e.argument;return d(t,e,s$1?f(s$1,n,t):s.unknown,n)}case "IfStatement":return I(e,n,t),t.overlay.get(e)?.type??s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return I(e,n,t),t.overlay.get(e)?.type??s.unknown;case "AssignmentExpression":{let s=e;return f(s.left,n,t),d(t,e,f(s.right,n,t),n)}case "UpdateExpression":return f(e.argument,n,t),d(t,e,s.number,n);case "ExpressionStatement":return d(t,e,f(e.expression,n,t),n);case "VariableDeclaration":return ae(e,n,t),d(t,e,s.unknown,n);case "TSTypeAliasDeclaration":return d(t,e,s.unknown,n);case "BinaryExpression":return d(t,e,xt(e,n,t),n);case "LogicalExpression":{let s=e,a=f(s.left,n,t),o=f(s.right,n,t);return d(t,e,Mt(s.operator,a,o),n)}case "UnaryExpression":return d(t,e,Gt(e,n,t),n);case "ConditionalExpression":{let s=e;f(s.test,n,t);let a=Q(s.test,n,t.schemes),o=f(s.consequent,_(n,a.then),t),i=f(s.alternate,_(n,a.else),t);return d(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return d(t,e,Vt(e,n,t),n);case "ArrayExpression":return d(t,e,gn(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions)f(s,n,t);return d(t,e,s.string,n)}case "AwaitExpression":{let s$1=e.argument,a=s$1?f(s$1,n,t):s.unknown;return d(t,e,se(a),n)}case "Program":return Ie(e.body,n,t,new Set(t.importNames)),d(t,e,s.unknown,n);case "JsonExpression":return d(t,e,Ce(e.body,n,t,e),n);case "ChainExpression":return d(t,e,normalizeUnion([f(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let s=e,a=f(s.expression,n,t),o=s.typeAnnotation;return !subtype(a,o,t.schemes)&&!subtype(o,a,t.schemes)&&t.sink.report(S.castUnsound(e,a,o)),d(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),d(t,e,s.unknown,n)}}var St=new Set(["constructor","prototype","__proto__"]);function bt(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function Nt(e,n,t){let r=f(e.object,n,t),s$1=bt(e);if(s$1!==null&&St.has(s$1))return t.sink.report(S.forbiddenMember(e,s$1)),s.unknown;if(e.computed){let i=f(e.property,n,t),l=resolveTypeOp(s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&an(e,r,i.value,t),s.unknown)}let a=e.property.name,o=discover(r,[a],t.schemes);return o?o.type:(an(e,r,a,t),s.unknown)}function an(e,n,t,r){let s=isScheme(n,r.schemes)?expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(S.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(S.notObject(e,n));}function kt(e,n,t){if(!e||e.type!=="Identifier")return;let r=e.name;if(v(n,r)===void 0)return;let s=t.schemes[r];return s&&s.params.length===0?s.body:void 0}function Bt(e,n,t,r){let s$1=j(f(n[0],t,r),r.schemes),o=(s$1.t==="fn"?s$1:s$1.t==="overload"?s$1.signatures[0]:void 0)?.params[0]?.type,i=n.length>1?f(n[1],t,r):s.undefined;if(o){let l=typeDiff(i,o,r.schemes);l.length&&r.sink.report(S.propsMismatch(n[1]??e,o,formatTypeDiff(l)));}return d(r,e,s.boolean,t)}var mn="TSLiteSyntheticArg",wt=e=>({type:mn,schema:e});function yn(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s$1=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=j(f(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(wt(l));else s$1={elem:i.t==="array"?i.items:s.unknown,node:a};}return {nodes:r,spread:s$1}}function Et(e,n,t,r){let s$1=e.arguments,a=Be(e.callee);if(a){let p=t.env.accessors?.[a];if(p){let c=_e(s$1);if(c){let m=discover(p,c,t.schemes);return m?m.type:(t.sink.report(S.noSuchMember(e,p,c.join("."))),s.unknown)}return s$1.forEach(m=>f(m,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let p=kt(s$1[0],n,t);for(let c=1;c<s$1.length;c++)f(s$1[c],n,t);return p??s.unknown}if(a&&t.env.matchers?.has(a))return Bt(e,s$1,n,t);let o=f(e.callee,n,t);if(o.t==="any")return s$1.forEach(p=>f(p,n,t)),s.any;if(o.t==="overload")return At(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(p=>f(p,n,t)),t.sink.report(S.notCallable(e,o)),s.unknown;let i=yn(s$1,n,t),l=i.nodes.map(p=>fn(p,n,t));return dn(e,o,i.nodes,l,n,t,i.spread,r)}function fn(e,n,t){if(Ee(e))return s.any;if(e.type!=="CallExpression")return f(e,n,t);let r=Z(),s$1=f(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function dn(e,n,t,r,s$1,a,o=null,i){let l=m=>{if(!i)return m;let h=substitute(n.returns,m);if(h.t==="fn"&&i.t==="fn"){let y=m,b=Math.min(h.params.length,i.params.length);for(let g=0;g<b;g++)y=unify(h.params[g].type,i.params[g].type,y)??y;return unify(h.returns,i.returns,y)??y}return unify(h,i,m)??m},p=l(instantiateLoose(n,r).bindings);t.forEach((m,h)=>{if(Ee(m)){let y=widenType(substitute(n.params[h]?.type??s.any,p));r[h]=Oe(m,s$1,a,y);}else if(m.type==="CallExpression"&&r[h].t==="any")r[h]=f(m,s$1,a,substitute(n.params[h]?.type??s.unknown,p));else if(m.type==="Literal"){let y=n.params[h]?.type??s.unknown,b=y.t==="var"?y.bound?substitute(y.bound,p):y:substitute(y,p);re(b)&&(r[h]=d(a,m,q(m),s$1));}else if(m.type==="ArrayExpression"){let y=substitute(n.params[h]?.type??s.unknown,p);te(y)&&(r[h]=Sn(m,y,s$1,a));}});let c=l(instantiateLoose(n,r).bindings);return Dt(e,n,c,a),Ot(e,n,r,c,a,t,o),t.forEach((m,h)=>{let y=n.params[h];m.type==="ObjectExpression"&&y&&!y.variadic&&Fe(m,substitute(y.type,c),a);}),widenInferred(groundVars(substitute(n.returns,c),a.schemes))}var on=new WeakMap;function vt(e){let n=on.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)w(s.type,t,r);return w(e.returns,t,r),on.set(e,t),t}function w(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":w(e.items,n,t);return;case "union":for(let r of e.of)w(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)w(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)w(r.type,n,t);w(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)w(s.type,n,t);w(r.returns,n,t);}return;case "apply":for(let r of e.args)w(r,n,t);return;case "keyof":w(e.of,n,t);return;case "index":w(e.obj,n,t),w(e.key,n,t);return;case "mapped":w(e.over,n,t),w(e.body,n,t);return;default:return}}function Dt(e,n,t,r){let s=vt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=substitute(o,t);subtype(i,l,r.schemes)||r.sink.report(S.constraintViolation(e,a,i,l));}}function At(e,n,t,r,s$1){let a=yn(e.arguments,t,r),o=a.nodes,i=o.map(c=>fn(c,t,r)),l=c=>a.spread?Ct(c,o.length):Tt(c,o.length),p=n.signatures.find(c=>l(c)&&Rt(c,i,r));if(!p){let c=n.signatures.filter(l);c.length===1?p=c[0]:n.signatures.length===1&&(p=n.signatures[0]);}return p?dn(e,p,o,i,t,r,a.spread,s$1):(r.sink.report(S.noMatchingOverload(e,n,i)),s.unknown)}function Ct(e,n){let t=0,r=false;for(let s of e.params)s.variadic?r=true:s.optional||t++;return n>=t&&(r||n<e.params.length)}function Tt(e,n){let t=0;for(let r of e.params){if(r.variadic)return n>=t;r.optional||t++;}return n>=t&&n<=e.params.length}function Rt(e,n,t){let{bindings:r}=instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic)return true;if(s>=n.length){if(!a.optional)return false;continue}if(!subtype(n[s],substitute(a.type,r),t.schemes))return false}return true}function Ot(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=p=>a[p]??e;for(let p=0;p<n.params.length;p++){let c=n.params[p];if(c.variadic)break;let m=substitute(c.type,r);if(p>=t.length){!c.optional&&!o&&s$1.sink.report(S.missingArgument(e,c.name,m));continue}subtype(t[p],m,s$1.schemes)||s$1.sink.report(S.notAssignable(i(p),t[p],m,s$1.schemes));}let l=n.params.find(p=>p.variadic);if(o){let p=t.length,c=n.params.filter(m=>!m.optional&&!m.variadic).length;if(!(p>=c&&(l||p<n.params.length))){s$1.sink.report(S.spreadArgument(o.node));return}if(l){let m=substitute(l.type,r),h=m.t==="array"?m.items:s.unknown;subtype(o.elem,h,s$1.schemes)||s$1.sink.report(S.notAssignable(o.node,o.elem,h,s$1.schemes));}return}!l&&t.length>n.params.length&&s$1.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function L(e,n,t,r){let s=j(n,r.schemes);switch(e.type){case "Literal":{let o=q(e);return subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),d(r,e,n,t)}case "ArrayExpression":{if(s.t==="array"){for(let o of e.elements){if(!o)continue;let i=o;i.type==="SpreadElement"?L(i.argument,n,t,r):L(i,s.items,t,r);}return d(r,e,n,t)}break}case "ObjectExpression":{if(s.t==="object"){let o={};for(let l of e.properties){let p=l;if(p.type==="SpreadElement"){f(p.argument,t,r);continue}let c=p,m=z(c),h=m!==null?ownProp(s.props,m)?.type:void 0,y=h?L(c.value,h,t,r):f(c.value,t,r);m!==null&&(o[m]={type:y}),d(r,p,y,t);}let i={t:"object",props:o};return subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),d(r,e,n,t)}break}case "ArrowFunctionExpression":{if(s.t==="fn"){let o=Oe(e,t,r,s);return subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),d(r,e,n,t)}break}case "ConditionalExpression":{let o=e;return f(o.test,t,r),L(o.consequent,n,t,r),L(o.alternate,n,t,r),d(r,e,n,t)}}let a=f(e,t,r);return subtype(a,n,r.schemes)||r.sink.report(S.notAssignable(e,a,n,r.schemes)),d(r,e,a,t)}function Oe(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a={},o=e.params.map((h,y)=>{let b=h,g=F(b),E=J(b)??s$1?.params[y]?.type??s.unknown;return g?a[g]=E:b.type!=="Identifier"&&G(b,E,a,n,t),t.overlay.set(b,{type:E,scope:n}),{name:g??`arg${y}`,type:E}}),i=T(n,a),l=e.body,p=ke(e);if(l.type!=="BlockStatement"&&p){let h=e.async?se(p):p;L(l,h,i,t);let y=e.async?X(p):p;return d(t,e,{t:"fn",params:o,returns:y},n)}let c=l.type==="BlockStatement"?d(t,l,Pe(l,i,t,new Set(Object.keys(a))),i):f(l,i,t),m=e.async?X(c):c;if(p){let h=e.async?se(p):p,y=e.async?c:m;subtype(y,h,t.schemes)||t.sink.report(S.notAssignable(l,m,p,t.schemes));let b=e.async?X(p):p;return d(t,e,{t:"fn",params:o,returns:b},n)}return d(t,e,{t:"fn",params:o,returns:widenType(m)},n)}function W(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?W(n.argument):W(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?W(n.argument):W(n):[]);case "AssignmentPattern":return W(e.left);default:return []}}function hn(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>W(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?hn(e.declaration):[]}function Pe(e,n,t,r=new Set){let{returns:s$1}=Ie(e.body,n,t,r);return s$1.length?normalizeUnion(s$1):s.unknown}function Ie(e,n,t,r=new Set){let s=n,a=[];for(let o of e){let i=o;for(let l of hn(i))r.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):r.add(l.name);if(i.type==="VariableDeclaration")s=ae(i,s,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")s=ae(l.declaration,s,t);else if(l.declaration?.type==="FunctionDeclaration"){let p=f(l.declaration,s,t),c=F(l.declaration.id);c&&(s=T(s,{[c]:p}));}else for(let p of l.specifiers)v(s,p.local.name)===void 0&&t.sink.report(S.unknownName(p.local,p.local.name));}else if(i.type==="ExportDefaultDeclaration")f(i.declaration,s,t);else if(i.type==="FunctionDeclaration"){let l=f(i,s,t),p=F(i.id);p&&(s=T(s,{[p]:l}));}else if(i.type==="IfStatement"){a.push(...I(i,s,t));let l=i;!l.alternate&&Y(l.consequent)&&(s=_(s,Q(l.test,s,t.schemes).else));}else a.push(...I(i,s,t));}return {scope:s,returns:a}}function I(e,n,t){switch(e.type){case "ReturnStatement":{let r=e.argument,s$1=r?f(r,n,t):s.unknown;return d(t,e,s$1,n),[s$1]}case "IfStatement":{let r=e;f(r.test,n,t);let s$1=Q(r.test,n,t.schemes),a=I(r.consequent,_(n,s$1.then),t);return r.alternate&&a.push(...I(r.alternate,_(n,s$1.else),t)),d(t,e,s.unknown,n),a}case "BlockStatement":{let r=Pe(e,n,t);return d(t,e,r,n),r.t==="unknown"?[]:[r]}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let r=e,s$1=n;r.init&&(r.init.type==="VariableDeclaration"?s$1=ae(r.init,s$1,t):f(r.init,s$1,t)),r.test&&f(r.test,s$1,t),r.update&&f(r.update,s$1,t);let a=I(r.body,s$1,t);return d(t,e,s.unknown,n),a}case "ForOfStatement":case "ForInStatement":{let r=e,s$1=f(r.right,n,t),a=e.type==="ForOfStatement"?s$1.t==="array"?s$1.items:s.unknown:s.string,o=Ke(r.left),i=o?T(n,{[o]:a}):n,l=I(r.body,i,t);return d(t,e,s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return d(t,e,s.unknown,n),[];case "ThrowStatement":{let r=e.argument;return r&&f(r,n,t),d(t,e,s.unknown,n),[]}case "TryStatement":{let r=e,s$1=I(r.block,n,t);if(r.handler){let a=r.handler.param,o=a?F(a):null,i=o?T(n,{[o]:s.unknown}):n;s$1.push(...I(r.handler.body,i,t));}return r.finalizer&&s$1.push(...I(r.finalizer,n,t)),d(t,e,s.unknown,n),s$1}case "SwitchStatement":{let r=e;f(r.discriminant,n,t);let s$1=n,a=[];for(let o of r.cases){o.test&&f(o.test,s$1,t);let i=Ie(o.consequent,s$1,t);s$1=i.scope,a.push(...i.returns);}return d(t,e,s.unknown,n),a}default:return f(e,n,t),[]}}function Pt(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function It(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function Ft(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return s.object(t,e.index)}function jt(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function G(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=J(e)??n;t[e.name]=a,s$1.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=widenType(f(a.right,r,s$1)),{type:i}=withoutUndefined(n),l=i.t==="unknown"?o:normalizeUnion([i,o]);G(a.left,l,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){G(o.argument,Ft(n,a),t,r,s$1);continue}let i=o,l=z(i);l!=null&&a.push(l);let p=l!=null?Pt(n,l,s$1):s.unknown;G(i.value,p,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?G(i.argument,jt(n,o),t,r,s$1):G(i,It(n,o),t,r,s$1);});return}}}function Fe(e,n,t){let r=j(n,t.schemes),a=(r.t==="union"?r.of.map(o=>j(o,t.schemes)):[r]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=z(i);if(l===null)continue;let p=a.filter(c=>l in c.props);if(!p.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&Fe(i.value,p[0].props[l].type,t);}}function ae(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=F(a),i=J(a);if(!s$1.init){t.sink.report(S.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let l=i??(s$1.init.type==="ArrowFunctionExpression"?Je(s$1.init):null),p=o&&l?T(n,{[o]:l}):n,c;i?(L(s$1.init,i,p,t),s$1.init.type==="ObjectExpression"&&Fe(s$1.init,i,t),c=i):c=f(s$1.init,p,t),d(t,s$1,c,n),o?r[o]=c:G(a,c,r,n,t);}return d(t,e,s.unknown,n),T(n,r)}function xt(e,n,t){let r=f(e.left,n,t),s$1=f(e.right,n,t),a=e.operator;return a==="+"?subtype(r,s.string)||subtype(s$1,s.string)?s.string:s.number:$t.has(a)?s.number:s.boolean}var ln={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},De=e=>e.t==="null"||e.t==="undefined";function Mt(e,n,t){if(n.t==="any"||n.t==="unknown")return normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[s.literal(true),s.literal(false)]:[n];if(e==="??")return normalizeUnion([...r.filter(a=>!De(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!De(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>De(a)?[a]:a.t==="literal"?a.value?[]:[a]:ln[a.t]?[ln[a.t]]:[]);return normalizeUnion([...s$1,t])}var $t=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),Lt=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function Gt(e,n,t){let r=f(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:s.number;case "+":case "~":return s.number;case "typeof":return Lt;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function Vt(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let p of e.properties){let c=p;if(c.type==="SpreadElement"){let g=j(f(c.argument,n,t),t.schemes);if(g.t==="object"){for(let E in g.props)r[E]=g.props[E];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let m=c,h=f(m.value,n,t),y=widen(h);if(d(t,c,h,n),m.computed){let g=j(f(m.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:y},a.push(y)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:y},a.push(y),o.push(y)):g.t==="string"?(i=true,a.push(y)):g.t==="number"&&(l=true,a.push(y),o.push(y));continue}let b=z(m);b!==null&&(r[b]={type:y},a.push(y),/^\d+$/.test(b)&&o.push(y));}return i?s={key:"string",type:normalizeUnion(a)}:l&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function gn(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=j(f(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(widen(f(a,n,t)));}return s.array(r.length?normalizeUnion(r):s.unknown)}function Sn(e,n,t,r){let s$1=j(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,p)=>l.type==="ArrayExpression"?Sn(l,p,t,r):widen(f(l,t,r));if(s$1.t==="tuple"&&o&&a.length===s$1.elements.length){let l=a.map((p,c)=>i(p,s$1.elements[c]));return d(r,e,{t:"tuple",elements:l},t)}if(s$1.t==="array"){let l=[];for(let p of a){if(!p)continue;let c=p;if(c.type==="SpreadElement"){f(c.argument,t,r);continue}l.push(i(c,s$1.items));}return d(r,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return gn(e,t,r)}function Ce(e,n,t,r){if(e===null)return s.null;switch(typeof e){case "string":return s.string;case "number":return s.number;case "boolean":return s.boolean;case "object":break;default:return s.unknown}if(Array.isArray(e)){let o=e.map(i=>Ce(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if(AST_MARKER in s$1){let o;try{o=fromJson(s$1);}catch{return t.sink.report(S.unsupported(r,`'#ast: ${String(s$1[AST_MARKER])}'`)),s.unknown}return f(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:Ce(s$1[o],n,t,r)};return {t:"object",props:a}}var Ut=(e,n)=>({...e,typeAnnotation:n}),qt=(e,n)=>({...e,returnType:n}),Kt=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Wt(e,n){return e.get(n)?.type}function Jt(e,n){return e.get(n)?.scope}function zt(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function Xt(e,n){let t=e.get(n)?.scope;return t?[...pe(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}function Yt(e,n){return e.filter(t=>t.node===n)}export{Ve as FUNCTION_KINDS,Ut as annotate,qt as annotateReturn,Kt as asExpression,ye as calleeAllowlist,me as capabilityNodes,cn as check,T as childScope,wn as createEnv,Z as createSink,S as diag,Yt as diagnosticsAt,dt as extractModuleType,Fn as fromCapability,ce as guard,ne as guardsFromCompiled,v as lookup,B as makeDiagnostic,be as maxArgs,de as maxCallNesting,ge as maxDepth,fe as maxFunctionNesting,ee as maxNestingOf,Se as maxNodes,zt as memberCompletions,he as memberDepth,En as resolveNamed,vn as resolveScheme,Ne as resultType,$e as rootScope,Jt as scopeAt,Xt as scopeCompletions,Wt as typeAt,pe as visibleNames};
1
+ import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,ownProp,withoutUndefined,widenLiteral,widen,unify,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,AST_MARKER,childrenOf,VisitorKeys}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var un=(e={})=>rootScope(e),I=(e,n)=>childScope(e,n),A=(e,n)=>lookup(e,n),Ee=e=>visibleNames(e),et=(e={},n={},t={},s={},r=new Set,a=new Set,o={})=>({scope:un(e),types:n,schemes:t,accessors:s,asserters:r,matchers:a,modules:o}),nt=(e,n)=>e.types[n],tt=(e,n)=>e.schemes[n];var cn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},k=(e,n,t)=>({code:e,kind:cn[e],severity:"error",node:n,message:t}),E=(e,n,t,s="error")=>({code:e,kind:cn[e],severity:s,node:n,message:t}),S={notAssignable:(e,n,t,s={})=>{let r=typeDiff(n,t,s).filter(o=>o.path.length>0),a=r.length?` ${formatTypeDiff(r)}.`:"";return k("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${a}`)},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(s=>format(s)).join(", ")}).`),constraintViolation:(e,n,t,s)=>k("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(s)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>k("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>k("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>E("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>k("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>k("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>E("cast-unsound",e,`Conversion of type '${format(n)}' to type '${format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning")};function ee(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Ae(e,n,t={}){return n.flatMap(s=>s(e,t))}function X(e,n){let t=s=>{n(s);for(let r of childrenOf(s))t(r);};t(e);}var ut=e=>Array.isArray(e)?e:[e],mn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function De(e,n="error"){return t=>{let s=[];return X(t,r=>{let a=nodeViolation(r,e);a&&s.push(E("node-not-allowed",r,`'${a}' is not allowed by the capability profile.`,n));}),s}}function dn(e,n="error"){let t=e.typeTier;return s=>{if(t==="author")return [];let r=[];return X(s,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=typeFeatureViolations(typeFeatures(l,i),t);u.length&&r.push(E("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),r}}function b(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>b(t.type,n))||!!e.index&&b(e.index.value,n);case "array":return b(e.items,n);case "tuple":return e.elements.some(t=>b(t,n));case "union":case "intersection":return e.of.some(t=>b(t,n));case "fn":return e.params.some(t=>b(t.type,n))||b(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(s=>b(s.type,n))||b(t.returns,n));case "keyof":return b(e.of,n);case "index":return b(e.obj,n)||b(e.key,n);case "mapped":return b(e.over,n)||b(e.body,n);case "conditional":return b(e.check,n)||b(e.extends,n)||b(e.then,n)||b(e.else,n);case "returnType":case "parameters":return b(e.fn,n);case "apply":return e.args.some(t=>b(t,n));default:return false}}function fn(e,n="error"){return t=>{if(!e.typeStrict)return [];let s=[];return X(t,r=>{let a=r;for(let o of [a.typeAnnotation,a.returnType])if(o&&b(o)){s.push(E("any-not-allowed",r,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),s}}function Ce(e,n="error"){let t=new Set(e);return s=>{let r=[];return X(s,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")r.push(E("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||r.push(E("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),r}}function de(e,n,t={}){let s=new Set(ut(e)),r=t.severity??"error",a=[...s].join("/");return o=>{let i=[],l=(u,p)=>{let m=s.has(u.type),f=m?p+1:p;m&&f>n&&i.push(E("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,r));for(let d of childrenOf(u))l(d,f);};return l(o,0),i}}var Te=(e=3,n="error")=>de(mn,e,{hint:"use a pipe instead of nesting functions",severity:n}),Re=(e,n="error")=>de("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),Pe=(e,n="error")=>de("MemberExpression",e,{severity:n});function Oe(e,n="error"){return t=>{let s=[],r=(a,o)=>{if(o>e){s.push(E("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of childrenOf(a))r(i,o+1);};return r(t,0),s}}function Ie(e,n="error"){return t=>{let s=0;return X(t,()=>{s++;}),s>e?[E("too-large",t,`Expression has ${s} nodes (max ${e}).`,n)]:[]}}function Fe(e,n="error"){return t=>{let s=[];return X(t,r=>{if(r.type==="CallExpression"){let a=r.arguments;a&&a.length>e&&s.push(E("too-large",r,`Call has ${a.length} arguments (max ${e}).`,n));}}),s}}function Me(e,n={},t="error"){return (s,r)=>{let a=r.overlay?.get(s)?.type;return a?subtype(a,e,n)?[]:[E("wrong-result-type",s,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function fe(e){let n=[De(e),dn(e),fn(e)];return e.hostAllow!=="*"&&n.push(Ce([...e.hostAllow])),n}function pt(e){return fe(compileProfile(e))}var W=e=>({bindings:new Map,parent:e}),hn=e=>e.charCodeAt(0)===95;function ye(e,n,t,s,r,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:s,kind:r,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function te(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)te(s,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let s=t.path[0];typeof s=="string"&&he(n,s);return}for(let s of Object.keys(t))te(t[s],n);}function gn(e,n){let t=e;te(t.typeAnnotation,n),te(t.returnType,n);}function he(e,n){for(let t=e;t;t=t.parent){let s=t.bindings.get(n);if(s){s.used=true;return}}}function x(e,n,t,s,r,a){if(e)switch(e.type){case "Identifier":{let o=e.name;gn(e,n),ye(n,t,o,e,s,r||a&&hn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let m=l&&p<o.length-1;if(u.type==="RestElement")x(u.argument,n,t,s,r,false);else {let f=u;f.computed&&B(f.key,n,t),x(f.value,n,t,s,r||m,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;x(i.type==="RestElement"?i.argument:i,n,t,s,r,true);}return}case "AssignmentPattern":x(e.left,n,t,s,r,a);return;case "RestElement":x(e.argument,n,t,s,r,true);return;default:return}}function ne(e,n,t){if(e)switch(e.type){case "AssignmentPattern":B(e.right,n,t),ne(e.left,n,t);return;case "ObjectPattern":for(let s of e.properties)ne(s.type==="RestElement"?s.argument:s.value,n,t);return;case "ArrayPattern":for(let s of e.elements)s&&ne(s,n,t);return;case "RestElement":ne(e.argument,n,t);return;default:return}}function yn(e,n,t,s){for(let r of e.declarations)x(r.id,n,t,"local",s,false),B(r.init,n,t);}function je(e,n,t){let s=e,r=W(n),a=s.params??[];for(let o of a)x(o,r,t,"parameter",false,true);for(let o of a)ne(o,r,t);B(s.body,r,t);}function B(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(gn(e,n),e.type){case "Identifier":he(n,e.name);return;case "MemberExpression":{let s=e;B(s.object,n,t),s.computed&&B(s.property,n,t);return}case "Property":{let s=e;s.computed&&B(s.key,n,t),B(s.value,n,t);return}case "Program":case "BlockStatement":{let s=W(n);for(let r of e.body??[])B(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":je(e,n,t);return;case "FunctionDeclaration":{let s=e.id;s&&ye(n,t,s.name,s,"local",false),je(e,n,t);return}case "CatchClause":{let s=e,r=W(n);x(s.param,r,t,"local",true,false),B(s.body,r,t);return}case "SwitchStatement":{let s=e;B(s.discriminant,n,t);let r=W(n);for(let a of s.cases){B(a.test,r,t);for(let o of a.consequent??[])B(o,r,t);}return}case "ForStatement":{let s=e,r=W(n);B(s.init,r,t),B(s.test,r,t),B(s.update,r,t),B(s.body,r,t);return}case "ForOfStatement":case "ForInStatement":{let s=e;B(s.right,n,t);let r=W(n),a=s.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)x(o.id,r,t,"local",false,true);else B(a,r,t);B(s.body,r,t);return}case "VariableDeclaration":yn(e,n,t,false);return;case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&ye(n,t,r.name,r,"import",hn(r.name));}return}case "ExportNamedDeclaration":{let s=e;if(s.declaration){let r=s.declaration;if(r.type==="VariableDeclaration")yn(r,n,t,true);else if(r.type==="FunctionDeclaration"){let a=r.id;a&&ye(n,t,a.name,a,"local",true),je(r,n,t);}else B(r,n,t);}else for(let r of s.specifiers)he(n,r.local.name);return}case "TSAsExpression":B(e.expression,n,t);return;case "TSTypeAliasDeclaration":te(e.typeAnnotation,n);return;case "JsonExpression":Ue(e.body,n,t);return;case "JSXOpeningElement":{let s=e;Sn(s.name,n);for(let r of s.attributes??[])B(r,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":B(e.value,n,t);return;default:{let s=VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)B(i,n,t);else B(o,n,t);}return}}}function Sn(e,n,t){e&&(e.type==="JSXIdentifier"?he(n,e.name):e.type==="JSXMemberExpression"&&Sn(e.object,n));}function Ue(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ue(r,n,t);return}let s=e;if(AST_MARKER in s){try{B(fromJson(s),n,t);}catch{}return}for(let r of Object.keys(s))Ue(s[r],n,t);}function $e(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};B(e,W(void 0),t);let s=[];for(let r of t.all)r.used||r.exempt||(r.kind==="parameter"?n.parameters:n.locals)&&s.push(S.unusedName(r.node,r.name));return s}var ht=new Set(["const","import"]),se=e=>({binds:new Map,parent:e});function gt(e,n){for(let t=e;t;t=t.parent){let s=t.binds.get(n);if(s)return s}}function q(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?q(n.argument):q(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?q(n):[]);case "AssignmentPattern":return q(e.left);case "RestElement":return q(e.argument);default:return []}}var ge=(e,n,t)=>{for(let s of q(n))e.binds.set(s.name,t);};function Le(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of q(e))Le(a,n,t);return}let s=e.name,r=gt(n,s);r&&ht.has(r)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,s,r==="import"?"import":"const")));}function C(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let s=e;Le(s.left,n,t),C(s.right,n,t);return}case "UpdateExpression":{Le(e.argument,n,t);return}case "Program":case "BlockStatement":{let s=se(n);for(let r of e.body??[])C(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=se(n);for(let a of s.params??[])ge(r,a,"param");C(s.body,r,t);return}case "CatchClause":{let s=e,r=se(n);ge(r,s.param,"param"),C(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=se(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)ge(r,o.id,a.kind);else a&&C(a,r,t);C(s.right,n,t),C(s.test,r,t),C(s.update,r,t),C(s.body,r,t);return}case "VariableDeclaration":{let s=e;for(let r of s.declarations)C(r.init,n,t),ge(n,r.id,s.kind);return}case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&n.binds.set(r.name,"import");}return}case "ExportNamedDeclaration":{let s=e;s.declaration&&C(s.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":C(e.expression,n,t);return;default:{let s=VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)C(i,n,t);else C(o,n,t);}return}}}function Ve(e){let n={out:[],invalid:new WeakSet};return C(e,se(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var re=e=>({decls:new Map,parent:e});function Nt(e,n){for(let t=e;t;t=t.parent){let s=t.decls.get(n);if(s)return s}}function z(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?z(n.argument):z(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?z(n):[]);case "AssignmentPattern":return z(e.left);case "RestElement":return z(e.argument);default:return []}}var Se=(e,n)=>{for(let t of z(n))e.decls.set(t.name,t);};function v(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let s=Nt(n,e.name);s&&s!==e&&t.set(e,s);return}case "MemberExpression":{let s=e;v(s.object,n,t),s.computed&&v(s.property,n,t);return}case "Property":{let s=e;s.computed&&v(s.key,n,t),v(s.value,n,t);return}case "Program":case "BlockStatement":{let s=re(n);for(let r of e.body??[])v(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=e.id;r&&n.decls.set(r.name,r);let a=re(n);for(let o of s.params??[])Se(a,o);v(s.body,a,t);return}case "CatchClause":{let s=e,r=re(n);Se(r,s.param),v(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=re(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Se(r,o.id);else a&&v(a,r,t);v(s.right,n,t),v(s.test,r,t),v(s.update,r,t),v(s.body,r,t);return}case "VariableDeclaration":{for(let s of e.declarations)Se(n,s.id),v(s.init,n,t);return}case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&n.decls.set(r.name,r);}return}case "TSTypeAliasDeclaration":{let s=e.id;s&&n.decls.set(s.name,s);return}case "TSAsExpression":v(e.expression,n,t);return;default:{let s=VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)v(i,n,t);else v(o,n,t);}return}}}function Bt(e){let n=new WeakMap;return v(e,re(void 0),n),n}var xe=e=>e.typeAnnotation,Ge=e=>e.returnType,$=e=>e.type==="Identifier"?e.name:null,Nn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?$(n.id):null}return $(e)},oe=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function Bn(e){let n=s=>s&&s.type==="Literal"&&typeof s.value=="string"?s.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let s=[];for(let r of e[0].elements){let a=n(r);if(a===null)return null;s.push(a);}return s}let t=[];for(let s of e){let r=n(s);if(r===null)return null;t.push(r);}return t.length?t:null}function Ke(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=Ke(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Je(e){let n=e;if(n.regex||n.bigint)return s.unknown;let t=n.value;return t===null?s.null:t===void 0?s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:s.unknown}var Q=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):Je(e)},We=e=>e.type==="ArrowFunctionExpression",bn=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Be=e=>bn(e)?e.args[0]:e,ie=e=>bn(e)?e:s.promise(e);function ae(e){return e.t==="tuple"?true:e.t==="array"?ae(e.items):e.t==="union"?e.of.some(ae):false}function Ne(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Ne(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Ne(e.bound):false}var L=(e,n)=>{let t=e;for(let s=0;s<50&&t.t==="apply";s++){let r=expand1(t,n);if(r===t||r.t==="apply"&&r.name===t.name)break;t=r;}return t};function kn(e){let n=Ge(e);return n?{t:"fn",params:e.params.map((s$1,r)=>({name:$(s$1)??`arg${r}`,type:xe(s$1)??s.unknown})),returns:e.async?ie(n):n}:null}var G={then:{},else:{}},Rn=new Set(["string","number","boolean","undefined","function","object"]),wn={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function Pn(e,n){switch(n){case "string":return e.t==="string"||e.t==="literal"&&typeof e.value=="string";case "number":return e.t==="number"||e.t==="literal"&&typeof e.value=="number";case "boolean":return e.t==="boolean"||e.t==="literal"&&typeof e.value=="boolean";case "undefined":return e.t==="undefined";case "function":return e.t==="fn"||e.t==="overload";case "object":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="null";default:return false}}var Et=s.literal(true),vt=s.literal(false),V=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Et,vt]:[e];function En(e,n){let t=e,s=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof s.value=="string"?{name:t.argument.name,tag:s.value}:null}function At(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let s=V(e).filter(r=>subtype(r,n,t));return s.length?normalizeUnion(s):n}function Dt(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let s=V(e).filter(r=>!subtype(r,n,t));return s.length?normalizeUnion(s):null}function Ct(e,n){if(!Rn.has(n))return null;if(e.t==="unknown"||e.t==="any")return wn[n]??e;let t=V(e).filter(s=>Pn(s,n));return t.length?normalizeUnion(t):wn[n]??e}function Tt(e,n){if(!Rn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=V(e).filter(s=>!Pn(s,n));return t.length?normalizeUnion(t):null}function vn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=Q(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function An(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=Q(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Dn(e,n,t,s,r){let a=V(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return s?!!u&&subtype(t,u,r):!(u&&subtype(u,t,r))});return i.length&&i.length<a.length?normalizeUnion(i):null}function Cn(e,n,t){let s=V(e),r=o=>o.t==="object"&&(n in o.props||!!o.index),a=s.filter(o=>t?r(o):!r(o));return a.length&&a.length<s.length?normalizeUnion(a):null}function Rt(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function Pt(e,n,t){let s=V(e),r=s.filter(a=>!equals(a,n,t));return r.length&&r.length<s.length?normalizeUnion(r):null}var Ot=e=>e.t==="null"||e.t==="undefined",On=e=>Ot(e)||e.t==="literal"&&!e.value,It=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=V(e),t=n.filter(s=>!On(s));return t.length&&t.length<n.length?normalizeUnion(t):null},Ft=e=>{let n=V(e),t=n.filter(On);return t.length&&t.length<n.length?normalizeUnion(t):null},Tn=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,M=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Mt=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function ce(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let d=s.left,N=s.right;if(d.type==="Literal"&&typeof d.value=="string"&&N.type==="Identifier"){let g=N.name,w=A(n,g);if(!w)return G;let F=String(d.value);return M(g,Cn(w,F,true),Cn(w,F,false))}return G}if(!Mt(s.operator))return G;let r=s.operator==="!=="||s.operator==="!=",a=s.left,o=s.right,i=En(a,o)??En(o,a);if(i){let d=A(n,i.name);if(!d)return G;let N=Ct(d,i.tag),g=Tt(d,i.tag);return r?M(i.name,g,N):M(i.name,N,g)}let l=Tn(a),u=Tn(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let d=p.name,N=A(n,d);if(!N)return G;let w=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],F=V(N),an=F.filter(we=>w.includes(we.t)),ke=F.filter(we=>!w.includes(we.t)),on=an.length?normalizeUnion(an):null,ln=ke.length&&ke.length<F.length?normalizeUnion(ke):null;return r?M(d,ln,on):M(d,on,ln)}let m=vn(a,o)??vn(o,a);if(m){let d=A(n,m.name);if(!d)return G;let N=Rt(d,m.lit,t),g=Pt(d,m.lit,t);return r?M(m.name,g,N):M(m.name,N,g)}let f=An(a,o)??An(o,a);if(f){let d=A(n,f.name);if(!d)return G;let N=Dn(d,f.prop,f.lit,true,t),g=Dn(d,f.prop,f.lit,false,t);return r?M(f.name,g,N):M(f.name,N,g)}return G}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=ce(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=Ut(e,n,t);if(s)return s}if(e.type==="Identifier"){let s=e.name,r=A(n,s);if(r)return M(s,It(r),Ft(r))}return G}function jt(e,n){if(e.t==="fn")return e.guard??null;if(e.t==="overload"){for(let t of e.signatures)if(t.guard&&t.params.length===n)return t.guard}return null}function Ut(e,n,t){let s=e.callee;if(s.type!=="Identifier")return null;let r=A(n,s.name);if(!r)return null;let a=jt(r,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=A(n,i);return l?M(i,At(l,a.type,t),Dt(l,a.type,t)):null}var H=(e,n)=>Object.keys(n).length?I(e,n):e;function le(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":{let n=e.body;return n.length>0&&le(n[n.length-1])}case "IfStatement":{let n=e;return !!n.alternate&&le(n.consequent)&&le(n.alternate)}default:return false}}var es=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ns(e){let n=[];return e.maxDepth!==void 0&&n.push(Oe(e.maxDepth)),e.maxNodes!==void 0&&n.push(Ie(e.maxNodes)),e.maxArgs!==void 0&&n.push(Fe(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Te(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(Re(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(Pe(e.memberDepth)),n}function Vn(e,n,t={}){let s$1={...es(n.types),...n.schemes,...ss(e)},r=Ve(e),a={overlay:new WeakMap,sink:ee(),env:n,schemes:s$1,importNames:new Set,resolvedSchemes:new Set,invalidTargets:r.invalidTargets},o=t.profile?compileProfile(t.profile):void 0;o&&configureTypeLimits(o.typeLimits);try{let i,l=rs(e,a);try{i=y(e,l,a);}catch(m){if(m instanceof TypeEvalLimitError)a.sink.report(E("too-deep",e,m.message));else if(m instanceof UnionTooComplexError)a.sink.report(E("too-complex-union",e,m.message));else throw m;i=s.unknown;}let u=[];o&&u.push(...fe(o)),t.limits&&u.push(...ns(t.limits)),t.resultType&&u.push(Me(t.resultType,s$1));let p=[...a.sink.all,...r.diagnostics,...t.unused?$e(e,t.unused):[],...u.length?Ae(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p}}finally{o&&resetTypeLimits();}}function ts(e,n,t={}){let s$1=Vn(e,n,t),r={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let m of u.declarations){let f=$(m.id),d=s$1.overlay.get(m);f&&d&&(r[f]=d.type,p.push(f));}else if(u.type==="FunctionDeclaration"){let m=u.id?.name,f=s$1.overlay.get(u);m&&f&&(r[m]=f.type,p.push(m));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let m of i(p.declaration))a.set(m,m);else for(let m of p.specifiers)a.set(m.exported.name,m.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=s$1.overlay.get(u.declaration);o=p?p.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)r[p]&&(l[u]={type:r[p]});o!==void 0&&(l.default={type:o});}else for(let u in r)l[u]={type:r[u]};return {type:{t:"object",props:l},diagnostics:s$1.diagnostics}}var ss=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let s=t;s.id?.name&&s.typeAnnotation&&(n[s.id.name]={params:s.typeParameters??[],body:s.typeAnnotation});}}),n};function rs(e,n){let t=n.env.modules,s$1={};walk(e,{ImportDeclaration(r){let a=r,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)s$1[l.local.name]=s.unknown;return}for(let l of a.specifiers){let u=l.local.name;if(u in s$1){n.sink.report(S.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){s$1[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",m=discover(i,[p],n.schemes);m?s$1[u]=m.type:(n.sink.report(S.noSuchMember(l,i,p)),s$1[u]=s.unknown);}}});for(let r in s$1)n.importNames.add(r);return Object.keys(s$1).length?I(n.env.scope,s$1):n.env.scope}var h=(e,n,t,s)=>(e.overlay.set(n,{type:t,scope:s}),t);function y(e,n,t,s$1){switch(e.type){case xn:return e.schema;case "JSXElement":case "JSXFragment":return h(t,e,y(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return h(t,e,Je(e),n);case "Identifier":{let r=e.name,a=A(n,r);return a===void 0?r==="undefined"?h(t,e,s.undefined,n):(t.sink.report(S.unknownName(e,r)),h(t,e,s.unknown,n)):h(t,e,a,n)}case "MemberExpression":return h(t,e,is(e,n,t),n);case "CallExpression":return h(t,e,ps(e,n,t,s$1),n);case "ArrowFunctionExpression":return en(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),h(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),h(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),h(t,e,s.unknown,n);case "BlockStatement":return h(t,e,nn(e,n,t),n);case "ReturnStatement":{let r=e.argument;return h(t,e,r?y(r,n,t):s.unknown,n)}case "IfStatement":return U(e,n,t),t.overlay.get(e)?.type??s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return U(e,n,t),t.overlay.get(e)?.type??s.unknown;case "AssignmentExpression":{let r=e,a=r.left,o=y(a,n,t);if(a.type==="MemberExpression"){let i=t.overlay.get(a.object)?.type,l=i&&apparentType(i,t.schemes);l&&(l.t==="array"||l.t==="tuple")&&l.readonly&&t.sink.report(S.readonlyWrite(a,l));}if(r.operator==="="&&!t.invalidTargets.has(a)){let i=J(r.right,o,n,t);return h(t,e,i,n)}return h(t,e,y(r.right,n,t),n)}case "UpdateExpression":return y(e.argument,n,t),h(t,e,s.number,n);case "ExpressionStatement":return h(t,e,y(e.expression,n,t),n);case "VariableDeclaration":return be(e,n,t),h(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let r=e.id?.name,a=r?t.schemes[r]:void 0;return h(t,e,a?hs(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return h(t,e,Ds(e,n,t),n);case "LogicalExpression":{let r=e,a=y(r.left,n,t),o=y(r.right,n,t);return h(t,e,Cs(r.operator,a,o),n)}case "UnaryExpression":return h(t,e,Ps(e,n,t),n);case "ConditionalExpression":{let r=e;y(r.test,n,t);let a=ce(r.test,n,t.schemes),o=y(r.consequent,H(n,a.then),t),i=y(r.alternate,H(n,a.else),t);return h(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return h(t,e,Os(e,n,t),n);case "ArrayExpression":return h(t,e,zn(e,n,t),n);case "TemplateLiteral":{for(let r of e.expressions)y(r,n,t);return h(t,e,s.string,n)}case "AwaitExpression":{let r=e.argument,a=r?y(r,n,t):s.unknown;return h(t,e,Be(a),n)}case "Program":return tn(e.body,n,t,new Set(t.importNames)),h(t,e,s.unknown,n);case "JsonExpression":return h(t,e,ze(e.body,n,t,e),n);case "ChainExpression":return h(t,e,normalizeUnion([y(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let r=e,a=y(r.expression,n,t),o=me(r.typeAnnotation,n,t,e);return !subtype(a,o,t.schemes)&&!subtype(o,a,t.schemes)&&t.sink.report(S.castUnsound(e,a,o)),h(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),h(t,e,s.unknown,n)}}var as=new Set(["constructor","prototype","__proto__"]);function os(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function is(e,n,t){let s$1=y(e.object,n,t),r=os(e);if(r!==null&&as.has(r))return t.sink.report(S.forbiddenMember(e,r)),s.unknown;if(e.computed){let i=y(e.property,n,t),l=resolveTypeOp(s.index(s$1,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&Fn(e,s$1,i.value,t),s.unknown)}let a=e.property.name,o=discover(s$1,[a],t.schemes);return o?o.type:(Fn(e,s$1,a,t),s.unknown)}function Fn(e,n,t,s){let r=isScheme(n,s.schemes)?expand1(n,s.schemes):n;r.t==="object"||r.t==="array"||r.t==="tuple"||r.t==="union"?s.sink.report(S.noSuchMember(e,n,t)):r.t!=="any"&&r.t!=="unknown"&&s.sink.report(S.notObject(e,n));}function ls(e,n,t){if(!e||e.type!=="Identifier")return;let s=e.name;if(A(n,s)===void 0)return;let r=t.schemes[s];return r&&r.params.length===0?r.body:void 0}function us(e,n,t,s$1){let r=L(y(n[0],t,s$1),s$1.schemes),o=(r.t==="fn"?r:r.t==="overload"?r.signatures[0]:void 0)?.params[0]?.type,i=n.length>1?y(n[1],t,s$1):s.undefined;if(o){let l=typeDiff(i,o,s$1.schemes);l.length&&s$1.sink.report(S.propsMismatch(n[1]??e,o,formatTypeDiff(l)));}return h(s$1,e,s.boolean,t)}var xn="TSLiteSyntheticArg",cs=e=>({type:xn,schema:e});function Gn(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let s$1=[],r=null;for(let a of e){if(a.type!=="SpreadElement"){s$1.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)s$1.push(l);continue}let i=L(y(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)s$1.push(cs(l));else r={elem:i.t==="array"?i.items:s.unknown,node:a};}return {nodes:s$1,spread:r}}function ps(e,n,t,s$1){let r=e.arguments,a=Ke(e.callee);if(a){let m=t.env.accessors?.[a];if(m){let f=Bn(r);if(f){let d=discover(m,f,t.schemes);return d?d.type:(t.sink.report(S.noSuchMember(e,m,f.join("."))),s.unknown)}return r.forEach(d=>y(d,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let m=ls(r[0],n,t);for(let f=1;f<r.length;f++)y(r[f],n,t);return m??s.unknown}if(a&&t.env.matchers?.has(a))return us(e,r,n,t);let o=y(e.callee,n,t);if(o.t==="any")return r.forEach(m=>y(m,n,t)),s.any;if(o.t==="overload")return ds(e,o,n,t,s$1);if(o.t!=="fn")return r.forEach(m=>y(m,n,t)),t.sink.report(S.notCallable(e,o)),s.unknown;let i=Gn(r,n,t),l=i.nodes.map(m=>Kn(m,n,t)),u=qn(e),p=!u||_n(o,u.length);return p||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),Jn(e,o,i.nodes,l,n,t,i.spread,s$1,p?u:void 0)}function Kn(e,n,t){if(We(e))return s.any;if(e.type!=="CallExpression")return y(e,n,t);let s$1=ee(),r=y(e,n,{...t,sink:s$1});return s$1.hasErrors()?s.any:(s$1.all.forEach(a=>t.sink.report(a)),r)}function Jn(e,n,t,s$1,r,a,o=null,i,l){let u=d=>{if(!i)return d;let N=substitute(n.returns,d);if(N.t==="fn"&&i.t==="fn"){let g=d,w=Math.min(N.params.length,i.params.length);for(let F=0;F<w;F++)g=unify(N.params[F].type,i.params[F].type,g)??g;return unify(N.returns,i.returns,g)??g}return unify(N,i,d)??d},p=l?Ss(e,n,l,a):void 0,m=p??u(instantiateLoose(n,s$1).bindings);t.forEach((d,N)=>{if(We(d)){let g=widenType(substitute(n.params[N]?.type??s.any,m));s$1[N]=en(d,r,a,g);}else if(d.type==="CallExpression"&&s$1[N].t==="any")s$1[N]=y(d,r,a,substitute(n.params[N]?.type??s.unknown,m));else if(d.type==="Literal"){let g=n.params[N]?.type??s.unknown,w=g.t==="var"?g.bound?substitute(g.bound,m):g:substitute(g,m);Ne(w)&&(s$1[N]=h(a,d,Q(d),r));}else if(d.type==="ArrayExpression"){let g=substitute(n.params[N]?.type??s.unknown,m);ae(g)&&(s$1[N]=rn(d,g,r,a));}});let f=p??u(instantiateLoose(n,s$1).bindings);return p||ms(e,n,f,a),ks(e,n,s$1,f,a,t,o),t.forEach((d,N)=>{let g=n.params[N];d.type==="ObjectExpression"&&g&&!g.variadic&&sn(d,substitute(g.type,f),a);}),widenInferred(groundVars(substitute(n.returns,f),a.schemes))}var Mn=new WeakMap;function Wn(e){let n=Mn.get(e);if(n)return n;let t=new Map,s=new WeakSet;for(let r of e.params)T(r.type,t,s);return T(e.returns,t,s),Mn.set(e,t),t}function T(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":T(e.items,n,t);return;case "union":for(let s of e.of)T(s,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let s in e.props)T(e.props[s].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let s of e.params)T(s.type,n,t);T(e.returns,n,t);return;case "overload":for(let s of e.signatures){for(let r of s.params)T(r.type,n,t);T(s.returns,n,t);}return;case "apply":for(let s of e.args)T(s,n,t);return;case "keyof":T(e.of,n,t);return;case "index":T(e.obj,n,t),T(e.key,n,t);return;case "mapped":T(e.over,n,t),T(e.body,n,t);return;default:return}}function ms(e,n,t,s){let r=Wn(n);if(r.size!==0)for(let[a,o]of r){let i=t[a];if(!i)continue;let l=substitute(o,t);subtype(i,l,s.schemes)||s.sink.report(S.constraintViolation(e,a,i,l));}}function ds(e,n,t,s,r){let a=Gn(e.arguments,t,s),o=a.nodes,i=o.map(p=>Kn(p,t,s)),l=qn(e),u=l?n.signatures.filter(p=>_n(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((m,f)=>Math.max(m,f.typeParams?.length??0),0);return s.sink.report(S.wrongTypeArgumentCount(e,p,l.length)),jn(e,n.signatures,a,o,i,t,s,r,void 0)}return jn(e,u,a,o,i,t,s,r,l)}function jn(e,n,t,s$1,r,a,o,i,l){let u={t:"overload",signatures:n},p=f=>t.spread?Ns(f,s$1.length):Bs(f,s$1.length),m=u.signatures.find(f=>p(f)&&bs(f,r,o));if(!m){let f=u.signatures.filter(p);f.length===1?m=f[0]:u.signatures.length===1&&(m=u.signatures[0]);}return m?Jn(e,m,s$1,r,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,r)),s.unknown)}function fs(e,n,t,s$1){let r=A(n,e[0]);if(r===void 0)return t.sink.report(S.unknownName(s$1,e[0])),s.unknown;let a=e.slice(1),o=a.length?discover(r,a,t.schemes)?.type:r;return o?o.t==="literal"?s.literal(o.value):o:(t.sink.report(S.noSuchMember(s$1,r,a.join("."))),s.unknown)}function me(e,n,t,s){let r=a=>{if(Array.isArray(a)){let u=false,p=a.map(m=>{let f=r(m);return f!==m&&(u=true),f});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return fs(o.path,n,t,s);o.t==="apply"&&typeof o.name=="string"&&ys(o.name,n,t,s);let i=false,l={};for(let u of Object.keys(o)){let p=r(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return r(e)}function ys(e,n,t,s){if(t.resolvedSchemes.has(e))return;let r=t.schemes[e];if(!r)return;t.resolvedSchemes.add(e);let a=me(r.body,n,t,s);a!==r.body&&(t.schemes[e]={...r,body:a});}function hs(e,n,t,s,r){let a={...t,sink:ee(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=me(e,n,a,s);return a.sink.hasErrors()?e:r?o:groundVars(o,t.schemes)}var Ze=(e,n,t)=>{let s=xe(e);return s===void 0?s:me(s,n,t,e)},gs=(e,n,t)=>{let s=Ge(e);return s===void 0?s:me(s,n,t,e)},qn=e=>{let n=e.typeArguments;return n?.length?n:void 0},_n=(e,n)=>(e.typeParams?.length??0)===n;function Ss(e,n,t,s){let r=n.typeParams??[],a={};r.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Wn(n)){let u=o[i];if(!u)continue;let p=groundVars(substitute(l,o),s.schemes);subtype(u,p,s.schemes)||s.sink.report(S.constraintViolation(e,i,u,p));}return o}function Ns(e,n){let t=0,s=false;for(let r of e.params)r.variadic?s=true:r.optional||t++;return n>=t&&(s||n<e.params.length)}function Bs(e,n){let t=0;for(let s of e.params){if(s.variadic)return n>=t;s.optional||t++;}return n>=t&&n<=e.params.length}function bs(e,n,t){let{bindings:s}=instantiateLoose(e,n);for(let r=0;r<e.params.length;r++){let a=e.params[r];if(a.variadic)return true;if(r>=n.length){if(!a.optional)return false;continue}if(!subtype(n[r],substitute(a.type,s),t.schemes))return false}return true}function ks(e,n,t,s$1,r,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic)break;let m=substitute(p.type,s$1);if(u>=t.length){!p.optional&&!o&&r.sink.report(S.missingArgument(e,p.name,m));continue}subtype(t[u],m,r.schemes)||r.sink.report(S.notAssignable(i(u),t[u],m,r.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(m=>!m.optional&&!m.variadic).length;if(!(u>=p&&(l||u<n.params.length))){r.sink.report(S.spreadArgument(o.node));return}if(l){let m=substitute(l.type,s$1),f=m.t==="array"?m.items:s.unknown;subtype(o.elem,f,r.schemes)||r.sink.report(S.notAssignable(o.node,o.elem,f,r.schemes));}return}!l&&t.length>n.params.length&&r.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function J(e,n,t,s){let r=L(n,s.schemes);switch(e.type){case "Literal":{let o=Q(e);return subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,n,t)}case "ArrayExpression":{if(ae(r)){let o=rn(e,r,t,s);return subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,o,t)}if(r.t==="array"){for(let o of e.elements){if(!o)continue;let i=o;i.type==="SpreadElement"?J(i.argument,n,t,s):J(i,r.items,t,s);}return h(s,e,n,t)}break}case "ObjectExpression":{if(r.t==="object"){let o={};for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){y(u.argument,t,s);continue}let p=u,m=oe(p),f=m!==null?ownProp(r.props,m)?.type:void 0,d=f?J(p.value,f,t,s):y(p.value,t,s);m!==null&&(o[m]={type:d}),h(s,u,d,t);}let i={t:"object",props:o};return subtype(i,n,s.schemes)||s.sink.report(S.notAssignable(e,i,n,s.schemes)),h(s,e,n,t)}break}case "ArrowFunctionExpression":{if(r.t==="fn"){let o=en(e,t,s,r);return subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,n,t)}break}case "ConditionalExpression":{let o=e;return y(o.test,t,s),J(o.consequent,n,t,s),J(o.alternate,n,t,s),h(s,e,n,t)}}let a=y(e,t,s);return subtype(a,n,s.schemes)||s.sink.report(S.notAssignable(e,a,n,s.schemes)),h(s,e,a,t)}function en(e,n,t,s$1){let r=s$1&&s$1.t==="fn"?s$1:void 0,a={},o=e.params.map((f,d)=>{let N=f,g=$(N),w=Ze(N,n,t)??r?.params[d]?.type??s.unknown;return g?a[g]=w:N.type!=="Identifier"&&_(N,w,a,n,t),t.overlay.set(N,{type:w,scope:n}),{name:g??`arg${d}`,type:w}}),i=I(n,a),l=e.body,u=gs(e,n,t);if(l.type!=="BlockStatement"&&u){let f=e.async?Be(u):u;J(l,f,i,t);let d=e.async?ie(u):u;return h(t,e,{t:"fn",params:o,returns:d},n)}let p=l.type==="BlockStatement"?h(t,l,nn(l,i,t,new Set(Object.keys(a))),i):y(l,i,t),m=e.async?ie(p):p;if(u){let f=e.async?Be(u):u,d=e.async?p:m;subtype(d,f,t.schemes)||t.sink.report(S.notAssignable(l,m,u,t.schemes));let N=e.async?ie(u):u;return h(t,e,{t:"fn",params:o,returns:N},n)}return h(t,e,{t:"fn",params:o,returns:widenType(m)},n)}function Z(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?Z(n.argument):Z(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?Z(n.argument):Z(n):[]);case "AssignmentPattern":return Z(e.left);default:return []}}function Xn(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>Z(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Xn(e.declaration):[]}function nn(e,n,t,s$1=new Set){let{returns:r}=tn(e.body,n,t,s$1);return r.length?normalizeUnion(r):s.unknown}function tn(e,n,t,s=new Set){let r=n,a=[];for(let o of e){let i=o;for(let l of Xn(i))s.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):s.add(l.name);if(i.type==="VariableDeclaration")r=be(i,r,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")r=be(l.declaration,r,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=y(l.declaration,r,t),p=$(l.declaration.id);p&&(r=I(r,{[p]:u}));}else for(let u of l.specifiers)A(r,u.local.name)===void 0&&t.sink.report(S.unknownName(u.local,u.local.name));}else if(i.type==="ExportDefaultDeclaration")y(i.declaration,r,t);else if(i.type==="FunctionDeclaration"){let l=y(i,r,t),u=$(i.id);u&&(r=I(r,{[u]:l}));}else if(i.type==="IfStatement"){a.push(...U(i,r,t));let l=i;!l.alternate&&le(l.consequent)&&(r=H(r,ce(l.test,r,t.schemes).else));}else a.push(...U(i,r,t));}return {scope:r,returns:a}}function U(e,n,t){switch(e.type){case "ReturnStatement":{let s$1=e.argument,r=s$1?y(s$1,n,t):s.unknown;return h(t,e,r,n),[r]}case "IfStatement":{let s$1=e;y(s$1.test,n,t);let r=ce(s$1.test,n,t.schemes),a=U(s$1.consequent,H(n,r.then),t);return s$1.alternate&&a.push(...U(s$1.alternate,H(n,r.else),t)),h(t,e,s.unknown,n),a}case "BlockStatement":{let s=nn(e,n,t);return h(t,e,s,n),s.t==="unknown"?[]:[s]}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,r=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?r=be(s$1.init,r,t):y(s$1.init,r,t)),s$1.test&&y(s$1.test,r,t),s$1.update&&y(s$1.update,r,t);let a=U(s$1.body,r,t);return h(t,e,s.unknown,n),a}case "ForOfStatement":case "ForInStatement":{let s$1=e,r=y(s$1.right,n,t),a=e.type==="ForOfStatement"?r.t==="array"?r.items:s.unknown:s.string,o=Nn(s$1.left),i=o?I(n,{[o]:a}):n,l=U(s$1.body,i,t);return h(t,e,s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return h(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&y(s$1,n,t),h(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,r=U(s$1.block,n,t);if(s$1.handler){let a=s$1.handler.param,o=a?$(a):null,i=o?I(n,{[o]:s.unknown}):n;r.push(...U(s$1.handler.body,i,t));}return s$1.finalizer&&r.push(...U(s$1.finalizer,n,t)),h(t,e,s.unknown,n),r}case "SwitchStatement":{let s$1=e;y(s$1.discriminant,n,t);let r=n,a=[];for(let o of s$1.cases){o.test&&y(o.test,r,t);let i=tn(o.consequent,r,t);r=i.scope,a.push(...i.returns);}return h(t,e,s.unknown,n),a}default:return y(e,n,t),[]}}function ws(e,n,t){let s$1=discover(e,[n],t.schemes);return s$1?s$1.type:s.unknown}function Es(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function vs(e,n){if(e.t!=="object")return e;let t={};for(let s in e.props)n.includes(s)||(t[s]=e.props[s]);return s.object(t,e.index)}function As(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function _(e,n,t,s$1,r){switch(e.type){case "Identifier":{let a=Ze(e,s$1,r)??n;t[e.name]=a,r.overlay.set(e,{type:a,scope:s$1});return}case "AssignmentPattern":{let a=e,o=widenType(y(a.right,s$1,r)),{type:i}=withoutUndefined(n),l=i.t==="unknown"?o:normalizeUnion([i,o]);_(a.left,l,t,s$1,r);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){_(o.argument,vs(n,a),t,s$1,r);continue}let i=o,l=oe(i);l!=null&&a.push(l);let u=l!=null?ws(n,l,r):s.unknown;_(i.value,u,t,s$1,r);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?_(i.argument,As(n,o),t,s$1,r):_(i,Es(n,o),t,s$1,r);});return}}}function sn(e,n,t){let s=L(n,t.schemes),a=(s.t==="union"?s.of.map(o=>L(o,t.schemes)):[s]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=oe(i);if(l===null)continue;let u=a.filter(p=>l in p.props);if(!u.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&sn(i.value,u[0].props[l].type,t);}}function be(e,n,t){let s$1={};for(let r of e.declarations){let a=r.id,o=$(a),i=Ze(a,n,t);if(!r.init){t.sink.report(S.constNeedsInit(r)),o&&(s$1[o]=i??s.unknown);continue}let l=i??(r.init.type==="ArrowFunctionExpression"?kn(r.init):null),u=o&&l?I(n,{[o]:l}):n,p;i?(J(r.init,i,u,t),r.init.type==="ObjectExpression"&&sn(r.init,i,t),p=i):(p=y(r.init,u,t),e.kind!=="const"&&(p=widenLiteral(p))),h(t,r,p,n),o?s$1[o]=p:_(a,p,s$1,n,t);}return h(t,e,s.unknown,n),I(n,s$1)}function Ds(e,n,t){let s$1=y(e.left,n,t),r=y(e.right,n,t),a=e.operator;return a==="+"?subtype(s$1,s.string)||subtype(r,s.string)?s.string:s.number:Ts.has(a)?s.number:s.boolean}var Un={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},_e=e=>e.t==="null"||e.t==="undefined";function Cs(e,n,t){if(n.t==="any"||n.t==="unknown")return normalizeUnion([n,t]);let s$1=n.t==="union"?[...n.of]:n.t==="boolean"?[s.literal(true),s.literal(false)]:[n];if(e==="??")return normalizeUnion([...s$1.filter(a=>!_e(a)),t]);if(e==="||")return normalizeUnion([...s$1.filter(a=>!_e(a)&&!(a.t==="literal"&&!a.value)),t]);let r=s$1.flatMap(a=>_e(a)?[a]:a.t==="literal"?a.value?[]:[a]:Un[a.t]?[Un[a.t]]:[]);return normalizeUnion([...r,t])}var Ts=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),Rs=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function Ps(e,n,t){let s$1=y(e.argument,n,t);switch(e.operator){case "!":return s$1.t==="literal"?{t:"literal",value:!s$1.value,fresh:true}:s.boolean;case "-":return s$1.t==="literal"&&typeof s$1.value=="number"?{t:"literal",value:-s$1.value,fresh:true}:s.number;case "+":case "~":return s.number;case "typeof":return Rs;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function Os(e,n,t){let s={},r,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=L(y(p.argument,n,t),t.schemes);if(g.t==="object"){for(let w in g.props)s[w]=g.props[w];g.index&&(r={key:g.index.key,type:g.index.value});}continue}let m=p,f=y(m.value,n,t),d=widen(f);if(h(t,p,f,n),m.computed){let g=L(y(m.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(s[g.value]={type:d},a.push(d)):g.t==="literal"&&typeof g.value=="number"?(s[String(g.value)]={type:d},a.push(d),o.push(d)):g.t==="string"?(i=true,a.push(d)):g.t==="number"&&(l=true,a.push(d),o.push(d));continue}let N=oe(m);N!==null&&(s[N]={type:d},a.push(d),/^\d+$/.test(N)&&o.push(d));}return i?r={key:"string",type:normalizeUnion(a)}:l&&(r={key:"number",type:normalizeUnion(o)}),r?{t:"object",props:s,index:{key:r.key,value:r.type}}:{t:"object",props:s}}function zn(e,n,t){let s$1=[];for(let r of e.elements){if(!r)continue;let a=r;if(a.type==="SpreadElement"){let o=L(y(a.argument,n,t),t.schemes);o.t==="array"?s$1.push(o.items):o.t==="tuple"&&s$1.push(...o.elements);continue}s$1.push(widen(y(a,n,t)));}return s.array(s$1.length?normalizeUnion(s$1):s.unknown)}function rn(e,n,t,s$1){let r=L(n,s$1.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?rn(l,u,t,s$1):widen(y(l,t,s$1));if(r.t==="tuple"&&o&&a.length===r.elements.length){let l=a.map((u,p)=>i(u,r.elements[p]));return h(s$1,e,{t:"tuple",elements:l},t)}if(r.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){y(p.argument,t,s$1);continue}l.push(i(p,r.items));}return h(s$1,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return zn(e,t,s$1)}function ze(e,n,t,s$1){if(e===null)return s.null;switch(typeof e){case "string":return s.string;case "number":return s.number;case "boolean":return s.boolean;case "object":break;default:return s.unknown}if(Array.isArray(e)){let o=e.map(i=>ze(i,n,t,s$1));return s.array(o.length?normalizeUnion(o):s.unknown)}let r=e;if(AST_MARKER in r){let o;try{o=fromJson(r);}catch{return t.sink.report(S.unsupported(s$1,`'#ast: ${String(r[AST_MARKER])}'`)),s.unknown}return y(o,n,t)}let a={};for(let o of Object.keys(r))a[o]={type:ze(r[o],n,t,s$1)};return {t:"object",props:a}}var Is=(e,n)=>({...e,typeAnnotation:n}),Fs=(e,n)=>({...e,returnType:n}),Ms=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Us(e,n){return e.get(n)?.type}function $s(e,n){return e.get(n)?.scope}function Ls(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function Vs(e,n){let t=e.get(n)?.scope;return t?[...Ee(t)].map(([s,r])=>({key:s,type:r,optional:false})):[]}function xs(e,n){return e.filter(t=>t.node===n)}export{mn as FUNCTION_KINDS,Is as annotate,Fs as annotateReturn,Ms as asExpression,Ce as calleeAllowlist,De as capabilityNodes,Vn as check,I as childScope,Bt as collectBindings,Ve as collectMutations,$e as collectUnused,et as createEnv,ee as createSink,S as diag,xs as diagnosticsAt,ts as extractModuleType,pt as fromCapability,Ae as guard,fe as guardsFromCompiled,A as lookup,E as makeDiagnostic,Fe as maxArgs,Re as maxCallNesting,Oe as maxDepth,Te as maxFunctionNesting,de as maxNestingOf,Ie as maxNodes,Ls as memberCompletions,Pe as memberDepth,nt as resolveNamed,tt as resolveScheme,Me as resultType,un as rootScope,$s as scopeAt,Vs as scopeCompletions,Us as typeAt,Ee as visibleNames};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/checker",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "TSLite type system — a structural type checker over the AST (the 'TypeScript of TSLite')",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -39,13 +39,13 @@
39
39
  "access": "public"
40
40
  },
41
41
  "dependencies": {
42
- "@tslite/core": "0.2.0",
43
- "@tslite/capability": "0.2.0",
44
42
  "@tslite/codec": "0.2.0",
45
- "@tslite/type-core": "0.2.0"
43
+ "@tslite/capability": "0.2.0",
44
+ "@tslite/core": "0.2.0",
45
+ "@tslite/type-core": "0.3.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@tslite/parser": "0.2.0"
48
+ "@tslite/parser": "0.3.0"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "tsup",