@tslite/checker 0.4.1 → 0.4.2

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 pn=(e={})=>core.rootScope(e),I=(e,n)=>core.childScope(e,n),T=(e,n)=>core.lookup(e,n),Ae=e=>core.visibleNames(e),pt=(e={},n={},t={},s={},r=new Set,a=new Set,o={})=>({scope:pn(e),types:n,schemes:t,accessors:s,asserters:r,matchers:a,modules:o}),dt=(e,n)=>e.types[n],ft=(e,n)=>e.schemes[n];var dn={"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:dn[e],severity:"error",node:n,message:t}),E=(e,n,t,s="error")=>({code:e,kind:dn[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 te(){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(s=>s(e,t))}function H(e,n){let t=s=>{n(s);for(let r of core.childrenOf(s))t(r);};t(e);}var Bt=e=>Array.isArray(e)?e:[e],mn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Te(e,n="error"){return t=>{let s=[];return H(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 yn(e,n="error"){let t=e.typeTier;return s=>{if(t==="author")return [];let r=[];return H(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 hn(e,n="error"){return t=>{if(!e.typeStrict)return [];let s=[];return H(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 Re(e,n="error"){let t=new Set(e);return s=>{let r=[];return H(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 me(e,n,t={}){let s=new Set(Bt(e)),r=t.severity??"error",a=[...s].join("/");return o=>{let i=[],l=(u,c)=>{let p=s.has(u.type),m=p?c+1:c;p&&m>n&&i.push(E("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,r));for(let f of core.childrenOf(u))l(f,m);};return l(o,0),i}}var Me=(e=3,n="error")=>me(mn,e,{hint:"use a pipe instead of nesting functions",severity:n}),Pe=(e,n="error")=>me("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),Fe=(e,n="error")=>me("MemberExpression",e,{severity:n});function Ie(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 Oe(e,n="error"){return t=>{let s=0;return H(t,()=>{s++;}),s>e?[E("too-large",t,`Expression has ${s} nodes (max ${e}).`,n)]:[]}}function je(e,n="error"){return t=>{let s=[];return H(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 Ue(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 ye(e){let n=[Te(e),yn(e),hn(e)];return e.hostAllow!=="*"&&n.push(Re([...e.hostAllow])),n}function kt(e){return ye(capability.compileProfile(e))}var q=e=>({bindings:new Map,parent:e}),Sn=e=>e.charCodeAt(0)===95;function he(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 re(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)re(s,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let s=t.path[0];typeof s=="string"&&ge(n,s);return}for(let s of Object.keys(t))re(t[s],n);}function Nn(e,n){let t=e;re(t.typeAnnotation,n),re(t.returnType,n);}function ge(e,n){for(let t=e;t;t=t.parent){let s=t.bindings.get(n);if(s){s.used=true;return}}}function G(e,n,t,s,r,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Nn(e,n),he(n,t,o,e,s,r||a&&Sn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,c)=>{let p=l&&c<o.length-1;if(u.type==="RestElement")G(u.argument,n,t,s,r,false);else {let m=u;m.computed&&B(m.key,n,t),G(m.value,n,t,s,r||p,!m.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;G(i.type==="RestElement"?i.argument:i,n,t,s,r,true);}return}case "AssignmentPattern":G(e.left,n,t,s,r,a);return;case "RestElement":G(e.argument,n,t,s,r,true);return;default:return}}function se(e,n,t){if(e)switch(e.type){case "AssignmentPattern":B(e.right,n,t),se(e.left,n,t);return;case "ObjectPattern":for(let s of e.properties)se(s.type==="RestElement"?s.argument:s.value,n,t);return;case "ArrayPattern":for(let s of e.elements)s&&se(s,n,t);return;case "RestElement":se(e.argument,n,t);return;default:return}}function gn(e,n,t,s){for(let r of e.declarations)G(r.id,n,t,"local",s,false),B(r.init,n,t);}function $e(e,n,t){let s=e,r=q(n),a=s.params??[];for(let o of a)G(o,r,t,"parameter",false,true);for(let o of a)se(o,r,t);B(s.body,r,t);}function B(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Nn(e,n),e.type){case "Identifier":ge(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=q(n);for(let r of e.body??[])B(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":$e(e,n,t);return;case "FunctionDeclaration":{let s=e.id;s&&he(n,t,s.name,s,"local",false),$e(e,n,t);return}case "CatchClause":{let s=e,r=q(n);G(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=q(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=q(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=q(n),a=s.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)G(o.id,r,t,"local",false,true);else B(a,r,t);B(s.body,r,t);return}case "VariableDeclaration":gn(e,n,t,false);return;case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&he(n,t,r.name,r,"import",Sn(r.name));}return}case "ExportNamedDeclaration":{let s=e;if(s.declaration){let r=s.declaration;if(r.type==="VariableDeclaration")gn(r,n,t,true);else if(r.type==="FunctionDeclaration"){let a=r.id;a&&he(n,t,a.name,a,"local",true),$e(r,n,t);}else B(r,n,t);}else for(let r of s.specifiers)ge(n,r.local.name);return}case "TSAsExpression":B(e.expression,n,t);return;case "TSTypeAliasDeclaration":re(e.typeAnnotation,n);return;case "JsonExpression":Le(e.body,n,t);return;case "JSXOpeningElement":{let s=e;Bn(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 Bn(e,n,t){e&&(e.type==="JSXIdentifier"?ge(n,e.name):e.type==="JSXMemberExpression"&&Bn(e.object,n));}function Le(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Le(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))Le(s[r],n,t);}function Ve(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};B(e,q(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 Dt=new Set(["const","import"]),ae=e=>({binds:new Map,parent:e});function Ct(e,n){for(let t=e;t;t=t.parent){let s=t.binds.get(n);if(s)return s}}function _(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?_(n.argument):_(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?_(n):[]);case "AssignmentPattern":return _(e.left);case "RestElement":return _(e.argument);default:return []}}var Se=(e,n,t)=>{for(let s of _(n))e.binds.set(s.name,t);};function xe(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of _(e))xe(a,n,t);return}let s=e.name,r=Ct(n,s);r&&Dt.has(r)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,s,r==="import"?"import":"const")));}function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let s=e;xe(s.left,n,t),M(s.right,n,t);return}case "UpdateExpression":{xe(e.argument,n,t);return}case "Program":case "BlockStatement":{let s=ae(n);for(let r of e.body??[])M(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=ae(n);for(let a of s.params??[])Se(r,a,"param");M(s.body,r,t);return}case "CatchClause":{let s=e,r=ae(n);Se(r,s.param,"param"),M(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=ae(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Se(r,o.id,a.kind);else a&&M(a,r,t);M(s.right,n,t),M(s.test,r,t),M(s.update,r,t),M(s.body,r,t);return}case "VariableDeclaration":{let s=e;for(let r of s.declarations)M(r.init,n,t),Se(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&&M(s.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":M(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)M(i,n,t);else M(o,n,t);}return}}}function Ge(e){let n={out:[],invalid:new WeakSet};return M(e,ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var oe=e=>({decls:new Map,parent:e});function Rt(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 Ne=(e,n)=>{for(let t of Z(n))e.decls.set(t.name,t);};function D(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let s=Rt(n,e.name);s&&s!==e&&t.set(e,s);return}case "MemberExpression":{let s=e;D(s.object,n,t),s.computed&&D(s.property,n,t);return}case "Property":{let s=e;s.computed&&D(s.key,n,t),D(s.value,n,t);return}case "Program":case "BlockStatement":{let s=oe(n);for(let r of e.body??[])D(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=oe(n);for(let o of s.params??[])Ne(a,o);D(s.body,a,t);return}case "CatchClause":{let s=e,r=oe(n);Ne(r,s.param),D(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=oe(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ne(r,o.id);else a&&D(a,r,t);D(s.right,n,t),D(s.test,r,t),D(s.update,r,t),D(s.body,r,t);return}case "VariableDeclaration":{for(let s of e.declarations)Ne(n,s.id),D(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":D(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)D(i,n,t);else D(o,n,t);}return}}}function Mt(e){let n=new WeakMap;return D(e,oe(void 0),n),n}var Ke=e=>e.typeAnnotation,We=e=>e.returnType,L=e=>e.type==="Identifier"?e.name:null,bn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?L(n.id):null}return L(e)},le=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function kn(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 ze(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=ze(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 X=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)},qe=e=>e.type==="ArrowFunctionExpression",wn=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,be=e=>wn(e)?e.args[0]:e,ue=e=>wn(e)?e:typeCore.s.promise(e);function ie(e){return e.t==="tuple"?true:e.t==="array"?ie(e.items):e.t==="union"?e.of.some(ie):false}function Be(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Be(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Be(e.bound):false}var V=(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 vn(e){let n=We(e);return n?{t:"fn",params:e.params.map((s,r)=>({name:L(s)??`arg${r}`,type:Ke(s)??typeCore.s.unknown})),returns:e.async?ue(n):n}:null}var K={then:{},else:{}},Pn=new Set(["string","number","boolean","undefined","function","object"]),En={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function Fn(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 Ot=typeCore.s.literal(true),jt=typeCore.s.literal(false),x=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Ot,jt]:[e];function An(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 Ut(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let s=x(e).filter(r=>typeCore.subtype(r,n,t));return s.length?typeCore.normalizeUnion(s):n}function $t(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let s=x(e).filter(r=>!typeCore.subtype(r,n,t));return s.length?typeCore.normalizeUnion(s):null}function Lt(e,n){if(!Pn.has(n))return null;if(e.t==="unknown"||e.t==="any")return En[n]??e;let t=x(e).filter(s=>Fn(s,n));return t.length?typeCore.normalizeUnion(t):En[n]??e}function Vt(e,n){if(!Pn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=x(e).filter(s=>!Fn(s,n));return t.length?typeCore.normalizeUnion(t):null}function Dn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function Cn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Tn(e,n,t,s,r){let a=x(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 Rn(e,n,t){let s=x(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 xt(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function Gt(e,n,t){let s=x(e),r=s.filter(a=>!typeCore.equals(a,n,t));return r.length&&r.length<s.length?typeCore.normalizeUnion(r):null}var Kt=e=>e.t==="null"||e.t==="undefined",In=e=>Kt(e)||e.t==="literal"&&!e.value,Wt=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=x(e),t=n.filter(s=>!In(s));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},zt=e=>{let n=x(e),t=n.filter(In);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Mn=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,j=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Jt=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function pe(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let f=s.left,N=s.right;if(f.type==="Literal"&&typeof f.value=="string"&&N.type==="Identifier"){let g=N.name,v=T(n,g);if(!v)return K;let w=String(f.value);return j(g,Rn(v,w,true),Rn(v,w,false))}return K}if(!Jt(s.operator))return K;let r=s.operator==="!=="||s.operator==="!=",a=s.left,o=s.right,i=An(a,o)??An(o,a);if(i){let f=T(n,i.name);if(!f)return K;let N=Lt(f,i.tag),g=Vt(f,i.tag);return r?j(i.name,g,N):j(i.name,N,g)}let l=Mn(a),u=Mn(o),c=l?o:u?a:null;if((l||u)&&c?.type==="Identifier"){let f=c.name,N=T(n,f);if(!N)return K;let v=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],w=x(N),ln=w.filter(Ee=>v.includes(Ee.t)),ve=w.filter(Ee=>!v.includes(Ee.t)),un=ln.length?typeCore.normalizeUnion(ln):null,cn=ve.length&&ve.length<w.length?typeCore.normalizeUnion(ve):null;return r?j(f,cn,un):j(f,un,cn)}let p=Dn(a,o)??Dn(o,a);if(p){let f=T(n,p.name);if(!f)return K;let N=xt(f,p.lit,t),g=Gt(f,p.lit,t);return r?j(p.name,g,N):j(p.name,N,g)}let m=Cn(a,o)??Cn(o,a);if(m){let f=T(n,m.name);if(!f)return K;let N=Tn(f,m.prop,m.lit,true,t),g=Tn(f,m.prop,m.lit,false,t);return r?j(m.name,g,N):j(m.name,N,g)}return K}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=pe(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=_t(e,n,t);if(s)return s}if(e.type==="Identifier"){let s=e.name,r=T(n,s);if(r)return j(s,Wt(r),zt(r))}return K}function qt(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 _t(e,n,t){let s=e.callee;if(s.type!=="Identifier")return null;let r=T(n,s.name);if(!r)return null;let a=qt(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=T(n,i);return l?j(i,Ut(l,a.type,t),$t(l,a.type,t)):null}var W=(e,n)=>Object.keys(n).length?I(e,n):e;function O(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":{let n=e.body;return n.length>0&&O(n[n.length-1])}case "IfStatement":{let n=e;return !!n.alternate&&O(n.consequent)&&O(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&O(n.finalizer))return true;let t=!n.handler||O(n.handler.body);return O(n.block)&&t}default:return false}}var cs=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ps(e){let n=[];return e.maxDepth!==void 0&&n.push(Ie(e.maxDepth)),e.maxNodes!==void 0&&n.push(Oe(e.maxNodes)),e.maxArgs!==void 0&&n.push(je(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Me(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(Pe(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(Fe(e.memberDepth)),n}function ds(e,n){let t=e.typeRefs;return t?.length?t.filter(s=>!(s.name in n)).map(s=>E("unknown-name",{type:"Identifier",name:s.name,loc:s.loc},`Cannot find name '${s.name}'.`)):[]}function zn(e,n,t={}){let s={...cs(n.types),...n.schemes,...ms(e)},r=Ge(e),a={overlay:new WeakMap,sink:te(),env:n,schemes:s,importNames:new Set,resolvedSchemes:new Set,invalidTargets:r.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?capability.compileProfile(t.profile):void 0;o&&typeCore.configureTypeLimits(o.typeLimits);try{let i,l=ys(e,a);try{i=y(e,l,a);}catch(p){if(p instanceof typeCore.TypeEvalLimitError)a.sink.report(E("too-deep",e,p.message));else if(p instanceof typeCore.UnionTooComplexError)a.sink.report(E("too-complex-union",e,p.message));else throw p;i=typeCore.s.unknown;}let u=[];o&&u.push(...ye(o)),t.limits&&u.push(...ps(t.limits)),t.resultType&&u.push(Ue(t.resultType,s));let c=[...a.sink.all,...r.diagnostics,...ds(e,s),...t.unused?Ve(e,t.unused):[],...u.length?Ce(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:c,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function fs(e,n,t={}){let s=zn(e,n,t),r={},a=new Map,o,i=u=>{let c=[];if(u.type==="VariableDeclaration")for(let p of u.declarations){let m=L(p.id),f=s.overlay.get(p);m&&f&&(r[m]=f.type,c.push(m));}else if(u.type==="FunctionDeclaration"){let p=u.id?.name,m=s.overlay.get(u);p&&m&&(r[p]=m.type,c.push(p));}return c};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let c=u;if(c.declaration)for(let p of i(c.declaration))a.set(p,p);else for(let p of c.specifiers)a.set(p.exported.name,p.local.name);}else if(u.type==="ExportDefaultDeclaration"){let c=s.overlay.get(u.declaration);o=c?c.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,c]of a)r[c]&&(l[u]={type:r[c]});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 ms=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 ys(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 c=l.type==="ImportSpecifier"?l.imported.name:"default",p=typeCore.discover(i,[c],n.schemes);p?s[u]=p.type:(n.sink.report(S.noSuchMember(l,i,c)),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 Jn: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=T(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,Ss(e,n,t),n);case "CallExpression":return h(t,e,ks(e,n,t,s),n);case "ArrowFunctionExpression":return tn(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,et(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 $(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 $(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 c=t.overlay.get(a.object)?.type,p=c&&typeCore.apparentType(c,t.schemes);p&&(p.t==="array"||p.t==="tuple")&&p.readonly&&t.sink.report(S.readonlyWrite(a,p));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(r.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let p=y(r.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(p)),h(t,e,p,n)}if(u&&i!==null){let p=y(r.right,n,t);return typeCore.subtype(p,u,t.schemes)||t.sink.report(S.notAssignable(r.right,p,u,t.schemes)),t.assignFlow.set(e,nt(u,p,t.schemes)),h(t,e,p,n)}let c=J(r.right,o,n,t);return h(t,e,c,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 we(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?Ds(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return h(t,e,Ks(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,Ws(r.operator,a,o),n)}case "UnaryExpression":return h(t,e,qs(e,n,t),n);case "ConditionalExpression":{let r=e;y(r.test,n,t);let a=pe(r.test,n,t.schemes),o=y(r.consequent,W(n,a.then),t),i=y(r.alternate,W(n,a.else),t);return h(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return h(t,e,_s(e,n,t),n);case "ArrayExpression":return h(t,e,at(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":{let r=ke(e.body,n,t,new Set(t.importNames)).scope;return h(t,e,typeCore.s.unknown,r)}case "JsonExpression":return h(t,e,Ye(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=fe(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 hs=new Set(["constructor","prototype","__proto__"]);function gs(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 Ss(e,n,t){let s=y(e.object,n,t),r=gs(e);if(r!==null&&hs.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"&&jn(e,s,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(s,[a],t.schemes);return o?o.type:(jn(e,s,a,t),typeCore.s.unknown)}function jn(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 Ns(e,n,t){if(!e||e.type!=="Identifier")return;let s=e.name;if(T(n,s)===void 0)return;let r=t.schemes[s];return r&&r.params.length===0?r.body:void 0}function Bs(e,n,t,s){let r=V(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 Jn="TSLiteSyntheticArg",bs=e=>({type:Jn,schema:e});function qn(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=V(y(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)s.push(bs(l));else r={elem:i.t==="array"?i.items:typeCore.s.unknown,node:a};}return {nodes:s,spread:r}}function ks(e,n,t,s){let r=e.arguments,a=ze(e.callee);if(a){let p=t.env.accessors?.[a];if(p){let m=kn(r);if(m){let f=typeCore.discover(p,m,t.schemes);return f?f.type:(t.sink.report(S.noSuchMember(e,p,m.join("."))),typeCore.s.unknown)}return r.forEach(f=>y(f,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let p=Ns(r[0],n,t);for(let m=1;m<r.length;m++)y(r[m],n,t);return p??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return Bs(e,r,n,t);let o=y(e.callee,n,t);if(o.t==="any")return r.forEach(p=>y(p,n,t)),typeCore.s.any;if(o.t==="overload")return vs(e,o,n,t,s);if(o.t!=="fn")return r.forEach(p=>y(p,n,t)),t.sink.report(S.notCallable(e,o)),typeCore.s.unknown;let i=qn(r,n,t),l=i.nodes.map(p=>_n(p,n,t)),u=Yn(e),c=!u||Hn(o,u.length);return c||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),Xn(e,o,i.nodes,l,n,t,i.spread,s,c?u:void 0)}function _n(e,n,t){if(qe(e))return typeCore.s.any;if(e.type!=="CallExpression")return y(e,n,t);let s=te(),r=y(e,n,{...t,sink:s});return s.hasErrors()?typeCore.s.any:(s.all.forEach(a=>t.sink.report(a)),r)}function Xn(e,n,t,s,r,a,o=null,i,l){let u=f=>{if(!i)return f;let N=typeCore.substitute(n.returns,f);if(N.t==="fn"&&i.t==="fn"){let g=f,v=Math.min(N.params.length,i.params.length);for(let w=0;w<v;w++)g=typeCore.unify(N.params[w].type,i.params[w].type,g)??g;return typeCore.unify(N.returns,i.returns,g)??g}return typeCore.unify(N,i,f)??f},c=l?Ts(e,n,l,a):void 0,p=c??u(typeCore.instantiateLoose(n,s).bindings);t.forEach((f,N)=>{if(qe(f)){let g=typeCore.widenType(typeCore.substitute(n.params[N]?.type??typeCore.s.any,p));s[N]=tn(f,r,a,g);}else if(f.type==="CallExpression"&&s[N].t==="any")s[N]=y(f,r,a,typeCore.substitute(n.params[N]?.type??typeCore.s.unknown,p));else if(f.type==="Literal"){let g=n.params[N]?.type??typeCore.s.unknown,v=g.t==="var"?g.bound?typeCore.substitute(g.bound,p):g:typeCore.substitute(g,p);Be(v)&&(s[N]=h(a,f,X(f),r));}else if(f.type==="ArrayExpression"){let g=typeCore.substitute(n.params[N]?.type??typeCore.s.unknown,p);ie(g)&&(s[N]=rn(f,g,r,a));}});let m=c??u(typeCore.instantiateLoose(n,s).bindings);return c||ws(e,n,m,a),Fs(e,n,s,m,a,t,o),t.forEach((f,N)=>{let g=n.params[N];f.type==="ObjectExpression"&&g&&!g.variadic&&sn(f,typeCore.substitute(g.type,m),a);}),typeCore.widenInferred(typeCore.groundVars(typeCore.substitute(n.returns,m),a.schemes))}var Un=new WeakMap;function Qn(e){let n=Un.get(e);if(n)return n;let t=new Map,s=new WeakSet;for(let r of e.params)P(r.type,t,s);return P(e.returns,t,s),Un.set(e,t),t}function P(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":P(e.items,n,t);return;case "union":for(let s of e.of)P(s,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let s in e.props)P(e.props[s].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let s of e.params)P(s.type,n,t);P(e.returns,n,t);return;case "overload":for(let s of e.signatures){for(let r of s.params)P(r.type,n,t);P(s.returns,n,t);}return;case "apply":for(let s of e.args)P(s,n,t);return;case "keyof":P(e.of,n,t);return;case "index":P(e.obj,n,t),P(e.key,n,t);return;case "mapped":P(e.over,n,t),P(e.body,n,t);return;default:return}}function ws(e,n,t,s){let r=Qn(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 vs(e,n,t,s,r){let a=qn(e.arguments,t,s),o=a.nodes,i=o.map(c=>_n(c,t,s)),l=Yn(e),u=l?n.signatures.filter(c=>Hn(c,l.length)):n.signatures;if(l&&!u.length){let c=n.signatures.reduce((p,m)=>Math.max(p,m.typeParams?.length??0),0);return s.sink.report(S.wrongTypeArgumentCount(e,c,l.length)),$n(e,n.signatures,a,o,i,t,s,r,void 0)}return $n(e,u,a,o,i,t,s,r,l)}function $n(e,n,t,s,r,a,o,i,l){let u={t:"overload",signatures:n},c=m=>t.spread?Rs(m,s.length):Ms(m,s.length),p=u.signatures.find(m=>c(m)&&Ps(m,r,o));if(!p){let m=u.signatures.filter(c);m.length===1?p=m[0]:u.signatures.length===1&&(p=u.signatures[0]);}return p?Xn(e,p,s,r,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,r)),typeCore.s.unknown)}function Es(e,n,t,s){let r=T(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 fe(e,n,t,s){let r=a=>{if(Array.isArray(a)){let u=false,c=a.map(p=>{let m=r(p);return m!==p&&(u=true),m});return u?c:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Es(o.path,n,t,s);if(o.t==="apply"&&typeof o.name=="string"&&(As(o.name,n,t,s),!(o.name in t.schemes)))return typeCore.s.any;let i=false,l={};for(let u of Object.keys(o)){let c=r(o[u]);c!==o[u]&&(i=true),l[u]=c;}return i?l:o};return r(e)}function As(e,n,t,s){if(t.resolvedSchemes.has(e))return;let r=t.schemes[e];if(!r)return;t.resolvedSchemes.add(e);let a=fe(r.body,n,t,s);a!==r.body&&(t.schemes[e]={...r,body:a});}function Ds(e,n,t,s,r){let a={...t,sink:te(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=fe(e,n,a,s);return a.sink.hasErrors()?e:r?o:typeCore.groundVars(o,t.schemes)}var nn=(e,n,t)=>{let s=Ke(e);return s===void 0?s:fe(s,n,t,e)},Cs=(e,n,t)=>{let s=We(e);return s===void 0?s:fe(s,n,t,e)},Yn=e=>{let n=e.typeArguments;return n?.length?n:void 0},Hn=(e,n)=>(e.typeParams?.length??0)===n;function Ts(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 Qn(n)){let u=o[i];if(!u)continue;let c=typeCore.groundVars(typeCore.substitute(l,o),s.schemes);typeCore.subtype(u,c,s.schemes)||s.sink.report(S.constraintViolation(e,i,u,c));}return o}function Rs(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 Ms(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 Ps(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 Fs(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 c=n.params[u];if(c.variadic)break;let p=typeCore.substitute(c.type,s);if(u>=t.length){!c.optional&&!o&&r.sink.report(S.missingArgument(e,c.name,p));continue}typeCore.subtype(t[u],p,r.schemes)||r.sink.report(S.notAssignable(i(u),t[u],p,r.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,c=n.params.filter(p=>!p.optional&&!p.variadic).length;if(!(u>=c&&(l||u<n.params.length))){r.sink.report(S.spreadArgument(o.node));return}if(l){let p=typeCore.substitute(l.type,s),m=p.t==="array"?p.items:typeCore.s.unknown;typeCore.subtype(o.elem,m,r.schemes)||r.sink.report(S.notAssignable(o.node,o.elem,m,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=V(n,s.schemes);switch(e.type){case "Literal":{let o=X(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(ie(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 c=u,p=le(c),m=p!==null?typeCore.ownProp(r.props,p)?.type:void 0,f=m?J(c.value,m,t,s):y(c.value,t,s);p!==null&&(o[p]={type:f}),h(s,u,f,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=tn(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 tn(e,n,t,s){let r=s&&s.t==="fn"?s:void 0,a={},o=new Map,i=e.params.map((f,N)=>{let g=f,v=L(g),w=nn(g,n,t)??r?.params[N]?.type??typeCore.s.unknown;return v?(a[v]=w,(w.t==="union"||w.t==="boolean")&&o.set(v,w)):g.type!=="Identifier"&&Q(g,w,a,n,t),t.overlay.set(g,{type:w,scope:n}),{name:v??`arg${N}`,type:w}}),l=I(n,a),u=e.body,c=Cs(e,n,t);if(u.type!=="BlockStatement"&&c){let f=e.async?be(c):c;J(u,f,l,t);let N=e.async?ue(c):c;return h(t,e,{t:"fn",params:i,returns:N},n)}let p=u.type==="BlockStatement"?h(t,u,et(u,l,t,new Set(Object.keys(a)),o),l):y(u,l,t),m=e.async?ue(p):p;if(c){let f=e.async?be(c):c,N=e.async?p:m;typeCore.subtype(N,f,t.schemes)||t.sink.report(S.notAssignable(u,m,c,t.schemes));let g=e.async?ue(c):c;return h(t,e,{t:"fn",params:i,returns:g},n)}return h(t,e,{t:"fn",params:i,returns:typeCore.widenType(m)},n)}function ne(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ne(n.argument):ne(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ne(n.argument):ne(n):[]);case "AssignmentPattern":return ne(e.left);default:return []}}function Zn(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ne(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Zn(e.declaration):[]}function et(e,n,t,s=new Set,r){let{returns:a}=ke(e.body,n,t,s,r),o=!O(e);return a.length===0?o?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(o?[...a,typeCore.s.undefined]:a)}var Is=[typeCore.s.literal(true),typeCore.s.literal(false)];function Os(e){return e.t==="union"?e.of:e.t==="boolean"?Is:[e]}function nt(e,n,t){let s=Os(e);if(s.length<=1)return e;let r=s.filter(o=>typeCore.subtype(n,o,t));if(r.length===0)return e;let a=typeCore.normalizeUnion(r);return typeCore.subtype(n,a,t)?a:e}function tt(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let s=t,r=s.left;if(s.operator!=="="||r.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:r.name,type:a}:null}function Y(e,n,t){switch(e.type){case "BlockStatement":{let s=n;for(let r of e.body){let a=Y(r,s,t);if(s=a.types,a.exits)return {types:s,exits:true}}return {types:s,exits:false}}case "ExpressionStatement":{let s=tt(e,t);if(!s)return {types:n,exits:false};let r=new Map(n);return r.set(s.name,s.type),{types:r,exits:false}}case "IfStatement":{let s=st(e,n,t);if(s.size===0)return {types:n,exits:O(e)};let r=new Map(n);for(let[a,o]of s)r.set(a,o);return {types:r,exits:O(e)}}case "TryStatement":{let s=e,r=[],a=Y(s.block,n,t);if(a.exits||r.push(a.types),s.handler){let i=Y(s.handler.body,n,t);i.exits||r.push(i.types);}let o=js(n,r);return s.finalizer&&(o=Y(s.finalizer,o,t).types),{types:o,exits:O(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function st(e,n,t){let s=Y(e.consequent,n,t),r=e.alternate?Y(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];s.exits||l.push(s.types.get(i)??n.get(i)),r.exits||l.push(r.types.get(i)??n.get(i)),l.length&&o.set(i,typeCore.normalizeUnion(l));}return o}function rt(e,n){let t=new Map,s=r=>{let a=T(e,r);a!==void 0&&t.set(r,a);};for(let r of n.evolving)s(r);for(let r of n.declaredMut.keys())s(r);return t}function js(e,n){let t=new Map(e);if(n.length===0)return t;for(let s of e.keys()){let r=n.map(a=>a.get(s)??e.get(s));t.set(s,typeCore.normalizeUnion(r));}return t}function Us(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let s=rt(n,t),r=Y(e,s,t);if(r.exits)return n;let a={};for(let[o,i]of r.types)s.has(o)&&i!==s.get(o)&&(a[o]=i);return W(n,a)}function ke(e,n,t,s=new Set,r){if(!(r&&r.size)&&!$s(e))return Ln(e,n,t,s);let a=new Set(t.evolving),o=new Map(t.declaredMut);if(r)for(let[i,l]of r)t.declaredMut.set(i,l);try{return Ln(e,n,t,s)}finally{t.evolving.clear();for(let i of a)t.evolving.add(i);t.declaredMut.clear();for(let[i,l]of o)t.declaredMut.set(i,l);}}function $s(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let s=t.declaration;if(s?.type==="VariableDeclaration"&&s.kind!=="const")return true}}return false}function Ln(e,n,t,s){let r=n,a=[];for(let o of e){let i=o;for(let l of Zn(i))s.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):s.add(l.name);if(i.type==="VariableDeclaration")r=we(i,r,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")r=we(l.declaration,r,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=y(l.declaration,r,t),c=L(l.declaration.id);c&&(r=I(r,{[c]:u}));}else for(let u of l.specifiers)T(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=L(i.id);u&&(r=I(r,{[u]:l}));}else if(i.type==="IfStatement"){let l=i,u=t.evolving.size||t.declaredMut.size?rt(r,t):null;if(a.push(...$(i,r,t)),u&&u.size){let c=st(l,u,t);c.size&&(r=W(r,Object.fromEntries(c)));}!l.alternate&&O(l.consequent)&&(r=W(r,pe(l.test,r,t.schemes).else));}else {a.push(...$(i,r,t));let l=tt(i,t);l?r=W(r,{[l.name]:l.type}):(i.type==="BlockStatement"||i.type==="TryStatement")&&(r=Us(i,r,t));}}return {scope:r,returns:a}}function $(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=pe(s.test,n,t.schemes),a=$(s.consequent,W(n,r.then),t);return s.alternate&&a.push(...$(s.alternate,W(n,r.else),t)),h(t,e,typeCore.s.unknown,n),a}case "BlockStatement":{let{returns:s}=ke(e.body,n,t);return h(t,e,s.length?typeCore.normalizeUnion(s):typeCore.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,r=n;s.init&&(s.init.type==="VariableDeclaration"?r=we(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=$(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=bn(s.left),i=o?I(n,{[o]:a}):n,l=$(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=$(s.block,n,t);if(s.handler){let a=s.handler.param,o=a?L(a):null,i=o?I(n,{[o]:typeCore.s.unknown}):n;r.push(...$(s.handler.body,i,t));}return s.finalizer&&r.push(...$(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=ke(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 Ls(e,n,t){let s=typeCore.discover(e,[n],t.schemes);return s?s.type:typeCore.s.unknown}function Vs(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function xs(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 Gs(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function Q(e,n,t,s,r){switch(e.type){case "Identifier":{let a=nn(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]);Q(a.left,l,t,s,r);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Q(o.argument,xs(n,a),t,s,r);continue}let i=o,l=le(i);l!=null&&a.push(l);let u=l!=null?Ls(n,l,r):typeCore.s.unknown;Q(i.value,u,t,s,r);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Q(i.argument,Gs(n,o),t,s,r):Q(i,Vs(n,o),t,s,r);});return}}}function sn(e,n,t){let s=V(n,t.schemes),a=(s.t==="union"?s.of.map(o=>V(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=le(i);if(l===null)continue;let u=a.filter(c=>l in c.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 we(e,n,t){let s={};for(let r of e.declarations){let a=r.id,o=L(a),i=nn(a,n,t);if(!r.init){if(o&&e.kind!=="const"){i?(s[o]=i,Vn(o,i,t)):(s[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(r)),o&&(s[o]=i??typeCore.s.unknown);continue}let l=i??(r.init.type==="ArrowFunctionExpression"?vn(r.init):null),u=o&&l?I(n,{[o]:l}):n,c,p=null;i?(J(r.init,i,u,t),r.init.type==="ObjectExpression"&&sn(r.init,i,t),c=i,p=i,(i.t==="union"||i.t==="boolean")&&r.init.type==="Literal"&&(c=nt(i,X(r.init),t.schemes))):(c=y(r.init,u,t),e.kind!=="const"&&(c=typeCore.widenLiteral(c)),p=c),h(t,r,c,n),o?(s[o]=c,e.kind!=="const"&&p&&Vn(o,p,t)):Q(a,c,s,n,t);}return h(t,e,typeCore.s.unknown,n),I(n,s)}function Vn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Ks(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:zs.has(a)?typeCore.s.number:typeCore.s.boolean}var xn={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},Xe=e=>e.t==="null"||e.t==="undefined";function Ws(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=>!Xe(a)),t]);if(e==="||")return typeCore.normalizeUnion([...s.filter(a=>!Xe(a)&&!(a.t==="literal"&&!a.value)),t]);let r=s.flatMap(a=>Xe(a)?[a]:a.t==="literal"?a.value?[]:[a]:xn[a.t]?[xn[a.t]]:[]);return typeCore.normalizeUnion([...r,t])}var zs=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),Js=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function qs(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 Js;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function _s(e,n,t){let s={},r,a=[],o=[],i=false,l=false;for(let u of e.properties){let c=u;if(c.type==="SpreadElement"){let g=V(y(c.argument,n,t),t.schemes);if(g.t==="object"){for(let v in g.props)s[v]=g.props[v];g.index&&(r={key:g.index.key,type:g.index.value});}continue}let p=c,m=y(p.value,n,t),f=typeCore.widen(m);if(h(t,c,m,n),p.computed){let g=V(y(p.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(s[g.value]={type:f},a.push(f)):g.t==="literal"&&typeof g.value=="number"?(s[String(g.value)]={type:f},a.push(f),o.push(f)):g.t==="string"?(i=true,a.push(f)):g.t==="number"&&(l=true,a.push(f),o.push(f));continue}let N=le(p);N!==null&&(s[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}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 at(e,n,t){let s=[];for(let r of e.elements){if(!r)continue;let a=r;if(a.type==="SpreadElement"){let o=V(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=V(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,c)=>i(u,r.elements[c]));return h(s,e,{t:"tuple",elements:l},t)}if(r.t==="array"){let l=[];for(let u of a){if(!u)continue;let c=u;if(c.type==="SpreadElement"){y(c.argument,t,s);continue}l.push(i(c,r.items));}return h(s,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return at(e,t,s)}function Ye(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=>Ye(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:Ye(r[o],n,t,s)};return {t:"object",props:a}}var Xs=(e,n)=>({...e,typeAnnotation:n}),Qs=(e,n)=>({...e,returnType:n}),Ys=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function ot(e,n){return e.get(n)?.type}function Hs(e,n){return e.get(n)?.scope}function Zs(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function er(e,n){let t=e.get(n)?.scope;return t?[...Ae(t)].map(([s,r])=>({key:s,type:r,optional:false})):[]}var nr=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function tr(e){if(!e||e.computed)return;let n=e.key;if(n?.type==="Identifier")return n.name;if(n?.type==="Literal"&&typeof n.value=="string")return n.value}function on(e,n,t,s={}){let r=e[n],a=e[n+1];if(!(!r||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===r?a.returnType:void 0;case "VariableDeclarator":return a.init===r?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(nr)?.returnType;case "CallExpression":case "NewExpression":{let o=(a.arguments??[]).indexOf(r);if(o<0)return;let i=ot(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==r||e[n+2]?.type!=="ObjectExpression")return;let i=on(e,n+2,t,s),l=tr(a);return !i||!l?void 0:typeCore.discover(i,[l],s)?.type}case "ArrayExpression":{let o=on(e,n+1,t,s);return o?typeCore.discover(o,["[]"],s)?.type:void 0}default:return}}function sr(e,n){return e.filter(t=>t.node===n)}exports.FUNCTION_KINDS=mn;exports.annotate=Xs;exports.annotateReturn=Qs;exports.asExpression=Ys;exports.calleeAllowlist=Re;exports.capabilityNodes=Te;exports.check=zn;exports.childScope=I;exports.collectBindings=Mt;exports.collectMutations=Ge;exports.collectUnused=Ve;exports.contextualTypeAt=on;exports.createEnv=pt;exports.createSink=te;exports.diag=S;exports.diagnosticsAt=sr;exports.extractModuleType=fs;exports.fromCapability=kt;exports.guard=Ce;exports.guardsFromCompiled=ye;exports.lookup=T;exports.makeDiagnostic=E;exports.maxArgs=je;exports.maxCallNesting=Pe;exports.maxDepth=Ie;exports.maxFunctionNesting=Me;exports.maxNestingOf=me;exports.maxNodes=Oe;exports.memberCompletions=Zs;exports.memberDepth=Fe;exports.resolveNamed=dt;exports.resolveScheme=ft;exports.resultType=Ue;exports.rootScope=pn;exports.scopeAt=Hs;exports.scopeCompletions=er;exports.typeAt=ot;exports.visibleNames=Ae;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 mn=(e={})=>core.rootScope(e),O=(e,n)=>core.childScope(e,n),R=(e,n)=>core.lookup(e,n),Te=e=>core.visibleNames(e),yt=(e={},n={},t={},s={},r=new Set,a=new Set,o={})=>({scope:mn(e),types:n,schemes:t,accessors:s,asserters:r,matchers:a,modules:o}),ht=(e,n)=>e.types[n],gt=(e,n)=>e.schemes[n];var yn={"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","not-arithmetic-operand":"type","operator-not-applicable":"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"},B=(e,n,t)=>({code:e,kind:yn[e],severity:"error",node:n,message:t}),A=(e,n,t,s="error")=>({code:e,kind:yn[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 B("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${a}`)},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),unknownModule:(e,n)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("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)=>B("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(s)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("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)=>A("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("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)=>B("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>A("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"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,s)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(s)}'.`)};function te(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Me(e,n,t={}){return n.flatMap(s=>s(e,t))}function H(e,n){let t=s=>{n(s);for(let r of core.childrenOf(s))t(r);};t(e);}var vt=e=>Array.isArray(e)?e:[e],gn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Pe(e,n="error"){return t=>{let s=[];return H(t,r=>{let a=capability.nodeViolation(r,e);a&&s.push(A("node-not-allowed",r,`'${a}' is not allowed by the capability profile.`,n));}),s}}function Sn(e,n="error"){let t=e.typeTier;return s=>{if(t==="author")return [];let r=[];return H(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(A("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),r}}function w(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=>w(t.type,n))||!!e.index&&w(e.index.value,n);case "array":return w(e.items,n);case "tuple":return e.elements.some(t=>w(t,n));case "union":case "intersection":return e.of.some(t=>w(t,n));case "fn":return e.params.some(t=>w(t.type,n))||w(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(s=>w(s.type,n))||w(t.returns,n));case "keyof":return w(e.of,n);case "index":return w(e.obj,n)||w(e.key,n);case "mapped":return w(e.over,n)||w(e.body,n);case "conditional":return w(e.check,n)||w(e.extends,n)||w(e.then,n)||w(e.else,n);case "returnType":case "parameters":return w(e.fn,n);case "apply":return e.args.some(t=>w(t,n));default:return false}}function Nn(e,n="error"){return t=>{if(!e.typeStrict)return [];let s=[];return H(t,r=>{let a=r;for(let o of [a.typeAnnotation,a.returnType])if(o&&w(o)){s.push(A("any-not-allowed",r,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),s}}function Fe(e,n="error"){let t=new Set(e);return s=>{let r=[];return H(s,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")r.push(A("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||r.push(A("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),r}}function he(e,n,t={}){let s=new Set(vt(e)),r=t.severity??"error",a=[...s].join("/");return o=>{let i=[],l=(u,p)=>{let d=s.has(u.type),m=d?p+1:p;d&&m>n&&i.push(A("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,r));for(let f of core.childrenOf(u))l(f,m);};return l(o,0),i}}var Oe=(e=3,n="error")=>he(gn,e,{hint:"use a pipe instead of nesting functions",severity:n}),Ie=(e,n="error")=>he("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),je=(e,n="error")=>he("MemberExpression",e,{severity:n});function $e(e,n="error"){return t=>{let s=[],r=(a,o)=>{if(o>e){s.push(A("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 Le(e,n="error"){return t=>{let s=0;return H(t,()=>{s++;}),s>e?[A("too-large",t,`Expression has ${s} nodes (max ${e}).`,n)]:[]}}function Ue(e,n="error"){return t=>{let s=[];return H(t,r=>{if(r.type==="CallExpression"){let a=r.arguments;a&&a.length>e&&s.push(A("too-large",r,`Call has ${a.length} arguments (max ${e}).`,n));}}),s}}function Ve(e,n={},t="error"){return (s,r)=>{let a=r.overlay?.get(s)?.type;return a?typeCore.subtype(a,e,n)?[]:[A("wrong-result-type",s,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function ge(e){let n=[Pe(e),Sn(e),Nn(e)];return e.hostAllow!=="*"&&n.push(Fe([...e.hostAllow])),n}function At(e){return ge(capability.compileProfile(e))}var q=e=>({bindings:new Map,parent:e}),Bn=e=>e.charCodeAt(0)===95;function Se(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 re(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)re(s,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let s=t.path[0];typeof s=="string"&&Ne(n,s);return}for(let s of Object.keys(t))re(t[s],n);}function kn(e,n){let t=e;re(t.typeAnnotation,n),re(t.returnType,n);}function Ne(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;kn(e,n),Se(n,t,o,e,s,r||a&&Bn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")x(u.argument,n,t,s,r,false);else {let m=u;m.computed&&b(m.key,n,t),x(m.value,n,t,s,r||d,!m.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 se(e,n,t){if(e)switch(e.type){case "AssignmentPattern":b(e.right,n,t),se(e.left,n,t);return;case "ObjectPattern":for(let s of e.properties)se(s.type==="RestElement"?s.argument:s.value,n,t);return;case "ArrayPattern":for(let s of e.elements)s&&se(s,n,t);return;case "RestElement":se(e.argument,n,t);return;default:return}}function bn(e,n,t,s){for(let r of e.declarations)x(r.id,n,t,"local",s,false),b(r.init,n,t);}function Ge(e,n,t){let s=e,r=q(n),a=s.params??[];for(let o of a)x(o,r,t,"parameter",false,true);for(let o of a)se(o,r,t);b(s.body,r,t);}function b(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(kn(e,n),e.type){case "Identifier":Ne(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=q(n);for(let r of e.body??[])b(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":Ge(e,n,t);return;case "FunctionDeclaration":{let s=e.id;s&&Se(n,t,s.name,s,"local",false),Ge(e,n,t);return}case "CatchClause":{let s=e,r=q(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=q(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=q(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=q(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":bn(e,n,t,false);return;case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&Se(n,t,r.name,r,"import",Bn(r.name));}return}case "ExportNamedDeclaration":{let s=e;if(s.declaration){let r=s.declaration;if(r.type==="VariableDeclaration")bn(r,n,t,true);else if(r.type==="FunctionDeclaration"){let a=r.id;a&&Se(n,t,a.name,a,"local",true),Ge(r,n,t);}else b(r,n,t);}else for(let r of s.specifiers)Ne(n,r.local.name);return}case "TSAsExpression":b(e.expression,n,t);return;case "TSTypeAliasDeclaration":re(e.typeAnnotation,n);return;case "JsonExpression":xe(e.body,n,t);return;case "JSXOpeningElement":{let s=e;wn(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 wn(e,n,t){e&&(e.type==="JSXIdentifier"?Ne(n,e.name):e.type==="JSXMemberExpression"&&wn(e.object,n));}function xe(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)xe(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))xe(s[r],n,t);}function Ke(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};b(e,q(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 Mt=new Set(["const","import"]),ae=e=>({binds:new Map,parent:e});function Pt(e,n){for(let t=e;t;t=t.parent){let s=t.binds.get(n);if(s)return s}}function _(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?_(n.argument):_(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?_(n):[]);case "AssignmentPattern":return _(e.left);case "RestElement":return _(e.argument);default:return []}}var be=(e,n,t)=>{for(let s of _(n))e.binds.set(s.name,t);};function We(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of _(e))We(a,n,t);return}let s=e.name,r=Pt(n,s);r&&Mt.has(r)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,s,r==="import"?"import":"const")));}function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let s=e;We(s.left,n,t),M(s.right,n,t);return}case "UpdateExpression":{We(e.argument,n,t);return}case "Program":case "BlockStatement":{let s=ae(n);for(let r of e.body??[])M(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=ae(n);for(let a of s.params??[])be(r,a,"param");M(s.body,r,t);return}case "CatchClause":{let s=e,r=ae(n);be(r,s.param,"param"),M(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=ae(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)be(r,o.id,a.kind);else a&&M(a,r,t);M(s.right,n,t),M(s.test,r,t),M(s.update,r,t),M(s.body,r,t);return}case "VariableDeclaration":{let s=e;for(let r of s.declarations)M(r.init,n,t),be(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&&M(s.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":M(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)M(i,n,t);else M(o,n,t);}return}}}function ze(e){let n={out:[],invalid:new WeakSet};return M(e,ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var oe=e=>({decls:new Map,parent:e});function Ot(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 Be=(e,n)=>{for(let t of Z(n))e.decls.set(t.name,t);};function C(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let s=Ot(n,e.name);s&&s!==e&&t.set(e,s);return}case "MemberExpression":{let s=e;C(s.object,n,t),s.computed&&C(s.property,n,t);return}case "Property":{let s=e;s.computed&&C(s.key,n,t),C(s.value,n,t);return}case "Program":case "BlockStatement":{let s=oe(n);for(let r of e.body??[])C(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=oe(n);for(let o of s.params??[])Be(a,o);C(s.body,a,t);return}case "CatchClause":{let s=e,r=oe(n);Be(r,s.param),C(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=oe(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Be(r,o.id);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":{for(let s of e.declarations)Be(n,s.id),C(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":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 It(e){let n=new WeakMap;return C(e,oe(void 0),n),n}var Je=e=>e.typeAnnotation,qe=e=>e.returnType,U=e=>e.type==="Identifier"?e.name:null,vn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?U(n.id):null}return U(e)},le=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function En(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 _e(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=_e(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Xe(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 X=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):Xe(e)},Qe=e=>e.type==="ArrowFunctionExpression",An=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,we=e=>An(e)?e.args[0]:e,ue=e=>An(e)?e:typeCore.s.promise(e);function ie(e){return e.t==="tuple"?true:e.t==="array"?ie(e.items):e.t==="union"?e.of.some(ie):false}function ke(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ke(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ke(e.bound):false}var V=(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 Dn(e){let n=qe(e);return n?{t:"fn",params:e.params.map((s,r)=>({name:U(s)??`arg${r}`,type:Je(s)??typeCore.s.unknown})),returns:e.async?ue(n):n}:null}var K={then:{},else:{}},In=new Set(["string","number","boolean","undefined","function","object"]),Cn={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function jn(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 Ut=typeCore.s.literal(true),Vt=typeCore.s.literal(false),G=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Ut,Vt]:[e];function Tn(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 Gt(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let s=G(e).filter(r=>typeCore.subtype(r,n,t));return s.length?typeCore.normalizeUnion(s):n}function xt(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let s=G(e).filter(r=>!typeCore.subtype(r,n,t));return s.length?typeCore.normalizeUnion(s):null}function Kt(e,n){if(!In.has(n))return null;if(e.t==="unknown"||e.t==="any")return Cn[n]??e;let t=G(e).filter(s=>jn(s,n));return t.length?typeCore.normalizeUnion(t):Cn[n]??e}function Wt(e,n){if(!In.has(n)||e.t==="unknown"||e.t==="any")return null;let t=G(e).filter(s=>!jn(s,n));return t.length?typeCore.normalizeUnion(t):null}function Rn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function Mn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Pn(e,n,t,s,r){let a=G(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 Fn(e,n,t){let s=G(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 zt(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function Jt(e,n,t){let s=G(e),r=s.filter(a=>!typeCore.equals(a,n,t));return r.length&&r.length<s.length?typeCore.normalizeUnion(r):null}var qt=e=>e.t==="null"||e.t==="undefined",$n=e=>qt(e)||e.t==="literal"&&!e.value,_t=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=G(e),t=n.filter(s=>!$n(s));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Xt=e=>{let n=G(e),t=n.filter($n);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},On=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,j=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Qt=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function pe(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let f=s.left,N=s.right;if(f.type==="Literal"&&typeof f.value=="string"&&N.type==="Identifier"){let g=N.name,E=R(n,g);if(!E)return K;let v=String(f.value);return j(g,Fn(E,v,true),Fn(E,v,false))}return K}if(!Qt(s.operator))return K;let r=s.operator==="!=="||s.operator==="!=",a=s.left,o=s.right,i=Tn(a,o)??Tn(o,a);if(i){let f=R(n,i.name);if(!f)return K;let N=Kt(f,i.tag),g=Wt(f,i.tag);return r?j(i.name,g,N):j(i.name,N,g)}let l=On(a),u=On(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let f=p.name,N=R(n,f);if(!N)return K;let E=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],v=G(N),pn=v.filter(Ce=>E.includes(Ce.t)),De=v.filter(Ce=>!E.includes(Ce.t)),dn=pn.length?typeCore.normalizeUnion(pn):null,fn=De.length&&De.length<v.length?typeCore.normalizeUnion(De):null;return r?j(f,fn,dn):j(f,dn,fn)}let d=Rn(a,o)??Rn(o,a);if(d){let f=R(n,d.name);if(!f)return K;let N=zt(f,d.lit,t),g=Jt(f,d.lit,t);return r?j(d.name,g,N):j(d.name,N,g)}let m=Mn(a,o)??Mn(o,a);if(m){let f=R(n,m.name);if(!f)return K;let N=Pn(f,m.prop,m.lit,true,t),g=Pn(f,m.prop,m.lit,false,t);return r?j(m.name,g,N):j(m.name,N,g)}return K}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=pe(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=Ht(e,n,t);if(s)return s}if(e.type==="Identifier"){let s=e.name,r=R(n,s);if(r)return j(s,_t(r),Xt(r))}return K}function Yt(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 Ht(e,n,t){let s=e.callee;if(s.type!=="Identifier")return null;let r=R(n,s.name);if(!r)return null;let a=Yt(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=R(n,i);return l?j(i,Gt(l,a.type,t),xt(l,a.type,t)):null}var W=(e,n)=>Object.keys(n).length?O(e,n):e;function I(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>I(t));case "IfStatement":{let n=e;return !!n.alternate&&I(n.consequent)&&I(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&I(n.finalizer))return true;let t=!n.handler||I(n.handler.body);return I(n.block)&&t}default:return false}}var fs=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ms(e){let n=[];return e.maxDepth!==void 0&&n.push($e(e.maxDepth)),e.maxNodes!==void 0&&n.push(Le(e.maxNodes)),e.maxArgs!==void 0&&n.push(Ue(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Oe(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(Ie(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(je(e.memberDepth)),n}function ys(e,n){let t=e.typeRefs;return t?.length?t.filter(s=>!(s.name in n)).map(s=>A("unknown-name",{type:"Identifier",name:s.name,loc:s.loc},`Cannot find name '${s.name}'.`)):[]}function Xn(e,n,t={}){let s={...fs(n.types),...n.schemes,...gs(e)},r=ze(e),a={overlay:new WeakMap,sink:te(),env:n,schemes:s,importNames:new Set,resolvedSchemes:new Set,invalidTargets:r.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?capability.compileProfile(t.profile):void 0;o&&typeCore.configureTypeLimits(o.typeLimits);try{let i,l=Ss(e,a);try{i=y(e,l,a);}catch(d){if(d instanceof typeCore.TypeEvalLimitError)a.sink.report(A("too-deep",e,d.message));else if(d instanceof typeCore.UnionTooComplexError)a.sink.report(A("too-complex-union",e,d.message));else throw d;i=typeCore.s.unknown;}let u=[];o&&u.push(...ge(o)),t.limits&&u.push(...ms(t.limits)),t.resultType&&u.push(Ve(t.resultType,s));let p=[...a.sink.all,...r.diagnostics,...ys(e,s),...t.unused?Ke(e,t.unused):[],...u.length?Me(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function hs(e,n,t={}){let s=Xn(e,n,t),r={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let m=U(d.id),f=s.overlay.get(d);m&&f&&(r[m]=f.type,p.push(m));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,m=s.overlay.get(u);d&&m&&(r[d]=m.type,p.push(d));}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 d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.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 gs=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 Ss(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",d=typeCore.discover(i,[p],n.schemes);d?s[u]=d.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?O(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 Qn: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,Xe(e),n);case "Identifier":{let r=e.name,a=R(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,Bs(e,n,t),n);case "CallExpression":return h(t,e,Es(e,n,t,s),n);case "ArrowFunctionExpression":return an(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,rt(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 L(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 L(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 p=t.overlay.get(a.object)?.type,d=p&&typeCore.apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(S.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(r.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=y(r.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(d)),h(t,e,d,n)}if(u&&i!==null){let d=y(r.right,n,t);return typeCore.subtype(d,u,t.schemes)||t.sink.report(S.notAssignable(r.right,d,u,t.schemes)),t.assignFlow.set(e,at(u,d,t.schemes)),h(t,e,d,n)}let p=J(r.right,o,n,t);return h(t,e,p,n)}return h(t,e,y(r.right,n,t),n)}case "UpdateExpression":{let r=e,a=y(r.argument,n,t);return de(a,t.schemes)||t.sink.report(S.arithmeticOperand(r.argument,"operand")),h(t,e,typeCore.s.number,n)}case "ExpressionStatement":return h(t,e,y(e.expression,n,t),n);case "VariableDeclaration":return Ee(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?Rs(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return h(t,e,Js(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,qs(r.operator,a,o),n)}case "UnaryExpression":return h(t,e,Ys(e,n,t),n);case "ConditionalExpression":{let r=e;y(r.test,n,t);let a=pe(r.test,n,t.schemes),o=y(r.consequent,W(n,a.then),t),i=y(r.alternate,W(n,a.else),t);return h(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return h(t,e,Hs(e,n,t),n);case "ArrayExpression":return h(t,e,ut(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,we(a),n)}case "Program":{let r=ve(e.body,n,t,new Set(t.importNames)).scope;return h(t,e,typeCore.s.unknown,r)}case "JsonExpression":return h(t,e,en(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=ye(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 Ns=new Set(["constructor","prototype","__proto__"]);function bs(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 Bs(e,n,t){let s=y(e.object,n,t),r=bs(e);if(r!==null&&Ns.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"&&Un(e,s,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(s,[a],t.schemes);return o?o.type:(Un(e,s,a,t),typeCore.s.unknown)}function Un(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 ks(e,n,t){if(!e||e.type!=="Identifier")return;let s=e.name;if(R(n,s)===void 0)return;let r=t.schemes[s];return r&&r.params.length===0?r.body:void 0}function ws(e,n,t,s){let r=V(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 Qn="TSLiteSyntheticArg",vs=e=>({type:Qn,schema:e});function Yn(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=V(y(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)s.push(vs(l));else r={elem:i.t==="array"?i.items:typeCore.s.unknown,node:a};}return {nodes:s,spread:r}}function Es(e,n,t,s){let r=e.arguments,a=_e(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let m=En(r);if(m){let f=typeCore.discover(d,m,t.schemes);return f?f.type:(t.sink.report(S.noSuchMember(e,d,m.join("."))),typeCore.s.unknown)}return r.forEach(f=>y(f,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let d=ks(r[0],n,t);for(let m=1;m<r.length;m++)y(r[m],n,t);return d??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return ws(e,r,n,t);let o=y(e.callee,n,t);if(o.t==="any")return r.forEach(d=>y(d,n,t)),typeCore.s.any;if(o.t==="overload")return Ds(e,o,n,t,s);if(o.t!=="fn")return r.forEach(d=>y(d,n,t)),t.sink.report(S.notCallable(e,o)),typeCore.s.unknown;let i=Yn(r,n,t),l=i.nodes.map(d=>Hn(d,n,t)),u=nt(e),p=!u||tt(o,u.length);return p||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),Zn(e,o,i.nodes,l,n,t,i.spread,s,p?u:void 0)}function Hn(e,n,t){if(Qe(e))return typeCore.s.any;if(e.type!=="CallExpression")return y(e,n,t);let s=te(),r=y(e,n,{...t,sink:s});return s.hasErrors()?typeCore.s.any:(s.all.forEach(a=>t.sink.report(a)),r)}function Zn(e,n,t,s,r,a,o=null,i,l){let u=f=>{if(!i)return f;let N=typeCore.substitute(n.returns,f);if(N.t==="fn"&&i.t==="fn"){let g=f,E=Math.min(N.params.length,i.params.length);for(let v=0;v<E;v++)g=typeCore.unify(N.params[v].type,i.params[v].type,g)??g;return typeCore.unify(N.returns,i.returns,g)??g}return typeCore.unify(N,i,f)??f},p=l?Ps(e,n,l,a):void 0,d=p??u(typeCore.instantiateLoose(n,s).bindings);t.forEach((f,N)=>{if(Qe(f)){let g=typeCore.widenType(typeCore.substitute(n.params[N]?.type??typeCore.s.any,d));s[N]=an(f,r,a,g);}else if(f.type==="CallExpression"&&s[N].t==="any")s[N]=y(f,r,a,typeCore.substitute(n.params[N]?.type??typeCore.s.unknown,d));else if(f.type==="Literal"){let g=n.params[N]?.type??typeCore.s.unknown,E=g.t==="var"?g.bound?typeCore.substitute(g.bound,d):g:typeCore.substitute(g,d);ke(E)&&(s[N]=h(a,f,X(f),r));}else if(f.type==="ArrayExpression"){let g=typeCore.substitute(n.params[N]?.type??typeCore.s.unknown,d);ie(g)&&(s[N]=ln(f,g,r,a));}});let m=p??u(typeCore.instantiateLoose(n,s).bindings);return p||As(e,n,m,a),js(e,n,s,m,a,t,o),t.forEach((f,N)=>{let g=n.params[N];f.type==="ObjectExpression"&&g&&!g.variadic&&on(f,typeCore.substitute(g.type,m),a);}),typeCore.widenInferred(typeCore.groundVars(typeCore.substitute(n.returns,m),a.schemes))}var Vn=new WeakMap;function et(e){let n=Vn.get(e);if(n)return n;let t=new Map,s=new WeakSet;for(let r of e.params)P(r.type,t,s);return P(e.returns,t,s),Vn.set(e,t),t}function P(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":P(e.items,n,t);return;case "union":for(let s of e.of)P(s,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let s in e.props)P(e.props[s].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let s of e.params)P(s.type,n,t);P(e.returns,n,t);return;case "overload":for(let s of e.signatures){for(let r of s.params)P(r.type,n,t);P(s.returns,n,t);}return;case "apply":for(let s of e.args)P(s,n,t);return;case "keyof":P(e.of,n,t);return;case "index":P(e.obj,n,t),P(e.key,n,t);return;case "mapped":P(e.over,n,t),P(e.body,n,t);return;default:return}}function As(e,n,t,s){let r=et(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=Yn(e.arguments,t,s),o=a.nodes,i=o.map(p=>Hn(p,t,s)),l=nt(e),u=l?n.signatures.filter(p=>tt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,m)=>Math.max(d,m.typeParams?.length??0),0);return s.sink.report(S.wrongTypeArgumentCount(e,p,l.length)),Gn(e,n.signatures,a,o,i,t,s,r,void 0)}return Gn(e,u,a,o,i,t,s,r,l)}function Gn(e,n,t,s,r,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?Fs(m,s.length):Os(m,s.length),d=u.signatures.find(m=>p(m)&&Is(m,r,o));if(!d){let m=u.signatures.filter(p);m.length===1?d=m[0]:u.signatures.length===1&&(d=u.signatures[0]);}return d?Zn(e,d,s,r,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,r)),typeCore.s.unknown)}function Cs(e,n,t,s){let r=R(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 ye(e,n,t,s){let r=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let m=r(d);return m!==d&&(u=true),m});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Cs(o.path,n,t,s);if(o.t==="apply"&&typeof o.name=="string"&&(Ts(o.name,n,t,s),!(o.name in t.schemes)))return typeCore.s.any;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 Ts(e,n,t,s){if(t.resolvedSchemes.has(e))return;let r=t.schemes[e];if(!r)return;t.resolvedSchemes.add(e);let a=ye(r.body,n,t,s);a!==r.body&&(t.schemes[e]={...r,body:a});}function Rs(e,n,t,s,r){let a={...t,sink:te(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=ye(e,n,a,s);return a.sink.hasErrors()?e:r?o:typeCore.groundVars(o,t.schemes)}var rn=(e,n,t)=>{let s=Je(e);return s===void 0?s:ye(s,n,t,e)},Ms=(e,n,t)=>{let s=qe(e);return s===void 0?s:ye(s,n,t,e)},nt=e=>{let n=e.typeArguments;return n?.length?n:void 0},tt=(e,n)=>(e.typeParams?.length??0)===n;function Ps(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 et(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 Fs(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 Os(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 Is(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 js(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 d=typeCore.substitute(p.type,s);if(u>=t.length){!p.optional&&!o&&r.sink.report(S.missingArgument(e,p.name,d));continue}typeCore.subtype(t[u],d,r.schemes)||r.sink.report(S.notAssignable(i(u),t[u],d,r.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){r.sink.report(S.spreadArgument(o.node));return}if(l){let d=typeCore.substitute(l.type,s),m=d.t==="array"?d.items:typeCore.s.unknown;typeCore.subtype(o.elem,m,r.schemes)||r.sink.report(S.notAssignable(o.node,o.elem,m,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=V(n,s.schemes);switch(e.type){case "Literal":{let o=X(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(ie(r)){let o=ln(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,d=le(p),m=d!==null?typeCore.ownProp(r.props,d)?.type:void 0,f=m?J(p.value,m,t,s):y(p.value,t,s);d!==null&&(o[d]={type:f}),h(s,u,f,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=an(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 an(e,n,t,s){let r=s&&s.t==="fn"?s:void 0,a={},o=new Map,i=e.params.map((f,N)=>{let g=f,E=U(g),v=rn(g,n,t)??r?.params[N]?.type??typeCore.s.unknown;return E?(a[E]=v,(v.t==="union"||v.t==="boolean")&&o.set(E,v)):g.type!=="Identifier"&&Q(g,v,a,n,t),t.overlay.set(g,{type:v,scope:n}),{name:E??`arg${N}`,type:v}}),l=O(n,a),u=e.body,p=Ms(e,n,t);if(u.type!=="BlockStatement"&&p){let f=e.async?we(p):p;J(u,f,l,t);let N=e.async?ue(p):p;return h(t,e,{t:"fn",params:i,returns:N},n)}let d=u.type==="BlockStatement"?h(t,u,rt(u,l,t,new Set(Object.keys(a)),o),l):y(u,l,t),m=e.async?ue(d):d;if(p){let f=e.async?we(p):p,N=e.async?d:m;typeCore.subtype(N,f,t.schemes)||t.sink.report(S.notAssignable(u,m,p,t.schemes));let g=e.async?ue(p):p;return h(t,e,{t:"fn",params:i,returns:g},n)}return h(t,e,{t:"fn",params:i,returns:typeCore.widenType(m)},n)}function ne(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ne(n.argument):ne(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ne(n.argument):ne(n):[]);case "AssignmentPattern":return ne(e.left);default:return []}}function st(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ne(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?st(e.declaration):[]}function rt(e,n,t,s=new Set,r){let{returns:a}=ve(e.body,n,t,s,r),o=!I(e);return a.length===0?o?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(o?[...a,typeCore.s.undefined]:a)}var $s=[typeCore.s.literal(true),typeCore.s.literal(false)];function Ls(e){return e.t==="union"?e.of:e.t==="boolean"?$s:[e]}function at(e,n,t){let s=Ls(e);if(s.length<=1)return e;let r=s.filter(o=>typeCore.subtype(n,o,t));if(r.length===0)return e;let a=typeCore.normalizeUnion(r);return typeCore.subtype(n,a,t)?a:e}function ot(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let s=t,r=s.left;if(s.operator!=="="||r.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:r.name,type:a}:null}function Y(e,n,t){switch(e.type){case "BlockStatement":{let s=n;for(let r of e.body){let a=Y(r,s,t);if(s=a.types,a.exits)return {types:s,exits:true}}return {types:s,exits:false}}case "ExpressionStatement":{let s=ot(e,t);if(!s)return {types:n,exits:false};let r=new Map(n);return r.set(s.name,s.type),{types:r,exits:false}}case "IfStatement":{let s=it(e,n,t);if(s.size===0)return {types:n,exits:I(e)};let r=new Map(n);for(let[a,o]of s)r.set(a,o);return {types:r,exits:I(e)}}case "TryStatement":{let s=e,r=[],a=Y(s.block,n,t);if(a.exits||r.push(a.types),s.handler){let i=Y(s.handler.body,n,t);i.exits||r.push(i.types);}let o=Us(n,r);return s.finalizer&&(o=Y(s.finalizer,o,t).types),{types:o,exits:I(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function it(e,n,t){let s=Y(e.consequent,n,t),r=e.alternate?Y(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];s.exits||l.push(s.types.get(i)??n.get(i)),r.exits||l.push(r.types.get(i)??n.get(i)),l.length&&o.set(i,typeCore.normalizeUnion(l));}return o}function lt(e,n){let t=new Map,s=r=>{let a=R(e,r);a!==void 0&&t.set(r,a);};for(let r of n.evolving)s(r);for(let r of n.declaredMut.keys())s(r);return t}function Us(e,n){let t=new Map(e);if(n.length===0)return t;for(let s of e.keys()){let r=n.map(a=>a.get(s)??e.get(s));t.set(s,typeCore.normalizeUnion(r));}return t}function Vs(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let s=lt(n,t),r=Y(e,s,t);if(r.exits)return n;let a={};for(let[o,i]of r.types)s.has(o)&&i!==s.get(o)&&(a[o]=i);return W(n,a)}function ve(e,n,t,s=new Set,r){if(!(r&&r.size)&&!Gs(e))return xn(e,n,t,s);let a=new Set(t.evolving),o=new Map(t.declaredMut);if(r)for(let[i,l]of r)t.declaredMut.set(i,l);try{return xn(e,n,t,s)}finally{t.evolving.clear();for(let i of a)t.evolving.add(i);t.declaredMut.clear();for(let[i,l]of o)t.declaredMut.set(i,l);}}function Gs(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let s=t.declaration;if(s?.type==="VariableDeclaration"&&s.kind!=="const")return true}}return false}function xn(e,n,t,s){let r=n,a=[];for(let o of e){let i=o;for(let l of st(i))s.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):s.add(l.name);if(i.type==="VariableDeclaration")r=Ee(i,r,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")r=Ee(l.declaration,r,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=y(l.declaration,r,t),p=U(l.declaration.id);p&&(r=O(r,{[p]:u}));}else for(let u of l.specifiers)R(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=U(i.id);u&&(r=O(r,{[u]:l}));}else if(i.type==="IfStatement"){let l=i,u=t.evolving.size||t.declaredMut.size?lt(r,t):null;if(a.push(...L(i,r,t)),u&&u.size){let p=it(l,u,t);p.size&&(r=W(r,Object.fromEntries(p)));}!l.alternate&&I(l.consequent)&&(r=W(r,pe(l.test,r,t.schemes).else));}else {a.push(...L(i,r,t));let l=ot(i,t);l?r=W(r,{[l.name]:l.type}):(i.type==="BlockStatement"||i.type==="TryStatement")&&(r=Vs(i,r,t));}}return {scope:r,returns:a}}function L(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=pe(s.test,n,t.schemes),a=L(s.consequent,W(n,r.then),t);return s.alternate&&a.push(...L(s.alternate,W(n,r.else),t)),h(t,e,typeCore.s.unknown,n),a}case "BlockStatement":{let{returns:s}=ve(e.body,n,t);return h(t,e,s.length?typeCore.normalizeUnion(s):typeCore.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,r=n;s.init&&(s.init.type==="VariableDeclaration"?r=Ee(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=L(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=vn(s.left),i=o?O(n,{[o]:a}):n,l=L(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=L(s.block,n,t);if(s.handler){let a=s.handler.param,o=a?U(a):null,i=o?O(n,{[o]:typeCore.s.unknown}):n;r.push(...L(s.handler.body,i,t));}return s.finalizer&&r.push(...L(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=ve(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 xs(e,n,t){let s=typeCore.discover(e,[n],t.schemes);return s?s.type:typeCore.s.unknown}function Ks(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function Ws(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 zs(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function Q(e,n,t,s,r){switch(e.type){case "Identifier":{let a=rn(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]);Q(a.left,l,t,s,r);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Q(o.argument,Ws(n,a),t,s,r);continue}let i=o,l=le(i);l!=null&&a.push(l);let u=l!=null?xs(n,l,r):typeCore.s.unknown;Q(i.value,u,t,s,r);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Q(i.argument,zs(n,o),t,s,r):Q(i,Ks(n,o),t,s,r);});return}}}function on(e,n,t){let s=V(n,t.schemes),a=(s.t==="union"?s.of.map(o=>V(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=le(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"&&on(i.value,u[0].props[l].type,t);}}function Ee(e,n,t){let s={};for(let r of e.declarations){let a=r.id,o=U(a),i=rn(a,n,t);if(!r.init){if(o&&e.kind!=="const"){i?(s[o]=i,Kn(o,i,t)):(s[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(r)),o&&(s[o]=i??typeCore.s.unknown);continue}let l=i??(r.init.type==="ArrowFunctionExpression"?Dn(r.init):null),u=o&&l?O(n,{[o]:l}):n,p,d=null;i?(J(r.init,i,u,t),r.init.type==="ObjectExpression"&&on(r.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&r.init.type==="Literal"&&(p=at(i,X(r.init),t.schemes))):(p=y(r.init,u,t),e.kind!=="const"&&(p=typeCore.widenLiteral(p)),d=p),h(t,r,p,n),o?(s[o]=p,e.kind!=="const"&&d&&Kn(o,d,t)):Q(a,p,s,n,t);}return h(t,e,typeCore.s.unknown,n),O(n,s)}function Kn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Js(e,n,t){let s=y(e.left,n,t),r=y(e.right,n,t),a=e.operator;if(a==="+")return Wn(s,t.schemes)||Wn(r,t.schemes)?typeCore.s.string:de(s,t.schemes)&&de(r,t.schemes)?typeCore.s.number:(t.sink.report(S.operatorNotApplicable(e,"+",s,r)),typeCore.s.number);if(_s.has(a))return de(s,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),de(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right")),typeCore.s.number;if(Xs.has(a)){if(!Ae(s)&&!Ae(r)){let o=typeCore.apparentType(s,t.schemes),i=typeCore.apparentType(r,t.schemes),l=typeCore.subtype(o,typeCore.s.number,t.schemes),u=typeCore.subtype(i,typeCore.s.number,t.schemes);l&&u||!l&&!u&&(typeCore.subtype(o,i,t.schemes)||typeCore.subtype(i,o,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,s,r));}return typeCore.s.boolean}return typeCore.s.boolean}var Ae=e=>e.t==="any"||e.t==="unknown",de=(e,n)=>Ae(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),Wn=(e,n)=>!Ae(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),zn={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},He=e=>e.t==="null"||e.t==="undefined";function qs(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=>!He(a)),t]);if(e==="||")return typeCore.normalizeUnion([...s.filter(a=>!He(a)&&!(a.t==="literal"&&!a.value)),t]);let r=s.flatMap(a=>He(a)?[a]:a.t==="literal"?a.value?[]:[a]:zn[a.t]?[zn[a.t]]:[]);return typeCore.normalizeUnion([...r,t])}var _s=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),Xs=new Set(["<",">","<=",">="]),Qs=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function Ys(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 Qs;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function Hs(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=V(y(p.argument,n,t),t.schemes);if(g.t==="object"){for(let E in g.props)s[E]=g.props[E];g.index&&(r={key:g.index.key,type:g.index.value});}continue}let d=p,m=y(d.value,n,t),f=typeCore.widen(m);if(h(t,p,m,n),d.computed){let g=V(y(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(s[g.value]={type:f},a.push(f)):g.t==="literal"&&typeof g.value=="number"?(s[String(g.value)]={type:f},a.push(f),o.push(f)):g.t==="string"?(i=true,a.push(f)):g.t==="number"&&(l=true,a.push(f),o.push(f));continue}let N=le(d);N!==null&&(s[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}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 ut(e,n,t){let s=[];for(let r of e.elements){if(!r)continue;let a=r;if(a.type==="SpreadElement"){let o=V(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 ln(e,n,t,s){let r=V(n,s.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?ln(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 ut(e,t,s)}function en(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=>en(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:en(r[o],n,t,s)};return {t:"object",props:a}}var Zs=(e,n)=>({...e,typeAnnotation:n}),er=(e,n)=>({...e,returnType:n}),nr=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function ct(e,n){return e.get(n)?.type}function tr(e,n){return e.get(n)?.scope}function sr(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function rr(e,n){let t=e.get(n)?.scope;return t?[...Te(t)].map(([s,r])=>({key:s,type:r,optional:false})):[]}var ar=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function or(e){if(!e||e.computed)return;let n=e.key;if(n?.type==="Identifier")return n.name;if(n?.type==="Literal"&&typeof n.value=="string")return n.value}function cn(e,n,t,s={}){let r=e[n],a=e[n+1];if(!(!r||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===r?a.returnType:void 0;case "VariableDeclarator":return a.init===r?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(ar)?.returnType;case "CallExpression":case "NewExpression":{let o=(a.arguments??[]).indexOf(r);if(o<0)return;let i=ct(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==r||e[n+2]?.type!=="ObjectExpression")return;let i=cn(e,n+2,t,s),l=or(a);return !i||!l?void 0:typeCore.discover(i,[l],s)?.type}case "ArrayExpression":{let o=cn(e,n+1,t,s);return o?typeCore.discover(o,["[]"],s)?.type:void 0}default:return}}function ir(e,n){return e.filter(t=>t.node===n)}exports.FUNCTION_KINDS=gn;exports.annotate=Zs;exports.annotateReturn=er;exports.asExpression=nr;exports.calleeAllowlist=Fe;exports.capabilityNodes=Pe;exports.check=Xn;exports.childScope=O;exports.collectBindings=It;exports.collectMutations=ze;exports.collectUnused=Ke;exports.contextualTypeAt=cn;exports.createEnv=yt;exports.createSink=te;exports.diag=S;exports.diagnosticsAt=ir;exports.extractModuleType=hs;exports.fromCapability=At;exports.guard=Me;exports.guardsFromCompiled=ge;exports.lookup=R;exports.makeDiagnostic=A;exports.maxArgs=Ue;exports.maxCallNesting=Ie;exports.maxDepth=$e;exports.maxFunctionNesting=Oe;exports.maxNestingOf=he;exports.maxNodes=Le;exports.memberCompletions=sr;exports.memberDepth=je;exports.resolveNamed=ht;exports.resolveScheme=gt;exports.resultType=Ve;exports.rootScope=mn;exports.scopeAt=tr;exports.scopeCompletions=rr;exports.typeAt=ct;exports.visibleNames=Te;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" | "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";
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" | "not-arithmetic-operand" | "operator-not-applicable" | "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
@@ -160,6 +160,17 @@ declare const diag: {
160
160
  * silenciosos; só o cast "torto" (ex.: `number as string`) avisa.
161
161
  */
162
162
  castUnsound: (node: BaseNode, from: Schema, to: Schema) => Diagnostic;
163
+ /**
164
+ * Operando de operação aritmética (`*` `-` `/` `%` `**`, bitwise) ou de `++`/`--`
165
+ * que não é numérico. Espelha TS2362 (esquerdo) / TS2363 (direito) / TS2356 (`++`/`--`).
166
+ * `bigint`/enum ficam fora do vocabulário do TSL, então a mensagem cita só `number`/`any`.
167
+ */
168
+ arithmeticOperand: (node: BaseNode, side: "left" | "right" | "operand") => Diagnostic;
169
+ /**
170
+ * `+` (nenhum lado string, nem ambos numéricos) ou relacional (`<` `>` `<=` `>=`)
171
+ * entre tipos incompatíveis. Espelha TS2365.
172
+ */
173
+ operatorNotApplicable: (node: BaseNode, op: string, left: Schema, right: Schema) => Diagnostic;
163
174
  };
164
175
  /** Coletor de diagnósticos — acumula durante o walk, sem `throw`. */
165
176
  interface DiagnosticSink {
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" | "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";
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" | "not-arithmetic-operand" | "operator-not-applicable" | "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
@@ -160,6 +160,17 @@ declare const diag: {
160
160
  * silenciosos; só o cast "torto" (ex.: `number as string`) avisa.
161
161
  */
162
162
  castUnsound: (node: BaseNode, from: Schema, to: Schema) => Diagnostic;
163
+ /**
164
+ * Operando de operação aritmética (`*` `-` `/` `%` `**`, bitwise) ou de `++`/`--`
165
+ * que não é numérico. Espelha TS2362 (esquerdo) / TS2363 (direito) / TS2356 (`++`/`--`).
166
+ * `bigint`/enum ficam fora do vocabulário do TSL, então a mensagem cita só `number`/`any`.
167
+ */
168
+ arithmeticOperand: (node: BaseNode, side: "left" | "right" | "operand") => Diagnostic;
169
+ /**
170
+ * `+` (nenhum lado string, nem ambos numéricos) ou relacional (`<` `>` `<=` `>=`)
171
+ * entre tipos incompatíveis. Espelha TS2365.
172
+ */
173
+ operatorNotApplicable: (node: BaseNode, op: string, left: Schema, right: Schema) => Diagnostic;
163
174
  };
164
175
  /** Coletor de diagnósticos — acumula durante o walk, sem `throw`. */
165
176
  interface DiagnosticSink {
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,ownProp,withoutUndefined,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 pn=(e={})=>rootScope(e),I=(e,n)=>childScope(e,n),T=(e,n)=>lookup(e,n),Ae=e=>visibleNames(e),pt=(e={},n={},t={},s={},r=new Set,a=new Set,o={})=>({scope:pn(e),types:n,schemes:t,accessors:s,asserters:r,matchers:a,modules:o}),dt=(e,n)=>e.types[n],ft=(e,n)=>e.schemes[n];var dn={"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:dn[e],severity:"error",node:n,message:t}),E=(e,n,t,s="error")=>({code:e,kind:dn[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 te(){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(s=>s(e,t))}function H(e,n){let t=s=>{n(s);for(let r of childrenOf(s))t(r);};t(e);}var Bt=e=>Array.isArray(e)?e:[e],mn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Te(e,n="error"){return t=>{let s=[];return H(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 yn(e,n="error"){let t=e.typeTier;return s=>{if(t==="author")return [];let r=[];return H(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 hn(e,n="error"){return t=>{if(!e.typeStrict)return [];let s=[];return H(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 Re(e,n="error"){let t=new Set(e);return s=>{let r=[];return H(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 me(e,n,t={}){let s=new Set(Bt(e)),r=t.severity??"error",a=[...s].join("/");return o=>{let i=[],l=(u,c)=>{let p=s.has(u.type),m=p?c+1:c;p&&m>n&&i.push(E("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,r));for(let f of childrenOf(u))l(f,m);};return l(o,0),i}}var Me=(e=3,n="error")=>me(mn,e,{hint:"use a pipe instead of nesting functions",severity:n}),Pe=(e,n="error")=>me("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),Fe=(e,n="error")=>me("MemberExpression",e,{severity:n});function Ie(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 Oe(e,n="error"){return t=>{let s=0;return H(t,()=>{s++;}),s>e?[E("too-large",t,`Expression has ${s} nodes (max ${e}).`,n)]:[]}}function je(e,n="error"){return t=>{let s=[];return H(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 Ue(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 ye(e){let n=[Te(e),yn(e),hn(e)];return e.hostAllow!=="*"&&n.push(Re([...e.hostAllow])),n}function kt(e){return ye(compileProfile(e))}var q=e=>({bindings:new Map,parent:e}),Sn=e=>e.charCodeAt(0)===95;function he(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 re(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)re(s,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let s=t.path[0];typeof s=="string"&&ge(n,s);return}for(let s of Object.keys(t))re(t[s],n);}function Nn(e,n){let t=e;re(t.typeAnnotation,n),re(t.returnType,n);}function ge(e,n){for(let t=e;t;t=t.parent){let s=t.bindings.get(n);if(s){s.used=true;return}}}function G(e,n,t,s,r,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Nn(e,n),he(n,t,o,e,s,r||a&&Sn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,c)=>{let p=l&&c<o.length-1;if(u.type==="RestElement")G(u.argument,n,t,s,r,false);else {let m=u;m.computed&&B(m.key,n,t),G(m.value,n,t,s,r||p,!m.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;G(i.type==="RestElement"?i.argument:i,n,t,s,r,true);}return}case "AssignmentPattern":G(e.left,n,t,s,r,a);return;case "RestElement":G(e.argument,n,t,s,r,true);return;default:return}}function se(e,n,t){if(e)switch(e.type){case "AssignmentPattern":B(e.right,n,t),se(e.left,n,t);return;case "ObjectPattern":for(let s of e.properties)se(s.type==="RestElement"?s.argument:s.value,n,t);return;case "ArrayPattern":for(let s of e.elements)s&&se(s,n,t);return;case "RestElement":se(e.argument,n,t);return;default:return}}function gn(e,n,t,s){for(let r of e.declarations)G(r.id,n,t,"local",s,false),B(r.init,n,t);}function $e(e,n,t){let s=e,r=q(n),a=s.params??[];for(let o of a)G(o,r,t,"parameter",false,true);for(let o of a)se(o,r,t);B(s.body,r,t);}function B(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Nn(e,n),e.type){case "Identifier":ge(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=q(n);for(let r of e.body??[])B(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":$e(e,n,t);return;case "FunctionDeclaration":{let s=e.id;s&&he(n,t,s.name,s,"local",false),$e(e,n,t);return}case "CatchClause":{let s=e,r=q(n);G(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=q(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=q(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=q(n),a=s.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)G(o.id,r,t,"local",false,true);else B(a,r,t);B(s.body,r,t);return}case "VariableDeclaration":gn(e,n,t,false);return;case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&he(n,t,r.name,r,"import",Sn(r.name));}return}case "ExportNamedDeclaration":{let s=e;if(s.declaration){let r=s.declaration;if(r.type==="VariableDeclaration")gn(r,n,t,true);else if(r.type==="FunctionDeclaration"){let a=r.id;a&&he(n,t,a.name,a,"local",true),$e(r,n,t);}else B(r,n,t);}else for(let r of s.specifiers)ge(n,r.local.name);return}case "TSAsExpression":B(e.expression,n,t);return;case "TSTypeAliasDeclaration":re(e.typeAnnotation,n);return;case "JsonExpression":Le(e.body,n,t);return;case "JSXOpeningElement":{let s=e;Bn(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 Bn(e,n,t){e&&(e.type==="JSXIdentifier"?ge(n,e.name):e.type==="JSXMemberExpression"&&Bn(e.object,n));}function Le(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Le(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))Le(s[r],n,t);}function Ve(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};B(e,q(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 Dt=new Set(["const","import"]),ae=e=>({binds:new Map,parent:e});function Ct(e,n){for(let t=e;t;t=t.parent){let s=t.binds.get(n);if(s)return s}}function _(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?_(n.argument):_(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?_(n):[]);case "AssignmentPattern":return _(e.left);case "RestElement":return _(e.argument);default:return []}}var Se=(e,n,t)=>{for(let s of _(n))e.binds.set(s.name,t);};function xe(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of _(e))xe(a,n,t);return}let s=e.name,r=Ct(n,s);r&&Dt.has(r)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,s,r==="import"?"import":"const")));}function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let s=e;xe(s.left,n,t),M(s.right,n,t);return}case "UpdateExpression":{xe(e.argument,n,t);return}case "Program":case "BlockStatement":{let s=ae(n);for(let r of e.body??[])M(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=ae(n);for(let a of s.params??[])Se(r,a,"param");M(s.body,r,t);return}case "CatchClause":{let s=e,r=ae(n);Se(r,s.param,"param"),M(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=ae(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Se(r,o.id,a.kind);else a&&M(a,r,t);M(s.right,n,t),M(s.test,r,t),M(s.update,r,t),M(s.body,r,t);return}case "VariableDeclaration":{let s=e;for(let r of s.declarations)M(r.init,n,t),Se(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&&M(s.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":M(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)M(i,n,t);else M(o,n,t);}return}}}function Ge(e){let n={out:[],invalid:new WeakSet};return M(e,ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var oe=e=>({decls:new Map,parent:e});function Rt(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 Ne=(e,n)=>{for(let t of Z(n))e.decls.set(t.name,t);};function D(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let s=Rt(n,e.name);s&&s!==e&&t.set(e,s);return}case "MemberExpression":{let s=e;D(s.object,n,t),s.computed&&D(s.property,n,t);return}case "Property":{let s=e;s.computed&&D(s.key,n,t),D(s.value,n,t);return}case "Program":case "BlockStatement":{let s=oe(n);for(let r of e.body??[])D(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=oe(n);for(let o of s.params??[])Ne(a,o);D(s.body,a,t);return}case "CatchClause":{let s=e,r=oe(n);Ne(r,s.param),D(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=oe(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ne(r,o.id);else a&&D(a,r,t);D(s.right,n,t),D(s.test,r,t),D(s.update,r,t),D(s.body,r,t);return}case "VariableDeclaration":{for(let s of e.declarations)Ne(n,s.id),D(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":D(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)D(i,n,t);else D(o,n,t);}return}}}function Mt(e){let n=new WeakMap;return D(e,oe(void 0),n),n}var Ke=e=>e.typeAnnotation,We=e=>e.returnType,L=e=>e.type==="Identifier"?e.name:null,bn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?L(n.id):null}return L(e)},le=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function kn(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 ze(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=ze(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 X=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):Je(e)},qe=e=>e.type==="ArrowFunctionExpression",wn=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,be=e=>wn(e)?e.args[0]:e,ue=e=>wn(e)?e:s.promise(e);function ie(e){return e.t==="tuple"?true:e.t==="array"?ie(e.items):e.t==="union"?e.of.some(ie):false}function Be(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Be(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Be(e.bound):false}var V=(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 vn(e){let n=We(e);return n?{t:"fn",params:e.params.map((s$1,r)=>({name:L(s$1)??`arg${r}`,type:Ke(s$1)??s.unknown})),returns:e.async?ue(n):n}:null}var K={then:{},else:{}},Pn=new Set(["string","number","boolean","undefined","function","object"]),En={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function Fn(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 Ot=s.literal(true),jt=s.literal(false),x=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Ot,jt]:[e];function An(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 Ut(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let s=x(e).filter(r=>subtype(r,n,t));return s.length?normalizeUnion(s):n}function $t(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let s=x(e).filter(r=>!subtype(r,n,t));return s.length?normalizeUnion(s):null}function Lt(e,n){if(!Pn.has(n))return null;if(e.t==="unknown"||e.t==="any")return En[n]??e;let t=x(e).filter(s=>Fn(s,n));return t.length?normalizeUnion(t):En[n]??e}function Vt(e,n){if(!Pn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=x(e).filter(s=>!Fn(s,n));return t.length?normalizeUnion(t):null}function Dn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function Cn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Tn(e,n,t,s,r){let a=x(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 Rn(e,n,t){let s=x(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 xt(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function Gt(e,n,t){let s=x(e),r=s.filter(a=>!equals(a,n,t));return r.length&&r.length<s.length?normalizeUnion(r):null}var Kt=e=>e.t==="null"||e.t==="undefined",In=e=>Kt(e)||e.t==="literal"&&!e.value,Wt=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=x(e),t=n.filter(s=>!In(s));return t.length&&t.length<n.length?normalizeUnion(t):null},zt=e=>{let n=x(e),t=n.filter(In);return t.length&&t.length<n.length?normalizeUnion(t):null},Mn=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,j=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Jt=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function pe(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let f=s.left,N=s.right;if(f.type==="Literal"&&typeof f.value=="string"&&N.type==="Identifier"){let g=N.name,v=T(n,g);if(!v)return K;let w=String(f.value);return j(g,Rn(v,w,true),Rn(v,w,false))}return K}if(!Jt(s.operator))return K;let r=s.operator==="!=="||s.operator==="!=",a=s.left,o=s.right,i=An(a,o)??An(o,a);if(i){let f=T(n,i.name);if(!f)return K;let N=Lt(f,i.tag),g=Vt(f,i.tag);return r?j(i.name,g,N):j(i.name,N,g)}let l=Mn(a),u=Mn(o),c=l?o:u?a:null;if((l||u)&&c?.type==="Identifier"){let f=c.name,N=T(n,f);if(!N)return K;let v=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],w=x(N),ln=w.filter(Ee=>v.includes(Ee.t)),ve=w.filter(Ee=>!v.includes(Ee.t)),un=ln.length?normalizeUnion(ln):null,cn=ve.length&&ve.length<w.length?normalizeUnion(ve):null;return r?j(f,cn,un):j(f,un,cn)}let p=Dn(a,o)??Dn(o,a);if(p){let f=T(n,p.name);if(!f)return K;let N=xt(f,p.lit,t),g=Gt(f,p.lit,t);return r?j(p.name,g,N):j(p.name,N,g)}let m=Cn(a,o)??Cn(o,a);if(m){let f=T(n,m.name);if(!f)return K;let N=Tn(f,m.prop,m.lit,true,t),g=Tn(f,m.prop,m.lit,false,t);return r?j(m.name,g,N):j(m.name,N,g)}return K}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=pe(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=_t(e,n,t);if(s)return s}if(e.type==="Identifier"){let s=e.name,r=T(n,s);if(r)return j(s,Wt(r),zt(r))}return K}function qt(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 _t(e,n,t){let s=e.callee;if(s.type!=="Identifier")return null;let r=T(n,s.name);if(!r)return null;let a=qt(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=T(n,i);return l?j(i,Ut(l,a.type,t),$t(l,a.type,t)):null}var W=(e,n)=>Object.keys(n).length?I(e,n):e;function O(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":{let n=e.body;return n.length>0&&O(n[n.length-1])}case "IfStatement":{let n=e;return !!n.alternate&&O(n.consequent)&&O(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&O(n.finalizer))return true;let t=!n.handler||O(n.handler.body);return O(n.block)&&t}default:return false}}var cs=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ps(e){let n=[];return e.maxDepth!==void 0&&n.push(Ie(e.maxDepth)),e.maxNodes!==void 0&&n.push(Oe(e.maxNodes)),e.maxArgs!==void 0&&n.push(je(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Me(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(Pe(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(Fe(e.memberDepth)),n}function ds(e,n){let t=e.typeRefs;return t?.length?t.filter(s=>!(s.name in n)).map(s=>E("unknown-name",{type:"Identifier",name:s.name,loc:s.loc},`Cannot find name '${s.name}'.`)):[]}function zn(e,n,t={}){let s$1={...cs(n.types),...n.schemes,...ms(e)},r=Ge(e),a={overlay:new WeakMap,sink:te(),env:n,schemes:s$1,importNames:new Set,resolvedSchemes:new Set,invalidTargets:r.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?compileProfile(t.profile):void 0;o&&configureTypeLimits(o.typeLimits);try{let i,l=ys(e,a);try{i=y(e,l,a);}catch(p){if(p instanceof TypeEvalLimitError)a.sink.report(E("too-deep",e,p.message));else if(p instanceof UnionTooComplexError)a.sink.report(E("too-complex-union",e,p.message));else throw p;i=s.unknown;}let u=[];o&&u.push(...ye(o)),t.limits&&u.push(...ps(t.limits)),t.resultType&&u.push(Ue(t.resultType,s$1));let c=[...a.sink.all,...r.diagnostics,...ds(e,s$1),...t.unused?Ve(e,t.unused):[],...u.length?Ce(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:c,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function fs(e,n,t={}){let s$1=zn(e,n,t),r={},a=new Map,o,i=u=>{let c=[];if(u.type==="VariableDeclaration")for(let p of u.declarations){let m=L(p.id),f=s$1.overlay.get(p);m&&f&&(r[m]=f.type,c.push(m));}else if(u.type==="FunctionDeclaration"){let p=u.id?.name,m=s$1.overlay.get(u);p&&m&&(r[p]=m.type,c.push(p));}return c};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let c=u;if(c.declaration)for(let p of i(c.declaration))a.set(p,p);else for(let p of c.specifiers)a.set(p.exported.name,p.local.name);}else if(u.type==="ExportDefaultDeclaration"){let c=s$1.overlay.get(u.declaration);o=c?c.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,c]of a)r[c]&&(l[u]={type:r[c]});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 ms=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 ys(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 c=l.type==="ImportSpecifier"?l.imported.name:"default",p=discover(i,[c],n.schemes);p?s$1[u]=p.type:(n.sink.report(S.noSuchMember(l,i,c)),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 Jn: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=T(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,Ss(e,n,t),n);case "CallExpression":return h(t,e,ks(e,n,t,s$1),n);case "ArrowFunctionExpression":return tn(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,et(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 $(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 $(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 c=t.overlay.get(a.object)?.type,p=c&&apparentType(c,t.schemes);p&&(p.t==="array"||p.t==="tuple")&&p.readonly&&t.sink.report(S.readonlyWrite(a,p));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(r.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let p=y(r.right,n,t);return t.assignFlow.set(e,widenLiteral(p)),h(t,e,p,n)}if(u&&i!==null){let p=y(r.right,n,t);return subtype(p,u,t.schemes)||t.sink.report(S.notAssignable(r.right,p,u,t.schemes)),t.assignFlow.set(e,nt(u,p,t.schemes)),h(t,e,p,n)}let c=J(r.right,o,n,t);return h(t,e,c,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 we(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?Ds(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return h(t,e,Ks(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,Ws(r.operator,a,o),n)}case "UnaryExpression":return h(t,e,qs(e,n,t),n);case "ConditionalExpression":{let r=e;y(r.test,n,t);let a=pe(r.test,n,t.schemes),o=y(r.consequent,W(n,a.then),t),i=y(r.alternate,W(n,a.else),t);return h(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return h(t,e,_s(e,n,t),n);case "ArrayExpression":return h(t,e,at(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":{let r=ke(e.body,n,t,new Set(t.importNames)).scope;return h(t,e,s.unknown,r)}case "JsonExpression":return h(t,e,Ye(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=fe(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 hs=new Set(["constructor","prototype","__proto__"]);function gs(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 Ss(e,n,t){let s$1=y(e.object,n,t),r=gs(e);if(r!==null&&hs.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"&&jn(e,s$1,i.value,t),s.unknown)}let a=e.property.name,o=discover(s$1,[a],t.schemes);return o?o.type:(jn(e,s$1,a,t),s.unknown)}function jn(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 Ns(e,n,t){if(!e||e.type!=="Identifier")return;let s=e.name;if(T(n,s)===void 0)return;let r=t.schemes[s];return r&&r.params.length===0?r.body:void 0}function Bs(e,n,t,s$1){let r=V(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 Jn="TSLiteSyntheticArg",bs=e=>({type:Jn,schema:e});function qn(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=V(y(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)s$1.push(bs(l));else r={elem:i.t==="array"?i.items:s.unknown,node:a};}return {nodes:s$1,spread:r}}function ks(e,n,t,s$1){let r=e.arguments,a=ze(e.callee);if(a){let p=t.env.accessors?.[a];if(p){let m=kn(r);if(m){let f=discover(p,m,t.schemes);return f?f.type:(t.sink.report(S.noSuchMember(e,p,m.join("."))),s.unknown)}return r.forEach(f=>y(f,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let p=Ns(r[0],n,t);for(let m=1;m<r.length;m++)y(r[m],n,t);return p??s.unknown}if(a&&t.env.matchers?.has(a))return Bs(e,r,n,t);let o=y(e.callee,n,t);if(o.t==="any")return r.forEach(p=>y(p,n,t)),s.any;if(o.t==="overload")return vs(e,o,n,t,s$1);if(o.t!=="fn")return r.forEach(p=>y(p,n,t)),t.sink.report(S.notCallable(e,o)),s.unknown;let i=qn(r,n,t),l=i.nodes.map(p=>_n(p,n,t)),u=Yn(e),c=!u||Hn(o,u.length);return c||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),Xn(e,o,i.nodes,l,n,t,i.spread,s$1,c?u:void 0)}function _n(e,n,t){if(qe(e))return s.any;if(e.type!=="CallExpression")return y(e,n,t);let s$1=te(),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 Xn(e,n,t,s$1,r,a,o=null,i,l){let u=f=>{if(!i)return f;let N=substitute(n.returns,f);if(N.t==="fn"&&i.t==="fn"){let g=f,v=Math.min(N.params.length,i.params.length);for(let w=0;w<v;w++)g=unify(N.params[w].type,i.params[w].type,g)??g;return unify(N.returns,i.returns,g)??g}return unify(N,i,f)??f},c=l?Ts(e,n,l,a):void 0,p=c??u(instantiateLoose(n,s$1).bindings);t.forEach((f,N)=>{if(qe(f)){let g=widenType(substitute(n.params[N]?.type??s.any,p));s$1[N]=tn(f,r,a,g);}else if(f.type==="CallExpression"&&s$1[N].t==="any")s$1[N]=y(f,r,a,substitute(n.params[N]?.type??s.unknown,p));else if(f.type==="Literal"){let g=n.params[N]?.type??s.unknown,v=g.t==="var"?g.bound?substitute(g.bound,p):g:substitute(g,p);Be(v)&&(s$1[N]=h(a,f,X(f),r));}else if(f.type==="ArrayExpression"){let g=substitute(n.params[N]?.type??s.unknown,p);ie(g)&&(s$1[N]=rn(f,g,r,a));}});let m=c??u(instantiateLoose(n,s$1).bindings);return c||ws(e,n,m,a),Fs(e,n,s$1,m,a,t,o),t.forEach((f,N)=>{let g=n.params[N];f.type==="ObjectExpression"&&g&&!g.variadic&&sn(f,substitute(g.type,m),a);}),widenInferred(groundVars(substitute(n.returns,m),a.schemes))}var Un=new WeakMap;function Qn(e){let n=Un.get(e);if(n)return n;let t=new Map,s=new WeakSet;for(let r of e.params)P(r.type,t,s);return P(e.returns,t,s),Un.set(e,t),t}function P(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":P(e.items,n,t);return;case "union":for(let s of e.of)P(s,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let s in e.props)P(e.props[s].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let s of e.params)P(s.type,n,t);P(e.returns,n,t);return;case "overload":for(let s of e.signatures){for(let r of s.params)P(r.type,n,t);P(s.returns,n,t);}return;case "apply":for(let s of e.args)P(s,n,t);return;case "keyof":P(e.of,n,t);return;case "index":P(e.obj,n,t),P(e.key,n,t);return;case "mapped":P(e.over,n,t),P(e.body,n,t);return;default:return}}function ws(e,n,t,s){let r=Qn(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 vs(e,n,t,s,r){let a=qn(e.arguments,t,s),o=a.nodes,i=o.map(c=>_n(c,t,s)),l=Yn(e),u=l?n.signatures.filter(c=>Hn(c,l.length)):n.signatures;if(l&&!u.length){let c=n.signatures.reduce((p,m)=>Math.max(p,m.typeParams?.length??0),0);return s.sink.report(S.wrongTypeArgumentCount(e,c,l.length)),$n(e,n.signatures,a,o,i,t,s,r,void 0)}return $n(e,u,a,o,i,t,s,r,l)}function $n(e,n,t,s$1,r,a,o,i,l){let u={t:"overload",signatures:n},c=m=>t.spread?Rs(m,s$1.length):Ms(m,s$1.length),p=u.signatures.find(m=>c(m)&&Ps(m,r,o));if(!p){let m=u.signatures.filter(c);m.length===1?p=m[0]:u.signatures.length===1&&(p=u.signatures[0]);}return p?Xn(e,p,s$1,r,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,r)),s.unknown)}function Es(e,n,t,s$1){let r=T(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 fe(e,n,t,s$1){let r=a=>{if(Array.isArray(a)){let u=false,c=a.map(p=>{let m=r(p);return m!==p&&(u=true),m});return u?c:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Es(o.path,n,t,s$1);if(o.t==="apply"&&typeof o.name=="string"&&(As(o.name,n,t,s$1),!(o.name in t.schemes)))return s.any;let i=false,l={};for(let u of Object.keys(o)){let c=r(o[u]);c!==o[u]&&(i=true),l[u]=c;}return i?l:o};return r(e)}function As(e,n,t,s){if(t.resolvedSchemes.has(e))return;let r=t.schemes[e];if(!r)return;t.resolvedSchemes.add(e);let a=fe(r.body,n,t,s);a!==r.body&&(t.schemes[e]={...r,body:a});}function Ds(e,n,t,s,r){let a={...t,sink:te(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=fe(e,n,a,s);return a.sink.hasErrors()?e:r?o:groundVars(o,t.schemes)}var nn=(e,n,t)=>{let s=Ke(e);return s===void 0?s:fe(s,n,t,e)},Cs=(e,n,t)=>{let s=We(e);return s===void 0?s:fe(s,n,t,e)},Yn=e=>{let n=e.typeArguments;return n?.length?n:void 0},Hn=(e,n)=>(e.typeParams?.length??0)===n;function Ts(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 Qn(n)){let u=o[i];if(!u)continue;let c=groundVars(substitute(l,o),s.schemes);subtype(u,c,s.schemes)||s.sink.report(S.constraintViolation(e,i,u,c));}return o}function Rs(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 Ms(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 Ps(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 Fs(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 c=n.params[u];if(c.variadic)break;let p=substitute(c.type,s$1);if(u>=t.length){!c.optional&&!o&&r.sink.report(S.missingArgument(e,c.name,p));continue}subtype(t[u],p,r.schemes)||r.sink.report(S.notAssignable(i(u),t[u],p,r.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,c=n.params.filter(p=>!p.optional&&!p.variadic).length;if(!(u>=c&&(l||u<n.params.length))){r.sink.report(S.spreadArgument(o.node));return}if(l){let p=substitute(l.type,s$1),m=p.t==="array"?p.items:s.unknown;subtype(o.elem,m,r.schemes)||r.sink.report(S.notAssignable(o.node,o.elem,m,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=V(n,s.schemes);switch(e.type){case "Literal":{let o=X(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(ie(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 c=u,p=le(c),m=p!==null?ownProp(r.props,p)?.type:void 0,f=m?J(c.value,m,t,s):y(c.value,t,s);p!==null&&(o[p]={type:f}),h(s,u,f,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=tn(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 tn(e,n,t,s$1){let r=s$1&&s$1.t==="fn"?s$1:void 0,a={},o=new Map,i=e.params.map((f,N)=>{let g=f,v=L(g),w=nn(g,n,t)??r?.params[N]?.type??s.unknown;return v?(a[v]=w,(w.t==="union"||w.t==="boolean")&&o.set(v,w)):g.type!=="Identifier"&&Q(g,w,a,n,t),t.overlay.set(g,{type:w,scope:n}),{name:v??`arg${N}`,type:w}}),l=I(n,a),u=e.body,c=Cs(e,n,t);if(u.type!=="BlockStatement"&&c){let f=e.async?be(c):c;J(u,f,l,t);let N=e.async?ue(c):c;return h(t,e,{t:"fn",params:i,returns:N},n)}let p=u.type==="BlockStatement"?h(t,u,et(u,l,t,new Set(Object.keys(a)),o),l):y(u,l,t),m=e.async?ue(p):p;if(c){let f=e.async?be(c):c,N=e.async?p:m;subtype(N,f,t.schemes)||t.sink.report(S.notAssignable(u,m,c,t.schemes));let g=e.async?ue(c):c;return h(t,e,{t:"fn",params:i,returns:g},n)}return h(t,e,{t:"fn",params:i,returns:widenType(m)},n)}function ne(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ne(n.argument):ne(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ne(n.argument):ne(n):[]);case "AssignmentPattern":return ne(e.left);default:return []}}function Zn(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ne(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Zn(e.declaration):[]}function et(e,n,t,s$1=new Set,r){let{returns:a}=ke(e.body,n,t,s$1,r),o=!O(e);return a.length===0?o?s.void:s.union([]):normalizeUnion(o?[...a,s.undefined]:a)}var Is=[s.literal(true),s.literal(false)];function Os(e){return e.t==="union"?e.of:e.t==="boolean"?Is:[e]}function nt(e,n,t){let s=Os(e);if(s.length<=1)return e;let r=s.filter(o=>subtype(n,o,t));if(r.length===0)return e;let a=normalizeUnion(r);return subtype(n,a,t)?a:e}function tt(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let s=t,r=s.left;if(s.operator!=="="||r.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:r.name,type:a}:null}function Y(e,n,t){switch(e.type){case "BlockStatement":{let s=n;for(let r of e.body){let a=Y(r,s,t);if(s=a.types,a.exits)return {types:s,exits:true}}return {types:s,exits:false}}case "ExpressionStatement":{let s=tt(e,t);if(!s)return {types:n,exits:false};let r=new Map(n);return r.set(s.name,s.type),{types:r,exits:false}}case "IfStatement":{let s=st(e,n,t);if(s.size===0)return {types:n,exits:O(e)};let r=new Map(n);for(let[a,o]of s)r.set(a,o);return {types:r,exits:O(e)}}case "TryStatement":{let s=e,r=[],a=Y(s.block,n,t);if(a.exits||r.push(a.types),s.handler){let i=Y(s.handler.body,n,t);i.exits||r.push(i.types);}let o=js(n,r);return s.finalizer&&(o=Y(s.finalizer,o,t).types),{types:o,exits:O(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function st(e,n,t){let s=Y(e.consequent,n,t),r=e.alternate?Y(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];s.exits||l.push(s.types.get(i)??n.get(i)),r.exits||l.push(r.types.get(i)??n.get(i)),l.length&&o.set(i,normalizeUnion(l));}return o}function rt(e,n){let t=new Map,s=r=>{let a=T(e,r);a!==void 0&&t.set(r,a);};for(let r of n.evolving)s(r);for(let r of n.declaredMut.keys())s(r);return t}function js(e,n){let t=new Map(e);if(n.length===0)return t;for(let s of e.keys()){let r=n.map(a=>a.get(s)??e.get(s));t.set(s,normalizeUnion(r));}return t}function Us(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let s=rt(n,t),r=Y(e,s,t);if(r.exits)return n;let a={};for(let[o,i]of r.types)s.has(o)&&i!==s.get(o)&&(a[o]=i);return W(n,a)}function ke(e,n,t,s=new Set,r){if(!(r&&r.size)&&!$s(e))return Ln(e,n,t,s);let a=new Set(t.evolving),o=new Map(t.declaredMut);if(r)for(let[i,l]of r)t.declaredMut.set(i,l);try{return Ln(e,n,t,s)}finally{t.evolving.clear();for(let i of a)t.evolving.add(i);t.declaredMut.clear();for(let[i,l]of o)t.declaredMut.set(i,l);}}function $s(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let s=t.declaration;if(s?.type==="VariableDeclaration"&&s.kind!=="const")return true}}return false}function Ln(e,n,t,s){let r=n,a=[];for(let o of e){let i=o;for(let l of Zn(i))s.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):s.add(l.name);if(i.type==="VariableDeclaration")r=we(i,r,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")r=we(l.declaration,r,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=y(l.declaration,r,t),c=L(l.declaration.id);c&&(r=I(r,{[c]:u}));}else for(let u of l.specifiers)T(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=L(i.id);u&&(r=I(r,{[u]:l}));}else if(i.type==="IfStatement"){let l=i,u=t.evolving.size||t.declaredMut.size?rt(r,t):null;if(a.push(...$(i,r,t)),u&&u.size){let c=st(l,u,t);c.size&&(r=W(r,Object.fromEntries(c)));}!l.alternate&&O(l.consequent)&&(r=W(r,pe(l.test,r,t.schemes).else));}else {a.push(...$(i,r,t));let l=tt(i,t);l?r=W(r,{[l.name]:l.type}):(i.type==="BlockStatement"||i.type==="TryStatement")&&(r=Us(i,r,t));}}return {scope:r,returns:a}}function $(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=pe(s$1.test,n,t.schemes),a=$(s$1.consequent,W(n,r.then),t);return s$1.alternate&&a.push(...$(s$1.alternate,W(n,r.else),t)),h(t,e,s.unknown,n),a}case "BlockStatement":{let{returns:s$1}=ke(e.body,n,t);return h(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,r=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?r=we(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=$(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=bn(s$1.left),i=o?I(n,{[o]:a}):n,l=$(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=$(s$1.block,n,t);if(s$1.handler){let a=s$1.handler.param,o=a?L(a):null,i=o?I(n,{[o]:s.unknown}):n;r.push(...$(s$1.handler.body,i,t));}return s$1.finalizer&&r.push(...$(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=ke(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 Ls(e,n,t){let s$1=discover(e,[n],t.schemes);return s$1?s$1.type:s.unknown}function Vs(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function xs(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 Gs(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function Q(e,n,t,s$1,r){switch(e.type){case "Identifier":{let a=nn(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]);Q(a.left,l,t,s$1,r);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Q(o.argument,xs(n,a),t,s$1,r);continue}let i=o,l=le(i);l!=null&&a.push(l);let u=l!=null?Ls(n,l,r):s.unknown;Q(i.value,u,t,s$1,r);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Q(i.argument,Gs(n,o),t,s$1,r):Q(i,Vs(n,o),t,s$1,r);});return}}}function sn(e,n,t){let s=V(n,t.schemes),a=(s.t==="union"?s.of.map(o=>V(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=le(i);if(l===null)continue;let u=a.filter(c=>l in c.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 we(e,n,t){let s$1={};for(let r of e.declarations){let a=r.id,o=L(a),i=nn(a,n,t);if(!r.init){if(o&&e.kind!=="const"){i?(s$1[o]=i,Vn(o,i,t)):(s$1[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(r)),o&&(s$1[o]=i??s.unknown);continue}let l=i??(r.init.type==="ArrowFunctionExpression"?vn(r.init):null),u=o&&l?I(n,{[o]:l}):n,c,p=null;i?(J(r.init,i,u,t),r.init.type==="ObjectExpression"&&sn(r.init,i,t),c=i,p=i,(i.t==="union"||i.t==="boolean")&&r.init.type==="Literal"&&(c=nt(i,X(r.init),t.schemes))):(c=y(r.init,u,t),e.kind!=="const"&&(c=widenLiteral(c)),p=c),h(t,r,c,n),o?(s$1[o]=c,e.kind!=="const"&&p&&Vn(o,p,t)):Q(a,c,s$1,n,t);}return h(t,e,s.unknown,n),I(n,s$1)}function Vn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Ks(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:zs.has(a)?s.number:s.boolean}var xn={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},Xe=e=>e.t==="null"||e.t==="undefined";function Ws(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=>!Xe(a)),t]);if(e==="||")return normalizeUnion([...s$1.filter(a=>!Xe(a)&&!(a.t==="literal"&&!a.value)),t]);let r=s$1.flatMap(a=>Xe(a)?[a]:a.t==="literal"?a.value?[]:[a]:xn[a.t]?[xn[a.t]]:[]);return normalizeUnion([...r,t])}var zs=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),Js=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function qs(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 Js;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function _s(e,n,t){let s={},r,a=[],o=[],i=false,l=false;for(let u of e.properties){let c=u;if(c.type==="SpreadElement"){let g=V(y(c.argument,n,t),t.schemes);if(g.t==="object"){for(let v in g.props)s[v]=g.props[v];g.index&&(r={key:g.index.key,type:g.index.value});}continue}let p=c,m=y(p.value,n,t),f=widen(m);if(h(t,c,m,n),p.computed){let g=V(y(p.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(s[g.value]={type:f},a.push(f)):g.t==="literal"&&typeof g.value=="number"?(s[String(g.value)]={type:f},a.push(f),o.push(f)):g.t==="string"?(i=true,a.push(f)):g.t==="number"&&(l=true,a.push(f),o.push(f));continue}let N=le(p);N!==null&&(s[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}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 at(e,n,t){let s$1=[];for(let r of e.elements){if(!r)continue;let a=r;if(a.type==="SpreadElement"){let o=V(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=V(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,c)=>i(u,r.elements[c]));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 c=u;if(c.type==="SpreadElement"){y(c.argument,t,s$1);continue}l.push(i(c,r.items));}return h(s$1,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return at(e,t,s$1)}function Ye(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=>Ye(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:Ye(r[o],n,t,s$1)};return {t:"object",props:a}}var Xs=(e,n)=>({...e,typeAnnotation:n}),Qs=(e,n)=>({...e,returnType:n}),Ys=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function ot(e,n){return e.get(n)?.type}function Hs(e,n){return e.get(n)?.scope}function Zs(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function er(e,n){let t=e.get(n)?.scope;return t?[...Ae(t)].map(([s,r])=>({key:s,type:r,optional:false})):[]}var nr=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function tr(e){if(!e||e.computed)return;let n=e.key;if(n?.type==="Identifier")return n.name;if(n?.type==="Literal"&&typeof n.value=="string")return n.value}function on(e,n,t,s={}){let r=e[n],a=e[n+1];if(!(!r||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===r?a.returnType:void 0;case "VariableDeclarator":return a.init===r?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(nr)?.returnType;case "CallExpression":case "NewExpression":{let o=(a.arguments??[]).indexOf(r);if(o<0)return;let i=ot(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==r||e[n+2]?.type!=="ObjectExpression")return;let i=on(e,n+2,t,s),l=tr(a);return !i||!l?void 0:discover(i,[l],s)?.type}case "ArrayExpression":{let o=on(e,n+1,t,s);return o?discover(o,["[]"],s)?.type:void 0}default:return}}function sr(e,n){return e.filter(t=>t.node===n)}export{mn as FUNCTION_KINDS,Xs as annotate,Qs as annotateReturn,Ys as asExpression,Re as calleeAllowlist,Te as capabilityNodes,zn as check,I as childScope,Mt as collectBindings,Ge as collectMutations,Ve as collectUnused,on as contextualTypeAt,pt as createEnv,te as createSink,S as diag,sr as diagnosticsAt,fs as extractModuleType,kt as fromCapability,Ce as guard,ye as guardsFromCompiled,T as lookup,E as makeDiagnostic,je as maxArgs,Pe as maxCallNesting,Ie as maxDepth,Me as maxFunctionNesting,me as maxNestingOf,Oe as maxNodes,Zs as memberCompletions,Fe as memberDepth,dt as resolveNamed,ft as resolveScheme,Ue as resultType,pn as rootScope,Hs as scopeAt,er as scopeCompletions,ot as typeAt,Ae as visibleNames};
1
+ import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,ownProp,withoutUndefined,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 mn=(e={})=>rootScope(e),O=(e,n)=>childScope(e,n),R=(e,n)=>lookup(e,n),Te=e=>visibleNames(e),yt=(e={},n={},t={},s={},r=new Set,a=new Set,o={})=>({scope:mn(e),types:n,schemes:t,accessors:s,asserters:r,matchers:a,modules:o}),ht=(e,n)=>e.types[n],gt=(e,n)=>e.schemes[n];var yn={"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","not-arithmetic-operand":"type","operator-not-applicable":"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"},B=(e,n,t)=>({code:e,kind:yn[e],severity:"error",node:n,message:t}),A=(e,n,t,s="error")=>({code:e,kind:yn[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 B("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${a}`)},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),unknownModule:(e,n)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(s=>format(s)).join(", ")}).`),constraintViolation:(e,n,t,s)=>B("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(s)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("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)=>A("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("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)=>B("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>A("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"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,s)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(s)}'.`)};function te(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Me(e,n,t={}){return n.flatMap(s=>s(e,t))}function H(e,n){let t=s=>{n(s);for(let r of childrenOf(s))t(r);};t(e);}var vt=e=>Array.isArray(e)?e:[e],gn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Pe(e,n="error"){return t=>{let s=[];return H(t,r=>{let a=nodeViolation(r,e);a&&s.push(A("node-not-allowed",r,`'${a}' is not allowed by the capability profile.`,n));}),s}}function Sn(e,n="error"){let t=e.typeTier;return s=>{if(t==="author")return [];let r=[];return H(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(A("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),r}}function w(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=>w(t.type,n))||!!e.index&&w(e.index.value,n);case "array":return w(e.items,n);case "tuple":return e.elements.some(t=>w(t,n));case "union":case "intersection":return e.of.some(t=>w(t,n));case "fn":return e.params.some(t=>w(t.type,n))||w(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(s=>w(s.type,n))||w(t.returns,n));case "keyof":return w(e.of,n);case "index":return w(e.obj,n)||w(e.key,n);case "mapped":return w(e.over,n)||w(e.body,n);case "conditional":return w(e.check,n)||w(e.extends,n)||w(e.then,n)||w(e.else,n);case "returnType":case "parameters":return w(e.fn,n);case "apply":return e.args.some(t=>w(t,n));default:return false}}function Nn(e,n="error"){return t=>{if(!e.typeStrict)return [];let s=[];return H(t,r=>{let a=r;for(let o of [a.typeAnnotation,a.returnType])if(o&&w(o)){s.push(A("any-not-allowed",r,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),s}}function Fe(e,n="error"){let t=new Set(e);return s=>{let r=[];return H(s,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")r.push(A("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||r.push(A("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),r}}function he(e,n,t={}){let s=new Set(vt(e)),r=t.severity??"error",a=[...s].join("/");return o=>{let i=[],l=(u,p)=>{let d=s.has(u.type),m=d?p+1:p;d&&m>n&&i.push(A("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,r));for(let f of childrenOf(u))l(f,m);};return l(o,0),i}}var Oe=(e=3,n="error")=>he(gn,e,{hint:"use a pipe instead of nesting functions",severity:n}),Ie=(e,n="error")=>he("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),je=(e,n="error")=>he("MemberExpression",e,{severity:n});function $e(e,n="error"){return t=>{let s=[],r=(a,o)=>{if(o>e){s.push(A("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 Le(e,n="error"){return t=>{let s=0;return H(t,()=>{s++;}),s>e?[A("too-large",t,`Expression has ${s} nodes (max ${e}).`,n)]:[]}}function Ue(e,n="error"){return t=>{let s=[];return H(t,r=>{if(r.type==="CallExpression"){let a=r.arguments;a&&a.length>e&&s.push(A("too-large",r,`Call has ${a.length} arguments (max ${e}).`,n));}}),s}}function Ve(e,n={},t="error"){return (s,r)=>{let a=r.overlay?.get(s)?.type;return a?subtype(a,e,n)?[]:[A("wrong-result-type",s,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function ge(e){let n=[Pe(e),Sn(e),Nn(e)];return e.hostAllow!=="*"&&n.push(Fe([...e.hostAllow])),n}function At(e){return ge(compileProfile(e))}var q=e=>({bindings:new Map,parent:e}),Bn=e=>e.charCodeAt(0)===95;function Se(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 re(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)re(s,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let s=t.path[0];typeof s=="string"&&Ne(n,s);return}for(let s of Object.keys(t))re(t[s],n);}function kn(e,n){let t=e;re(t.typeAnnotation,n),re(t.returnType,n);}function Ne(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;kn(e,n),Se(n,t,o,e,s,r||a&&Bn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")x(u.argument,n,t,s,r,false);else {let m=u;m.computed&&b(m.key,n,t),x(m.value,n,t,s,r||d,!m.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 se(e,n,t){if(e)switch(e.type){case "AssignmentPattern":b(e.right,n,t),se(e.left,n,t);return;case "ObjectPattern":for(let s of e.properties)se(s.type==="RestElement"?s.argument:s.value,n,t);return;case "ArrayPattern":for(let s of e.elements)s&&se(s,n,t);return;case "RestElement":se(e.argument,n,t);return;default:return}}function bn(e,n,t,s){for(let r of e.declarations)x(r.id,n,t,"local",s,false),b(r.init,n,t);}function Ge(e,n,t){let s=e,r=q(n),a=s.params??[];for(let o of a)x(o,r,t,"parameter",false,true);for(let o of a)se(o,r,t);b(s.body,r,t);}function b(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(kn(e,n),e.type){case "Identifier":Ne(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=q(n);for(let r of e.body??[])b(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":Ge(e,n,t);return;case "FunctionDeclaration":{let s=e.id;s&&Se(n,t,s.name,s,"local",false),Ge(e,n,t);return}case "CatchClause":{let s=e,r=q(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=q(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=q(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=q(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":bn(e,n,t,false);return;case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&Se(n,t,r.name,r,"import",Bn(r.name));}return}case "ExportNamedDeclaration":{let s=e;if(s.declaration){let r=s.declaration;if(r.type==="VariableDeclaration")bn(r,n,t,true);else if(r.type==="FunctionDeclaration"){let a=r.id;a&&Se(n,t,a.name,a,"local",true),Ge(r,n,t);}else b(r,n,t);}else for(let r of s.specifiers)Ne(n,r.local.name);return}case "TSAsExpression":b(e.expression,n,t);return;case "TSTypeAliasDeclaration":re(e.typeAnnotation,n);return;case "JsonExpression":xe(e.body,n,t);return;case "JSXOpeningElement":{let s=e;wn(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 wn(e,n,t){e&&(e.type==="JSXIdentifier"?Ne(n,e.name):e.type==="JSXMemberExpression"&&wn(e.object,n));}function xe(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)xe(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))xe(s[r],n,t);}function Ke(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};b(e,q(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 Mt=new Set(["const","import"]),ae=e=>({binds:new Map,parent:e});function Pt(e,n){for(let t=e;t;t=t.parent){let s=t.binds.get(n);if(s)return s}}function _(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?_(n.argument):_(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?_(n):[]);case "AssignmentPattern":return _(e.left);case "RestElement":return _(e.argument);default:return []}}var be=(e,n,t)=>{for(let s of _(n))e.binds.set(s.name,t);};function We(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of _(e))We(a,n,t);return}let s=e.name,r=Pt(n,s);r&&Mt.has(r)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,s,r==="import"?"import":"const")));}function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let s=e;We(s.left,n,t),M(s.right,n,t);return}case "UpdateExpression":{We(e.argument,n,t);return}case "Program":case "BlockStatement":{let s=ae(n);for(let r of e.body??[])M(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=ae(n);for(let a of s.params??[])be(r,a,"param");M(s.body,r,t);return}case "CatchClause":{let s=e,r=ae(n);be(r,s.param,"param"),M(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=ae(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)be(r,o.id,a.kind);else a&&M(a,r,t);M(s.right,n,t),M(s.test,r,t),M(s.update,r,t),M(s.body,r,t);return}case "VariableDeclaration":{let s=e;for(let r of s.declarations)M(r.init,n,t),be(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&&M(s.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":M(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)M(i,n,t);else M(o,n,t);}return}}}function ze(e){let n={out:[],invalid:new WeakSet};return M(e,ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var oe=e=>({decls:new Map,parent:e});function Ot(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 Be=(e,n)=>{for(let t of Z(n))e.decls.set(t.name,t);};function C(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let s=Ot(n,e.name);s&&s!==e&&t.set(e,s);return}case "MemberExpression":{let s=e;C(s.object,n,t),s.computed&&C(s.property,n,t);return}case "Property":{let s=e;s.computed&&C(s.key,n,t),C(s.value,n,t);return}case "Program":case "BlockStatement":{let s=oe(n);for(let r of e.body??[])C(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=oe(n);for(let o of s.params??[])Be(a,o);C(s.body,a,t);return}case "CatchClause":{let s=e,r=oe(n);Be(r,s.param),C(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=oe(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Be(r,o.id);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":{for(let s of e.declarations)Be(n,s.id),C(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":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 It(e){let n=new WeakMap;return C(e,oe(void 0),n),n}var Je=e=>e.typeAnnotation,qe=e=>e.returnType,U=e=>e.type==="Identifier"?e.name:null,vn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?U(n.id):null}return U(e)},le=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function En(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 _e(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=_e(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Xe(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 X=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):Xe(e)},Qe=e=>e.type==="ArrowFunctionExpression",An=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,we=e=>An(e)?e.args[0]:e,ue=e=>An(e)?e:s.promise(e);function ie(e){return e.t==="tuple"?true:e.t==="array"?ie(e.items):e.t==="union"?e.of.some(ie):false}function ke(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ke(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ke(e.bound):false}var V=(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 Dn(e){let n=qe(e);return n?{t:"fn",params:e.params.map((s$1,r)=>({name:U(s$1)??`arg${r}`,type:Je(s$1)??s.unknown})),returns:e.async?ue(n):n}:null}var K={then:{},else:{}},In=new Set(["string","number","boolean","undefined","function","object"]),Cn={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function jn(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 Ut=s.literal(true),Vt=s.literal(false),G=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Ut,Vt]:[e];function Tn(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 Gt(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let s=G(e).filter(r=>subtype(r,n,t));return s.length?normalizeUnion(s):n}function xt(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let s=G(e).filter(r=>!subtype(r,n,t));return s.length?normalizeUnion(s):null}function Kt(e,n){if(!In.has(n))return null;if(e.t==="unknown"||e.t==="any")return Cn[n]??e;let t=G(e).filter(s=>jn(s,n));return t.length?normalizeUnion(t):Cn[n]??e}function Wt(e,n){if(!In.has(n)||e.t==="unknown"||e.t==="any")return null;let t=G(e).filter(s=>!jn(s,n));return t.length?normalizeUnion(t):null}function Rn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function Mn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Pn(e,n,t,s,r){let a=G(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 Fn(e,n,t){let s=G(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 zt(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function Jt(e,n,t){let s=G(e),r=s.filter(a=>!equals(a,n,t));return r.length&&r.length<s.length?normalizeUnion(r):null}var qt=e=>e.t==="null"||e.t==="undefined",$n=e=>qt(e)||e.t==="literal"&&!e.value,_t=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=G(e),t=n.filter(s=>!$n(s));return t.length&&t.length<n.length?normalizeUnion(t):null},Xt=e=>{let n=G(e),t=n.filter($n);return t.length&&t.length<n.length?normalizeUnion(t):null},On=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,j=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Qt=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function pe(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let f=s.left,N=s.right;if(f.type==="Literal"&&typeof f.value=="string"&&N.type==="Identifier"){let g=N.name,E=R(n,g);if(!E)return K;let v=String(f.value);return j(g,Fn(E,v,true),Fn(E,v,false))}return K}if(!Qt(s.operator))return K;let r=s.operator==="!=="||s.operator==="!=",a=s.left,o=s.right,i=Tn(a,o)??Tn(o,a);if(i){let f=R(n,i.name);if(!f)return K;let N=Kt(f,i.tag),g=Wt(f,i.tag);return r?j(i.name,g,N):j(i.name,N,g)}let l=On(a),u=On(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let f=p.name,N=R(n,f);if(!N)return K;let E=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],v=G(N),pn=v.filter(Ce=>E.includes(Ce.t)),De=v.filter(Ce=>!E.includes(Ce.t)),dn=pn.length?normalizeUnion(pn):null,fn=De.length&&De.length<v.length?normalizeUnion(De):null;return r?j(f,fn,dn):j(f,dn,fn)}let d=Rn(a,o)??Rn(o,a);if(d){let f=R(n,d.name);if(!f)return K;let N=zt(f,d.lit,t),g=Jt(f,d.lit,t);return r?j(d.name,g,N):j(d.name,N,g)}let m=Mn(a,o)??Mn(o,a);if(m){let f=R(n,m.name);if(!f)return K;let N=Pn(f,m.prop,m.lit,true,t),g=Pn(f,m.prop,m.lit,false,t);return r?j(m.name,g,N):j(m.name,N,g)}return K}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=pe(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=Ht(e,n,t);if(s)return s}if(e.type==="Identifier"){let s=e.name,r=R(n,s);if(r)return j(s,_t(r),Xt(r))}return K}function Yt(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 Ht(e,n,t){let s=e.callee;if(s.type!=="Identifier")return null;let r=R(n,s.name);if(!r)return null;let a=Yt(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=R(n,i);return l?j(i,Gt(l,a.type,t),xt(l,a.type,t)):null}var W=(e,n)=>Object.keys(n).length?O(e,n):e;function I(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>I(t));case "IfStatement":{let n=e;return !!n.alternate&&I(n.consequent)&&I(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&I(n.finalizer))return true;let t=!n.handler||I(n.handler.body);return I(n.block)&&t}default:return false}}var fs=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ms(e){let n=[];return e.maxDepth!==void 0&&n.push($e(e.maxDepth)),e.maxNodes!==void 0&&n.push(Le(e.maxNodes)),e.maxArgs!==void 0&&n.push(Ue(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Oe(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(Ie(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(je(e.memberDepth)),n}function ys(e,n){let t=e.typeRefs;return t?.length?t.filter(s=>!(s.name in n)).map(s=>A("unknown-name",{type:"Identifier",name:s.name,loc:s.loc},`Cannot find name '${s.name}'.`)):[]}function Xn(e,n,t={}){let s$1={...fs(n.types),...n.schemes,...gs(e)},r=ze(e),a={overlay:new WeakMap,sink:te(),env:n,schemes:s$1,importNames:new Set,resolvedSchemes:new Set,invalidTargets:r.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?compileProfile(t.profile):void 0;o&&configureTypeLimits(o.typeLimits);try{let i,l=Ss(e,a);try{i=y(e,l,a);}catch(d){if(d instanceof TypeEvalLimitError)a.sink.report(A("too-deep",e,d.message));else if(d instanceof UnionTooComplexError)a.sink.report(A("too-complex-union",e,d.message));else throw d;i=s.unknown;}let u=[];o&&u.push(...ge(o)),t.limits&&u.push(...ms(t.limits)),t.resultType&&u.push(Ve(t.resultType,s$1));let p=[...a.sink.all,...r.diagnostics,...ys(e,s$1),...t.unused?Ke(e,t.unused):[],...u.length?Me(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function hs(e,n,t={}){let s$1=Xn(e,n,t),r={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let m=U(d.id),f=s$1.overlay.get(d);m&&f&&(r[m]=f.type,p.push(m));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,m=s$1.overlay.get(u);d&&m&&(r[d]=m.type,p.push(d));}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 d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.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 gs=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 Ss(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",d=discover(i,[p],n.schemes);d?s$1[u]=d.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?O(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 Qn: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,Xe(e),n);case "Identifier":{let r=e.name,a=R(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,Bs(e,n,t),n);case "CallExpression":return h(t,e,Es(e,n,t,s$1),n);case "ArrowFunctionExpression":return an(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,rt(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 L(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 L(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 p=t.overlay.get(a.object)?.type,d=p&&apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(S.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(r.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=y(r.right,n,t);return t.assignFlow.set(e,widenLiteral(d)),h(t,e,d,n)}if(u&&i!==null){let d=y(r.right,n,t);return subtype(d,u,t.schemes)||t.sink.report(S.notAssignable(r.right,d,u,t.schemes)),t.assignFlow.set(e,at(u,d,t.schemes)),h(t,e,d,n)}let p=J(r.right,o,n,t);return h(t,e,p,n)}return h(t,e,y(r.right,n,t),n)}case "UpdateExpression":{let r=e,a=y(r.argument,n,t);return de(a,t.schemes)||t.sink.report(S.arithmeticOperand(r.argument,"operand")),h(t,e,s.number,n)}case "ExpressionStatement":return h(t,e,y(e.expression,n,t),n);case "VariableDeclaration":return Ee(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?Rs(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return h(t,e,Js(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,qs(r.operator,a,o),n)}case "UnaryExpression":return h(t,e,Ys(e,n,t),n);case "ConditionalExpression":{let r=e;y(r.test,n,t);let a=pe(r.test,n,t.schemes),o=y(r.consequent,W(n,a.then),t),i=y(r.alternate,W(n,a.else),t);return h(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return h(t,e,Hs(e,n,t),n);case "ArrayExpression":return h(t,e,ut(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,we(a),n)}case "Program":{let r=ve(e.body,n,t,new Set(t.importNames)).scope;return h(t,e,s.unknown,r)}case "JsonExpression":return h(t,e,en(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=ye(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 Ns=new Set(["constructor","prototype","__proto__"]);function bs(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 Bs(e,n,t){let s$1=y(e.object,n,t),r=bs(e);if(r!==null&&Ns.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"&&Un(e,s$1,i.value,t),s.unknown)}let a=e.property.name,o=discover(s$1,[a],t.schemes);return o?o.type:(Un(e,s$1,a,t),s.unknown)}function Un(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 ks(e,n,t){if(!e||e.type!=="Identifier")return;let s=e.name;if(R(n,s)===void 0)return;let r=t.schemes[s];return r&&r.params.length===0?r.body:void 0}function ws(e,n,t,s$1){let r=V(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 Qn="TSLiteSyntheticArg",vs=e=>({type:Qn,schema:e});function Yn(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=V(y(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)s$1.push(vs(l));else r={elem:i.t==="array"?i.items:s.unknown,node:a};}return {nodes:s$1,spread:r}}function Es(e,n,t,s$1){let r=e.arguments,a=_e(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let m=En(r);if(m){let f=discover(d,m,t.schemes);return f?f.type:(t.sink.report(S.noSuchMember(e,d,m.join("."))),s.unknown)}return r.forEach(f=>y(f,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let d=ks(r[0],n,t);for(let m=1;m<r.length;m++)y(r[m],n,t);return d??s.unknown}if(a&&t.env.matchers?.has(a))return ws(e,r,n,t);let o=y(e.callee,n,t);if(o.t==="any")return r.forEach(d=>y(d,n,t)),s.any;if(o.t==="overload")return Ds(e,o,n,t,s$1);if(o.t!=="fn")return r.forEach(d=>y(d,n,t)),t.sink.report(S.notCallable(e,o)),s.unknown;let i=Yn(r,n,t),l=i.nodes.map(d=>Hn(d,n,t)),u=nt(e),p=!u||tt(o,u.length);return p||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),Zn(e,o,i.nodes,l,n,t,i.spread,s$1,p?u:void 0)}function Hn(e,n,t){if(Qe(e))return s.any;if(e.type!=="CallExpression")return y(e,n,t);let s$1=te(),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 Zn(e,n,t,s$1,r,a,o=null,i,l){let u=f=>{if(!i)return f;let N=substitute(n.returns,f);if(N.t==="fn"&&i.t==="fn"){let g=f,E=Math.min(N.params.length,i.params.length);for(let v=0;v<E;v++)g=unify(N.params[v].type,i.params[v].type,g)??g;return unify(N.returns,i.returns,g)??g}return unify(N,i,f)??f},p=l?Ps(e,n,l,a):void 0,d=p??u(instantiateLoose(n,s$1).bindings);t.forEach((f,N)=>{if(Qe(f)){let g=widenType(substitute(n.params[N]?.type??s.any,d));s$1[N]=an(f,r,a,g);}else if(f.type==="CallExpression"&&s$1[N].t==="any")s$1[N]=y(f,r,a,substitute(n.params[N]?.type??s.unknown,d));else if(f.type==="Literal"){let g=n.params[N]?.type??s.unknown,E=g.t==="var"?g.bound?substitute(g.bound,d):g:substitute(g,d);ke(E)&&(s$1[N]=h(a,f,X(f),r));}else if(f.type==="ArrayExpression"){let g=substitute(n.params[N]?.type??s.unknown,d);ie(g)&&(s$1[N]=ln(f,g,r,a));}});let m=p??u(instantiateLoose(n,s$1).bindings);return p||As(e,n,m,a),js(e,n,s$1,m,a,t,o),t.forEach((f,N)=>{let g=n.params[N];f.type==="ObjectExpression"&&g&&!g.variadic&&on(f,substitute(g.type,m),a);}),widenInferred(groundVars(substitute(n.returns,m),a.schemes))}var Vn=new WeakMap;function et(e){let n=Vn.get(e);if(n)return n;let t=new Map,s=new WeakSet;for(let r of e.params)P(r.type,t,s);return P(e.returns,t,s),Vn.set(e,t),t}function P(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":P(e.items,n,t);return;case "union":for(let s of e.of)P(s,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let s in e.props)P(e.props[s].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let s of e.params)P(s.type,n,t);P(e.returns,n,t);return;case "overload":for(let s of e.signatures){for(let r of s.params)P(r.type,n,t);P(s.returns,n,t);}return;case "apply":for(let s of e.args)P(s,n,t);return;case "keyof":P(e.of,n,t);return;case "index":P(e.obj,n,t),P(e.key,n,t);return;case "mapped":P(e.over,n,t),P(e.body,n,t);return;default:return}}function As(e,n,t,s){let r=et(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=Yn(e.arguments,t,s),o=a.nodes,i=o.map(p=>Hn(p,t,s)),l=nt(e),u=l?n.signatures.filter(p=>tt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,m)=>Math.max(d,m.typeParams?.length??0),0);return s.sink.report(S.wrongTypeArgumentCount(e,p,l.length)),Gn(e,n.signatures,a,o,i,t,s,r,void 0)}return Gn(e,u,a,o,i,t,s,r,l)}function Gn(e,n,t,s$1,r,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?Fs(m,s$1.length):Os(m,s$1.length),d=u.signatures.find(m=>p(m)&&Is(m,r,o));if(!d){let m=u.signatures.filter(p);m.length===1?d=m[0]:u.signatures.length===1&&(d=u.signatures[0]);}return d?Zn(e,d,s$1,r,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,r)),s.unknown)}function Cs(e,n,t,s$1){let r=R(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 ye(e,n,t,s$1){let r=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let m=r(d);return m!==d&&(u=true),m});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Cs(o.path,n,t,s$1);if(o.t==="apply"&&typeof o.name=="string"&&(Ts(o.name,n,t,s$1),!(o.name in t.schemes)))return s.any;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 Ts(e,n,t,s){if(t.resolvedSchemes.has(e))return;let r=t.schemes[e];if(!r)return;t.resolvedSchemes.add(e);let a=ye(r.body,n,t,s);a!==r.body&&(t.schemes[e]={...r,body:a});}function Rs(e,n,t,s,r){let a={...t,sink:te(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=ye(e,n,a,s);return a.sink.hasErrors()?e:r?o:groundVars(o,t.schemes)}var rn=(e,n,t)=>{let s=Je(e);return s===void 0?s:ye(s,n,t,e)},Ms=(e,n,t)=>{let s=qe(e);return s===void 0?s:ye(s,n,t,e)},nt=e=>{let n=e.typeArguments;return n?.length?n:void 0},tt=(e,n)=>(e.typeParams?.length??0)===n;function Ps(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 et(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 Fs(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 Os(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 Is(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 js(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 d=substitute(p.type,s$1);if(u>=t.length){!p.optional&&!o&&r.sink.report(S.missingArgument(e,p.name,d));continue}subtype(t[u],d,r.schemes)||r.sink.report(S.notAssignable(i(u),t[u],d,r.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){r.sink.report(S.spreadArgument(o.node));return}if(l){let d=substitute(l.type,s$1),m=d.t==="array"?d.items:s.unknown;subtype(o.elem,m,r.schemes)||r.sink.report(S.notAssignable(o.node,o.elem,m,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=V(n,s.schemes);switch(e.type){case "Literal":{let o=X(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(ie(r)){let o=ln(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,d=le(p),m=d!==null?ownProp(r.props,d)?.type:void 0,f=m?J(p.value,m,t,s):y(p.value,t,s);d!==null&&(o[d]={type:f}),h(s,u,f,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=an(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 an(e,n,t,s$1){let r=s$1&&s$1.t==="fn"?s$1:void 0,a={},o=new Map,i=e.params.map((f,N)=>{let g=f,E=U(g),v=rn(g,n,t)??r?.params[N]?.type??s.unknown;return E?(a[E]=v,(v.t==="union"||v.t==="boolean")&&o.set(E,v)):g.type!=="Identifier"&&Q(g,v,a,n,t),t.overlay.set(g,{type:v,scope:n}),{name:E??`arg${N}`,type:v}}),l=O(n,a),u=e.body,p=Ms(e,n,t);if(u.type!=="BlockStatement"&&p){let f=e.async?we(p):p;J(u,f,l,t);let N=e.async?ue(p):p;return h(t,e,{t:"fn",params:i,returns:N},n)}let d=u.type==="BlockStatement"?h(t,u,rt(u,l,t,new Set(Object.keys(a)),o),l):y(u,l,t),m=e.async?ue(d):d;if(p){let f=e.async?we(p):p,N=e.async?d:m;subtype(N,f,t.schemes)||t.sink.report(S.notAssignable(u,m,p,t.schemes));let g=e.async?ue(p):p;return h(t,e,{t:"fn",params:i,returns:g},n)}return h(t,e,{t:"fn",params:i,returns:widenType(m)},n)}function ne(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ne(n.argument):ne(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ne(n.argument):ne(n):[]);case "AssignmentPattern":return ne(e.left);default:return []}}function st(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ne(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?st(e.declaration):[]}function rt(e,n,t,s$1=new Set,r){let{returns:a}=ve(e.body,n,t,s$1,r),o=!I(e);return a.length===0?o?s.void:s.union([]):normalizeUnion(o?[...a,s.undefined]:a)}var $s=[s.literal(true),s.literal(false)];function Ls(e){return e.t==="union"?e.of:e.t==="boolean"?$s:[e]}function at(e,n,t){let s=Ls(e);if(s.length<=1)return e;let r=s.filter(o=>subtype(n,o,t));if(r.length===0)return e;let a=normalizeUnion(r);return subtype(n,a,t)?a:e}function ot(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let s=t,r=s.left;if(s.operator!=="="||r.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:r.name,type:a}:null}function Y(e,n,t){switch(e.type){case "BlockStatement":{let s=n;for(let r of e.body){let a=Y(r,s,t);if(s=a.types,a.exits)return {types:s,exits:true}}return {types:s,exits:false}}case "ExpressionStatement":{let s=ot(e,t);if(!s)return {types:n,exits:false};let r=new Map(n);return r.set(s.name,s.type),{types:r,exits:false}}case "IfStatement":{let s=it(e,n,t);if(s.size===0)return {types:n,exits:I(e)};let r=new Map(n);for(let[a,o]of s)r.set(a,o);return {types:r,exits:I(e)}}case "TryStatement":{let s=e,r=[],a=Y(s.block,n,t);if(a.exits||r.push(a.types),s.handler){let i=Y(s.handler.body,n,t);i.exits||r.push(i.types);}let o=Us(n,r);return s.finalizer&&(o=Y(s.finalizer,o,t).types),{types:o,exits:I(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function it(e,n,t){let s=Y(e.consequent,n,t),r=e.alternate?Y(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];s.exits||l.push(s.types.get(i)??n.get(i)),r.exits||l.push(r.types.get(i)??n.get(i)),l.length&&o.set(i,normalizeUnion(l));}return o}function lt(e,n){let t=new Map,s=r=>{let a=R(e,r);a!==void 0&&t.set(r,a);};for(let r of n.evolving)s(r);for(let r of n.declaredMut.keys())s(r);return t}function Us(e,n){let t=new Map(e);if(n.length===0)return t;for(let s of e.keys()){let r=n.map(a=>a.get(s)??e.get(s));t.set(s,normalizeUnion(r));}return t}function Vs(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let s=lt(n,t),r=Y(e,s,t);if(r.exits)return n;let a={};for(let[o,i]of r.types)s.has(o)&&i!==s.get(o)&&(a[o]=i);return W(n,a)}function ve(e,n,t,s=new Set,r){if(!(r&&r.size)&&!Gs(e))return xn(e,n,t,s);let a=new Set(t.evolving),o=new Map(t.declaredMut);if(r)for(let[i,l]of r)t.declaredMut.set(i,l);try{return xn(e,n,t,s)}finally{t.evolving.clear();for(let i of a)t.evolving.add(i);t.declaredMut.clear();for(let[i,l]of o)t.declaredMut.set(i,l);}}function Gs(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let s=t.declaration;if(s?.type==="VariableDeclaration"&&s.kind!=="const")return true}}return false}function xn(e,n,t,s){let r=n,a=[];for(let o of e){let i=o;for(let l of st(i))s.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):s.add(l.name);if(i.type==="VariableDeclaration")r=Ee(i,r,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")r=Ee(l.declaration,r,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=y(l.declaration,r,t),p=U(l.declaration.id);p&&(r=O(r,{[p]:u}));}else for(let u of l.specifiers)R(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=U(i.id);u&&(r=O(r,{[u]:l}));}else if(i.type==="IfStatement"){let l=i,u=t.evolving.size||t.declaredMut.size?lt(r,t):null;if(a.push(...L(i,r,t)),u&&u.size){let p=it(l,u,t);p.size&&(r=W(r,Object.fromEntries(p)));}!l.alternate&&I(l.consequent)&&(r=W(r,pe(l.test,r,t.schemes).else));}else {a.push(...L(i,r,t));let l=ot(i,t);l?r=W(r,{[l.name]:l.type}):(i.type==="BlockStatement"||i.type==="TryStatement")&&(r=Vs(i,r,t));}}return {scope:r,returns:a}}function L(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=pe(s$1.test,n,t.schemes),a=L(s$1.consequent,W(n,r.then),t);return s$1.alternate&&a.push(...L(s$1.alternate,W(n,r.else),t)),h(t,e,s.unknown,n),a}case "BlockStatement":{let{returns:s$1}=ve(e.body,n,t);return h(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,r=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?r=Ee(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=L(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=vn(s$1.left),i=o?O(n,{[o]:a}):n,l=L(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=L(s$1.block,n,t);if(s$1.handler){let a=s$1.handler.param,o=a?U(a):null,i=o?O(n,{[o]:s.unknown}):n;r.push(...L(s$1.handler.body,i,t));}return s$1.finalizer&&r.push(...L(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=ve(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 xs(e,n,t){let s$1=discover(e,[n],t.schemes);return s$1?s$1.type:s.unknown}function Ks(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function Ws(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 zs(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function Q(e,n,t,s$1,r){switch(e.type){case "Identifier":{let a=rn(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]);Q(a.left,l,t,s$1,r);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Q(o.argument,Ws(n,a),t,s$1,r);continue}let i=o,l=le(i);l!=null&&a.push(l);let u=l!=null?xs(n,l,r):s.unknown;Q(i.value,u,t,s$1,r);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Q(i.argument,zs(n,o),t,s$1,r):Q(i,Ks(n,o),t,s$1,r);});return}}}function on(e,n,t){let s=V(n,t.schemes),a=(s.t==="union"?s.of.map(o=>V(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=le(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"&&on(i.value,u[0].props[l].type,t);}}function Ee(e,n,t){let s$1={};for(let r of e.declarations){let a=r.id,o=U(a),i=rn(a,n,t);if(!r.init){if(o&&e.kind!=="const"){i?(s$1[o]=i,Kn(o,i,t)):(s$1[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(r)),o&&(s$1[o]=i??s.unknown);continue}let l=i??(r.init.type==="ArrowFunctionExpression"?Dn(r.init):null),u=o&&l?O(n,{[o]:l}):n,p,d=null;i?(J(r.init,i,u,t),r.init.type==="ObjectExpression"&&on(r.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&r.init.type==="Literal"&&(p=at(i,X(r.init),t.schemes))):(p=y(r.init,u,t),e.kind!=="const"&&(p=widenLiteral(p)),d=p),h(t,r,p,n),o?(s$1[o]=p,e.kind!=="const"&&d&&Kn(o,d,t)):Q(a,p,s$1,n,t);}return h(t,e,s.unknown,n),O(n,s$1)}function Kn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Js(e,n,t){let s$1=y(e.left,n,t),r=y(e.right,n,t),a=e.operator;if(a==="+")return Wn(s$1,t.schemes)||Wn(r,t.schemes)?s.string:de(s$1,t.schemes)&&de(r,t.schemes)?s.number:(t.sink.report(S.operatorNotApplicable(e,"+",s$1,r)),s.number);if(_s.has(a))return de(s$1,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),de(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right")),s.number;if(Xs.has(a)){if(!Ae(s$1)&&!Ae(r)){let o=apparentType(s$1,t.schemes),i=apparentType(r,t.schemes),l=subtype(o,s.number,t.schemes),u=subtype(i,s.number,t.schemes);l&&u||!l&&!u&&(subtype(o,i,t.schemes)||subtype(i,o,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,s$1,r));}return s.boolean}return s.boolean}var Ae=e=>e.t==="any"||e.t==="unknown",de=(e,n)=>Ae(e)||subtype(apparentType(e,n),s.number,n),Wn=(e,n)=>!Ae(e)&&subtype(apparentType(e,n),s.string,n),zn={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},He=e=>e.t==="null"||e.t==="undefined";function qs(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=>!He(a)),t]);if(e==="||")return normalizeUnion([...s$1.filter(a=>!He(a)&&!(a.t==="literal"&&!a.value)),t]);let r=s$1.flatMap(a=>He(a)?[a]:a.t==="literal"?a.value?[]:[a]:zn[a.t]?[zn[a.t]]:[]);return normalizeUnion([...r,t])}var _s=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),Xs=new Set(["<",">","<=",">="]),Qs=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function Ys(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 Qs;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function Hs(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=V(y(p.argument,n,t),t.schemes);if(g.t==="object"){for(let E in g.props)s[E]=g.props[E];g.index&&(r={key:g.index.key,type:g.index.value});}continue}let d=p,m=y(d.value,n,t),f=widen(m);if(h(t,p,m,n),d.computed){let g=V(y(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(s[g.value]={type:f},a.push(f)):g.t==="literal"&&typeof g.value=="number"?(s[String(g.value)]={type:f},a.push(f),o.push(f)):g.t==="string"?(i=true,a.push(f)):g.t==="number"&&(l=true,a.push(f),o.push(f));continue}let N=le(d);N!==null&&(s[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}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 ut(e,n,t){let s$1=[];for(let r of e.elements){if(!r)continue;let a=r;if(a.type==="SpreadElement"){let o=V(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 ln(e,n,t,s$1){let r=V(n,s$1.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?ln(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 ut(e,t,s$1)}function en(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=>en(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:en(r[o],n,t,s$1)};return {t:"object",props:a}}var Zs=(e,n)=>({...e,typeAnnotation:n}),er=(e,n)=>({...e,returnType:n}),nr=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function ct(e,n){return e.get(n)?.type}function tr(e,n){return e.get(n)?.scope}function sr(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function rr(e,n){let t=e.get(n)?.scope;return t?[...Te(t)].map(([s,r])=>({key:s,type:r,optional:false})):[]}var ar=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function or(e){if(!e||e.computed)return;let n=e.key;if(n?.type==="Identifier")return n.name;if(n?.type==="Literal"&&typeof n.value=="string")return n.value}function cn(e,n,t,s={}){let r=e[n],a=e[n+1];if(!(!r||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===r?a.returnType:void 0;case "VariableDeclarator":return a.init===r?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(ar)?.returnType;case "CallExpression":case "NewExpression":{let o=(a.arguments??[]).indexOf(r);if(o<0)return;let i=ct(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==r||e[n+2]?.type!=="ObjectExpression")return;let i=cn(e,n+2,t,s),l=or(a);return !i||!l?void 0:discover(i,[l],s)?.type}case "ArrayExpression":{let o=cn(e,n+1,t,s);return o?discover(o,["[]"],s)?.type:void 0}default:return}}function ir(e,n){return e.filter(t=>t.node===n)}export{gn as FUNCTION_KINDS,Zs as annotate,er as annotateReturn,nr as asExpression,Fe as calleeAllowlist,Pe as capabilityNodes,Xn as check,O as childScope,It as collectBindings,ze as collectMutations,Ke as collectUnused,cn as contextualTypeAt,yt as createEnv,te as createSink,S as diag,ir as diagnosticsAt,hs as extractModuleType,At as fromCapability,Me as guard,ge as guardsFromCompiled,R as lookup,A as makeDiagnostic,Ue as maxArgs,Ie as maxCallNesting,$e as maxDepth,Oe as maxFunctionNesting,he as maxNestingOf,Le as maxNodes,sr as memberCompletions,je as memberDepth,ht as resolveNamed,gt as resolveScheme,Ve as resultType,mn as rootScope,tr as scopeAt,rr as scopeCompletions,ct as typeAt,Te as visibleNames};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/checker",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
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",
@@ -40,8 +40,8 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@tslite/capability": "0.2.0",
43
- "@tslite/codec": "0.2.1",
44
43
  "@tslite/core": "0.3.0",
44
+ "@tslite/codec": "0.2.1",
45
45
  "@tslite/type-core": "0.3.0"
46
46
  },
47
47
  "devDependencies": {