@tslite/checker 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec');var wn=(e={})=>core.rootScope(e),I=(e,n)=>core.childScope(e,n),R=(e,n)=>core.lookup(e,n),$e=e=>core.visibleNames(e),Et=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:wn(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),At=(e,n)=>e.types[n],Dt=(e,n)=>e.schemes[n];var vn={"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","implicit-coercion":"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:vn[e],severity:"error",node:n,message:t}),C=(e,n,t,r="error")=>({code:e,kind:vn[e],severity:r,node:n,message:t}),S={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r),a=s.filter(c=>c.path.length>0),o=a.length?` ${typeCore.formatTypeDiff(a)}.`:"",i=k("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${o}`),l=s.filter(c=>c.kind==="missing"&&c.path.length===1).map(c=>({name:c.path[0],type:c.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(r=>typeCore.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>k("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(r)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),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)=>C("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)=>C("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)=>k("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,r)=>k("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...k("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${typeCore.format(n)}' and '${typeCore.format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...k("implicit-coercion",e,`Cannot convert '${typeCore.format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function oe(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function xe(e,n,t={}){return n.flatMap(r=>r(e,t))}function ie(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var It=e=>Array.isArray(e)?e:[e],An=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Ge(e,n="error"){return t=>{let r=[];return ie(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(C("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function Dn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ie(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let c=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);c.length&&s.push(C("type-feature-not-allowed",a,`authoring type feature${c.length>1?"s":""} '${c.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function E(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=>E(t.type,n))||!!e.index&&E(e.index.value,n);case "array":return E(e.items,n);case "tuple":return e.elements.some(t=>E(t,n));case "union":case "intersection":return e.of.some(t=>E(t,n));case "fn":return e.params.some(t=>E(t.type,n))||E(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>E(r.type,n))||E(t.returns,n));case "keyof":return E(e.of,n);case "index":return E(e.obj,n)||E(e.key,n);case "mapped":return E(e.over,n)||E(e.body,n);case "conditional":return E(e.check,n)||E(e.extends,n)||E(e.then,n)||E(e.else,n);case "returnType":case "parameters":return E(e.fn,n);case "apply":return e.args.some(t=>E(t,n));default:return false}}function Cn(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ie(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&E(o)){r.push(C("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function Ke(e,n="error"){let t=new Set(e);return r=>{let s=[];return ie(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(C("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(C("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function De(e,n,t={}){let r=new Set(It(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(c,d)=>{let u=r.has(c.type),f=u?d+1:d;u&&f>n&&i.push(C("too-deep",c,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of core.childrenOf(c))l(m,f);};return l(o,0),i}}var _e=(e=3,n="error")=>De(An,e,{hint:"use a pipe instead of nesting functions",severity:n}),ze=(e,n="error")=>De("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),qe=(e,n="error")=>De("MemberExpression",e,{severity:n});function We(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(C("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of core.childrenOf(a))s(i,o+1);};return s(t,0),r}}function Je(e,n="error"){return t=>{let r=0;return ie(t,()=>{r++;}),r>e?[C("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function Ye(e,n="error"){return t=>{let r=[];return ie(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(C("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Xe(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[C("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function Ce(e){let n=[Ge(e),Dn(e),Cn(e)];return e.hostAllow!=="*"&&n.push(Ke([...e.hostAllow])),n}function jt(e){return Ce(capability.compileProfile(e))}var Qe=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],pe=new Map(Qe.map(e=>[e.op,e])),Rn={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string},He=e=>Rn[e],On=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Ut={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string,undefined:typeCore.s.undefined},Lt=[{op:"&&"},{op:"||"},{op:"??"}];function $t(e,n={}){return Qe.filter(t=>t.result==="additive"?typeCore.subtype(typeCore.s.string,e,n)||typeCore.subtype(typeCore.s.number,e,n):typeCore.subtype(Rn[t.result],e,n))}function Vt(e,n={}){return On.filter(t=>typeCore.subtype(Ut[t.result],e,n))}var Z=e=>({bindings:new Map,parent:e}),Pn=e=>e.charCodeAt(0)===95;function Oe(e,n,t,r,s,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:r,kind:s,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function me(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)me(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&Te(n,r);return}for(let r of Object.keys(t))me(t[r],n);}function Mn(e,n){let t=e;me(t.typeAnnotation,n),me(t.returnType,n);}function Te(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function W(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Mn(e,n),Oe(n,t,o,e,r,s||a&&Pn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((c,d)=>{let u=l&&d<o.length-1;if(c.type==="RestElement")W(c.argument,n,t,r,s,false);else {let f=c;f.computed&&N(f.key,n,t),W(f.value,n,t,r,s||u,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;W(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":W(e.left,n,t,r,s,a);return;case "RestElement":W(e.argument,n,t,r,s,true);return;default:return}}function de(e,n,t){if(e)switch(e.type){case "AssignmentPattern":N(e.right,n,t),de(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)de(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&de(r,n,t);return;case "RestElement":de(e.argument,n,t);return;default:return}}function Tn(e,n,t,r){for(let s of e.declarations)W(s.id,n,t,"local",r,false),N(s.init,n,t);}function Ze(e,n,t){let r=e,s=Z(n),a=r.params??[];for(let o of a)W(o,s,t,"parameter",false,true);for(let o of a)de(o,s,t);N(r.body,s,t);}function N(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Mn(e,n),e.type){case "Identifier":Te(n,e.name);return;case "MemberExpression":{let r=e;N(r.object,n,t),r.computed&&N(r.property,n,t);return}case "Property":{let r=e;r.computed&&N(r.key,n,t),N(r.value,n,t);return}case "Program":case "BlockStatement":{let r=Z(n);for(let s of e.body??[])N(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":Ze(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Oe(n,t,r.name,r,"local",false),Ze(e,n,t);return}case "CatchClause":{let r=e,s=Z(n);W(r.param,s,t,"local",true,false),N(r.body,s,t);return}case "SwitchStatement":{let r=e;N(r.discriminant,n,t);let s=Z(n);for(let a of r.cases){N(a.test,s,t);for(let o of a.consequent??[])N(o,s,t);}return}case "ForStatement":{let r=e,s=Z(n);N(r.init,s,t),N(r.test,s,t),N(r.update,s,t),N(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;N(r.right,n,t);let s=Z(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)W(o.id,s,t,"local",false,true);else N(a,s,t);N(r.body,s,t);return}case "VariableDeclaration":Tn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Oe(n,t,s.name,s,"import",Pn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Tn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Oe(n,t,a.name,a,"local",true),Ze(s,n,t);}else N(s,n,t);}else for(let s of r.specifiers)Te(n,s.local.name);return}case "TSAsExpression":N(e.expression,n,t);return;case "TSTypeAliasDeclaration":me(e.typeAnnotation,n);return;case "JsonExpression":en(e.body,n,t);return;case "JSXOpeningElement":{let r=e;In(r.name,n);for(let s of r.attributes??[])N(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":N(e.value,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)N(i,n,t);else N(o,n,t);}return}}}function In(e,n,t){e&&(e.type==="JSXIdentifier"?Te(n,e.name):e.type==="JSXMemberExpression"&&In(e.object,n));}function en(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)en(s,n,t);return}let r=e;if("#expr"in r){try{N(codec.fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))en(r[s],n,t);}function nn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};N(e,Z(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(S.unusedName(s.node,s.name));return r}var _t=new Set(["const","import"]),fe=e=>({binds:new Map,parent:e});function zt(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ee(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ee(n.argument):ee(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ee(n):[]);case "AssignmentPattern":return ee(e.left);case "RestElement":return ee(e.argument);default:return []}}var Pe=(e,n,t)=>{for(let r of ee(n))e.binds.set(r.name,t);};function tn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ee(e))tn(a,n,t);return}let r=e.name,s=zt(n,r);s&&_t.has(s)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,r,s==="import"?"import":"const")));}function T(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;tn(r.left,n,t),T(r.right,n,t);return}case "UpdateExpression":{tn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=fe(n);for(let s of e.body??[])T(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=fe(n);for(let a of r.params??[])Pe(s,a,"param");T(r.body,s,t);return}case "CatchClause":{let r=e,s=fe(n);Pe(s,r.param,"param"),T(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=fe(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Pe(s,o.id,a.kind);else a&&T(a,s,t);T(r.right,n,t),T(r.test,s,t),T(r.update,s,t),T(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)T(s.init,n,t),Pe(n,s.id,r.kind);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.binds.set(s.name,"import");}return}case "ExportNamedDeclaration":{let r=e;r.declaration&&T(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":T(e.expression,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)T(i,n,t);else T(o,n,t);}return}}}function rn(e){let n={out:[],invalid:new WeakSet};return T(e,fe(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var ye=e=>({decls:new Map,parent:e});function Wt(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function le(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?le(n.argument):le(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?le(n):[]);case "AssignmentPattern":return le(e.left);case "RestElement":return le(e.argument);default:return []}}var Me=(e,n)=>{for(let t of le(n))e.decls.set(t.name,t);};function O(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=Wt(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;O(r.object,n,t),r.computed&&O(r.property,n,t);return}case "Property":{let r=e;r.computed&&O(r.key,n,t),O(r.value,n,t);return}case "Program":case "BlockStatement":{let r=ye(n);for(let s of e.body??[])O(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=e.id;s&&n.decls.set(s.name,s);let a=ye(n);for(let o of r.params??[])Me(a,o);O(r.body,a,t);return}case "CatchClause":{let r=e,s=ye(n);Me(s,r.param),O(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=ye(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Me(s,o.id);else a&&O(a,s,t);O(r.right,n,t),O(r.test,s,t),O(r.update,s,t),O(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)Me(n,r.id),O(r.init,n,t);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.decls.set(s.name,s);}return}case "TSTypeAliasDeclaration":{let r=e.id;r&&n.decls.set(r.name,r);return}case "TSAsExpression":O(e.expression,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)O(i,n,t);else O(o,n,t);}return}}}function Jt(e){let n=new WeakMap;return O(e,ye(void 0),n),n}var sn=e=>e.typeAnnotation,an=e=>e.returnType,x=e=>e.type==="Identifier"?e.name:null,Fn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?x(n.id):null}return x(e)},Se=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function jn(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function on(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=on(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Ie(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 ne=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):Ie(e)},ln=e=>e.type==="ArrowFunctionExpression",Un=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,be=e=>Un(e)?e.args[0]:e,Ne=e=>Un(e)?e:typeCore.s.promise(e);function he(e){return e.t==="tuple"?true:e.t==="array"?he(e.items):e.t==="union"?e.of.some(he):false}function ge(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ge(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ge(e.bound):false}var G=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=typeCore.expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function Ln(e){let n=an(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:x(r)??`arg${s}`,type:sn(r)??typeCore.s.unknown})),returns:e.async?Ne(n):n}:null}var J={then:{},else:{}},qn=new Set(["string","number","boolean","undefined","function","object"]),$n={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function Wn(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 Ht=typeCore.s.literal(true),Zt=typeCore.s.literal(false),K=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Ht,Zt]:[e];function Vn(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function er(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=K(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function nr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=K(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function tr(e,n){if(!qn.has(n))return null;if(e.t==="unknown"||e.t==="any")return $n[n]??e;let t=K(e).filter(r=>Wn(r,n));return t.length?typeCore.normalizeUnion(t):$n[n]??e}function rr(e,n){if(!qn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=K(e).filter(r=>!Wn(r,n));return t.length?typeCore.normalizeUnion(t):null}function xn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=ne(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function Gn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=ne(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Kn(e,n,t,r,s){let a=K(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let c=o(l);return r?!!c&&typeCore.subtype(t,c,s):!(c&&typeCore.subtype(c,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function _n(e,n,t){let r=K(e),s=o=>o.t==="object"&&(n in o.props||!!o.index),a=r.filter(o=>t?s(o):!s(o));return a.length&&a.length<r.length?typeCore.normalizeUnion(a):null}function sr(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function ar(e,n,t){let r=K(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var or=e=>e.t==="null"||e.t==="undefined",Jn=e=>or(e)||e.t==="literal"&&!e.value,ir=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=K(e),t=n.filter(r=>!Jn(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},lr=e=>{let n=K(e),t=n.filter(Jn);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},zn=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,U=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),cr=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function ke(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,b=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&b.type==="Identifier"){let g=b.name,v=R(n,g);if(!v)return J;let B=String(m.value);return U(g,_n(v,B,true),_n(v,B,false))}return J}if(!cr(r.operator))return J;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=Vn(a,o)??Vn(o,a);if(i){let m=R(n,i.name);if(!m)return J;let b=tr(m,i.tag),g=rr(m,i.tag);return s?U(i.name,g,b):U(i.name,b,g)}let l=zn(a),c=zn(o),d=l?o:c?a:null;if((l||c)&&d?.type==="Identifier"){let m=d.name,b=R(n,m);if(!b)return J;let v=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??c],B=K(b),z=B.filter(Le=>v.includes(Le.t)),j=B.filter(Le=>!v.includes(Le.t)),H=z.length?typeCore.normalizeUnion(z):null,V=j.length&&j.length<B.length?typeCore.normalizeUnion(j):null;return s?U(m,V,H):U(m,H,V)}let u=xn(a,o)??xn(o,a);if(u){let m=R(n,u.name);if(!m)return J;let b=sr(m,u.lit,t),g=ar(m,u.lit,t);return s?U(u.name,g,b):U(u.name,b,g)}let f=Gn(a,o)??Gn(o,a);if(f){let m=R(n,f.name);if(!m)return J;let b=Kn(m,f.prop,f.lit,true,t),g=Kn(m,f.prop,f.lit,false,t);return s?U(f.name,g,b):U(f.name,b,g)}return J}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=ke(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=pr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=R(n,r);if(s)return U(r,ir(s),lr(s))}return J}function ur(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 pr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=R(n,r.name);if(!s)return null;let a=ur(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?U(i,er(l,a.type,t),nr(l,a.type,t)):null}var Y=(e,n)=>Object.keys(n).length?I(e,n):e;function F(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>F(t));case "IfStatement":{let n=e;return !!n.alternate&&F(n.consequent)&&F(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&F(n.finalizer))return true;let t=!n.handler||F(n.handler.body);return F(n.block)&&t}default:return false}}var Ar=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function Dr(e){let n=[];return e.maxDepth!==void 0&&n.push(We(e.maxDepth)),e.maxNodes!==void 0&&n.push(Je(e.maxNodes)),e.maxArgs!==void 0&&n.push(Ye(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(_e(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(ze(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(qe(e.memberDepth)),n}function Cr(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>C("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function rt(e,n,t={}){let r={...Ar(n.types),...n.schemes,...Or(e)},s=rn(e),a={overlay:new WeakMap,sink:oe(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s.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=Tr(e,a);try{i=h(e,l,a);}catch(u){if(u instanceof typeCore.TypeEvalLimitError)a.sink.report(C("too-deep",e,u.message));else if(u instanceof typeCore.UnionTooComplexError)a.sink.report(C("too-complex-union",e,u.message));else throw u;i=typeCore.s.unknown;}let c=[];o&&c.push(...Ce(o)),t.limits&&c.push(...Dr(t.limits)),t.resultType&&c.push(Xe(t.resultType,r));let d=[...a.sink.all,...s.diagnostics,...Cr(e,r),...t.unused?nn(e,t.unused):[],...c.length?xe(e,c,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:d,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function Rr(e,n,t={}){let r=rt(e,n,t),s={},a=new Map,o,i=c=>{let d=[];if(c.type==="VariableDeclaration")for(let u of c.declarations){let f=x(u.id),m=r.overlay.get(u);f&&m&&(s[f]=m.type,d.push(f));}else if(c.type==="FunctionDeclaration"){let u=c.id?.name,f=r.overlay.get(c);u&&f&&(s[u]=f.type,d.push(u));}return d};for(let c of e.body??[])if(c.type==="VariableDeclaration"||c.type==="FunctionDeclaration")i(c);else if(c.type==="ExportNamedDeclaration"){let d=c;if(d.declaration)for(let u of i(d.declaration))a.set(u,u);else for(let u of d.specifiers)a.set(u.exported.name,u.local.name);}else if(c.type==="ExportDefaultDeclaration"){let d=r.overlay.get(c.declaration);o=d?d.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[c,d]of a)s[d]&&(l[c]={type:s[d]});o!==void 0&&(l.default={type:o});}else for(let c in s)l[c]={type:s[c]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Or=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function Tr(e,n){let t=n.env.modules,r={};core.walk(e,{ImportDeclaration(s){let a=s,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=typeCore.s.unknown;return}for(let l of a.specifiers){let c=l.local.name;if(c in r){n.sink.report(S.cannotRedeclare(l.local,c));continue}if(l.type==="ImportNamespaceSpecifier"){r[c]=i;continue}let d=l.type==="ImportSpecifier"?l.imported.name:"default",u=typeCore.discover(i,[d],n.schemes);u?r[c]=u.type:(n.sink.report(S.noSuchMember(l,i,d)),r[c]=typeCore.s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?I(n.env.scope,r):n.env.scope}var y=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function h(e,n,t,r){switch(e.type){case st:return e.schema;case "JSXElement":case "JSXFragment":return y(t,e,h(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return y(t,e,Ie(e),n);case "Placeholder":return y(t,e,typeCore.s.any,n);case "Identifier":{let s=e.name,a=R(n,s);return a===void 0?s==="undefined"?y(t,e,typeCore.s.undefined,n):(t.sink.report(S.unknownName(e,s)),y(t,e,typeCore.s.unknown,n)):y(t,e,a,n)}case "MemberExpression":return y(t,e,Ir(e,n,t),n);case "CallExpression":return y(t,e,$r(e,n,t,r),n);case "ArrowFunctionExpression":return Sn(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),y(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),y(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),y(t,e,typeCore.s.unknown,n);case "BlockStatement":return y(t,e,mt(e,n,t),n);case "ReturnStatement":{let s=e.argument;return y(t,e,s?h(s,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 s=e,a=s.left,o=h(a,n,t);if(a.type==="MemberExpression"){let d=t.overlay.get(a.object)?.type,u=d&&typeCore.apparentType(d,t.schemes);u&&(u.t==="array"||u.t==="tuple")&&u.readonly&&t.sink.report(S.readonlyWrite(a,u));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),c=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let u=h(s.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(u)),y(t,e,u,n)}if(c&&i!==null){let u=h(s.right,n,t);return typeCore.subtype(u,c,t.schemes)||t.sink.report(S.notAssignable(s.right,u,c,t.schemes)),t.assignFlow.set(e,ft(c,u,t.schemes)),y(t,e,u,n)}let d=_(s.right,o,n,t);return y(t,e,d,n)}return y(t,e,h(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=h(s.argument,n,t);return we(a,t.schemes)||t.sink.report(S.arithmeticOperand(s.argument,"operand")),y(t,e,typeCore.s.number,n)}case "ExpressionStatement":return y(t,e,h(e.expression,n,t),n);case "VariableDeclaration":return je(e,n,t),y(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":{let s=e.id?.name,a=s?t.schemes[s]:void 0;return y(t,e,a?_r(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return y(t,e,os(e,n,t),n);case "LogicalExpression":{let s=e,a=h(s.left,n,t),o=h(s.right,n,t);return y(t,e,ls(s.operator,a,o),n)}case "UnaryExpression":return y(t,e,us(e,n,t),n);case "ConditionalExpression":{let s=e;h(s.test,n,t);let a=ke(s.test,n,t.schemes),o=h(s.consequent,Y(n,a.then),t),i=h(s.alternate,Y(n,a.else),t);return y(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return y(t,e,ps(e,n,t),n);case "ArrayExpression":return y(t,e,bt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=h(s,n,t);St(a,t.schemes)||t.sink.report(S.notTextConvertible(s,a));}return y(t,e,typeCore.s.string,n)}case "AwaitExpression":{let s=e.argument,a=s?h(s,n,t):typeCore.s.unknown;return y(t,e,be(a),n)}case "Program":{let s=Fe(e.body,n,t,new Set(t.importNames)).scope;return y(t,e,typeCore.s.unknown,s)}case "JsonExpression":return y(t,e,dn(e.body,n,t,e),n);case "ChainExpression":return y(t,e,typeCore.normalizeUnion([h(e.expression,n,t),typeCore.s.undefined]),n);case "TSAsExpression":{let s=e,a=h(s.expression,n,t),o=Ae(s.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)),y(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),y(t,e,typeCore.s.unknown,n)}}var Pr=new Set(["constructor","prototype","__proto__"]);function Mr(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 Ir(e,n,t){let r=h(e.object,n,t),s=Mr(e);if(s!==null&&Pr.has(s))return t.sink.report(S.forbiddenMember(e,s)),typeCore.s.unknown;if(e.computed){let i=h(e.property,n,t),l=typeCore.resolveTypeOp(typeCore.s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&Yn(e,r,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(r,[a],t.schemes);return o?o.type:(Yn(e,r,a,t),typeCore.s.unknown)}function Yn(e,n,t,r){let s=typeCore.isScheme(n,r.schemes)?typeCore.expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(S.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(S.notObject(e,n));}function Fr(e,n,t){if(!e||e.type!=="Identifier")return;let r=e.name;if(R(n,r)===void 0)return;let s=t.schemes[r];return s&&s.params.length===0?s.body:void 0}function hn(e,n){let t=G(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function jr(e,n){let t=R(e.scope,n);if(!t)return;let r=hn(t,e.schemes);return r?G(r,e.schemes):void 0}function Ur(e,n,t,r){let s=hn(h(n[0],t,r),r.schemes),a=n.length>1?h(n[1],t,r):typeCore.s.undefined;if(s){let o=typeCore.typeDiff(a,s,r.schemes);o.length&&r.sink.report(S.propsMismatch(n[1]??e,s,typeCore.formatTypeDiff(o)));}return y(r,e,typeCore.s.boolean,t)}var st="TSLiteSyntheticArg",Lr=e=>({type:st,schema:e});function at(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=G(h(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(Lr(l));else s={elem:i.t==="array"?i.items:typeCore.s.unknown,node:a};}return {nodes:r,spread:s}}function $r(e,n,t,r){let s=e.arguments,a=on(e.callee);if(a){let u=t.env.accessors?.[a];if(u){let f=jn(s);if(f){let m=typeCore.discover(u,f,t.schemes);return m?m.type:(t.sink.report(S.noSuchMember(e,u,f.join("."))),typeCore.s.unknown)}return s.forEach(m=>h(m,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let u=Fr(s[0],n,t);for(let f=1;f<s.length;f++)h(s[f],n,t);return u??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return Ur(e,s,n,t);let o=h(e.callee,n,t);if(o.t==="any")return s.forEach(u=>h(u,n,t)),typeCore.s.any;if(o.t==="overload")return xr(e,o,n,t,r);if(o.t!=="fn")return s.forEach(u=>h(u,n,t)),t.sink.report(S.notCallable(e,o)),typeCore.s.unknown;let i=at(s,n,t),l=i.nodes.map(u=>ot(u,n,t)),c=ct(e),d=!c||ut(o,c.length);return d||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,c.length)),it(e,o,i.nodes,l,n,t,i.spread,r,d?c:void 0)}function ot(e,n,t){if(ln(e))return typeCore.s.any;if(e.type!=="CallExpression")return h(e,n,t);let r=oe(),s=h(e,n,{...t,sink:r});return r.hasErrors()?typeCore.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function it(e,n,t,r,s,a,o=null,i,l){let c=m=>{if(!i)return m;let b=typeCore.substitute(n.returns,m);if(b.t==="fn"&&i.t==="fn"){let g=m,v=Math.min(b.params.length,i.params.length);for(let B=0;B<v;B++)g=typeCore.unify(b.params[B].type,i.params[B].type,g)??g;return typeCore.unify(b.returns,i.returns,g)??g}return typeCore.unify(b,i,m)??m},d=l?qr(e,n,l,a):void 0,u=d??c(typeCore.instantiateLoose(n,r).bindings);t.forEach((m,b)=>{if(ln(m)){let g=typeCore.widenType(typeCore.substitute(n.params[b]?.type??typeCore.s.any,u));r[b]=Sn(m,s,a,g);}else if(m.type==="CallExpression"&&r[b].t==="any")r[b]=h(m,s,a,typeCore.substitute(n.params[b]?.type??typeCore.s.unknown,u));else if(m.type==="Literal"){let g=n.params[b]?.type??typeCore.s.unknown,v=g.t==="var"?g.bound?typeCore.substitute(g.bound,u):g:typeCore.substitute(g,u);ge(v)&&(r[b]=y(a,m,ne(m),s));}else if(m.type==="ArrayExpression"||m.type==="ObjectExpression"||m.type==="ConditionalExpression"){let g=n.params[b]?.type??typeCore.s.unknown,v=typeCore.substitute(g,u);if(m.type==="ArrayExpression"&&he(v)){r[b]=Nn(m,v,s,a);return}let B=g.t==="var"?g.bound?typeCore.substitute(g.bound,u):void 0:v;B&&ds(B,a.schemes)&&(r[b]=ms(m,B,s,a,g.t==="var")??r[b]);}});let f=d??c(typeCore.instantiateLoose(n,r).bindings);return d||Vr(e,n,f,a),Xr(e,n,r,f,a,t,o),t.forEach((m,b)=>{let g=n.params[b];m.type==="ObjectExpression"&&g&&!g.variadic&&bn(m,typeCore.substitute(g.type,f),a);}),typeCore.widenInferred(typeCore.groundVars(typeCore.substitute(n.returns,f),a.schemes))}var Xn=new WeakMap;function lt(e){let n=Xn.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)P(s.type,t,r);return P(e.returns,t,r),Xn.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 r of e.of)P(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)P(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)P(r.type,n,t);P(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)P(s.type,n,t);P(r.returns,n,t);}return;case "apply":for(let r of e.args)P(r,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 Vr(e,n,t,r){let s=lt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=typeCore.substitute(o,t);typeCore.subtype(i,l,r.schemes)||r.sink.report(S.constraintViolation(e,a,i,l));}}function xr(e,n,t,r,s){let a=at(e.arguments,t,r),o=a.nodes,i=o.map(d=>ot(d,t,r)),l=ct(e),c=l?n.signatures.filter(d=>ut(d,l.length)):n.signatures;if(l&&!c.length){let d=n.signatures.reduce((u,f)=>Math.max(u,f.typeParams?.length??0),0);return r.sink.report(S.wrongTypeArgumentCount(e,d,l.length)),Qn(e,n.signatures,a,o,i,t,r,s,void 0)}return Qn(e,c,a,o,i,t,r,s,l)}function Qn(e,n,t,r,s,a,o,i,l){let c={t:"overload",signatures:n},d=f=>t.spread?Wr(f,r.length):Jr(f,r.length),u=c.signatures.find(f=>d(f)&&Yr(f,s,o));if(!u){let f=c.signatures.filter(d);f.length===1?u=f[0]:c.signatures.length===1&&(u=c.signatures[0]);}return u?it(e,u,r,s,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,c,s)),typeCore.s.unknown)}function Gr(e,n,t,r){let s=R(n,e[0]);if(s===void 0)return t.sink.report(S.unknownName(r,e[0])),typeCore.s.unknown;let a=e.slice(1),o=a.length?typeCore.discover(s,a,t.schemes)?.type:s;return o?o.t==="literal"?typeCore.s.literal(o.value):o:(t.sink.report(S.noSuchMember(r,s,a.join("."))),typeCore.s.unknown)}function Ae(e,n,t,r){let s=a=>{if(Array.isArray(a)){let c=false,d=a.map(u=>{let f=s(u);return f!==u&&(c=true),f});return c?d:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Gr(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(Kr(o.name,n,t,r),!(o.name in t.schemes)))return typeCore.s.any;let i=false,l={};for(let c of Object.keys(o)){let d=s(o[c]);d!==o[c]&&(i=true),l[c]=d;}return i?l:o};return s(e)}function Kr(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Ae(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function _r(e,n,t,r,s){let a={...t,sink:oe(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Ae(e,n,a,r);return a.sink.hasErrors()?e:s?o:typeCore.groundVars(o,t.schemes)}var gn=(e,n,t)=>{let r=sn(e);return r===void 0?r:Ae(r,n,t,e)},zr=(e,n,t)=>{let r=an(e);return r===void 0?r:Ae(r,n,t,e)},ct=e=>{let n=e.typeArguments;return n?.length?n:void 0},ut=(e,n)=>(e.typeParams?.length??0)===n;function qr(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of lt(n)){let c=o[i];if(!c)continue;let d=typeCore.groundVars(typeCore.substitute(l,o),r.schemes);typeCore.subtype(c,d,r.schemes)||r.sink.report(S.constraintViolation(e,i,c,d));}return o}function Wr(e,n){let t=0,r=false;for(let s of e.params)s.variadic?r=true:s.optional||t++;return n>=t&&(r||n<e.params.length)}function Jr(e,n){let t=0;for(let r of e.params){if(r.variadic)return n>=t;r.optional||t++;}return n>=t&&n<=e.params.length}function Yr(e,n,t){let{bindings:r}=typeCore.instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic)return true;if(s>=n.length){if(!a.optional)return false;continue}if(!typeCore.subtype(n[s],typeCore.substitute(a.type,r),t.schemes))return false}return true}function Xr(e,n,t,r,s,a=e.arguments??[],o=null){let i=c=>a[c]??e;for(let c=0;c<n.params.length;c++){let d=n.params[c];if(d.variadic)break;let u=typeCore.substitute(d.type,r);if(c>=t.length){!d.optional&&!o&&s.sink.report(S.missingArgument(e,d.name,u));continue}typeCore.subtype(t[c],u,s.schemes)||s.sink.report(S.notAssignable(i(c),t[c],u,s.schemes));}let l=n.params.find(c=>c.variadic);if(o){let c=t.length,d=n.params.filter(u=>!u.optional&&!u.variadic).length;if(!(c>=d&&(l||c<n.params.length))){s.sink.report(S.spreadArgument(o.node));return}if(l){let u=typeCore.substitute(l.type,r),f=u.t==="array"?u.items:typeCore.s.unknown;typeCore.subtype(o.elem,f,s.schemes)||s.sink.report(S.notAssignable(o.node,o.elem,f,s.schemes));}return}!l&&t.length>n.params.length&&s.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function pt(e,n,t){if(e.t==="object"){let r=typeCore.ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>pt(typeCore.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:typeCore.resolveTypeOp({t:"intersection",of:r})}}function _(e,n,t,r,s=false){let a=typeCore.apparentType(n,r.schemes);switch(e.type){case "Literal":{let i=ne(e);return typeCore.subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,s?ge(n)?i:typeCore.widen(Ie(e)):n,t)}case "ArrayExpression":{if(he(a)){let i=Nn(e,a,t,r);return typeCore.subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,i,t)}if(a.t==="array"){let i=[];for(let c of e.elements){if(!c)continue;let d=c;if(d.type==="SpreadElement"){let u=_(d.argument,n,t,r,s);u.t==="array"&&i.push(u.items);}else i.push(_(d,a.items,t,r,s));}let l=s&&i.length>0?typeCore.s.array(typeCore.normalizeUnion(i)):n;return y(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let d of e.properties){let u=d;if(u.type==="SpreadElement"){h(u.argument,t,r);continue}let f=u,m=Se(f),b=m!==null?pt(a,m,r.schemes):void 0,g=b?_(f.value,b,t,r,s):typeCore.widen(h(f.value,t,r));m!==null&&(i[m]={type:b??g},l[m]={type:g}),y(r,u,g,t);}let c={t:"object",props:i};return typeCore.subtype(c,n,r.schemes)||r.sink.report(S.notAssignable(e,c,n,r.schemes)),y(r,e,s?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Sn(e,t,r,a);return typeCore.subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,n,t)}break}case "ConditionalExpression":{let i=e;h(i.test,t,r);let l=_(i.consequent,n,t,r,s),c=_(i.alternate,n,t,r,s);return y(r,e,s?typeCore.normalizeUnion([l,c]):n,t)}case "Placeholder":return y(r,e,n,t)}let o=h(e,t,r);return typeCore.subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,o,t)}function Sn(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=B=>a?.length?{...B,typeParams:a}:B,i={},l=new Map,c=e.params.map((B,z)=>{let j=B,H=x(j),V=gn(j,n,t)??s?.params[z]?.type??typeCore.s.unknown;return H?(i[H]=V,(V.t==="union"||V.t==="boolean")&&l.set(H,V)):j.type!=="Identifier"&&re(j,V,i,n,t),t.overlay.set(j,{type:V,scope:n}),{name:H??`arg${z}`,type:V}}),d=I(n,i),u=e.body,f=zr(e,n,t);if(u.type!=="BlockStatement"&&f){let B=e.async?be(f):f;_(u,B,d,t);let z=e.async?Ne(f):f;return y(t,e,o({t:"fn",params:c,returns:z}),n)}let m=f??s?.returns,b=m&&e.async?be(m):m,g=u.type==="BlockStatement"?y(t,u,mt(u,d,t,new Set(Object.keys(i)),l,b),d):h(u,d,t),v=e.async?Ne(g):g;if(f){let B=e.async?be(f):f,z=e.async?g:v;typeCore.subtype(z,B,t.schemes)||t.sink.report(S.notAssignable(u,v,f,t.schemes));let j=e.async?Ne(f):f;return y(t,e,o({t:"fn",params:c,returns:j}),n)}return y(t,e,o({t:"fn",params:c,returns:typeCore.widenType(v)}),n)}function ue(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ue(n.argument):ue(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ue(n.argument):ue(n):[]);case "AssignmentPattern":return ue(e.left);default:return []}}function dt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ue(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?dt(e.declaration):[]}function mt(e,n,t,r=new Set,s,a){let{returns:o}=Fe(e.body,n,t,r,s,a),i=!F(e);return o.length===0?i?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(i?[...o,typeCore.s.undefined]:o)}var Qr=[typeCore.s.literal(true),typeCore.s.literal(false)];function Hr(e){return e.t==="union"?e.of:e.t==="boolean"?Qr:[e]}function ft(e,n,t){let r=Hr(e);if(r.length<=1)return e;let s=r.filter(o=>typeCore.subtype(n,o,t));if(s.length===0)return e;let a=typeCore.normalizeUnion(s);return typeCore.subtype(n,a,t)?a:e}function yt(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let r=t,s=r.left;if(r.operator!=="="||s.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:s.name,type:a}:null}function se(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=se(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=yt(e,t);if(!r)return {types:n,exits:false};let s=new Map(n);return s.set(r.name,r.type),{types:s,exits:false}}case "IfStatement":{let r=ht(e,n,t);if(r.size===0)return {types:n,exits:F(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:F(e)}}case "TryStatement":{let r=e,s=[],a=se(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=se(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Zr(n,s);return r.finalizer&&(o=se(r.finalizer,o,t).types),{types:o,exits:F(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function ht(e,n,t){let r=se(e.consequent,n,t),s=e.alternate?se(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,typeCore.normalizeUnion(l));}return o}function gt(e,n){let t=new Map,r=s=>{let a=R(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function Zr(e,n){let t=new Map(e);if(n.length===0)return t;for(let r of e.keys()){let s=n.map(a=>a.get(r)??e.get(r));t.set(r,typeCore.normalizeUnion(s));}return t}function es(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=gt(n,t),s=se(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return Y(n,a)}function Fe(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!ns(e))return Hn(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,c]of s)t.declaredMut.set(l,c);try{return Hn(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,c]of i)t.declaredMut.set(l,c);}}function ns(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let r=t.declaration;if(r?.type==="VariableDeclaration"&&r.kind!=="const")return true}}return false}function Hn(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let c of dt(l))r.has(c.name)?t.sink.report(S.cannotRedeclare(c,c.name)):r.add(c.name);if(l.type==="VariableDeclaration")a=je(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let c=l;if(c.declaration?.type==="VariableDeclaration")a=je(c.declaration,a,t);else if(c.declaration?.type==="FunctionDeclaration"){let d=h(c.declaration,a,t),u=x(c.declaration.id);u&&(a=I(a,{[u]:d}));}else for(let d of c.specifiers)R(a,d.local.name)===void 0&&t.sink.report(S.unknownName(d.local,d.local.name));}else if(l.type==="ExportDefaultDeclaration")h(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let c=h(l,a,t),d=x(l.id);d&&(a=I(a,{[d]:c}));}else if(l.type==="IfStatement"){let c=l,d=t.evolving.size||t.declaredMut.size?gt(a,t):null;if(o.push(...$(l,a,t,s)),d&&d.size){let u=ht(c,d,t);u.size&&(a=Y(a,Object.fromEntries(u)));}!c.alternate&&F(c.consequent)&&(a=Y(a,ke(c.test,a,t.schemes).else));}else {o.push(...$(l,a,t,s));let c=yt(l,t);c?a=Y(a,{[c.name]:c.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=es(l,a,t));}}return {scope:a,returns:o}}function $(e,n,t,r){switch(e.type){case "ReturnStatement":{let s=e.argument,a=s?r?(_(s,r,n,t),r):h(s,n,t):typeCore.s.unknown;return y(t,e,a,n),[a]}case "IfStatement":{let s=e;h(s.test,n,t);let a=ke(s.test,n,t.schemes),o=$(s.consequent,Y(n,a.then),t,r);return s.alternate&&o.push(...$(s.alternate,Y(n,a.else),t,r)),y(t,e,typeCore.s.unknown,n),o}case "BlockStatement":{let{returns:s}=Fe(e.body,n,t,void 0,void 0,r);return y(t,e,s.length?typeCore.normalizeUnion(s):typeCore.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,a=n;s.init&&(s.init.type==="VariableDeclaration"?a=je(s.init,a,t):h(s.init,a,t)),s.test&&h(s.test,a,t),s.update&&h(s.update,a,t);let o=$(s.body,a,t,r);return y(t,e,typeCore.s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s=e,a=h(s.right,n,t),o=e.type==="ForOfStatement"?a.t==="array"?a.items:typeCore.s.unknown:typeCore.s.string,i=Fn(s.left),l=i?I(n,{[i]:o}):n,c=$(s.body,l,t,r);return y(t,e,typeCore.s.unknown,n),c}case "BreakStatement":case "ContinueStatement":return y(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&h(s,n,t),y(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let s=e,a=$(s.block,n,t,r);if(s.handler){let o=s.handler.param,i=o?x(o):null,l=i?I(n,{[i]:typeCore.s.unknown}):n;a.push(...$(s.handler.body,l,t,r));}return s.finalizer&&a.push(...$(s.finalizer,n,t,r)),y(t,e,typeCore.s.unknown,n),a}case "SwitchStatement":{let s=e;h(s.discriminant,n,t);let a=n,o=[];for(let i of s.cases){i.test&&h(i.test,a,t);let l=Fe(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return y(t,e,typeCore.s.unknown,n),o}default:return h(e,n,t),[]}}function ts(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function rs(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function ss(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return typeCore.s.object(t,e.index)}function as(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function re(e,n,t,r,s){switch(e.type){case "Identifier":{let a=gn(e,r,s)??n;t[e.name]=a,s.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=typeCore.widenType(h(a.right,r,s)),{type:i}=typeCore.withoutUndefined(n),l=i.t==="unknown"?o:typeCore.normalizeUnion([i,o]);re(a.left,l,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){re(o.argument,ss(n,a),t,r,s);continue}let i=o,l=Se(i);l!=null&&a.push(l);let c=l!=null?ts(n,l,s):typeCore.s.unknown;re(i.value,c,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?re(i.argument,as(n,o),t,r,s):re(i,rs(n,o),t,r,s);});return}}}function bn(e,n,t){let r=G(n,t.schemes),a=(r.t==="union"?r.of.map(o=>G(o,t.schemes)):[r]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=Se(i);if(l===null)continue;let c=a.filter(d=>l in d.props);if(!c.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&bn(i.value,c[0].props[l].type,t);}}function je(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=x(a),i=gn(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,Zn(o,i,t)):(r[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(s)),o&&(r[o]=i??typeCore.s.unknown);continue}let l=i??(s.init.type==="ArrowFunctionExpression"?Ln(s.init):null),c=o&&l?I(n,{[o]:l}):n,d,u=null;i?(_(s.init,i,c,t),s.init.type==="ObjectExpression"&&bn(s.init,i,t),d=i,u=i,(i.t==="union"||i.t==="boolean")&&s.init.type==="Literal"&&(d=ft(i,ne(s.init),t.schemes))):(d=h(s.init,c,t),e.kind!=="const"&&(d=typeCore.widenLiteral(d)),u=d),y(t,s,d,n),o?(r[o]=d,e.kind!=="const"&&u&&Zn(o,u,t)):re(a,d,r,n,t);}return y(t,e,typeCore.s.unknown,n),I(n,r)}function Zn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function os(e,n,t){let r=h(e.left,n,t),s=h(e.right,n,t),a=e.operator,o=pe.get(a);if(!o)return typeCore.s.boolean;if(o.category==="additive"){if(ae(r)||ae(s))return te(r,t.schemes)||te(s,t.schemes)?typeCore.s.string:typeCore.s.number;if(te(r,t.schemes)&&te(s,t.schemes))return typeCore.s.string;if(we(r,t.schemes)&&we(s,t.schemes))return typeCore.s.number;if(te(r,t.schemes)||te(s,t.schemes)){let l=te(r,t.schemes)?s:r;return t.sink.report(S.implicitCoercion(e,r,s,St(l,t.schemes))),typeCore.s.string}return t.sink.report(S.operatorNotApplicable(e,"+",r,s)),typeCore.s.number}if(o.category==="arithmetic"||o.category==="bitwise")we(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),we(s,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!ae(r)&&!ae(s)){let i=typeCore.apparentType(r,t.schemes),l=typeCore.apparentType(s,t.schemes),c=typeCore.subtype(i,typeCore.s.number,t.schemes),d=typeCore.subtype(l,typeCore.s.number,t.schemes);c&&d||!c&&!d&&(typeCore.subtype(i,l,t.schemes)||typeCore.subtype(l,i,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,r,s));}return He(o.result)}var ae=e=>e.t==="any"||e.t==="unknown",we=(e,n)=>ae(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),te=(e,n)=>!ae(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),is=typeCore.s.union([typeCore.s.string,typeCore.s.number,typeCore.s.boolean,typeCore.s.null,typeCore.s.undefined]),St=(e,n)=>ae(e)||typeCore.subtype(typeCore.apparentType(e,n),is,n),et={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},un=e=>e.t==="null"||e.t==="undefined";function ls(e,n,t){if(n.t==="any"||n.t==="unknown")return typeCore.normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[typeCore.s.literal(true),typeCore.s.literal(false)]:[n];if(e==="??")return typeCore.normalizeUnion([...r.filter(a=>!un(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!un(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>un(a)?[a]:a.t==="literal"?a.value?[]:[a]:et[a.t]?[et[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var cs=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function us(e,n,t){let r=h(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:typeCore.s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:typeCore.s.number;case "+":case "~":return typeCore.s.number;case "typeof":return cs;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function ps(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let c of e.properties){let d=c;if(d.type==="SpreadElement"){let g=G(h(d.argument,n,t),t.schemes);if(g.t==="object"){for(let v in g.props)r[v]=g.props[v];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let u=d,f=h(u.value,n,t),m=typeCore.widen(f);if(y(t,d,f,n),u.computed){let g=G(h(u.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let b=Se(u);b!==null&&(r[b]={type:m},a.push(m),/^\d+$/.test(b)&&o.push(m));}return i?s={key:"string",type:typeCore.normalizeUnion(a)}:l&&(s={key:"number",type:typeCore.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function bt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=G(h(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(typeCore.widen(h(a,n,t)));}return typeCore.s.array(r.length?typeCore.normalizeUnion(r):typeCore.s.unknown)}function Nn(e,n,t,r){let s=G(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,c)=>l.type==="ArrayExpression"?Nn(l,c,t,r):typeCore.widen(h(l,t,r));if(s.t==="tuple"&&o&&a.length===s.elements.length){let l=a.map((c,d)=>i(c,s.elements[d]));return y(r,e,{t:"tuple",elements:l},t)}if(s.t==="array"){let l=[];for(let c of a){if(!c)continue;let d=c;if(d.type==="SpreadElement"){h(d.argument,t,r);continue}l.push(i(d,s.items));}return y(r,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return bt(e,t,r)}function dn(e,n,t,r){if(e===null)return typeCore.s.null;switch(typeof e){case "string":return typeCore.s.string;case "number":return typeCore.s.number;case "boolean":return typeCore.s.boolean;case "object":break;default:return typeCore.s.unknown}if(Array.isArray(e)){let o=e.map(i=>dn(i,n,t,r));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let s=e;if("#expr"in s){let o;try{o=codec.fromJson(s);}catch{return t.sink.report(S.unsupported(r,`'#expr: ${String(s["#expr"])}'`)),typeCore.s.unknown}return h(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:dn(s[o],n,t,r)};return {t:"object",props:a}}function ds(e,n){let t=typeCore.apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function ms(e,n,t,r,s){let a=oe(),o=_(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(c=>c.node===l.node&&c.code===l.code&&c.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var fs=(e,n)=>({...e,typeAnnotation:n}),ys=(e,n)=>({...e,returnType:n}),hs=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function kn(e,n){return e.get(n)?.type}function gs(e,n){return e.get(n)?.scope}function Ss(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function bs(e,n){let t=e.get(n)?.scope;return t?[...$e(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Ns=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Bs(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 Ue(e,n,t,r={}){let s=e[n],a=e[n+1];if(!(!s||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===s?a.returnType:void 0;case "VariableDeclarator":return a.init===s?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(Ns)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=kn(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==s||e[n+2]?.type!=="ObjectExpression")return;let i=Ue(e,n+2,t,r),l=Bs(a);return !i||!l?void 0:typeCore.discover(i,[l],r)?.type}case "ArrayExpression":{let o=Ue(e,n+1,t,r);return o?typeCore.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=pe.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return typeCore.s.number;let i=a.left===s?a.right:a.left,l=kn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Ue(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?typeCore.s.number:void 0}default:return}}function ks(e,n){return e.filter(t=>t.node===n)}exports.BINARY_OP=pe;exports.BINARY_OPS=Qe;exports.FUNCTION_KINDS=An;exports.LOGICAL_OPS=Lt;exports.UNARY_OPS=On;exports.annotate=fs;exports.annotateReturn=ys;exports.asExpression=hs;exports.binaryOpsProducing=$t;exports.calleeAllowlist=Ke;exports.capabilityNodes=Ge;exports.check=rt;exports.childScope=I;exports.collectBindings=Jt;exports.collectMutations=rn;exports.collectUnused=nn;exports.componentProps=jr;exports.componentPropsOf=hn;exports.contextualTypeAt=Ue;exports.createEnv=Et;exports.createSink=oe;exports.diag=S;exports.diagnosticsAt=ks;exports.extractModuleType=Rr;exports.fromCapability=jt;exports.guard=xe;exports.guardsFromCompiled=Ce;exports.lookup=R;exports.makeDiagnostic=C;exports.maxArgs=Ye;exports.maxCallNesting=ze;exports.maxDepth=We;exports.maxFunctionNesting=_e;exports.maxNestingOf=De;exports.maxNodes=Je;exports.memberCompletions=Ss;exports.memberDepth=qe;exports.opResultSchema=He;exports.resolveNamed=At;exports.resolveScheme=Dt;exports.resultType=Xe;exports.rootScope=wn;exports.scopeAt=gs;exports.scopeCompletions=bs;exports.typeAt=kn;exports.unaryOpsProducing=Vt;exports.visibleNames=$e;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 vn=(e={})=>core.rootScope(e),F=(e,n)=>core.childScope(e,n),C=(e,n)=>core.lookup(e,n),Ve=e=>core.visibleNames(e),Ct=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:vn(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),Rt=(e,n)=>e.types[n],Ot=(e,n)=>e.schemes[n];var En={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"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","implicit-coercion":"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"},N=(e,n,t)=>({code:e,kind:En[e],severity:"error",node:n,message:t}),R=(e,n,t,r="error")=>({code:e,kind:En[e],severity:r,node:n,message:t}),S={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r),a=s.filter(c=>c.path.length>0),o=a.length?` ${typeCore.formatTypeDiff(a)}.`:"",i=N("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${o}`),l=s.filter(c=>c.kind==="missing"&&c.path.length===1).map(c=>({name:c.path[0],type:c.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>N("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>N("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>N("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>N("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>N("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>N("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),notASchema:(e,n)=>N("not-a-schema",e,`'${n}' refers to a value, but no type named '${n}' is declared. An asserter needs a schema that is both a value in scope and a declared type.`),typeAsValue:(e,n)=>N("type-as-value",e,`'${n}' only refers to a type, but is being used as a value here. Types are erased at runtime: register '${n}' as a value in scope for the asserter to prove it.`),asserterNeedsName:(e,n)=>N("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>N("shadows-schema",e,`'${n}' shadows the schema of the same name: an asserter would type against the declared schema but prove against this value at runtime. Rename the binding.`),unknownModule:(e,n)=>N("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>N("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>N("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>N("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>N("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>N("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>N("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(r=>typeCore.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>N("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(r)}'.`),unsupported:(e,n)=>N("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>N("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>N("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)=>R("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>N("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)=>N("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>R("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)=>N("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,r)=>N("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...N("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${typeCore.format(n)}' and '${typeCore.format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...N("implicit-coercion",e,`Cannot convert '${typeCore.format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function oe(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Ge(e,n,t={}){return n.flatMap(r=>r(e,t))}function ie(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var Ut=e=>Array.isArray(e)?e:[e],Dn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Ke(e,n="error"){return t=>{let r=[];return ie(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(R("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function Cn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ie(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let c=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);c.length&&s.push(R("type-feature-not-allowed",a,`authoring type feature${c.length>1?"s":""} '${c.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function E(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=>E(t.type,n))||!!e.index&&E(e.index.value,n);case "array":return E(e.items,n);case "tuple":return e.elements.some(t=>E(t,n));case "union":case "intersection":return e.of.some(t=>E(t,n));case "fn":return e.params.some(t=>E(t.type,n))||E(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>E(r.type,n))||E(t.returns,n));case "keyof":return E(e.of,n);case "index":return E(e.obj,n)||E(e.key,n);case "mapped":return E(e.over,n)||E(e.body,n);case "conditional":return E(e.check,n)||E(e.extends,n)||E(e.then,n)||E(e.else,n);case "returnType":case "parameters":return E(e.fn,n);case "apply":return e.args.some(t=>E(t,n));default:return false}}function Rn(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ie(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&E(o)){r.push(R("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function _e(e,n="error"){let t=new Set(e);return r=>{let s=[];return ie(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(R("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(R("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Ce(e,n,t={}){let r=new Set(Ut(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(c,d)=>{let u=r.has(c.type),f=u?d+1:d;u&&f>n&&i.push(R("too-deep",c,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of core.childrenOf(c))l(m,f);};return l(o,0),i}}var ze=(e=3,n="error")=>Ce(Dn,e,{hint:"use a pipe instead of nesting functions",severity:n}),qe=(e,n="error")=>Ce("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),We=(e,n="error")=>Ce("MemberExpression",e,{severity:n});function Je(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(R("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of core.childrenOf(a))s(i,o+1);};return s(t,0),r}}function Ye(e,n="error"){return t=>{let r=0;return ie(t,()=>{r++;}),r>e?[R("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function Xe(e,n="error"){return t=>{let r=[];return ie(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(R("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Qe(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[R("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function Re(e){let n=[Ke(e),Cn(e),Rn(e)];return e.hostAllow!=="*"&&n.push(_e([...e.hostAllow])),n}function Lt(e){return Re(capability.compileProfile(e))}var He=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],de=new Map(He.map(e=>[e.op,e])),On={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string},Ze=e=>On[e],Tn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Vt={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string,undefined:typeCore.s.undefined},xt=[{op:"&&"},{op:"||"},{op:"??"}];function Gt(e,n={}){return He.filter(t=>t.result==="additive"?typeCore.subtype(typeCore.s.string,e,n)||typeCore.subtype(typeCore.s.number,e,n):typeCore.subtype(On[t.result],e,n))}function Kt(e,n={}){return Tn.filter(t=>typeCore.subtype(Vt[t.result],e,n))}var Z=e=>({bindings:new Map,parent:e}),Mn=e=>e.charCodeAt(0)===95;function Te(e,n,t,r,s,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:r,kind:s,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function fe(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)fe(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&Pe(n,r);return}for(let r of Object.keys(t))fe(t[r],n);}function In(e,n){let t=e;fe(t.typeAnnotation,n),fe(t.returnType,n);}function Pe(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function W(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;In(e,n),Te(n,t,o,e,r,s||a&&Mn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((c,d)=>{let u=l&&d<o.length-1;if(c.type==="RestElement")W(c.argument,n,t,r,s,false);else {let f=c;f.computed&&B(f.key,n,t),W(f.value,n,t,r,s||u,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;W(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":W(e.left,n,t,r,s,a);return;case "RestElement":W(e.argument,n,t,r,s,true);return;default:return}}function me(e,n,t){if(e)switch(e.type){case "AssignmentPattern":B(e.right,n,t),me(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)me(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&me(r,n,t);return;case "RestElement":me(e.argument,n,t);return;default:return}}function Pn(e,n,t,r){for(let s of e.declarations)W(s.id,n,t,"local",r,false),B(s.init,n,t);}function en(e,n,t){let r=e,s=Z(n),a=r.params??[];for(let o of a)W(o,s,t,"parameter",false,true);for(let o of a)me(o,s,t);B(r.body,s,t);}function B(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(In(e,n),e.type){case "Identifier":Pe(n,e.name);return;case "MemberExpression":{let r=e;B(r.object,n,t),r.computed&&B(r.property,n,t);return}case "Property":{let r=e;r.computed&&B(r.key,n,t),B(r.value,n,t);return}case "Program":case "BlockStatement":{let r=Z(n);for(let s of e.body??[])B(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":en(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Te(n,t,r.name,r,"local",false),en(e,n,t);return}case "CatchClause":{let r=e,s=Z(n);W(r.param,s,t,"local",true,false),B(r.body,s,t);return}case "SwitchStatement":{let r=e;B(r.discriminant,n,t);let s=Z(n);for(let a of r.cases){B(a.test,s,t);for(let o of a.consequent??[])B(o,s,t);}return}case "ForStatement":{let r=e,s=Z(n);B(r.init,s,t),B(r.test,s,t),B(r.update,s,t),B(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;B(r.right,n,t);let s=Z(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)W(o.id,s,t,"local",false,true);else B(a,s,t);B(r.body,s,t);return}case "VariableDeclaration":Pn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Te(n,t,s.name,s,"import",Mn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Pn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Te(n,t,a.name,a,"local",true),en(s,n,t);}else B(s,n,t);}else for(let s of r.specifiers)Pe(n,s.local.name);return}case "TSAsExpression":B(e.expression,n,t);return;case "TSTypeAliasDeclaration":fe(e.typeAnnotation,n);return;case "JsonExpression":nn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;Fn(r.name,n);for(let s of r.attributes??[])B(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":B(e.value,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)B(i,n,t);else B(o,n,t);}return}}}function Fn(e,n,t){e&&(e.type==="JSXIdentifier"?Pe(n,e.name):e.type==="JSXMemberExpression"&&Fn(e.object,n));}function nn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)nn(s,n,t);return}let r=e;if("#expr"in r){try{B(codec.fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))nn(r[s],n,t);}function tn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};B(e,Z(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(S.unusedName(s.node,s.name));return r}var Wt=new Set(["const","import"]),ye=e=>({binds:new Map,parent:e});function Jt(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ee(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ee(n.argument):ee(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ee(n):[]);case "AssignmentPattern":return ee(e.left);case "RestElement":return ee(e.argument);default:return []}}var Me=(e,n,t)=>{for(let r of ee(n))e.binds.set(r.name,t);};function rn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ee(e))rn(a,n,t);return}let r=e.name,s=Jt(n,r);s&&Wt.has(s)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,r,s==="import"?"import":"const")));}function T(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;rn(r.left,n,t),T(r.right,n,t);return}case "UpdateExpression":{rn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=ye(n);for(let s of e.body??[])T(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=ye(n);for(let a of r.params??[])Me(s,a,"param");T(r.body,s,t);return}case "CatchClause":{let r=e,s=ye(n);Me(s,r.param,"param"),T(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=ye(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Me(s,o.id,a.kind);else a&&T(a,s,t);T(r.right,n,t),T(r.test,s,t),T(r.update,s,t),T(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)T(s.init,n,t),Me(n,s.id,r.kind);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.binds.set(s.name,"import");}return}case "ExportNamedDeclaration":{let r=e;r.declaration&&T(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":T(e.expression,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)T(i,n,t);else T(o,n,t);}return}}}function sn(e){let n={out:[],invalid:new WeakSet};return T(e,ye(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var he=e=>({decls:new Map,parent:e});function Xt(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function le(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?le(n.argument):le(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?le(n):[]);case "AssignmentPattern":return le(e.left);case "RestElement":return le(e.argument);default:return []}}var Ie=(e,n)=>{for(let t of le(n))e.decls.set(t.name,t);};function O(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=Xt(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;O(r.object,n,t),r.computed&&O(r.property,n,t);return}case "Property":{let r=e;r.computed&&O(r.key,n,t),O(r.value,n,t);return}case "Program":case "BlockStatement":{let r=he(n);for(let s of e.body??[])O(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=e.id;s&&n.decls.set(s.name,s);let a=he(n);for(let o of r.params??[])Ie(a,o);O(r.body,a,t);return}case "CatchClause":{let r=e,s=he(n);Ie(s,r.param),O(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=he(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ie(s,o.id);else a&&O(a,s,t);O(r.right,n,t),O(r.test,s,t),O(r.update,s,t),O(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)Ie(n,r.id),O(r.init,n,t);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.decls.set(s.name,s);}return}case "TSTypeAliasDeclaration":{let r=e.id;r&&n.decls.set(r.name,r);return}case "TSAsExpression":O(e.expression,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)O(i,n,t);else O(o,n,t);}return}}}function Qt(e){let n=new WeakMap;return O(e,he(void 0),n),n}var an=e=>e.typeAnnotation,on=e=>e.returnType,x=e=>e.type==="Identifier"?e.name:null,jn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?x(n.id):null}return x(e)},Un=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},be=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function $n(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function ln(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=ln(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Fe(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 ne=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):Fe(e)},cn=e=>e.type==="ArrowFunctionExpression",Ln=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Ne=e=>Ln(e)?e.args[0]:e,Be=e=>Ln(e)?e:typeCore.s.promise(e);function ge(e){return e.t==="tuple"?true:e.t==="array"?ge(e.items):e.t==="union"?e.of.some(ge):false}function Se(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Se(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Se(e.bound):false}var G=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=typeCore.expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function Vn(e){let n=on(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:x(r)??`arg${s}`,type:an(r)??typeCore.s.unknown})),returns:e.async?Be(n):n}:null}var J={then:{},else:{}},Jn=new Set(["string","number","boolean","undefined","function","object"]),xn={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function Yn(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 nr=typeCore.s.literal(true),tr=typeCore.s.literal(false),K=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[nr,tr]:[e];function Gn(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function rr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=K(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function sr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=K(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function ar(e,n){if(!Jn.has(n))return null;if(e.t==="unknown"||e.t==="any")return xn[n]??e;let t=K(e).filter(r=>Yn(r,n));return t.length?typeCore.normalizeUnion(t):xn[n]??e}function or(e,n){if(!Jn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=K(e).filter(r=>!Yn(r,n));return t.length?typeCore.normalizeUnion(t):null}function Kn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=ne(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function _n(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=ne(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function zn(e,n,t,r,s){let a=K(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let c=o(l);return r?!!c&&typeCore.subtype(t,c,s):!(c&&typeCore.subtype(c,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function qn(e,n,t){let r=K(e),s=o=>o.t==="object"&&(n in o.props||!!o.index),a=r.filter(o=>t?s(o):!s(o));return a.length&&a.length<r.length?typeCore.normalizeUnion(a):null}function ir(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function lr(e,n,t){let r=K(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var cr=e=>e.t==="null"||e.t==="undefined",Xn=e=>cr(e)||e.t==="literal"&&!e.value,ur=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=K(e),t=n.filter(r=>!Xn(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},pr=e=>{let n=K(e),t=n.filter(Xn);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Wn=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,U=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),dr=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function we(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,b=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&b.type==="Identifier"){let g=b.name,v=C(n,g);if(!v)return J;let k=String(m.value);return U(g,qn(v,k,true),qn(v,k,false))}return J}if(!dr(r.operator))return J;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=Gn(a,o)??Gn(o,a);if(i){let m=C(n,i.name);if(!m)return J;let b=ar(m,i.tag),g=or(m,i.tag);return s?U(i.name,g,b):U(i.name,b,g)}let l=Wn(a),c=Wn(o),d=l?o:c?a:null;if((l||c)&&d?.type==="Identifier"){let m=d.name,b=C(n,m);if(!b)return J;let v=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??c],k=K(b),z=k.filter(Le=>v.includes(Le.t)),I=k.filter(Le=>!v.includes(Le.t)),Q=z.length?typeCore.normalizeUnion(z):null,V=I.length&&I.length<k.length?typeCore.normalizeUnion(I):null;return s?U(m,V,Q):U(m,Q,V)}let u=Kn(a,o)??Kn(o,a);if(u){let m=C(n,u.name);if(!m)return J;let b=ir(m,u.lit,t),g=lr(m,u.lit,t);return s?U(u.name,g,b):U(u.name,b,g)}let f=_n(a,o)??_n(o,a);if(f){let m=C(n,f.name);if(!m)return J;let b=zn(m,f.prop,f.lit,true,t),g=zn(m,f.prop,f.lit,false,t);return s?U(f.name,g,b):U(f.name,b,g)}return J}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=we(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=fr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=C(n,r);if(s)return U(r,ur(s),pr(s))}return J}function mr(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 fr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=C(n,r.name);if(!s)return null;let a=mr(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=C(n,i);return l?U(i,rr(l,a.type,t),sr(l,a.type,t)):null}var Y=(e,n)=>Object.keys(n).length?F(e,n):e;function j(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>j(t));case "IfStatement":{let n=e;return !!n.alternate&&j(n.consequent)&&j(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&j(n.finalizer))return true;let t=!n.handler||j(n.handler.body);return j(n.block)&&t}default:return false}}var Rr=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function Or(e){let n=[];return e.maxDepth!==void 0&&n.push(Je(e.maxDepth)),e.maxNodes!==void 0&&n.push(Ye(e.maxNodes)),e.maxArgs!==void 0&&n.push(Xe(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(ze(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(qe(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(We(e.memberDepth)),n}function Tr(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>R("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function at(e,n,t={}){let r={...Rr(n.types),...n.schemes,...Mr(e)},s=sn(e),a={overlay:new WeakMap,sink:oe(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s.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=Ir(e,a);try{i=h(e,l,a);}catch(u){if(u instanceof typeCore.TypeEvalLimitError)a.sink.report(R("too-deep",e,u.message));else if(u instanceof typeCore.UnionTooComplexError)a.sink.report(R("too-complex-union",e,u.message));else throw u;i=typeCore.s.unknown;}let c=[];o&&c.push(...Re(o)),t.limits&&c.push(...Or(t.limits)),t.resultType&&c.push(Qe(t.resultType,r));let d=[...a.sink.all,...s.diagnostics,...Tr(e,r),...t.unused?tn(e,t.unused):[],...c.length?Ge(e,c,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:d,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function Pr(e,n,t={}){let r=at(e,n,t),s={},a=new Map,o,i=c=>{let d=[];if(c.type==="VariableDeclaration")for(let u of c.declarations){let f=x(u.id),m=r.overlay.get(u);f&&m&&(s[f]=m.type,d.push(f));}else if(c.type==="FunctionDeclaration"){let u=c.id?.name,f=r.overlay.get(c);u&&f&&(s[u]=f.type,d.push(u));}return d};for(let c of e.body??[])if(c.type==="VariableDeclaration"||c.type==="FunctionDeclaration")i(c);else if(c.type==="ExportNamedDeclaration"){let d=c;if(d.declaration)for(let u of i(d.declaration))a.set(u,u);else for(let u of d.specifiers)a.set(u.exported.name,u.local.name);}else if(c.type==="ExportDefaultDeclaration"){let d=r.overlay.get(c.declaration);o=d?d.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[c,d]of a)s[d]&&(l[c]={type:s[d]});o!==void 0&&(l.default={type:o});}else for(let c in s)l[c]={type:s[c]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Mr=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function Ir(e,n){let t=n.env.modules,r={};core.walk(e,{ImportDeclaration(s){let a=s,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=typeCore.s.unknown;return}for(let l of a.specifiers){let c=l.local.name;if(pe(c,l.local,n),c in r){n.sink.report(S.cannotRedeclare(l.local,c));continue}if(l.type==="ImportNamespaceSpecifier"){r[c]=i;continue}let d=l.type==="ImportSpecifier"?l.imported.name:"default",u=typeCore.discover(i,[d],n.schemes);u?r[c]=u.type:(n.sink.report(S.noSuchMember(l,i,d)),r[c]=typeCore.s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?F(n.env.scope,r):n.env.scope}var y=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function h(e,n,t,r){switch(e.type){case it:return e.schema;case "JSXElement":case "JSXFragment":return y(t,e,h(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return y(t,e,Fe(e),n);case "Placeholder":return y(t,e,typeCore.s.any,n);case "Identifier":{let s=e.name,a=C(n,s);return a===void 0?s==="undefined"?y(t,e,typeCore.s.undefined,n):(t.sink.report(S.unknownName(e,s)),y(t,e,typeCore.s.unknown,n)):y(t,e,a,n)}case "MemberExpression":return y(t,e,Ur(e,n,t),n);case "CallExpression":return y(t,e,Kr(e,n,t,r),n);case "ArrowFunctionExpression":return bn(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),y(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),y(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),y(t,e,typeCore.s.unknown,n);case "BlockStatement":return y(t,e,ht(e,n,t),n);case "ReturnStatement":{let s=e.argument;return y(t,e,s?h(s,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 s=e,a=s.left,o=h(a,n,t);if(a.type==="MemberExpression"){let d=t.overlay.get(a.object)?.type,u=d&&typeCore.apparentType(d,t.schemes);u&&(u.t==="array"||u.t==="tuple")&&u.readonly&&t.sink.report(S.readonlyWrite(a,u));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),c=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let u=h(s.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(u)),y(t,e,u,n)}if(c&&i!==null){let u=h(s.right,n,t);return typeCore.subtype(u,c,t.schemes)||t.sink.report(S.notAssignable(s.right,u,c,t.schemes)),t.assignFlow.set(e,gt(c,u,t.schemes)),y(t,e,u,n)}let d=_(s.right,o,n,t);return y(t,e,d,n)}return y(t,e,h(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=h(s.argument,n,t);return ve(a,t.schemes)||t.sink.report(S.arithmeticOperand(s.argument,"operand")),y(t,e,typeCore.s.number,n)}case "ExpressionStatement":return y(t,e,h(e.expression,n,t),n);case "VariableDeclaration":return Ue(e,n,t),y(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":{let s=e.id?.name,a=s?t.schemes[s]:void 0;return y(t,e,a?Jr(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return y(t,e,us(e,n,t),n);case "LogicalExpression":{let s=e,a=h(s.left,n,t),o=h(s.right,n,t);return y(t,e,ds(s.operator,a,o),n)}case "UnaryExpression":return y(t,e,fs(e,n,t),n);case "ConditionalExpression":{let s=e;h(s.test,n,t);let a=we(s.test,n,t.schemes),o=h(s.consequent,Y(n,a.then),t),i=h(s.alternate,Y(n,a.else),t);return y(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return y(t,e,ys(e,n,t),n);case "ArrayExpression":return y(t,e,kt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=h(s,n,t);Bt(a,t.schemes)||t.sink.report(S.notTextConvertible(s,a));}return y(t,e,typeCore.s.string,n)}case "AwaitExpression":{let s=e.argument,a=s?h(s,n,t):typeCore.s.unknown;return y(t,e,Ne(a),n)}case "Program":{let s=je(e.body,n,t,new Set(t.importNames)).scope;return y(t,e,typeCore.s.unknown,s)}case "JsonExpression":return y(t,e,mn(e.body,n,t,e),n);case "ChainExpression":return y(t,e,typeCore.normalizeUnion([h(e.expression,n,t),typeCore.s.undefined]),n);case "TSAsExpression":{let s=e,a=h(s.expression,n,t),o=De(s.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)),y(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),y(t,e,typeCore.s.unknown,n)}}var Fr=new Set(["constructor","prototype","__proto__"]);function jr(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 Ur(e,n,t){let r=h(e.object,n,t),s=jr(e);if(s!==null&&Fr.has(s))return t.sink.report(S.forbiddenMember(e,s)),typeCore.s.unknown;if(e.computed){let i=h(e.property,n,t),l=typeCore.resolveTypeOp(typeCore.s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&Qn(e,r,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(r,[a],t.schemes);return o?o.type:(Qn(e,r,a,t),typeCore.s.unknown)}function Qn(e,n,t,r){let s=typeCore.isScheme(n,r.schemes)?typeCore.expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(S.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(S.notObject(e,n));}function $r(e,n,t,r){let s=e.arguments[0];if(!s){r.sink.report(S.missingArgument(e,"schema",typeCore.s.unknown));return}if(s.type!=="Identifier"){r.sink.report(S.asserterNeedsName(s,n));return}let a=s.name,o=C(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?S.typeAsValue(s,a):S.unknownName(s,a));return}if(!i||i.params.length>0){r.sink.report(S.notASchema(s,a));return}if(!(ot(a,r)&&!Lr(t,a)))return r.overlay.set(s,{type:i.body,scope:t}),i.body}function ot(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&C(n.env.scope,e)!==void 0}function Lr(e,n){for(let t=e;t;t=t.parent)if(Object.prototype.hasOwnProperty.call(t.vars,n))return t.parent===null;return false}function pe(e,n,t){ot(e,t)&&t.sink.report(S.shadowsSchema(n,e));}function gn(e,n){let t=G(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function Vr(e,n){let t=C(e.scope,n);if(!t)return;let r=gn(t,e.schemes);return r?G(r,e.schemes):void 0}function xr(e,n,t,r){let s=gn(h(n[0],t,r),r.schemes),a=n.length>1?h(n[1],t,r):typeCore.s.undefined;if(s){let o=typeCore.typeDiff(a,s,r.schemes);o.length&&r.sink.report(S.propsMismatch(n[1]??e,s,typeCore.formatTypeDiff(o)));}return y(r,e,typeCore.s.boolean,t)}var it="TSLiteSyntheticArg",Gr=e=>({type:it,schema:e});function lt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=G(h(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(Gr(l));else s={elem:i.t==="array"?i.items:typeCore.s.unknown,node:a};}return {nodes:r,spread:s}}function Kr(e,n,t,r){let s=e.arguments,a=ln(e.callee);if(a){let u=t.env.accessors?.[a];if(u){let f=$n(s);if(f){let m=typeCore.discover(u,f,t.schemes);return m?m.type:(t.sink.report(S.noSuchMember(e,u,f.join("."))),typeCore.s.unknown)}return s.forEach(m=>h(m,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let u=$r(e,a,n,t);s.length<2&&s.length>0&&t.sink.report(S.missingArgument(e,"value",typeCore.s.unknown));for(let f=1;f<s.length;f++)h(s[f],n,t);return u??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return xr(e,s,n,t);let o=h(e.callee,n,t);if(o.t==="any")return s.forEach(u=>h(u,n,t)),typeCore.s.any;if(o.t==="overload")return zr(e,o,n,t,r);if(o.t!=="fn")return s.forEach(u=>h(u,n,t)),t.sink.report(S.notCallable(e,o)),typeCore.s.unknown;let i=lt(s,n,t),l=i.nodes.map(u=>ct(u,n,t)),c=dt(e),d=!c||mt(o,c.length);return d||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,c.length)),ut(e,o,i.nodes,l,n,t,i.spread,r,d?c:void 0)}function ct(e,n,t){if(cn(e))return typeCore.s.any;if(e.type!=="CallExpression")return h(e,n,t);let r=oe(),s=h(e,n,{...t,sink:r});return r.hasErrors()?typeCore.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function ut(e,n,t,r,s,a,o=null,i,l){let c=m=>{if(!i)return m;let b=typeCore.substitute(n.returns,m);if(b.t==="fn"&&i.t==="fn"){let g=m,v=Math.min(b.params.length,i.params.length);for(let k=0;k<v;k++)g=typeCore.unify(b.params[k].type,i.params[k].type,g)??g;return typeCore.unify(b.returns,i.returns,g)??g}return typeCore.unify(b,i,m)??m},d=l?Xr(e,n,l,a):void 0,u=d??c(typeCore.instantiateLoose(n,r).bindings);t.forEach((m,b)=>{if(cn(m)){let g=typeCore.widenType(typeCore.substitute(n.params[b]?.type??typeCore.s.any,u));r[b]=bn(m,s,a,g);}else if(m.type==="CallExpression"&&r[b].t==="any")r[b]=h(m,s,a,typeCore.substitute(n.params[b]?.type??typeCore.s.unknown,u));else if(m.type==="Literal"){let g=n.params[b]?.type??typeCore.s.unknown,v=g.t==="var"?g.bound?typeCore.substitute(g.bound,u):g:typeCore.substitute(g,u);Se(v)&&(r[b]=y(a,m,ne(m),s));}else if(m.type==="ArrayExpression"||m.type==="ObjectExpression"||m.type==="ConditionalExpression"){let g=n.params[b]?.type??typeCore.s.unknown,v=typeCore.substitute(g,u);if(m.type==="ArrayExpression"&&ge(v)){r[b]=Bn(m,v,s,a);return}let k=g.t==="var"?g.bound?typeCore.substitute(g.bound,u):void 0:v;k&&hs(k,a.schemes)&&(r[b]=gs(m,k,s,a,g.t==="var")??r[b]);}});let f=d??c(typeCore.instantiateLoose(n,r).bindings);return d||_r(e,n,f,a),es(e,n,r,f,a,t,o),t.forEach((m,b)=>{let g=n.params[b];m.type==="ObjectExpression"&&g&&!g.variadic&&Nn(m,typeCore.substitute(g.type,f),a);}),typeCore.widenInferred(typeCore.groundVars(typeCore.substitute(n.returns,f),a.schemes))}var Hn=new WeakMap;function pt(e){let n=Hn.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)P(s.type,t,r);return P(e.returns,t,r),Hn.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 r of e.of)P(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)P(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)P(r.type,n,t);P(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)P(s.type,n,t);P(r.returns,n,t);}return;case "apply":for(let r of e.args)P(r,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 _r(e,n,t,r){let s=pt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=typeCore.substitute(o,t);typeCore.subtype(i,l,r.schemes)||r.sink.report(S.constraintViolation(e,a,i,l));}}function zr(e,n,t,r,s){let a=lt(e.arguments,t,r),o=a.nodes,i=o.map(d=>ct(d,t,r)),l=dt(e),c=l?n.signatures.filter(d=>mt(d,l.length)):n.signatures;if(l&&!c.length){let d=n.signatures.reduce((u,f)=>Math.max(u,f.typeParams?.length??0),0);return r.sink.report(S.wrongTypeArgumentCount(e,d,l.length)),Zn(e,n.signatures,a,o,i,t,r,s,void 0)}return Zn(e,c,a,o,i,t,r,s,l)}function Zn(e,n,t,r,s,a,o,i,l){let c={t:"overload",signatures:n},d=f=>t.spread?Qr(f,r.length):Hr(f,r.length),u=c.signatures.find(f=>d(f)&&Zr(f,s,o));if(!u){let f=c.signatures.filter(d);f.length===1?u=f[0]:c.signatures.length===1&&(u=c.signatures[0]);}return u?ut(e,u,r,s,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,c,s)),typeCore.s.unknown)}function qr(e,n,t,r){let s=C(n,e[0]);if(s===void 0)return t.sink.report(S.unknownName(r,e[0])),typeCore.s.unknown;let a=e.slice(1),o=a.length?typeCore.discover(s,a,t.schemes)?.type:s;return o?o.t==="literal"?typeCore.s.literal(o.value):o:(t.sink.report(S.noSuchMember(r,s,a.join("."))),typeCore.s.unknown)}function De(e,n,t,r){let s=a=>{if(Array.isArray(a)){let c=false,d=a.map(u=>{let f=s(u);return f!==u&&(c=true),f});return c?d:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return qr(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(Wr(o.name,n,t,r),!(o.name in t.schemes)))return typeCore.s.any;let i=false,l={};for(let c of Object.keys(o)){let d=s(o[c]);d!==o[c]&&(i=true),l[c]=d;}return i?l:o};return s(e)}function Wr(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=De(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Jr(e,n,t,r,s){let a={...t,sink:oe(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=De(e,n,a,r);return a.sink.hasErrors()?e:s?o:typeCore.groundVars(o,t.schemes)}var Sn=(e,n,t)=>{let r=an(e);return r===void 0?r:De(r,n,t,e)},Yr=(e,n,t)=>{let r=on(e);return r===void 0?r:De(r,n,t,e)},dt=e=>{let n=e.typeArguments;return n?.length?n:void 0},mt=(e,n)=>(e.typeParams?.length??0)===n;function Xr(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of pt(n)){let c=o[i];if(!c)continue;let d=typeCore.groundVars(typeCore.substitute(l,o),r.schemes);typeCore.subtype(c,d,r.schemes)||r.sink.report(S.constraintViolation(e,i,c,d));}return o}function Qr(e,n){let t=0,r=false;for(let s of e.params)s.variadic?r=true:s.optional||t++;return n>=t&&(r||n<e.params.length)}function Hr(e,n){let t=0;for(let r of e.params){if(r.variadic)return n>=t;r.optional||t++;}return n>=t&&n<=e.params.length}function Zr(e,n,t){let{bindings:r}=typeCore.instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic)return true;if(s>=n.length){if(!a.optional)return false;continue}if(!typeCore.subtype(n[s],typeCore.substitute(a.type,r),t.schemes))return false}return true}function es(e,n,t,r,s,a=e.arguments??[],o=null){let i=c=>a[c]??e;for(let c=0;c<n.params.length;c++){let d=n.params[c];if(d.variadic)break;let u=typeCore.substitute(d.type,r);if(c>=t.length){!d.optional&&!o&&s.sink.report(S.missingArgument(e,d.name,u));continue}typeCore.subtype(t[c],u,s.schemes)||s.sink.report(S.notAssignable(i(c),t[c],u,s.schemes));}let l=n.params.find(c=>c.variadic);if(o){let c=t.length,d=n.params.filter(u=>!u.optional&&!u.variadic).length;if(!(c>=d&&(l||c<n.params.length))){s.sink.report(S.spreadArgument(o.node));return}if(l){let u=typeCore.substitute(l.type,r),f=u.t==="array"?u.items:typeCore.s.unknown;typeCore.subtype(o.elem,f,s.schemes)||s.sink.report(S.notAssignable(o.node,o.elem,f,s.schemes));}return}!l&&t.length>n.params.length&&s.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function ft(e,n,t){if(e.t==="object"){let r=typeCore.ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>ft(typeCore.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:typeCore.resolveTypeOp({t:"intersection",of:r})}}function _(e,n,t,r,s=false){let a=typeCore.apparentType(n,r.schemes);switch(e.type){case "Literal":{let i=ne(e);return typeCore.subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,s?Se(n)?i:typeCore.widen(Fe(e)):n,t)}case "ArrayExpression":{if(ge(a)){let i=Bn(e,a,t,r);return typeCore.subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,i,t)}if(a.t==="array"){let i=[];for(let c of e.elements){if(!c)continue;let d=c;if(d.type==="SpreadElement"){let u=_(d.argument,n,t,r,s);u.t==="array"&&i.push(u.items);}else i.push(_(d,a.items,t,r,s));}let l=s&&i.length>0?typeCore.s.array(typeCore.normalizeUnion(i)):n;return y(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let d of e.properties){let u=d;if(u.type==="SpreadElement"){h(u.argument,t,r);continue}let f=u,m=be(f),b=m!==null?ft(a,m,r.schemes):void 0,g=b?_(f.value,b,t,r,s):typeCore.widen(h(f.value,t,r));m!==null&&(i[m]={type:b??g},l[m]={type:g}),y(r,u,g,t);}let c={t:"object",props:i};return typeCore.subtype(c,n,r.schemes)||r.sink.report(S.notAssignable(e,c,n,r.schemes)),y(r,e,s?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=bn(e,t,r,a);return typeCore.subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,n,t)}break}case "ConditionalExpression":{let i=e;h(i.test,t,r);let l=_(i.consequent,n,t,r,s),c=_(i.alternate,n,t,r,s);return y(r,e,s?typeCore.normalizeUnion([l,c]):n,t)}case "Placeholder":return y(r,e,n,t)}let o=h(e,t,r);return typeCore.subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,o,t)}function bn(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=k=>a?.length?{...k,typeParams:a}:k,i={},l=new Map,c=e.params.map((k,z)=>{let I=k,Q=x(I),V=Sn(I,n,t)??s?.params[z]?.type??typeCore.s.unknown;return Q?(pe(Q,I,t),i[Q]=V,(V.t==="union"||V.t==="boolean")&&l.set(Q,V)):I.type!=="Identifier"&&re(I,V,i,n,t),t.overlay.set(I,{type:V,scope:n}),{name:Q??`arg${z}`,type:V}}),d=F(n,i),u=e.body,f=Yr(e,n,t);if(u.type!=="BlockStatement"&&f){let k=e.async?Ne(f):f;_(u,k,d,t);let z=e.async?Be(f):f;return y(t,e,o({t:"fn",params:c,returns:z}),n)}let m=f??s?.returns,b=m&&e.async?Ne(m):m,g=u.type==="BlockStatement"?y(t,u,ht(u,d,t,new Set(Object.keys(i)),l,b),d):h(u,d,t),v=e.async?Be(g):g;if(f){let k=e.async?Ne(f):f,z=e.async?g:v;typeCore.subtype(z,k,t.schemes)||t.sink.report(S.notAssignable(u,v,f,t.schemes));let I=e.async?Be(f):f;return y(t,e,o({t:"fn",params:c,returns:I}),n)}return y(t,e,o({t:"fn",params:c,returns:typeCore.widenType(v)}),n)}function ue(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ue(n.argument):ue(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ue(n.argument):ue(n):[]);case "AssignmentPattern":return ue(e.left);default:return []}}function yt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ue(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?yt(e.declaration):[]}function ht(e,n,t,r=new Set,s,a){let{returns:o}=je(e.body,n,t,r,s,a),i=!j(e);return o.length===0?i?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(i?[...o,typeCore.s.undefined]:o)}var ns=[typeCore.s.literal(true),typeCore.s.literal(false)];function ts(e){return e.t==="union"?e.of:e.t==="boolean"?ns:[e]}function gt(e,n,t){let r=ts(e);if(r.length<=1)return e;let s=r.filter(o=>typeCore.subtype(n,o,t));if(s.length===0)return e;let a=typeCore.normalizeUnion(s);return typeCore.subtype(n,a,t)?a:e}function St(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let r=t,s=r.left;if(r.operator!=="="||s.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:s.name,type:a}:null}function se(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=se(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=St(e,t);if(!r)return {types:n,exits:false};let s=new Map(n);return s.set(r.name,r.type),{types:s,exits:false}}case "IfStatement":{let r=bt(e,n,t);if(r.size===0)return {types:n,exits:j(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:j(e)}}case "TryStatement":{let r=e,s=[],a=se(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=se(r.handler.body,n,t);i.exits||s.push(i.types);}let o=rs(n,s);return r.finalizer&&(o=se(r.finalizer,o,t).types),{types:o,exits:j(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function bt(e,n,t){let r=se(e.consequent,n,t),s=e.alternate?se(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,typeCore.normalizeUnion(l));}return o}function Nt(e,n){let t=new Map,r=s=>{let a=C(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function rs(e,n){let t=new Map(e);if(n.length===0)return t;for(let r of e.keys()){let s=n.map(a=>a.get(r)??e.get(r));t.set(r,typeCore.normalizeUnion(s));}return t}function ss(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=Nt(n,t),s=se(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return Y(n,a)}function je(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!as(e))return et(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,c]of s)t.declaredMut.set(l,c);try{return et(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,c]of i)t.declaredMut.set(l,c);}}function as(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let r=t.declaration;if(r?.type==="VariableDeclaration"&&r.kind!=="const")return true}}return false}function et(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let c of yt(l))r.has(c.name)?t.sink.report(S.cannotRedeclare(c,c.name)):r.add(c.name);if(l.type==="VariableDeclaration")a=Ue(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let c=l;if(c.declaration?.type==="VariableDeclaration")a=Ue(c.declaration,a,t);else if(c.declaration?.type==="FunctionDeclaration"){let d=h(c.declaration,a,t),u=x(c.declaration.id);u&&(a=F(a,{[u]:d}));}else for(let d of c.specifiers)C(a,d.local.name)===void 0&&t.sink.report(S.unknownName(d.local,d.local.name));}else if(l.type==="ExportDefaultDeclaration")h(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let c=h(l,a,t),d=x(l.id);d&&(a=F(a,{[d]:c}));}else if(l.type==="IfStatement"){let c=l,d=t.evolving.size||t.declaredMut.size?Nt(a,t):null;if(o.push(...L(l,a,t,s)),d&&d.size){let u=bt(c,d,t);u.size&&(a=Y(a,Object.fromEntries(u)));}!c.alternate&&j(c.consequent)&&(a=Y(a,we(c.test,a,t.schemes).else));}else {o.push(...L(l,a,t,s));let c=St(l,t);c?a=Y(a,{[c.name]:c.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=ss(l,a,t));}}return {scope:a,returns:o}}function L(e,n,t,r){switch(e.type){case "ReturnStatement":{let s=e.argument,a=s?r?(_(s,r,n,t),r):h(s,n,t):typeCore.s.unknown;return y(t,e,a,n),[a]}case "IfStatement":{let s=e;h(s.test,n,t);let a=we(s.test,n,t.schemes),o=L(s.consequent,Y(n,a.then),t,r);return s.alternate&&o.push(...L(s.alternate,Y(n,a.else),t,r)),y(t,e,typeCore.s.unknown,n),o}case "BlockStatement":{let{returns:s}=je(e.body,n,t,void 0,void 0,r);return y(t,e,s.length?typeCore.normalizeUnion(s):typeCore.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,a=n;s.init&&(s.init.type==="VariableDeclaration"?a=Ue(s.init,a,t):h(s.init,a,t)),s.test&&h(s.test,a,t),s.update&&h(s.update,a,t);let o=L(s.body,a,t,r);return y(t,e,typeCore.s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s=e,a=h(s.right,n,t),o=e.type==="ForOfStatement"?a.t==="array"?a.items:typeCore.s.unknown:typeCore.s.string,i=jn(s.left);i&&pe(i,Un(s.left),t);let l=i?F(n,{[i]:o}):n,c=L(s.body,l,t,r);return y(t,e,typeCore.s.unknown,n),c}case "BreakStatement":case "ContinueStatement":return y(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&h(s,n,t),y(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let s=e,a=L(s.block,n,t,r);if(s.handler){let o=s.handler.param,i=o?x(o):null;i&&o&&pe(i,o,t);let l=i?F(n,{[i]:typeCore.s.unknown}):n;a.push(...L(s.handler.body,l,t,r));}return s.finalizer&&a.push(...L(s.finalizer,n,t,r)),y(t,e,typeCore.s.unknown,n),a}case "SwitchStatement":{let s=e;h(s.discriminant,n,t);let a=n,o=[];for(let i of s.cases){i.test&&h(i.test,a,t);let l=je(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return y(t,e,typeCore.s.unknown,n),o}default:return h(e,n,t),[]}}function os(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function is(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function ls(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return typeCore.s.object(t,e.index)}function cs(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function re(e,n,t,r,s){switch(e.type){case "Identifier":{let a=Sn(e,r,s)??n;pe(e.name,e,s),t[e.name]=a,s.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=typeCore.widenType(h(a.right,r,s)),{type:i}=typeCore.withoutUndefined(n),l=i.t==="unknown"?o:typeCore.normalizeUnion([i,o]);re(a.left,l,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){re(o.argument,ls(n,a),t,r,s);continue}let i=o,l=be(i);l!=null&&a.push(l);let c=l!=null?os(n,l,s):typeCore.s.unknown;re(i.value,c,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?re(i.argument,cs(n,o),t,r,s):re(i,is(n,o),t,r,s);});return}}}function Nn(e,n,t){let r=G(n,t.schemes),a=(r.t==="union"?r.of.map(o=>G(o,t.schemes)):[r]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=be(i);if(l===null)continue;let c=a.filter(d=>l in d.props);if(!c.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&Nn(i.value,c[0].props[l].type,t);}}function Ue(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=x(a);o&&pe(o,a,t);let i=Sn(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,nt(o,i,t)):(r[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(s)),o&&(r[o]=i??typeCore.s.unknown);continue}let l=i??(s.init.type==="ArrowFunctionExpression"?Vn(s.init):null),c=o&&l?F(n,{[o]:l}):n,d,u=null;i?(_(s.init,i,c,t),s.init.type==="ObjectExpression"&&Nn(s.init,i,t),d=i,u=i,(i.t==="union"||i.t==="boolean")&&s.init.type==="Literal"&&(d=gt(i,ne(s.init),t.schemes))):(d=h(s.init,c,t),e.kind!=="const"&&(d=typeCore.widenLiteral(d)),u=d),y(t,s,d,n),o?(r[o]=d,e.kind!=="const"&&u&&nt(o,u,t)):re(a,d,r,n,t);}return y(t,e,typeCore.s.unknown,n),F(n,r)}function nt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function us(e,n,t){let r=h(e.left,n,t),s=h(e.right,n,t),a=e.operator,o=de.get(a);if(!o)return typeCore.s.boolean;if(o.category==="additive"){if(ae(r)||ae(s))return te(r,t.schemes)||te(s,t.schemes)?typeCore.s.string:typeCore.s.number;if(te(r,t.schemes)&&te(s,t.schemes))return typeCore.s.string;if(ve(r,t.schemes)&&ve(s,t.schemes))return typeCore.s.number;if(te(r,t.schemes)||te(s,t.schemes)){let l=te(r,t.schemes)?s:r;return t.sink.report(S.implicitCoercion(e,r,s,Bt(l,t.schemes))),typeCore.s.string}return t.sink.report(S.operatorNotApplicable(e,"+",r,s)),typeCore.s.number}if(o.category==="arithmetic"||o.category==="bitwise")ve(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),ve(s,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!ae(r)&&!ae(s)){let i=typeCore.apparentType(r,t.schemes),l=typeCore.apparentType(s,t.schemes),c=typeCore.subtype(i,typeCore.s.number,t.schemes),d=typeCore.subtype(l,typeCore.s.number,t.schemes);c&&d||!c&&!d&&(typeCore.subtype(i,l,t.schemes)||typeCore.subtype(l,i,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,r,s));}return Ze(o.result)}var ae=e=>e.t==="any"||e.t==="unknown",ve=(e,n)=>ae(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),te=(e,n)=>!ae(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),ps=typeCore.s.union([typeCore.s.string,typeCore.s.number,typeCore.s.boolean,typeCore.s.null,typeCore.s.undefined]),Bt=(e,n)=>ae(e)||typeCore.subtype(typeCore.apparentType(e,n),ps,n),tt={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},pn=e=>e.t==="null"||e.t==="undefined";function ds(e,n,t){if(n.t==="any"||n.t==="unknown")return typeCore.normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[typeCore.s.literal(true),typeCore.s.literal(false)]:[n];if(e==="??")return typeCore.normalizeUnion([...r.filter(a=>!pn(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!pn(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>pn(a)?[a]:a.t==="literal"?a.value?[]:[a]:tt[a.t]?[tt[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var ms=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function fs(e,n,t){let r=h(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:typeCore.s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:typeCore.s.number;case "+":case "~":return typeCore.s.number;case "typeof":return ms;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function ys(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let c of e.properties){let d=c;if(d.type==="SpreadElement"){let g=G(h(d.argument,n,t),t.schemes);if(g.t==="object"){for(let v in g.props)r[v]=g.props[v];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let u=d,f=h(u.value,n,t),m=typeCore.widen(f);if(y(t,d,f,n),u.computed){let g=G(h(u.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let b=be(u);b!==null&&(r[b]={type:m},a.push(m),/^\d+$/.test(b)&&o.push(m));}return i?s={key:"string",type:typeCore.normalizeUnion(a)}:l&&(s={key:"number",type:typeCore.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function kt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=G(h(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(typeCore.widen(h(a,n,t)));}return typeCore.s.array(r.length?typeCore.normalizeUnion(r):typeCore.s.unknown)}function Bn(e,n,t,r){let s=G(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,c)=>l.type==="ArrayExpression"?Bn(l,c,t,r):typeCore.widen(h(l,t,r));if(s.t==="tuple"&&o&&a.length===s.elements.length){let l=a.map((c,d)=>i(c,s.elements[d]));return y(r,e,{t:"tuple",elements:l},t)}if(s.t==="array"){let l=[];for(let c of a){if(!c)continue;let d=c;if(d.type==="SpreadElement"){h(d.argument,t,r);continue}l.push(i(d,s.items));}return y(r,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return kt(e,t,r)}function mn(e,n,t,r){if(e===null)return typeCore.s.null;switch(typeof e){case "string":return typeCore.s.string;case "number":return typeCore.s.number;case "boolean":return typeCore.s.boolean;case "object":break;default:return typeCore.s.unknown}if(Array.isArray(e)){let o=e.map(i=>mn(i,n,t,r));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let s=e;if("#expr"in s){let o;try{o=codec.fromJson(s);}catch{return t.sink.report(S.unsupported(r,`'#expr: ${String(s["#expr"])}'`)),typeCore.s.unknown}return h(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:mn(s[o],n,t,r)};return {t:"object",props:a}}function hs(e,n){let t=typeCore.apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function gs(e,n,t,r,s){let a=oe(),o=_(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(c=>c.node===l.node&&c.code===l.code&&c.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var Ss=(e,n)=>({...e,typeAnnotation:n}),bs=(e,n)=>({...e,returnType:n}),Ns=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function wn(e,n){return e.get(n)?.type}function Bs(e,n){return e.get(n)?.scope}function ks(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function ws(e,n){let t=e.get(n)?.scope;return t?[...Ve(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var vs=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Es(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 $e(e,n,t,r={}){let s=e[n],a=e[n+1];if(!(!s||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===s?a.returnType:void 0;case "VariableDeclarator":return a.init===s?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(vs)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=wn(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==s||e[n+2]?.type!=="ObjectExpression")return;let i=$e(e,n+2,t,r),l=Es(a);return !i||!l?void 0:typeCore.discover(i,[l],r)?.type}case "ArrayExpression":{let o=$e(e,n+1,t,r);return o?typeCore.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=de.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return typeCore.s.number;let i=a.left===s?a.right:a.left,l=wn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return $e(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?typeCore.s.number:void 0}default:return}}function As(e,n){return e.filter(t=>t.node===n)}exports.BINARY_OP=de;exports.BINARY_OPS=He;exports.FUNCTION_KINDS=Dn;exports.LOGICAL_OPS=xt;exports.UNARY_OPS=Tn;exports.annotate=Ss;exports.annotateReturn=bs;exports.asExpression=Ns;exports.binaryOpsProducing=Gt;exports.calleeAllowlist=_e;exports.capabilityNodes=Ke;exports.check=at;exports.childScope=F;exports.collectBindings=Qt;exports.collectMutations=sn;exports.collectUnused=tn;exports.componentProps=Vr;exports.componentPropsOf=gn;exports.contextualTypeAt=$e;exports.createEnv=Ct;exports.createSink=oe;exports.diag=S;exports.diagnosticsAt=As;exports.extractModuleType=Pr;exports.fromCapability=Lt;exports.guard=Ge;exports.guardsFromCompiled=Re;exports.lookup=C;exports.makeDiagnostic=R;exports.maxArgs=Xe;exports.maxCallNesting=qe;exports.maxDepth=Je;exports.maxFunctionNesting=ze;exports.maxNestingOf=Ce;exports.maxNodes=Ye;exports.memberCompletions=ks;exports.memberDepth=We;exports.opResultSchema=Ze;exports.resolveNamed=Rt;exports.resolveScheme=Ot;exports.resultType=Qe;exports.rootScope=vn;exports.scopeAt=Bs;exports.scopeCompletions=ws;exports.typeAt=wn;exports.unaryOpsProducing=Kt;exports.visibleNames=Ve;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" | "not-arithmetic-operand" | "operator-not-applicable" | "implicit-coercion" | "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" | "not-a-schema" | "type-as-value" | "asserter-needs-name" | "shadows-schema" | "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" | "implicit-coercion" | "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
@@ -157,6 +157,10 @@ declare const diag: {
157
157
  notObject: (node: BaseNode, type: Schema) => Diagnostic;
158
158
  constNeedsInit: (node: BaseNode) => Diagnostic;
159
159
  missingArgument: (node: BaseNode, name: string, expected: Schema) => Diagnostic;
160
+ notASchema: (node: BaseNode, name: string) => Diagnostic;
161
+ typeAsValue: (node: BaseNode, name: string) => Diagnostic;
162
+ asserterNeedsName: (node: BaseNode, asserter: string) => Diagnostic;
163
+ shadowsSchema: (node: BaseNode, name: string) => Diagnostic;
160
164
  unknownModule: (node: BaseNode, source: string) => Diagnostic;
161
165
  cannotRedeclare: (node: BaseNode, name: string) => Diagnostic;
162
166
  excessArgument: (node: BaseNode, expected: number, got: number) => Diagnostic;
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" | "not-arithmetic-operand" | "operator-not-applicable" | "implicit-coercion" | "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" | "not-a-schema" | "type-as-value" | "asserter-needs-name" | "shadows-schema" | "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" | "implicit-coercion" | "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
@@ -157,6 +157,10 @@ declare const diag: {
157
157
  notObject: (node: BaseNode, type: Schema) => Diagnostic;
158
158
  constNeedsInit: (node: BaseNode) => Diagnostic;
159
159
  missingArgument: (node: BaseNode, name: string, expected: Schema) => Diagnostic;
160
+ notASchema: (node: BaseNode, name: string) => Diagnostic;
161
+ typeAsValue: (node: BaseNode, name: string) => Diagnostic;
162
+ asserterNeedsName: (node: BaseNode, asserter: string) => Diagnostic;
163
+ shadowsSchema: (node: BaseNode, name: string) => Diagnostic;
160
164
  unknownModule: (node: BaseNode, source: string) => Diagnostic;
161
165
  cannotRedeclare: (node: BaseNode, name: string) => Diagnostic;
162
166
  excessArgument: (node: BaseNode, expected: number, got: number) => Diagnostic;
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,widen,withoutUndefined,unify,ownProp,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,childrenOf,VisitorKeys}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var wn=(e={})=>rootScope(e),I=(e,n)=>childScope(e,n),R=(e,n)=>lookup(e,n),$e=e=>visibleNames(e),Et=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:wn(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),At=(e,n)=>e.types[n],Dt=(e,n)=>e.schemes[n];var vn={"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","implicit-coercion":"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:vn[e],severity:"error",node:n,message:t}),C=(e,n,t,r="error")=>({code:e,kind:vn[e],severity:r,node:n,message:t}),S={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(c=>c.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=k("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),l=s.filter(c=>c.kind==="missing"&&c.path.length===1).map(c=>({name:c.path[0],type:c.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>k("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),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)=>C("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)=>C("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)=>k("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,r)=>k("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...k("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${format(n)}' and '${format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...k("implicit-coercion",e,`Cannot convert '${format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function oe(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function xe(e,n,t={}){return n.flatMap(r=>r(e,t))}function ie(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var It=e=>Array.isArray(e)?e:[e],An=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Ge(e,n="error"){return t=>{let r=[];return ie(t,s=>{let a=nodeViolation(s,e);a&&r.push(C("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function Dn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ie(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let c=typeFeatureViolations(typeFeatures(l,i),t);c.length&&s.push(C("type-feature-not-allowed",a,`authoring type feature${c.length>1?"s":""} '${c.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function E(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=>E(t.type,n))||!!e.index&&E(e.index.value,n);case "array":return E(e.items,n);case "tuple":return e.elements.some(t=>E(t,n));case "union":case "intersection":return e.of.some(t=>E(t,n));case "fn":return e.params.some(t=>E(t.type,n))||E(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>E(r.type,n))||E(t.returns,n));case "keyof":return E(e.of,n);case "index":return E(e.obj,n)||E(e.key,n);case "mapped":return E(e.over,n)||E(e.body,n);case "conditional":return E(e.check,n)||E(e.extends,n)||E(e.then,n)||E(e.else,n);case "returnType":case "parameters":return E(e.fn,n);case "apply":return e.args.some(t=>E(t,n));default:return false}}function Cn(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ie(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&E(o)){r.push(C("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function Ke(e,n="error"){let t=new Set(e);return r=>{let s=[];return ie(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(C("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(C("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function De(e,n,t={}){let r=new Set(It(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(c,d)=>{let u=r.has(c.type),f=u?d+1:d;u&&f>n&&i.push(C("too-deep",c,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of childrenOf(c))l(m,f);};return l(o,0),i}}var _e=(e=3,n="error")=>De(An,e,{hint:"use a pipe instead of nesting functions",severity:n}),ze=(e,n="error")=>De("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),qe=(e,n="error")=>De("MemberExpression",e,{severity:n});function We(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(C("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of childrenOf(a))s(i,o+1);};return s(t,0),r}}function Je(e,n="error"){return t=>{let r=0;return ie(t,()=>{r++;}),r>e?[C("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function Ye(e,n="error"){return t=>{let r=[];return ie(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(C("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Xe(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[C("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function Ce(e){let n=[Ge(e),Dn(e),Cn(e)];return e.hostAllow!=="*"&&n.push(Ke([...e.hostAllow])),n}function jt(e){return Ce(compileProfile(e))}var Qe=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],pe=new Map(Qe.map(e=>[e.op,e])),Rn={number:s.number,boolean:s.boolean,string:s.string},He=e=>Rn[e],On=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Ut={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},Lt=[{op:"&&"},{op:"||"},{op:"??"}];function $t(e,n={}){return Qe.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(Rn[t.result],e,n))}function Vt(e,n={}){return On.filter(t=>subtype(Ut[t.result],e,n))}var Z=e=>({bindings:new Map,parent:e}),Pn=e=>e.charCodeAt(0)===95;function Oe(e,n,t,r,s,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:r,kind:s,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function me(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)me(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&Te(n,r);return}for(let r of Object.keys(t))me(t[r],n);}function Mn(e,n){let t=e;me(t.typeAnnotation,n),me(t.returnType,n);}function Te(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function W(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Mn(e,n),Oe(n,t,o,e,r,s||a&&Pn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((c,d)=>{let u=l&&d<o.length-1;if(c.type==="RestElement")W(c.argument,n,t,r,s,false);else {let f=c;f.computed&&N(f.key,n,t),W(f.value,n,t,r,s||u,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;W(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":W(e.left,n,t,r,s,a);return;case "RestElement":W(e.argument,n,t,r,s,true);return;default:return}}function de(e,n,t){if(e)switch(e.type){case "AssignmentPattern":N(e.right,n,t),de(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)de(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&de(r,n,t);return;case "RestElement":de(e.argument,n,t);return;default:return}}function Tn(e,n,t,r){for(let s of e.declarations)W(s.id,n,t,"local",r,false),N(s.init,n,t);}function Ze(e,n,t){let r=e,s=Z(n),a=r.params??[];for(let o of a)W(o,s,t,"parameter",false,true);for(let o of a)de(o,s,t);N(r.body,s,t);}function N(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Mn(e,n),e.type){case "Identifier":Te(n,e.name);return;case "MemberExpression":{let r=e;N(r.object,n,t),r.computed&&N(r.property,n,t);return}case "Property":{let r=e;r.computed&&N(r.key,n,t),N(r.value,n,t);return}case "Program":case "BlockStatement":{let r=Z(n);for(let s of e.body??[])N(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":Ze(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Oe(n,t,r.name,r,"local",false),Ze(e,n,t);return}case "CatchClause":{let r=e,s=Z(n);W(r.param,s,t,"local",true,false),N(r.body,s,t);return}case "SwitchStatement":{let r=e;N(r.discriminant,n,t);let s=Z(n);for(let a of r.cases){N(a.test,s,t);for(let o of a.consequent??[])N(o,s,t);}return}case "ForStatement":{let r=e,s=Z(n);N(r.init,s,t),N(r.test,s,t),N(r.update,s,t),N(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;N(r.right,n,t);let s=Z(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)W(o.id,s,t,"local",false,true);else N(a,s,t);N(r.body,s,t);return}case "VariableDeclaration":Tn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Oe(n,t,s.name,s,"import",Pn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Tn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Oe(n,t,a.name,a,"local",true),Ze(s,n,t);}else N(s,n,t);}else for(let s of r.specifiers)Te(n,s.local.name);return}case "TSAsExpression":N(e.expression,n,t);return;case "TSTypeAliasDeclaration":me(e.typeAnnotation,n);return;case "JsonExpression":en(e.body,n,t);return;case "JSXOpeningElement":{let r=e;In(r.name,n);for(let s of r.attributes??[])N(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":N(e.value,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)N(i,n,t);else N(o,n,t);}return}}}function In(e,n,t){e&&(e.type==="JSXIdentifier"?Te(n,e.name):e.type==="JSXMemberExpression"&&In(e.object,n));}function en(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)en(s,n,t);return}let r=e;if("#expr"in r){try{N(fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))en(r[s],n,t);}function nn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};N(e,Z(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(S.unusedName(s.node,s.name));return r}var _t=new Set(["const","import"]),fe=e=>({binds:new Map,parent:e});function zt(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ee(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ee(n.argument):ee(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ee(n):[]);case "AssignmentPattern":return ee(e.left);case "RestElement":return ee(e.argument);default:return []}}var Pe=(e,n,t)=>{for(let r of ee(n))e.binds.set(r.name,t);};function tn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ee(e))tn(a,n,t);return}let r=e.name,s=zt(n,r);s&&_t.has(s)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,r,s==="import"?"import":"const")));}function T(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;tn(r.left,n,t),T(r.right,n,t);return}case "UpdateExpression":{tn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=fe(n);for(let s of e.body??[])T(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=fe(n);for(let a of r.params??[])Pe(s,a,"param");T(r.body,s,t);return}case "CatchClause":{let r=e,s=fe(n);Pe(s,r.param,"param"),T(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=fe(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Pe(s,o.id,a.kind);else a&&T(a,s,t);T(r.right,n,t),T(r.test,s,t),T(r.update,s,t),T(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)T(s.init,n,t),Pe(n,s.id,r.kind);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.binds.set(s.name,"import");}return}case "ExportNamedDeclaration":{let r=e;r.declaration&&T(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":T(e.expression,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)T(i,n,t);else T(o,n,t);}return}}}function rn(e){let n={out:[],invalid:new WeakSet};return T(e,fe(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var ye=e=>({decls:new Map,parent:e});function Wt(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function le(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?le(n.argument):le(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?le(n):[]);case "AssignmentPattern":return le(e.left);case "RestElement":return le(e.argument);default:return []}}var Me=(e,n)=>{for(let t of le(n))e.decls.set(t.name,t);};function O(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=Wt(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;O(r.object,n,t),r.computed&&O(r.property,n,t);return}case "Property":{let r=e;r.computed&&O(r.key,n,t),O(r.value,n,t);return}case "Program":case "BlockStatement":{let r=ye(n);for(let s of e.body??[])O(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=e.id;s&&n.decls.set(s.name,s);let a=ye(n);for(let o of r.params??[])Me(a,o);O(r.body,a,t);return}case "CatchClause":{let r=e,s=ye(n);Me(s,r.param),O(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=ye(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Me(s,o.id);else a&&O(a,s,t);O(r.right,n,t),O(r.test,s,t),O(r.update,s,t),O(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)Me(n,r.id),O(r.init,n,t);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.decls.set(s.name,s);}return}case "TSTypeAliasDeclaration":{let r=e.id;r&&n.decls.set(r.name,r);return}case "TSAsExpression":O(e.expression,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)O(i,n,t);else O(o,n,t);}return}}}function Jt(e){let n=new WeakMap;return O(e,ye(void 0),n),n}var sn=e=>e.typeAnnotation,an=e=>e.returnType,x=e=>e.type==="Identifier"?e.name:null,Fn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?x(n.id):null}return x(e)},Se=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function jn(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function on(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=on(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Ie(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 ne=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):Ie(e)},ln=e=>e.type==="ArrowFunctionExpression",Un=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,be=e=>Un(e)?e.args[0]:e,Ne=e=>Un(e)?e:s.promise(e);function he(e){return e.t==="tuple"?true:e.t==="array"?he(e.items):e.t==="union"?e.of.some(he):false}function ge(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ge(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ge(e.bound):false}var G=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function Ln(e){let n=an(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:x(r)??`arg${s$1}`,type:sn(r)??s.unknown})),returns:e.async?Ne(n):n}:null}var J={then:{},else:{}},qn=new Set(["string","number","boolean","undefined","function","object"]),$n={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function Wn(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 Ht=s.literal(true),Zt=s.literal(false),K=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Ht,Zt]:[e];function Vn(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function er(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=K(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function nr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=K(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function tr(e,n){if(!qn.has(n))return null;if(e.t==="unknown"||e.t==="any")return $n[n]??e;let t=K(e).filter(r=>Wn(r,n));return t.length?normalizeUnion(t):$n[n]??e}function rr(e,n){if(!qn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=K(e).filter(r=>!Wn(r,n));return t.length?normalizeUnion(t):null}function xn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=ne(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function Gn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=ne(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Kn(e,n,t,r,s){let a=K(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let c=o(l);return r?!!c&&subtype(t,c,s):!(c&&subtype(c,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function _n(e,n,t){let r=K(e),s=o=>o.t==="object"&&(n in o.props||!!o.index),a=r.filter(o=>t?s(o):!s(o));return a.length&&a.length<r.length?normalizeUnion(a):null}function sr(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function ar(e,n,t){let r=K(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var or=e=>e.t==="null"||e.t==="undefined",Jn=e=>or(e)||e.t==="literal"&&!e.value,ir=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=K(e),t=n.filter(r=>!Jn(r));return t.length&&t.length<n.length?normalizeUnion(t):null},lr=e=>{let n=K(e),t=n.filter(Jn);return t.length&&t.length<n.length?normalizeUnion(t):null},zn=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,U=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),cr=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function ke(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,b=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&b.type==="Identifier"){let g=b.name,v=R(n,g);if(!v)return J;let B=String(m.value);return U(g,_n(v,B,true),_n(v,B,false))}return J}if(!cr(r.operator))return J;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=Vn(a,o)??Vn(o,a);if(i){let m=R(n,i.name);if(!m)return J;let b=tr(m,i.tag),g=rr(m,i.tag);return s?U(i.name,g,b):U(i.name,b,g)}let l=zn(a),c=zn(o),d=l?o:c?a:null;if((l||c)&&d?.type==="Identifier"){let m=d.name,b=R(n,m);if(!b)return J;let v=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??c],B=K(b),z=B.filter(Le=>v.includes(Le.t)),j=B.filter(Le=>!v.includes(Le.t)),H=z.length?normalizeUnion(z):null,V=j.length&&j.length<B.length?normalizeUnion(j):null;return s?U(m,V,H):U(m,H,V)}let u=xn(a,o)??xn(o,a);if(u){let m=R(n,u.name);if(!m)return J;let b=sr(m,u.lit,t),g=ar(m,u.lit,t);return s?U(u.name,g,b):U(u.name,b,g)}let f=Gn(a,o)??Gn(o,a);if(f){let m=R(n,f.name);if(!m)return J;let b=Kn(m,f.prop,f.lit,true,t),g=Kn(m,f.prop,f.lit,false,t);return s?U(f.name,g,b):U(f.name,b,g)}return J}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=ke(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=pr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=R(n,r);if(s)return U(r,ir(s),lr(s))}return J}function ur(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 pr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=R(n,r.name);if(!s)return null;let a=ur(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?U(i,er(l,a.type,t),nr(l,a.type,t)):null}var Y=(e,n)=>Object.keys(n).length?I(e,n):e;function F(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>F(t));case "IfStatement":{let n=e;return !!n.alternate&&F(n.consequent)&&F(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&F(n.finalizer))return true;let t=!n.handler||F(n.handler.body);return F(n.block)&&t}default:return false}}var Ar=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function Dr(e){let n=[];return e.maxDepth!==void 0&&n.push(We(e.maxDepth)),e.maxNodes!==void 0&&n.push(Je(e.maxNodes)),e.maxArgs!==void 0&&n.push(Ye(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(_e(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(ze(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(qe(e.memberDepth)),n}function Cr(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>C("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function rt(e,n,t={}){let r={...Ar(n.types),...n.schemes,...Or(e)},s$1=rn(e),a={overlay:new WeakMap,sink:oe(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s$1.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=Tr(e,a);try{i=h(e,l,a);}catch(u){if(u instanceof TypeEvalLimitError)a.sink.report(C("too-deep",e,u.message));else if(u instanceof UnionTooComplexError)a.sink.report(C("too-complex-union",e,u.message));else throw u;i=s.unknown;}let c=[];o&&c.push(...Ce(o)),t.limits&&c.push(...Dr(t.limits)),t.resultType&&c.push(Xe(t.resultType,r));let d=[...a.sink.all,...s$1.diagnostics,...Cr(e,r),...t.unused?nn(e,t.unused):[],...c.length?xe(e,c,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:d,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function Rr(e,n,t={}){let r=rt(e,n,t),s$1={},a=new Map,o,i=c=>{let d=[];if(c.type==="VariableDeclaration")for(let u of c.declarations){let f=x(u.id),m=r.overlay.get(u);f&&m&&(s$1[f]=m.type,d.push(f));}else if(c.type==="FunctionDeclaration"){let u=c.id?.name,f=r.overlay.get(c);u&&f&&(s$1[u]=f.type,d.push(u));}return d};for(let c of e.body??[])if(c.type==="VariableDeclaration"||c.type==="FunctionDeclaration")i(c);else if(c.type==="ExportNamedDeclaration"){let d=c;if(d.declaration)for(let u of i(d.declaration))a.set(u,u);else for(let u of d.specifiers)a.set(u.exported.name,u.local.name);}else if(c.type==="ExportDefaultDeclaration"){let d=r.overlay.get(c.declaration);o=d?d.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[c,d]of a)s$1[d]&&(l[c]={type:s$1[d]});o!==void 0&&(l.default={type:o});}else for(let c in s$1)l[c]={type:s$1[c]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Or=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function Tr(e,n){let t=n.env.modules,r={};walk(e,{ImportDeclaration(s$1){let a=s$1,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=s.unknown;return}for(let l of a.specifiers){let c=l.local.name;if(c in r){n.sink.report(S.cannotRedeclare(l.local,c));continue}if(l.type==="ImportNamespaceSpecifier"){r[c]=i;continue}let d=l.type==="ImportSpecifier"?l.imported.name:"default",u=discover(i,[d],n.schemes);u?r[c]=u.type:(n.sink.report(S.noSuchMember(l,i,d)),r[c]=s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?I(n.env.scope,r):n.env.scope}var y=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function h(e,n,t,r){switch(e.type){case st:return e.schema;case "JSXElement":case "JSXFragment":return y(t,e,h(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return y(t,e,Ie(e),n);case "Placeholder":return y(t,e,s.any,n);case "Identifier":{let s$1=e.name,a=R(n,s$1);return a===void 0?s$1==="undefined"?y(t,e,s.undefined,n):(t.sink.report(S.unknownName(e,s$1)),y(t,e,s.unknown,n)):y(t,e,a,n)}case "MemberExpression":return y(t,e,Ir(e,n,t),n);case "CallExpression":return y(t,e,$r(e,n,t,r),n);case "ArrowFunctionExpression":return Sn(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),y(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),y(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),y(t,e,s.unknown,n);case "BlockStatement":return y(t,e,mt(e,n,t),n);case "ReturnStatement":{let s$1=e.argument;return y(t,e,s$1?h(s$1,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 s=e,a=s.left,o=h(a,n,t);if(a.type==="MemberExpression"){let d=t.overlay.get(a.object)?.type,u=d&&apparentType(d,t.schemes);u&&(u.t==="array"||u.t==="tuple")&&u.readonly&&t.sink.report(S.readonlyWrite(a,u));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),c=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let u=h(s.right,n,t);return t.assignFlow.set(e,widenLiteral(u)),y(t,e,u,n)}if(c&&i!==null){let u=h(s.right,n,t);return subtype(u,c,t.schemes)||t.sink.report(S.notAssignable(s.right,u,c,t.schemes)),t.assignFlow.set(e,ft(c,u,t.schemes)),y(t,e,u,n)}let d=_(s.right,o,n,t);return y(t,e,d,n)}return y(t,e,h(s.right,n,t),n)}case "UpdateExpression":{let s$1=e,a=h(s$1.argument,n,t);return we(a,t.schemes)||t.sink.report(S.arithmeticOperand(s$1.argument,"operand")),y(t,e,s.number,n)}case "ExpressionStatement":return y(t,e,h(e.expression,n,t),n);case "VariableDeclaration":return je(e,n,t),y(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let s$1=e.id?.name,a=s$1?t.schemes[s$1]:void 0;return y(t,e,a?_r(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return y(t,e,os(e,n,t),n);case "LogicalExpression":{let s=e,a=h(s.left,n,t),o=h(s.right,n,t);return y(t,e,ls(s.operator,a,o),n)}case "UnaryExpression":return y(t,e,us(e,n,t),n);case "ConditionalExpression":{let s=e;h(s.test,n,t);let a=ke(s.test,n,t.schemes),o=h(s.consequent,Y(n,a.then),t),i=h(s.alternate,Y(n,a.else),t);return y(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return y(t,e,ps(e,n,t),n);case "ArrayExpression":return y(t,e,bt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=h(s,n,t);St(a,t.schemes)||t.sink.report(S.notTextConvertible(s,a));}return y(t,e,s.string,n)}case "AwaitExpression":{let s$1=e.argument,a=s$1?h(s$1,n,t):s.unknown;return y(t,e,be(a),n)}case "Program":{let s$1=Fe(e.body,n,t,new Set(t.importNames)).scope;return y(t,e,s.unknown,s$1)}case "JsonExpression":return y(t,e,dn(e.body,n,t,e),n);case "ChainExpression":return y(t,e,normalizeUnion([h(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let s=e,a=h(s.expression,n,t),o=Ae(s.typeAnnotation,n,t,e);return !subtype(a,o,t.schemes)&&!subtype(o,a,t.schemes)&&t.sink.report(S.castUnsound(e,a,o)),y(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),y(t,e,s.unknown,n)}}var Pr=new Set(["constructor","prototype","__proto__"]);function Mr(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 Ir(e,n,t){let r=h(e.object,n,t),s$1=Mr(e);if(s$1!==null&&Pr.has(s$1))return t.sink.report(S.forbiddenMember(e,s$1)),s.unknown;if(e.computed){let i=h(e.property,n,t),l=resolveTypeOp(s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&Yn(e,r,i.value,t),s.unknown)}let a=e.property.name,o=discover(r,[a],t.schemes);return o?o.type:(Yn(e,r,a,t),s.unknown)}function Yn(e,n,t,r){let s=isScheme(n,r.schemes)?expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(S.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(S.notObject(e,n));}function Fr(e,n,t){if(!e||e.type!=="Identifier")return;let r=e.name;if(R(n,r)===void 0)return;let s=t.schemes[r];return s&&s.params.length===0?s.body:void 0}function hn(e,n){let t=G(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function jr(e,n){let t=R(e.scope,n);if(!t)return;let r=hn(t,e.schemes);return r?G(r,e.schemes):void 0}function Ur(e,n,t,r){let s$1=hn(h(n[0],t,r),r.schemes),a=n.length>1?h(n[1],t,r):s.undefined;if(s$1){let o=typeDiff(a,s$1,r.schemes);o.length&&r.sink.report(S.propsMismatch(n[1]??e,s$1,formatTypeDiff(o)));}return y(r,e,s.boolean,t)}var st="TSLiteSyntheticArg",Lr=e=>({type:st,schema:e});function at(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s$1=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=G(h(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(Lr(l));else s$1={elem:i.t==="array"?i.items:s.unknown,node:a};}return {nodes:r,spread:s$1}}function $r(e,n,t,r){let s$1=e.arguments,a=on(e.callee);if(a){let u=t.env.accessors?.[a];if(u){let f=jn(s$1);if(f){let m=discover(u,f,t.schemes);return m?m.type:(t.sink.report(S.noSuchMember(e,u,f.join("."))),s.unknown)}return s$1.forEach(m=>h(m,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let u=Fr(s$1[0],n,t);for(let f=1;f<s$1.length;f++)h(s$1[f],n,t);return u??s.unknown}if(a&&t.env.matchers?.has(a))return Ur(e,s$1,n,t);let o=h(e.callee,n,t);if(o.t==="any")return s$1.forEach(u=>h(u,n,t)),s.any;if(o.t==="overload")return xr(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(u=>h(u,n,t)),t.sink.report(S.notCallable(e,o)),s.unknown;let i=at(s$1,n,t),l=i.nodes.map(u=>ot(u,n,t)),c=ct(e),d=!c||ut(o,c.length);return d||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,c.length)),it(e,o,i.nodes,l,n,t,i.spread,r,d?c:void 0)}function ot(e,n,t){if(ln(e))return s.any;if(e.type!=="CallExpression")return h(e,n,t);let r=oe(),s$1=h(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function it(e,n,t,r,s$1,a,o=null,i,l){let c=m=>{if(!i)return m;let b=substitute(n.returns,m);if(b.t==="fn"&&i.t==="fn"){let g=m,v=Math.min(b.params.length,i.params.length);for(let B=0;B<v;B++)g=unify(b.params[B].type,i.params[B].type,g)??g;return unify(b.returns,i.returns,g)??g}return unify(b,i,m)??m},d=l?qr(e,n,l,a):void 0,u=d??c(instantiateLoose(n,r).bindings);t.forEach((m,b)=>{if(ln(m)){let g=widenType(substitute(n.params[b]?.type??s.any,u));r[b]=Sn(m,s$1,a,g);}else if(m.type==="CallExpression"&&r[b].t==="any")r[b]=h(m,s$1,a,substitute(n.params[b]?.type??s.unknown,u));else if(m.type==="Literal"){let g=n.params[b]?.type??s.unknown,v=g.t==="var"?g.bound?substitute(g.bound,u):g:substitute(g,u);ge(v)&&(r[b]=y(a,m,ne(m),s$1));}else if(m.type==="ArrayExpression"||m.type==="ObjectExpression"||m.type==="ConditionalExpression"){let g=n.params[b]?.type??s.unknown,v=substitute(g,u);if(m.type==="ArrayExpression"&&he(v)){r[b]=Nn(m,v,s$1,a);return}let B=g.t==="var"?g.bound?substitute(g.bound,u):void 0:v;B&&ds(B,a.schemes)&&(r[b]=ms(m,B,s$1,a,g.t==="var")??r[b]);}});let f=d??c(instantiateLoose(n,r).bindings);return d||Vr(e,n,f,a),Xr(e,n,r,f,a,t,o),t.forEach((m,b)=>{let g=n.params[b];m.type==="ObjectExpression"&&g&&!g.variadic&&bn(m,substitute(g.type,f),a);}),widenInferred(groundVars(substitute(n.returns,f),a.schemes))}var Xn=new WeakMap;function lt(e){let n=Xn.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)P(s.type,t,r);return P(e.returns,t,r),Xn.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 r of e.of)P(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)P(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)P(r.type,n,t);P(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)P(s.type,n,t);P(r.returns,n,t);}return;case "apply":for(let r of e.args)P(r,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 Vr(e,n,t,r){let s=lt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=substitute(o,t);subtype(i,l,r.schemes)||r.sink.report(S.constraintViolation(e,a,i,l));}}function xr(e,n,t,r,s){let a=at(e.arguments,t,r),o=a.nodes,i=o.map(d=>ot(d,t,r)),l=ct(e),c=l?n.signatures.filter(d=>ut(d,l.length)):n.signatures;if(l&&!c.length){let d=n.signatures.reduce((u,f)=>Math.max(u,f.typeParams?.length??0),0);return r.sink.report(S.wrongTypeArgumentCount(e,d,l.length)),Qn(e,n.signatures,a,o,i,t,r,s,void 0)}return Qn(e,c,a,o,i,t,r,s,l)}function Qn(e,n,t,r,s$1,a,o,i,l){let c={t:"overload",signatures:n},d=f=>t.spread?Wr(f,r.length):Jr(f,r.length),u=c.signatures.find(f=>d(f)&&Yr(f,s$1,o));if(!u){let f=c.signatures.filter(d);f.length===1?u=f[0]:c.signatures.length===1&&(u=c.signatures[0]);}return u?it(e,u,r,s$1,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,c,s$1)),s.unknown)}function Gr(e,n,t,r){let s$1=R(n,e[0]);if(s$1===void 0)return t.sink.report(S.unknownName(r,e[0])),s.unknown;let a=e.slice(1),o=a.length?discover(s$1,a,t.schemes)?.type:s$1;return o?o.t==="literal"?s.literal(o.value):o:(t.sink.report(S.noSuchMember(r,s$1,a.join("."))),s.unknown)}function Ae(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let c=false,d=a.map(u=>{let f=s$1(u);return f!==u&&(c=true),f});return c?d:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Gr(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(Kr(o.name,n,t,r),!(o.name in t.schemes)))return s.any;let i=false,l={};for(let c of Object.keys(o)){let d=s$1(o[c]);d!==o[c]&&(i=true),l[c]=d;}return i?l:o};return s$1(e)}function Kr(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Ae(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function _r(e,n,t,r,s){let a={...t,sink:oe(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Ae(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var gn=(e,n,t)=>{let r=sn(e);return r===void 0?r:Ae(r,n,t,e)},zr=(e,n,t)=>{let r=an(e);return r===void 0?r:Ae(r,n,t,e)},ct=e=>{let n=e.typeArguments;return n?.length?n:void 0},ut=(e,n)=>(e.typeParams?.length??0)===n;function qr(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of lt(n)){let c=o[i];if(!c)continue;let d=groundVars(substitute(l,o),r.schemes);subtype(c,d,r.schemes)||r.sink.report(S.constraintViolation(e,i,c,d));}return o}function Wr(e,n){let t=0,r=false;for(let s of e.params)s.variadic?r=true:s.optional||t++;return n>=t&&(r||n<e.params.length)}function Jr(e,n){let t=0;for(let r of e.params){if(r.variadic)return n>=t;r.optional||t++;}return n>=t&&n<=e.params.length}function Yr(e,n,t){let{bindings:r}=instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic)return true;if(s>=n.length){if(!a.optional)return false;continue}if(!subtype(n[s],substitute(a.type,r),t.schemes))return false}return true}function Xr(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=c=>a[c]??e;for(let c=0;c<n.params.length;c++){let d=n.params[c];if(d.variadic)break;let u=substitute(d.type,r);if(c>=t.length){!d.optional&&!o&&s$1.sink.report(S.missingArgument(e,d.name,u));continue}subtype(t[c],u,s$1.schemes)||s$1.sink.report(S.notAssignable(i(c),t[c],u,s$1.schemes));}let l=n.params.find(c=>c.variadic);if(o){let c=t.length,d=n.params.filter(u=>!u.optional&&!u.variadic).length;if(!(c>=d&&(l||c<n.params.length))){s$1.sink.report(S.spreadArgument(o.node));return}if(l){let u=substitute(l.type,r),f=u.t==="array"?u.items:s.unknown;subtype(o.elem,f,s$1.schemes)||s$1.sink.report(S.notAssignable(o.node,o.elem,f,s$1.schemes));}return}!l&&t.length>n.params.length&&s$1.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function pt(e,n,t){if(e.t==="object"){let r=ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>pt(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:resolveTypeOp({t:"intersection",of:r})}}function _(e,n,t,r,s$1=false){let a=apparentType(n,r.schemes);switch(e.type){case "Literal":{let i=ne(e);return subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,s$1?ge(n)?i:widen(Ie(e)):n,t)}case "ArrayExpression":{if(he(a)){let i=Nn(e,a,t,r);return subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,i,t)}if(a.t==="array"){let i=[];for(let c of e.elements){if(!c)continue;let d=c;if(d.type==="SpreadElement"){let u=_(d.argument,n,t,r,s$1);u.t==="array"&&i.push(u.items);}else i.push(_(d,a.items,t,r,s$1));}let l=s$1&&i.length>0?s.array(normalizeUnion(i)):n;return y(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let d of e.properties){let u=d;if(u.type==="SpreadElement"){h(u.argument,t,r);continue}let f=u,m=Se(f),b=m!==null?pt(a,m,r.schemes):void 0,g=b?_(f.value,b,t,r,s$1):widen(h(f.value,t,r));m!==null&&(i[m]={type:b??g},l[m]={type:g}),y(r,u,g,t);}let c={t:"object",props:i};return subtype(c,n,r.schemes)||r.sink.report(S.notAssignable(e,c,n,r.schemes)),y(r,e,s$1?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Sn(e,t,r,a);return subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,n,t)}break}case "ConditionalExpression":{let i=e;h(i.test,t,r);let l=_(i.consequent,n,t,r,s$1),c=_(i.alternate,n,t,r,s$1);return y(r,e,s$1?normalizeUnion([l,c]):n,t)}case "Placeholder":return y(r,e,n,t)}let o=h(e,t,r);return subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,o,t)}function Sn(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=B=>a?.length?{...B,typeParams:a}:B,i={},l=new Map,c=e.params.map((B,z)=>{let j=B,H=x(j),V=gn(j,n,t)??s$1?.params[z]?.type??s.unknown;return H?(i[H]=V,(V.t==="union"||V.t==="boolean")&&l.set(H,V)):j.type!=="Identifier"&&re(j,V,i,n,t),t.overlay.set(j,{type:V,scope:n}),{name:H??`arg${z}`,type:V}}),d=I(n,i),u=e.body,f=zr(e,n,t);if(u.type!=="BlockStatement"&&f){let B=e.async?be(f):f;_(u,B,d,t);let z=e.async?Ne(f):f;return y(t,e,o({t:"fn",params:c,returns:z}),n)}let m=f??s$1?.returns,b=m&&e.async?be(m):m,g=u.type==="BlockStatement"?y(t,u,mt(u,d,t,new Set(Object.keys(i)),l,b),d):h(u,d,t),v=e.async?Ne(g):g;if(f){let B=e.async?be(f):f,z=e.async?g:v;subtype(z,B,t.schemes)||t.sink.report(S.notAssignable(u,v,f,t.schemes));let j=e.async?Ne(f):f;return y(t,e,o({t:"fn",params:c,returns:j}),n)}return y(t,e,o({t:"fn",params:c,returns:widenType(v)}),n)}function ue(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ue(n.argument):ue(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ue(n.argument):ue(n):[]);case "AssignmentPattern":return ue(e.left);default:return []}}function dt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ue(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?dt(e.declaration):[]}function mt(e,n,t,r=new Set,s$1,a){let{returns:o}=Fe(e.body,n,t,r,s$1,a),i=!F(e);return o.length===0?i?s.void:s.union([]):normalizeUnion(i?[...o,s.undefined]:o)}var Qr=[s.literal(true),s.literal(false)];function Hr(e){return e.t==="union"?e.of:e.t==="boolean"?Qr:[e]}function ft(e,n,t){let r=Hr(e);if(r.length<=1)return e;let s=r.filter(o=>subtype(n,o,t));if(s.length===0)return e;let a=normalizeUnion(s);return subtype(n,a,t)?a:e}function yt(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let r=t,s=r.left;if(r.operator!=="="||s.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:s.name,type:a}:null}function se(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=se(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=yt(e,t);if(!r)return {types:n,exits:false};let s=new Map(n);return s.set(r.name,r.type),{types:s,exits:false}}case "IfStatement":{let r=ht(e,n,t);if(r.size===0)return {types:n,exits:F(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:F(e)}}case "TryStatement":{let r=e,s=[],a=se(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=se(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Zr(n,s);return r.finalizer&&(o=se(r.finalizer,o,t).types),{types:o,exits:F(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function ht(e,n,t){let r=se(e.consequent,n,t),s=e.alternate?se(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,normalizeUnion(l));}return o}function gt(e,n){let t=new Map,r=s=>{let a=R(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function Zr(e,n){let t=new Map(e);if(n.length===0)return t;for(let r of e.keys()){let s=n.map(a=>a.get(r)??e.get(r));t.set(r,normalizeUnion(s));}return t}function es(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=gt(n,t),s=se(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return Y(n,a)}function Fe(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!ns(e))return Hn(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,c]of s)t.declaredMut.set(l,c);try{return Hn(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,c]of i)t.declaredMut.set(l,c);}}function ns(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let r=t.declaration;if(r?.type==="VariableDeclaration"&&r.kind!=="const")return true}}return false}function Hn(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let c of dt(l))r.has(c.name)?t.sink.report(S.cannotRedeclare(c,c.name)):r.add(c.name);if(l.type==="VariableDeclaration")a=je(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let c=l;if(c.declaration?.type==="VariableDeclaration")a=je(c.declaration,a,t);else if(c.declaration?.type==="FunctionDeclaration"){let d=h(c.declaration,a,t),u=x(c.declaration.id);u&&(a=I(a,{[u]:d}));}else for(let d of c.specifiers)R(a,d.local.name)===void 0&&t.sink.report(S.unknownName(d.local,d.local.name));}else if(l.type==="ExportDefaultDeclaration")h(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let c=h(l,a,t),d=x(l.id);d&&(a=I(a,{[d]:c}));}else if(l.type==="IfStatement"){let c=l,d=t.evolving.size||t.declaredMut.size?gt(a,t):null;if(o.push(...$(l,a,t,s)),d&&d.size){let u=ht(c,d,t);u.size&&(a=Y(a,Object.fromEntries(u)));}!c.alternate&&F(c.consequent)&&(a=Y(a,ke(c.test,a,t.schemes).else));}else {o.push(...$(l,a,t,s));let c=yt(l,t);c?a=Y(a,{[c.name]:c.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=es(l,a,t));}}return {scope:a,returns:o}}function $(e,n,t,r){switch(e.type){case "ReturnStatement":{let s$1=e.argument,a=s$1?r?(_(s$1,r,n,t),r):h(s$1,n,t):s.unknown;return y(t,e,a,n),[a]}case "IfStatement":{let s$1=e;h(s$1.test,n,t);let a=ke(s$1.test,n,t.schemes),o=$(s$1.consequent,Y(n,a.then),t,r);return s$1.alternate&&o.push(...$(s$1.alternate,Y(n,a.else),t,r)),y(t,e,s.unknown,n),o}case "BlockStatement":{let{returns:s$1}=Fe(e.body,n,t,void 0,void 0,r);return y(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,a=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?a=je(s$1.init,a,t):h(s$1.init,a,t)),s$1.test&&h(s$1.test,a,t),s$1.update&&h(s$1.update,a,t);let o=$(s$1.body,a,t,r);return y(t,e,s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s$1=e,a=h(s$1.right,n,t),o=e.type==="ForOfStatement"?a.t==="array"?a.items:s.unknown:s.string,i=Fn(s$1.left),l=i?I(n,{[i]:o}):n,c=$(s$1.body,l,t,r);return y(t,e,s.unknown,n),c}case "BreakStatement":case "ContinueStatement":return y(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&h(s$1,n,t),y(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,a=$(s$1.block,n,t,r);if(s$1.handler){let o=s$1.handler.param,i=o?x(o):null,l=i?I(n,{[i]:s.unknown}):n;a.push(...$(s$1.handler.body,l,t,r));}return s$1.finalizer&&a.push(...$(s$1.finalizer,n,t,r)),y(t,e,s.unknown,n),a}case "SwitchStatement":{let s$1=e;h(s$1.discriminant,n,t);let a=n,o=[];for(let i of s$1.cases){i.test&&h(i.test,a,t);let l=Fe(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return y(t,e,s.unknown,n),o}default:return h(e,n,t),[]}}function ts(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function rs(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function ss(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return s.object(t,e.index)}function as(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function re(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=gn(e,r,s$1)??n;t[e.name]=a,s$1.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=widenType(h(a.right,r,s$1)),{type:i}=withoutUndefined(n),l=i.t==="unknown"?o:normalizeUnion([i,o]);re(a.left,l,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){re(o.argument,ss(n,a),t,r,s$1);continue}let i=o,l=Se(i);l!=null&&a.push(l);let c=l!=null?ts(n,l,s$1):s.unknown;re(i.value,c,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?re(i.argument,as(n,o),t,r,s$1):re(i,rs(n,o),t,r,s$1);});return}}}function bn(e,n,t){let r=G(n,t.schemes),a=(r.t==="union"?r.of.map(o=>G(o,t.schemes)):[r]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=Se(i);if(l===null)continue;let c=a.filter(d=>l in d.props);if(!c.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&bn(i.value,c[0].props[l].type,t);}}function je(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=x(a),i=gn(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,Zn(o,i,t)):(r[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let l=i??(s$1.init.type==="ArrowFunctionExpression"?Ln(s$1.init):null),c=o&&l?I(n,{[o]:l}):n,d,u=null;i?(_(s$1.init,i,c,t),s$1.init.type==="ObjectExpression"&&bn(s$1.init,i,t),d=i,u=i,(i.t==="union"||i.t==="boolean")&&s$1.init.type==="Literal"&&(d=ft(i,ne(s$1.init),t.schemes))):(d=h(s$1.init,c,t),e.kind!=="const"&&(d=widenLiteral(d)),u=d),y(t,s$1,d,n),o?(r[o]=d,e.kind!=="const"&&u&&Zn(o,u,t)):re(a,d,r,n,t);}return y(t,e,s.unknown,n),I(n,r)}function Zn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function os(e,n,t){let r=h(e.left,n,t),s$1=h(e.right,n,t),a=e.operator,o=pe.get(a);if(!o)return s.boolean;if(o.category==="additive"){if(ae(r)||ae(s$1))return te(r,t.schemes)||te(s$1,t.schemes)?s.string:s.number;if(te(r,t.schemes)&&te(s$1,t.schemes))return s.string;if(we(r,t.schemes)&&we(s$1,t.schemes))return s.number;if(te(r,t.schemes)||te(s$1,t.schemes)){let l=te(r,t.schemes)?s$1:r;return t.sink.report(S.implicitCoercion(e,r,s$1,St(l,t.schemes))),s.string}return t.sink.report(S.operatorNotApplicable(e,"+",r,s$1)),s.number}if(o.category==="arithmetic"||o.category==="bitwise")we(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),we(s$1,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!ae(r)&&!ae(s$1)){let i=apparentType(r,t.schemes),l=apparentType(s$1,t.schemes),c=subtype(i,s.number,t.schemes),d=subtype(l,s.number,t.schemes);c&&d||!c&&!d&&(subtype(i,l,t.schemes)||subtype(l,i,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,r,s$1));}return He(o.result)}var ae=e=>e.t==="any"||e.t==="unknown",we=(e,n)=>ae(e)||subtype(apparentType(e,n),s.number,n),te=(e,n)=>!ae(e)&&subtype(apparentType(e,n),s.string,n),is=s.union([s.string,s.number,s.boolean,s.null,s.undefined]),St=(e,n)=>ae(e)||subtype(apparentType(e,n),is,n),et={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},un=e=>e.t==="null"||e.t==="undefined";function ls(e,n,t){if(n.t==="any"||n.t==="unknown")return normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[s.literal(true),s.literal(false)]:[n];if(e==="??")return normalizeUnion([...r.filter(a=>!un(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!un(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>un(a)?[a]:a.t==="literal"?a.value?[]:[a]:et[a.t]?[et[a.t]]:[]);return normalizeUnion([...s$1,t])}var cs=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function us(e,n,t){let r=h(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:s.number;case "+":case "~":return s.number;case "typeof":return cs;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function ps(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let c of e.properties){let d=c;if(d.type==="SpreadElement"){let g=G(h(d.argument,n,t),t.schemes);if(g.t==="object"){for(let v in g.props)r[v]=g.props[v];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let u=d,f=h(u.value,n,t),m=widen(f);if(y(t,d,f,n),u.computed){let g=G(h(u.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let b=Se(u);b!==null&&(r[b]={type:m},a.push(m),/^\d+$/.test(b)&&o.push(m));}return i?s={key:"string",type:normalizeUnion(a)}:l&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function bt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=G(h(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(widen(h(a,n,t)));}return s.array(r.length?normalizeUnion(r):s.unknown)}function Nn(e,n,t,r){let s$1=G(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,c)=>l.type==="ArrayExpression"?Nn(l,c,t,r):widen(h(l,t,r));if(s$1.t==="tuple"&&o&&a.length===s$1.elements.length){let l=a.map((c,d)=>i(c,s$1.elements[d]));return y(r,e,{t:"tuple",elements:l},t)}if(s$1.t==="array"){let l=[];for(let c of a){if(!c)continue;let d=c;if(d.type==="SpreadElement"){h(d.argument,t,r);continue}l.push(i(d,s$1.items));}return y(r,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return bt(e,t,r)}function dn(e,n,t,r){if(e===null)return s.null;switch(typeof e){case "string":return s.string;case "number":return s.number;case "boolean":return s.boolean;case "object":break;default:return s.unknown}if(Array.isArray(e)){let o=e.map(i=>dn(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if("#expr"in s$1){let o;try{o=fromJson(s$1);}catch{return t.sink.report(S.unsupported(r,`'#expr: ${String(s$1["#expr"])}'`)),s.unknown}return h(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:dn(s$1[o],n,t,r)};return {t:"object",props:a}}function ds(e,n){let t=apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function ms(e,n,t,r,s){let a=oe(),o=_(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(c=>c.node===l.node&&c.code===l.code&&c.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var fs=(e,n)=>({...e,typeAnnotation:n}),ys=(e,n)=>({...e,returnType:n}),hs=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function kn(e,n){return e.get(n)?.type}function gs(e,n){return e.get(n)?.scope}function Ss(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function bs(e,n){let t=e.get(n)?.scope;return t?[...$e(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Ns=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Bs(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 Ue(e,n,t,r={}){let s$1=e[n],a=e[n+1];if(!(!s$1||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===s$1?a.returnType:void 0;case "VariableDeclarator":return a.init===s$1?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(Ns)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=kn(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==s$1||e[n+2]?.type!=="ObjectExpression")return;let i=Ue(e,n+2,t,r),l=Bs(a);return !i||!l?void 0:discover(i,[l],r)?.type}case "ArrayExpression":{let o=Ue(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=pe.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return s.number;let i=a.left===s$1?a.right:a.left,l=kn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Ue(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function ks(e,n){return e.filter(t=>t.node===n)}export{pe as BINARY_OP,Qe as BINARY_OPS,An as FUNCTION_KINDS,Lt as LOGICAL_OPS,On as UNARY_OPS,fs as annotate,ys as annotateReturn,hs as asExpression,$t as binaryOpsProducing,Ke as calleeAllowlist,Ge as capabilityNodes,rt as check,I as childScope,Jt as collectBindings,rn as collectMutations,nn as collectUnused,jr as componentProps,hn as componentPropsOf,Ue as contextualTypeAt,Et as createEnv,oe as createSink,S as diag,ks as diagnosticsAt,Rr as extractModuleType,jt as fromCapability,xe as guard,Ce as guardsFromCompiled,R as lookup,C as makeDiagnostic,Ye as maxArgs,ze as maxCallNesting,We as maxDepth,_e as maxFunctionNesting,De as maxNestingOf,Je as maxNodes,Ss as memberCompletions,qe as memberDepth,He as opResultSchema,At as resolveNamed,Dt as resolveScheme,Xe as resultType,wn as rootScope,gs as scopeAt,bs as scopeCompletions,kn as typeAt,Vt as unaryOpsProducing,$e 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,widen,withoutUndefined,unify,ownProp,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,childrenOf,VisitorKeys}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var vn=(e={})=>rootScope(e),F=(e,n)=>childScope(e,n),C=(e,n)=>lookup(e,n),Ve=e=>visibleNames(e),Ct=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:vn(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),Rt=(e,n)=>e.types[n],Ot=(e,n)=>e.schemes[n];var En={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"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","implicit-coercion":"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"},N=(e,n,t)=>({code:e,kind:En[e],severity:"error",node:n,message:t}),R=(e,n,t,r="error")=>({code:e,kind:En[e],severity:r,node:n,message:t}),S={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(c=>c.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=N("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),l=s.filter(c=>c.kind==="missing"&&c.path.length===1).map(c=>({name:c.path[0],type:c.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>N("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>N("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>N("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>N("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>N("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>N("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),notASchema:(e,n)=>N("not-a-schema",e,`'${n}' refers to a value, but no type named '${n}' is declared. An asserter needs a schema that is both a value in scope and a declared type.`),typeAsValue:(e,n)=>N("type-as-value",e,`'${n}' only refers to a type, but is being used as a value here. Types are erased at runtime: register '${n}' as a value in scope for the asserter to prove it.`),asserterNeedsName:(e,n)=>N("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>N("shadows-schema",e,`'${n}' shadows the schema of the same name: an asserter would type against the declared schema but prove against this value at runtime. Rename the binding.`),unknownModule:(e,n)=>N("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>N("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>N("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>N("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>N("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>N("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>N("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>N("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>N("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>N("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>N("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)=>R("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>N("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)=>N("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>R("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)=>N("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,r)=>N("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...N("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${format(n)}' and '${format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...N("implicit-coercion",e,`Cannot convert '${format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function oe(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Ge(e,n,t={}){return n.flatMap(r=>r(e,t))}function ie(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var Ut=e=>Array.isArray(e)?e:[e],Dn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Ke(e,n="error"){return t=>{let r=[];return ie(t,s=>{let a=nodeViolation(s,e);a&&r.push(R("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function Cn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ie(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let c=typeFeatureViolations(typeFeatures(l,i),t);c.length&&s.push(R("type-feature-not-allowed",a,`authoring type feature${c.length>1?"s":""} '${c.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function E(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=>E(t.type,n))||!!e.index&&E(e.index.value,n);case "array":return E(e.items,n);case "tuple":return e.elements.some(t=>E(t,n));case "union":case "intersection":return e.of.some(t=>E(t,n));case "fn":return e.params.some(t=>E(t.type,n))||E(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>E(r.type,n))||E(t.returns,n));case "keyof":return E(e.of,n);case "index":return E(e.obj,n)||E(e.key,n);case "mapped":return E(e.over,n)||E(e.body,n);case "conditional":return E(e.check,n)||E(e.extends,n)||E(e.then,n)||E(e.else,n);case "returnType":case "parameters":return E(e.fn,n);case "apply":return e.args.some(t=>E(t,n));default:return false}}function Rn(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ie(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&E(o)){r.push(R("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function _e(e,n="error"){let t=new Set(e);return r=>{let s=[];return ie(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(R("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(R("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Ce(e,n,t={}){let r=new Set(Ut(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(c,d)=>{let u=r.has(c.type),f=u?d+1:d;u&&f>n&&i.push(R("too-deep",c,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of childrenOf(c))l(m,f);};return l(o,0),i}}var ze=(e=3,n="error")=>Ce(Dn,e,{hint:"use a pipe instead of nesting functions",severity:n}),qe=(e,n="error")=>Ce("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),We=(e,n="error")=>Ce("MemberExpression",e,{severity:n});function Je(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(R("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of childrenOf(a))s(i,o+1);};return s(t,0),r}}function Ye(e,n="error"){return t=>{let r=0;return ie(t,()=>{r++;}),r>e?[R("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function Xe(e,n="error"){return t=>{let r=[];return ie(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(R("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Qe(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[R("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function Re(e){let n=[Ke(e),Cn(e),Rn(e)];return e.hostAllow!=="*"&&n.push(_e([...e.hostAllow])),n}function Lt(e){return Re(compileProfile(e))}var He=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],de=new Map(He.map(e=>[e.op,e])),On={number:s.number,boolean:s.boolean,string:s.string},Ze=e=>On[e],Tn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Vt={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},xt=[{op:"&&"},{op:"||"},{op:"??"}];function Gt(e,n={}){return He.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(On[t.result],e,n))}function Kt(e,n={}){return Tn.filter(t=>subtype(Vt[t.result],e,n))}var Z=e=>({bindings:new Map,parent:e}),Mn=e=>e.charCodeAt(0)===95;function Te(e,n,t,r,s,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:r,kind:s,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function fe(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)fe(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&Pe(n,r);return}for(let r of Object.keys(t))fe(t[r],n);}function In(e,n){let t=e;fe(t.typeAnnotation,n),fe(t.returnType,n);}function Pe(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function W(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;In(e,n),Te(n,t,o,e,r,s||a&&Mn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((c,d)=>{let u=l&&d<o.length-1;if(c.type==="RestElement")W(c.argument,n,t,r,s,false);else {let f=c;f.computed&&B(f.key,n,t),W(f.value,n,t,r,s||u,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;W(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":W(e.left,n,t,r,s,a);return;case "RestElement":W(e.argument,n,t,r,s,true);return;default:return}}function me(e,n,t){if(e)switch(e.type){case "AssignmentPattern":B(e.right,n,t),me(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)me(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&me(r,n,t);return;case "RestElement":me(e.argument,n,t);return;default:return}}function Pn(e,n,t,r){for(let s of e.declarations)W(s.id,n,t,"local",r,false),B(s.init,n,t);}function en(e,n,t){let r=e,s=Z(n),a=r.params??[];for(let o of a)W(o,s,t,"parameter",false,true);for(let o of a)me(o,s,t);B(r.body,s,t);}function B(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(In(e,n),e.type){case "Identifier":Pe(n,e.name);return;case "MemberExpression":{let r=e;B(r.object,n,t),r.computed&&B(r.property,n,t);return}case "Property":{let r=e;r.computed&&B(r.key,n,t),B(r.value,n,t);return}case "Program":case "BlockStatement":{let r=Z(n);for(let s of e.body??[])B(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":en(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Te(n,t,r.name,r,"local",false),en(e,n,t);return}case "CatchClause":{let r=e,s=Z(n);W(r.param,s,t,"local",true,false),B(r.body,s,t);return}case "SwitchStatement":{let r=e;B(r.discriminant,n,t);let s=Z(n);for(let a of r.cases){B(a.test,s,t);for(let o of a.consequent??[])B(o,s,t);}return}case "ForStatement":{let r=e,s=Z(n);B(r.init,s,t),B(r.test,s,t),B(r.update,s,t),B(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;B(r.right,n,t);let s=Z(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)W(o.id,s,t,"local",false,true);else B(a,s,t);B(r.body,s,t);return}case "VariableDeclaration":Pn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Te(n,t,s.name,s,"import",Mn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Pn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Te(n,t,a.name,a,"local",true),en(s,n,t);}else B(s,n,t);}else for(let s of r.specifiers)Pe(n,s.local.name);return}case "TSAsExpression":B(e.expression,n,t);return;case "TSTypeAliasDeclaration":fe(e.typeAnnotation,n);return;case "JsonExpression":nn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;Fn(r.name,n);for(let s of r.attributes??[])B(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":B(e.value,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)B(i,n,t);else B(o,n,t);}return}}}function Fn(e,n,t){e&&(e.type==="JSXIdentifier"?Pe(n,e.name):e.type==="JSXMemberExpression"&&Fn(e.object,n));}function nn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)nn(s,n,t);return}let r=e;if("#expr"in r){try{B(fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))nn(r[s],n,t);}function tn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};B(e,Z(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(S.unusedName(s.node,s.name));return r}var Wt=new Set(["const","import"]),ye=e=>({binds:new Map,parent:e});function Jt(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ee(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ee(n.argument):ee(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ee(n):[]);case "AssignmentPattern":return ee(e.left);case "RestElement":return ee(e.argument);default:return []}}var Me=(e,n,t)=>{for(let r of ee(n))e.binds.set(r.name,t);};function rn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ee(e))rn(a,n,t);return}let r=e.name,s=Jt(n,r);s&&Wt.has(s)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,r,s==="import"?"import":"const")));}function T(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;rn(r.left,n,t),T(r.right,n,t);return}case "UpdateExpression":{rn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=ye(n);for(let s of e.body??[])T(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=ye(n);for(let a of r.params??[])Me(s,a,"param");T(r.body,s,t);return}case "CatchClause":{let r=e,s=ye(n);Me(s,r.param,"param"),T(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=ye(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Me(s,o.id,a.kind);else a&&T(a,s,t);T(r.right,n,t),T(r.test,s,t),T(r.update,s,t),T(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)T(s.init,n,t),Me(n,s.id,r.kind);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.binds.set(s.name,"import");}return}case "ExportNamedDeclaration":{let r=e;r.declaration&&T(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":T(e.expression,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)T(i,n,t);else T(o,n,t);}return}}}function sn(e){let n={out:[],invalid:new WeakSet};return T(e,ye(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var he=e=>({decls:new Map,parent:e});function Xt(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function le(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?le(n.argument):le(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?le(n):[]);case "AssignmentPattern":return le(e.left);case "RestElement":return le(e.argument);default:return []}}var Ie=(e,n)=>{for(let t of le(n))e.decls.set(t.name,t);};function O(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=Xt(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;O(r.object,n,t),r.computed&&O(r.property,n,t);return}case "Property":{let r=e;r.computed&&O(r.key,n,t),O(r.value,n,t);return}case "Program":case "BlockStatement":{let r=he(n);for(let s of e.body??[])O(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=e.id;s&&n.decls.set(s.name,s);let a=he(n);for(let o of r.params??[])Ie(a,o);O(r.body,a,t);return}case "CatchClause":{let r=e,s=he(n);Ie(s,r.param),O(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=he(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ie(s,o.id);else a&&O(a,s,t);O(r.right,n,t),O(r.test,s,t),O(r.update,s,t),O(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)Ie(n,r.id),O(r.init,n,t);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.decls.set(s.name,s);}return}case "TSTypeAliasDeclaration":{let r=e.id;r&&n.decls.set(r.name,r);return}case "TSAsExpression":O(e.expression,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)O(i,n,t);else O(o,n,t);}return}}}function Qt(e){let n=new WeakMap;return O(e,he(void 0),n),n}var an=e=>e.typeAnnotation,on=e=>e.returnType,x=e=>e.type==="Identifier"?e.name:null,jn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?x(n.id):null}return x(e)},Un=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},be=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function $n(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function ln(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=ln(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Fe(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 ne=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):Fe(e)},cn=e=>e.type==="ArrowFunctionExpression",Ln=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Ne=e=>Ln(e)?e.args[0]:e,Be=e=>Ln(e)?e:s.promise(e);function ge(e){return e.t==="tuple"?true:e.t==="array"?ge(e.items):e.t==="union"?e.of.some(ge):false}function Se(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Se(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Se(e.bound):false}var G=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function Vn(e){let n=on(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:x(r)??`arg${s$1}`,type:an(r)??s.unknown})),returns:e.async?Be(n):n}:null}var J={then:{},else:{}},Jn=new Set(["string","number","boolean","undefined","function","object"]),xn={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function Yn(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 nr=s.literal(true),tr=s.literal(false),K=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[nr,tr]:[e];function Gn(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function rr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=K(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function sr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=K(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function ar(e,n){if(!Jn.has(n))return null;if(e.t==="unknown"||e.t==="any")return xn[n]??e;let t=K(e).filter(r=>Yn(r,n));return t.length?normalizeUnion(t):xn[n]??e}function or(e,n){if(!Jn.has(n)||e.t==="unknown"||e.t==="any")return null;let t=K(e).filter(r=>!Yn(r,n));return t.length?normalizeUnion(t):null}function Kn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=ne(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function _n(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=ne(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function zn(e,n,t,r,s){let a=K(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let c=o(l);return r?!!c&&subtype(t,c,s):!(c&&subtype(c,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function qn(e,n,t){let r=K(e),s=o=>o.t==="object"&&(n in o.props||!!o.index),a=r.filter(o=>t?s(o):!s(o));return a.length&&a.length<r.length?normalizeUnion(a):null}function ir(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function lr(e,n,t){let r=K(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var cr=e=>e.t==="null"||e.t==="undefined",Xn=e=>cr(e)||e.t==="literal"&&!e.value,ur=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=K(e),t=n.filter(r=>!Xn(r));return t.length&&t.length<n.length?normalizeUnion(t):null},pr=e=>{let n=K(e),t=n.filter(Xn);return t.length&&t.length<n.length?normalizeUnion(t):null},Wn=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,U=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),dr=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function we(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,b=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&b.type==="Identifier"){let g=b.name,v=C(n,g);if(!v)return J;let k=String(m.value);return U(g,qn(v,k,true),qn(v,k,false))}return J}if(!dr(r.operator))return J;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=Gn(a,o)??Gn(o,a);if(i){let m=C(n,i.name);if(!m)return J;let b=ar(m,i.tag),g=or(m,i.tag);return s?U(i.name,g,b):U(i.name,b,g)}let l=Wn(a),c=Wn(o),d=l?o:c?a:null;if((l||c)&&d?.type==="Identifier"){let m=d.name,b=C(n,m);if(!b)return J;let v=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??c],k=K(b),z=k.filter(Le=>v.includes(Le.t)),I=k.filter(Le=>!v.includes(Le.t)),Q=z.length?normalizeUnion(z):null,V=I.length&&I.length<k.length?normalizeUnion(I):null;return s?U(m,V,Q):U(m,Q,V)}let u=Kn(a,o)??Kn(o,a);if(u){let m=C(n,u.name);if(!m)return J;let b=ir(m,u.lit,t),g=lr(m,u.lit,t);return s?U(u.name,g,b):U(u.name,b,g)}let f=_n(a,o)??_n(o,a);if(f){let m=C(n,f.name);if(!m)return J;let b=zn(m,f.prop,f.lit,true,t),g=zn(m,f.prop,f.lit,false,t);return s?U(f.name,g,b):U(f.name,b,g)}return J}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=we(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=fr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=C(n,r);if(s)return U(r,ur(s),pr(s))}return J}function mr(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 fr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=C(n,r.name);if(!s)return null;let a=mr(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=C(n,i);return l?U(i,rr(l,a.type,t),sr(l,a.type,t)):null}var Y=(e,n)=>Object.keys(n).length?F(e,n):e;function j(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>j(t));case "IfStatement":{let n=e;return !!n.alternate&&j(n.consequent)&&j(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&j(n.finalizer))return true;let t=!n.handler||j(n.handler.body);return j(n.block)&&t}default:return false}}var Rr=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function Or(e){let n=[];return e.maxDepth!==void 0&&n.push(Je(e.maxDepth)),e.maxNodes!==void 0&&n.push(Ye(e.maxNodes)),e.maxArgs!==void 0&&n.push(Xe(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(ze(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(qe(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(We(e.memberDepth)),n}function Tr(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>R("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function at(e,n,t={}){let r={...Rr(n.types),...n.schemes,...Mr(e)},s$1=sn(e),a={overlay:new WeakMap,sink:oe(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s$1.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=Ir(e,a);try{i=h(e,l,a);}catch(u){if(u instanceof TypeEvalLimitError)a.sink.report(R("too-deep",e,u.message));else if(u instanceof UnionTooComplexError)a.sink.report(R("too-complex-union",e,u.message));else throw u;i=s.unknown;}let c=[];o&&c.push(...Re(o)),t.limits&&c.push(...Or(t.limits)),t.resultType&&c.push(Qe(t.resultType,r));let d=[...a.sink.all,...s$1.diagnostics,...Tr(e,r),...t.unused?tn(e,t.unused):[],...c.length?Ge(e,c,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:d,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function Pr(e,n,t={}){let r=at(e,n,t),s$1={},a=new Map,o,i=c=>{let d=[];if(c.type==="VariableDeclaration")for(let u of c.declarations){let f=x(u.id),m=r.overlay.get(u);f&&m&&(s$1[f]=m.type,d.push(f));}else if(c.type==="FunctionDeclaration"){let u=c.id?.name,f=r.overlay.get(c);u&&f&&(s$1[u]=f.type,d.push(u));}return d};for(let c of e.body??[])if(c.type==="VariableDeclaration"||c.type==="FunctionDeclaration")i(c);else if(c.type==="ExportNamedDeclaration"){let d=c;if(d.declaration)for(let u of i(d.declaration))a.set(u,u);else for(let u of d.specifiers)a.set(u.exported.name,u.local.name);}else if(c.type==="ExportDefaultDeclaration"){let d=r.overlay.get(c.declaration);o=d?d.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[c,d]of a)s$1[d]&&(l[c]={type:s$1[d]});o!==void 0&&(l.default={type:o});}else for(let c in s$1)l[c]={type:s$1[c]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Mr=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function Ir(e,n){let t=n.env.modules,r={};walk(e,{ImportDeclaration(s$1){let a=s$1,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=s.unknown;return}for(let l of a.specifiers){let c=l.local.name;if(pe(c,l.local,n),c in r){n.sink.report(S.cannotRedeclare(l.local,c));continue}if(l.type==="ImportNamespaceSpecifier"){r[c]=i;continue}let d=l.type==="ImportSpecifier"?l.imported.name:"default",u=discover(i,[d],n.schemes);u?r[c]=u.type:(n.sink.report(S.noSuchMember(l,i,d)),r[c]=s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?F(n.env.scope,r):n.env.scope}var y=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function h(e,n,t,r){switch(e.type){case it:return e.schema;case "JSXElement":case "JSXFragment":return y(t,e,h(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return y(t,e,Fe(e),n);case "Placeholder":return y(t,e,s.any,n);case "Identifier":{let s$1=e.name,a=C(n,s$1);return a===void 0?s$1==="undefined"?y(t,e,s.undefined,n):(t.sink.report(S.unknownName(e,s$1)),y(t,e,s.unknown,n)):y(t,e,a,n)}case "MemberExpression":return y(t,e,Ur(e,n,t),n);case "CallExpression":return y(t,e,Kr(e,n,t,r),n);case "ArrowFunctionExpression":return bn(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),y(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),y(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),y(t,e,s.unknown,n);case "BlockStatement":return y(t,e,ht(e,n,t),n);case "ReturnStatement":{let s$1=e.argument;return y(t,e,s$1?h(s$1,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 s=e,a=s.left,o=h(a,n,t);if(a.type==="MemberExpression"){let d=t.overlay.get(a.object)?.type,u=d&&apparentType(d,t.schemes);u&&(u.t==="array"||u.t==="tuple")&&u.readonly&&t.sink.report(S.readonlyWrite(a,u));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),c=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let u=h(s.right,n,t);return t.assignFlow.set(e,widenLiteral(u)),y(t,e,u,n)}if(c&&i!==null){let u=h(s.right,n,t);return subtype(u,c,t.schemes)||t.sink.report(S.notAssignable(s.right,u,c,t.schemes)),t.assignFlow.set(e,gt(c,u,t.schemes)),y(t,e,u,n)}let d=_(s.right,o,n,t);return y(t,e,d,n)}return y(t,e,h(s.right,n,t),n)}case "UpdateExpression":{let s$1=e,a=h(s$1.argument,n,t);return ve(a,t.schemes)||t.sink.report(S.arithmeticOperand(s$1.argument,"operand")),y(t,e,s.number,n)}case "ExpressionStatement":return y(t,e,h(e.expression,n,t),n);case "VariableDeclaration":return Ue(e,n,t),y(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let s$1=e.id?.name,a=s$1?t.schemes[s$1]:void 0;return y(t,e,a?Jr(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return y(t,e,us(e,n,t),n);case "LogicalExpression":{let s=e,a=h(s.left,n,t),o=h(s.right,n,t);return y(t,e,ds(s.operator,a,o),n)}case "UnaryExpression":return y(t,e,fs(e,n,t),n);case "ConditionalExpression":{let s=e;h(s.test,n,t);let a=we(s.test,n,t.schemes),o=h(s.consequent,Y(n,a.then),t),i=h(s.alternate,Y(n,a.else),t);return y(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return y(t,e,ys(e,n,t),n);case "ArrayExpression":return y(t,e,kt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=h(s,n,t);Bt(a,t.schemes)||t.sink.report(S.notTextConvertible(s,a));}return y(t,e,s.string,n)}case "AwaitExpression":{let s$1=e.argument,a=s$1?h(s$1,n,t):s.unknown;return y(t,e,Ne(a),n)}case "Program":{let s$1=je(e.body,n,t,new Set(t.importNames)).scope;return y(t,e,s.unknown,s$1)}case "JsonExpression":return y(t,e,mn(e.body,n,t,e),n);case "ChainExpression":return y(t,e,normalizeUnion([h(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let s=e,a=h(s.expression,n,t),o=De(s.typeAnnotation,n,t,e);return !subtype(a,o,t.schemes)&&!subtype(o,a,t.schemes)&&t.sink.report(S.castUnsound(e,a,o)),y(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),y(t,e,s.unknown,n)}}var Fr=new Set(["constructor","prototype","__proto__"]);function jr(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 Ur(e,n,t){let r=h(e.object,n,t),s$1=jr(e);if(s$1!==null&&Fr.has(s$1))return t.sink.report(S.forbiddenMember(e,s$1)),s.unknown;if(e.computed){let i=h(e.property,n,t),l=resolveTypeOp(s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&Qn(e,r,i.value,t),s.unknown)}let a=e.property.name,o=discover(r,[a],t.schemes);return o?o.type:(Qn(e,r,a,t),s.unknown)}function Qn(e,n,t,r){let s=isScheme(n,r.schemes)?expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(S.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(S.notObject(e,n));}function $r(e,n,t,r){let s$1=e.arguments[0];if(!s$1){r.sink.report(S.missingArgument(e,"schema",s.unknown));return}if(s$1.type!=="Identifier"){r.sink.report(S.asserterNeedsName(s$1,n));return}let a=s$1.name,o=C(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?S.typeAsValue(s$1,a):S.unknownName(s$1,a));return}if(!i||i.params.length>0){r.sink.report(S.notASchema(s$1,a));return}if(!(ot(a,r)&&!Lr(t,a)))return r.overlay.set(s$1,{type:i.body,scope:t}),i.body}function ot(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&C(n.env.scope,e)!==void 0}function Lr(e,n){for(let t=e;t;t=t.parent)if(Object.prototype.hasOwnProperty.call(t.vars,n))return t.parent===null;return false}function pe(e,n,t){ot(e,t)&&t.sink.report(S.shadowsSchema(n,e));}function gn(e,n){let t=G(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function Vr(e,n){let t=C(e.scope,n);if(!t)return;let r=gn(t,e.schemes);return r?G(r,e.schemes):void 0}function xr(e,n,t,r){let s$1=gn(h(n[0],t,r),r.schemes),a=n.length>1?h(n[1],t,r):s.undefined;if(s$1){let o=typeDiff(a,s$1,r.schemes);o.length&&r.sink.report(S.propsMismatch(n[1]??e,s$1,formatTypeDiff(o)));}return y(r,e,s.boolean,t)}var it="TSLiteSyntheticArg",Gr=e=>({type:it,schema:e});function lt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s$1=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=G(h(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(Gr(l));else s$1={elem:i.t==="array"?i.items:s.unknown,node:a};}return {nodes:r,spread:s$1}}function Kr(e,n,t,r){let s$1=e.arguments,a=ln(e.callee);if(a){let u=t.env.accessors?.[a];if(u){let f=$n(s$1);if(f){let m=discover(u,f,t.schemes);return m?m.type:(t.sink.report(S.noSuchMember(e,u,f.join("."))),s.unknown)}return s$1.forEach(m=>h(m,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let u=$r(e,a,n,t);s$1.length<2&&s$1.length>0&&t.sink.report(S.missingArgument(e,"value",s.unknown));for(let f=1;f<s$1.length;f++)h(s$1[f],n,t);return u??s.unknown}if(a&&t.env.matchers?.has(a))return xr(e,s$1,n,t);let o=h(e.callee,n,t);if(o.t==="any")return s$1.forEach(u=>h(u,n,t)),s.any;if(o.t==="overload")return zr(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(u=>h(u,n,t)),t.sink.report(S.notCallable(e,o)),s.unknown;let i=lt(s$1,n,t),l=i.nodes.map(u=>ct(u,n,t)),c=dt(e),d=!c||mt(o,c.length);return d||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,c.length)),ut(e,o,i.nodes,l,n,t,i.spread,r,d?c:void 0)}function ct(e,n,t){if(cn(e))return s.any;if(e.type!=="CallExpression")return h(e,n,t);let r=oe(),s$1=h(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function ut(e,n,t,r,s$1,a,o=null,i,l){let c=m=>{if(!i)return m;let b=substitute(n.returns,m);if(b.t==="fn"&&i.t==="fn"){let g=m,v=Math.min(b.params.length,i.params.length);for(let k=0;k<v;k++)g=unify(b.params[k].type,i.params[k].type,g)??g;return unify(b.returns,i.returns,g)??g}return unify(b,i,m)??m},d=l?Xr(e,n,l,a):void 0,u=d??c(instantiateLoose(n,r).bindings);t.forEach((m,b)=>{if(cn(m)){let g=widenType(substitute(n.params[b]?.type??s.any,u));r[b]=bn(m,s$1,a,g);}else if(m.type==="CallExpression"&&r[b].t==="any")r[b]=h(m,s$1,a,substitute(n.params[b]?.type??s.unknown,u));else if(m.type==="Literal"){let g=n.params[b]?.type??s.unknown,v=g.t==="var"?g.bound?substitute(g.bound,u):g:substitute(g,u);Se(v)&&(r[b]=y(a,m,ne(m),s$1));}else if(m.type==="ArrayExpression"||m.type==="ObjectExpression"||m.type==="ConditionalExpression"){let g=n.params[b]?.type??s.unknown,v=substitute(g,u);if(m.type==="ArrayExpression"&&ge(v)){r[b]=Bn(m,v,s$1,a);return}let k=g.t==="var"?g.bound?substitute(g.bound,u):void 0:v;k&&hs(k,a.schemes)&&(r[b]=gs(m,k,s$1,a,g.t==="var")??r[b]);}});let f=d??c(instantiateLoose(n,r).bindings);return d||_r(e,n,f,a),es(e,n,r,f,a,t,o),t.forEach((m,b)=>{let g=n.params[b];m.type==="ObjectExpression"&&g&&!g.variadic&&Nn(m,substitute(g.type,f),a);}),widenInferred(groundVars(substitute(n.returns,f),a.schemes))}var Hn=new WeakMap;function pt(e){let n=Hn.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)P(s.type,t,r);return P(e.returns,t,r),Hn.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 r of e.of)P(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)P(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)P(r.type,n,t);P(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)P(s.type,n,t);P(r.returns,n,t);}return;case "apply":for(let r of e.args)P(r,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 _r(e,n,t,r){let s=pt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=substitute(o,t);subtype(i,l,r.schemes)||r.sink.report(S.constraintViolation(e,a,i,l));}}function zr(e,n,t,r,s){let a=lt(e.arguments,t,r),o=a.nodes,i=o.map(d=>ct(d,t,r)),l=dt(e),c=l?n.signatures.filter(d=>mt(d,l.length)):n.signatures;if(l&&!c.length){let d=n.signatures.reduce((u,f)=>Math.max(u,f.typeParams?.length??0),0);return r.sink.report(S.wrongTypeArgumentCount(e,d,l.length)),Zn(e,n.signatures,a,o,i,t,r,s,void 0)}return Zn(e,c,a,o,i,t,r,s,l)}function Zn(e,n,t,r,s$1,a,o,i,l){let c={t:"overload",signatures:n},d=f=>t.spread?Qr(f,r.length):Hr(f,r.length),u=c.signatures.find(f=>d(f)&&Zr(f,s$1,o));if(!u){let f=c.signatures.filter(d);f.length===1?u=f[0]:c.signatures.length===1&&(u=c.signatures[0]);}return u?ut(e,u,r,s$1,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,c,s$1)),s.unknown)}function qr(e,n,t,r){let s$1=C(n,e[0]);if(s$1===void 0)return t.sink.report(S.unknownName(r,e[0])),s.unknown;let a=e.slice(1),o=a.length?discover(s$1,a,t.schemes)?.type:s$1;return o?o.t==="literal"?s.literal(o.value):o:(t.sink.report(S.noSuchMember(r,s$1,a.join("."))),s.unknown)}function De(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let c=false,d=a.map(u=>{let f=s$1(u);return f!==u&&(c=true),f});return c?d:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return qr(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(Wr(o.name,n,t,r),!(o.name in t.schemes)))return s.any;let i=false,l={};for(let c of Object.keys(o)){let d=s$1(o[c]);d!==o[c]&&(i=true),l[c]=d;}return i?l:o};return s$1(e)}function Wr(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=De(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Jr(e,n,t,r,s){let a={...t,sink:oe(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=De(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var Sn=(e,n,t)=>{let r=an(e);return r===void 0?r:De(r,n,t,e)},Yr=(e,n,t)=>{let r=on(e);return r===void 0?r:De(r,n,t,e)},dt=e=>{let n=e.typeArguments;return n?.length?n:void 0},mt=(e,n)=>(e.typeParams?.length??0)===n;function Xr(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of pt(n)){let c=o[i];if(!c)continue;let d=groundVars(substitute(l,o),r.schemes);subtype(c,d,r.schemes)||r.sink.report(S.constraintViolation(e,i,c,d));}return o}function Qr(e,n){let t=0,r=false;for(let s of e.params)s.variadic?r=true:s.optional||t++;return n>=t&&(r||n<e.params.length)}function Hr(e,n){let t=0;for(let r of e.params){if(r.variadic)return n>=t;r.optional||t++;}return n>=t&&n<=e.params.length}function Zr(e,n,t){let{bindings:r}=instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic)return true;if(s>=n.length){if(!a.optional)return false;continue}if(!subtype(n[s],substitute(a.type,r),t.schemes))return false}return true}function es(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=c=>a[c]??e;for(let c=0;c<n.params.length;c++){let d=n.params[c];if(d.variadic)break;let u=substitute(d.type,r);if(c>=t.length){!d.optional&&!o&&s$1.sink.report(S.missingArgument(e,d.name,u));continue}subtype(t[c],u,s$1.schemes)||s$1.sink.report(S.notAssignable(i(c),t[c],u,s$1.schemes));}let l=n.params.find(c=>c.variadic);if(o){let c=t.length,d=n.params.filter(u=>!u.optional&&!u.variadic).length;if(!(c>=d&&(l||c<n.params.length))){s$1.sink.report(S.spreadArgument(o.node));return}if(l){let u=substitute(l.type,r),f=u.t==="array"?u.items:s.unknown;subtype(o.elem,f,s$1.schemes)||s$1.sink.report(S.notAssignable(o.node,o.elem,f,s$1.schemes));}return}!l&&t.length>n.params.length&&s$1.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function ft(e,n,t){if(e.t==="object"){let r=ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>ft(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:resolveTypeOp({t:"intersection",of:r})}}function _(e,n,t,r,s$1=false){let a=apparentType(n,r.schemes);switch(e.type){case "Literal":{let i=ne(e);return subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,s$1?Se(n)?i:widen(Fe(e)):n,t)}case "ArrayExpression":{if(ge(a)){let i=Bn(e,a,t,r);return subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,i,t)}if(a.t==="array"){let i=[];for(let c of e.elements){if(!c)continue;let d=c;if(d.type==="SpreadElement"){let u=_(d.argument,n,t,r,s$1);u.t==="array"&&i.push(u.items);}else i.push(_(d,a.items,t,r,s$1));}let l=s$1&&i.length>0?s.array(normalizeUnion(i)):n;return y(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let d of e.properties){let u=d;if(u.type==="SpreadElement"){h(u.argument,t,r);continue}let f=u,m=be(f),b=m!==null?ft(a,m,r.schemes):void 0,g=b?_(f.value,b,t,r,s$1):widen(h(f.value,t,r));m!==null&&(i[m]={type:b??g},l[m]={type:g}),y(r,u,g,t);}let c={t:"object",props:i};return subtype(c,n,r.schemes)||r.sink.report(S.notAssignable(e,c,n,r.schemes)),y(r,e,s$1?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=bn(e,t,r,a);return subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,n,t)}break}case "ConditionalExpression":{let i=e;h(i.test,t,r);let l=_(i.consequent,n,t,r,s$1),c=_(i.alternate,n,t,r,s$1);return y(r,e,s$1?normalizeUnion([l,c]):n,t)}case "Placeholder":return y(r,e,n,t)}let o=h(e,t,r);return subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,o,t)}function bn(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=k=>a?.length?{...k,typeParams:a}:k,i={},l=new Map,c=e.params.map((k,z)=>{let I=k,Q=x(I),V=Sn(I,n,t)??s$1?.params[z]?.type??s.unknown;return Q?(pe(Q,I,t),i[Q]=V,(V.t==="union"||V.t==="boolean")&&l.set(Q,V)):I.type!=="Identifier"&&re(I,V,i,n,t),t.overlay.set(I,{type:V,scope:n}),{name:Q??`arg${z}`,type:V}}),d=F(n,i),u=e.body,f=Yr(e,n,t);if(u.type!=="BlockStatement"&&f){let k=e.async?Ne(f):f;_(u,k,d,t);let z=e.async?Be(f):f;return y(t,e,o({t:"fn",params:c,returns:z}),n)}let m=f??s$1?.returns,b=m&&e.async?Ne(m):m,g=u.type==="BlockStatement"?y(t,u,ht(u,d,t,new Set(Object.keys(i)),l,b),d):h(u,d,t),v=e.async?Be(g):g;if(f){let k=e.async?Ne(f):f,z=e.async?g:v;subtype(z,k,t.schemes)||t.sink.report(S.notAssignable(u,v,f,t.schemes));let I=e.async?Be(f):f;return y(t,e,o({t:"fn",params:c,returns:I}),n)}return y(t,e,o({t:"fn",params:c,returns:widenType(v)}),n)}function ue(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ue(n.argument):ue(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ue(n.argument):ue(n):[]);case "AssignmentPattern":return ue(e.left);default:return []}}function yt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ue(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?yt(e.declaration):[]}function ht(e,n,t,r=new Set,s$1,a){let{returns:o}=je(e.body,n,t,r,s$1,a),i=!j(e);return o.length===0?i?s.void:s.union([]):normalizeUnion(i?[...o,s.undefined]:o)}var ns=[s.literal(true),s.literal(false)];function ts(e){return e.t==="union"?e.of:e.t==="boolean"?ns:[e]}function gt(e,n,t){let r=ts(e);if(r.length<=1)return e;let s=r.filter(o=>subtype(n,o,t));if(s.length===0)return e;let a=normalizeUnion(s);return subtype(n,a,t)?a:e}function St(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let r=t,s=r.left;if(r.operator!=="="||s.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:s.name,type:a}:null}function se(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=se(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=St(e,t);if(!r)return {types:n,exits:false};let s=new Map(n);return s.set(r.name,r.type),{types:s,exits:false}}case "IfStatement":{let r=bt(e,n,t);if(r.size===0)return {types:n,exits:j(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:j(e)}}case "TryStatement":{let r=e,s=[],a=se(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=se(r.handler.body,n,t);i.exits||s.push(i.types);}let o=rs(n,s);return r.finalizer&&(o=se(r.finalizer,o,t).types),{types:o,exits:j(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function bt(e,n,t){let r=se(e.consequent,n,t),s=e.alternate?se(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,normalizeUnion(l));}return o}function Nt(e,n){let t=new Map,r=s=>{let a=C(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function rs(e,n){let t=new Map(e);if(n.length===0)return t;for(let r of e.keys()){let s=n.map(a=>a.get(r)??e.get(r));t.set(r,normalizeUnion(s));}return t}function ss(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=Nt(n,t),s=se(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return Y(n,a)}function je(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!as(e))return et(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,c]of s)t.declaredMut.set(l,c);try{return et(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,c]of i)t.declaredMut.set(l,c);}}function as(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let r=t.declaration;if(r?.type==="VariableDeclaration"&&r.kind!=="const")return true}}return false}function et(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let c of yt(l))r.has(c.name)?t.sink.report(S.cannotRedeclare(c,c.name)):r.add(c.name);if(l.type==="VariableDeclaration")a=Ue(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let c=l;if(c.declaration?.type==="VariableDeclaration")a=Ue(c.declaration,a,t);else if(c.declaration?.type==="FunctionDeclaration"){let d=h(c.declaration,a,t),u=x(c.declaration.id);u&&(a=F(a,{[u]:d}));}else for(let d of c.specifiers)C(a,d.local.name)===void 0&&t.sink.report(S.unknownName(d.local,d.local.name));}else if(l.type==="ExportDefaultDeclaration")h(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let c=h(l,a,t),d=x(l.id);d&&(a=F(a,{[d]:c}));}else if(l.type==="IfStatement"){let c=l,d=t.evolving.size||t.declaredMut.size?Nt(a,t):null;if(o.push(...L(l,a,t,s)),d&&d.size){let u=bt(c,d,t);u.size&&(a=Y(a,Object.fromEntries(u)));}!c.alternate&&j(c.consequent)&&(a=Y(a,we(c.test,a,t.schemes).else));}else {o.push(...L(l,a,t,s));let c=St(l,t);c?a=Y(a,{[c.name]:c.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=ss(l,a,t));}}return {scope:a,returns:o}}function L(e,n,t,r){switch(e.type){case "ReturnStatement":{let s$1=e.argument,a=s$1?r?(_(s$1,r,n,t),r):h(s$1,n,t):s.unknown;return y(t,e,a,n),[a]}case "IfStatement":{let s$1=e;h(s$1.test,n,t);let a=we(s$1.test,n,t.schemes),o=L(s$1.consequent,Y(n,a.then),t,r);return s$1.alternate&&o.push(...L(s$1.alternate,Y(n,a.else),t,r)),y(t,e,s.unknown,n),o}case "BlockStatement":{let{returns:s$1}=je(e.body,n,t,void 0,void 0,r);return y(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,a=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?a=Ue(s$1.init,a,t):h(s$1.init,a,t)),s$1.test&&h(s$1.test,a,t),s$1.update&&h(s$1.update,a,t);let o=L(s$1.body,a,t,r);return y(t,e,s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s$1=e,a=h(s$1.right,n,t),o=e.type==="ForOfStatement"?a.t==="array"?a.items:s.unknown:s.string,i=jn(s$1.left);i&&pe(i,Un(s$1.left),t);let l=i?F(n,{[i]:o}):n,c=L(s$1.body,l,t,r);return y(t,e,s.unknown,n),c}case "BreakStatement":case "ContinueStatement":return y(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&h(s$1,n,t),y(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,a=L(s$1.block,n,t,r);if(s$1.handler){let o=s$1.handler.param,i=o?x(o):null;i&&o&&pe(i,o,t);let l=i?F(n,{[i]:s.unknown}):n;a.push(...L(s$1.handler.body,l,t,r));}return s$1.finalizer&&a.push(...L(s$1.finalizer,n,t,r)),y(t,e,s.unknown,n),a}case "SwitchStatement":{let s$1=e;h(s$1.discriminant,n,t);let a=n,o=[];for(let i of s$1.cases){i.test&&h(i.test,a,t);let l=je(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return y(t,e,s.unknown,n),o}default:return h(e,n,t),[]}}function os(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function is(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function ls(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return s.object(t,e.index)}function cs(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function re(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=Sn(e,r,s$1)??n;pe(e.name,e,s$1),t[e.name]=a,s$1.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=widenType(h(a.right,r,s$1)),{type:i}=withoutUndefined(n),l=i.t==="unknown"?o:normalizeUnion([i,o]);re(a.left,l,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){re(o.argument,ls(n,a),t,r,s$1);continue}let i=o,l=be(i);l!=null&&a.push(l);let c=l!=null?os(n,l,s$1):s.unknown;re(i.value,c,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?re(i.argument,cs(n,o),t,r,s$1):re(i,is(n,o),t,r,s$1);});return}}}function Nn(e,n,t){let r=G(n,t.schemes),a=(r.t==="union"?r.of.map(o=>G(o,t.schemes)):[r]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=be(i);if(l===null)continue;let c=a.filter(d=>l in d.props);if(!c.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&Nn(i.value,c[0].props[l].type,t);}}function Ue(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=x(a);o&&pe(o,a,t);let i=Sn(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,nt(o,i,t)):(r[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let l=i??(s$1.init.type==="ArrowFunctionExpression"?Vn(s$1.init):null),c=o&&l?F(n,{[o]:l}):n,d,u=null;i?(_(s$1.init,i,c,t),s$1.init.type==="ObjectExpression"&&Nn(s$1.init,i,t),d=i,u=i,(i.t==="union"||i.t==="boolean")&&s$1.init.type==="Literal"&&(d=gt(i,ne(s$1.init),t.schemes))):(d=h(s$1.init,c,t),e.kind!=="const"&&(d=widenLiteral(d)),u=d),y(t,s$1,d,n),o?(r[o]=d,e.kind!=="const"&&u&&nt(o,u,t)):re(a,d,r,n,t);}return y(t,e,s.unknown,n),F(n,r)}function nt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function us(e,n,t){let r=h(e.left,n,t),s$1=h(e.right,n,t),a=e.operator,o=de.get(a);if(!o)return s.boolean;if(o.category==="additive"){if(ae(r)||ae(s$1))return te(r,t.schemes)||te(s$1,t.schemes)?s.string:s.number;if(te(r,t.schemes)&&te(s$1,t.schemes))return s.string;if(ve(r,t.schemes)&&ve(s$1,t.schemes))return s.number;if(te(r,t.schemes)||te(s$1,t.schemes)){let l=te(r,t.schemes)?s$1:r;return t.sink.report(S.implicitCoercion(e,r,s$1,Bt(l,t.schemes))),s.string}return t.sink.report(S.operatorNotApplicable(e,"+",r,s$1)),s.number}if(o.category==="arithmetic"||o.category==="bitwise")ve(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),ve(s$1,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!ae(r)&&!ae(s$1)){let i=apparentType(r,t.schemes),l=apparentType(s$1,t.schemes),c=subtype(i,s.number,t.schemes),d=subtype(l,s.number,t.schemes);c&&d||!c&&!d&&(subtype(i,l,t.schemes)||subtype(l,i,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,r,s$1));}return Ze(o.result)}var ae=e=>e.t==="any"||e.t==="unknown",ve=(e,n)=>ae(e)||subtype(apparentType(e,n),s.number,n),te=(e,n)=>!ae(e)&&subtype(apparentType(e,n),s.string,n),ps=s.union([s.string,s.number,s.boolean,s.null,s.undefined]),Bt=(e,n)=>ae(e)||subtype(apparentType(e,n),ps,n),tt={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},pn=e=>e.t==="null"||e.t==="undefined";function ds(e,n,t){if(n.t==="any"||n.t==="unknown")return normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[s.literal(true),s.literal(false)]:[n];if(e==="??")return normalizeUnion([...r.filter(a=>!pn(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!pn(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>pn(a)?[a]:a.t==="literal"?a.value?[]:[a]:tt[a.t]?[tt[a.t]]:[]);return normalizeUnion([...s$1,t])}var ms=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function fs(e,n,t){let r=h(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:s.number;case "+":case "~":return s.number;case "typeof":return ms;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function ys(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let c of e.properties){let d=c;if(d.type==="SpreadElement"){let g=G(h(d.argument,n,t),t.schemes);if(g.t==="object"){for(let v in g.props)r[v]=g.props[v];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let u=d,f=h(u.value,n,t),m=widen(f);if(y(t,d,f,n),u.computed){let g=G(h(u.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let b=be(u);b!==null&&(r[b]={type:m},a.push(m),/^\d+$/.test(b)&&o.push(m));}return i?s={key:"string",type:normalizeUnion(a)}:l&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function kt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=G(h(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(widen(h(a,n,t)));}return s.array(r.length?normalizeUnion(r):s.unknown)}function Bn(e,n,t,r){let s$1=G(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,c)=>l.type==="ArrayExpression"?Bn(l,c,t,r):widen(h(l,t,r));if(s$1.t==="tuple"&&o&&a.length===s$1.elements.length){let l=a.map((c,d)=>i(c,s$1.elements[d]));return y(r,e,{t:"tuple",elements:l},t)}if(s$1.t==="array"){let l=[];for(let c of a){if(!c)continue;let d=c;if(d.type==="SpreadElement"){h(d.argument,t,r);continue}l.push(i(d,s$1.items));}return y(r,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return kt(e,t,r)}function mn(e,n,t,r){if(e===null)return s.null;switch(typeof e){case "string":return s.string;case "number":return s.number;case "boolean":return s.boolean;case "object":break;default:return s.unknown}if(Array.isArray(e)){let o=e.map(i=>mn(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if("#expr"in s$1){let o;try{o=fromJson(s$1);}catch{return t.sink.report(S.unsupported(r,`'#expr: ${String(s$1["#expr"])}'`)),s.unknown}return h(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:mn(s$1[o],n,t,r)};return {t:"object",props:a}}function hs(e,n){let t=apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function gs(e,n,t,r,s){let a=oe(),o=_(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(c=>c.node===l.node&&c.code===l.code&&c.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var Ss=(e,n)=>({...e,typeAnnotation:n}),bs=(e,n)=>({...e,returnType:n}),Ns=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function wn(e,n){return e.get(n)?.type}function Bs(e,n){return e.get(n)?.scope}function ks(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function ws(e,n){let t=e.get(n)?.scope;return t?[...Ve(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var vs=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Es(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 $e(e,n,t,r={}){let s$1=e[n],a=e[n+1];if(!(!s$1||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===s$1?a.returnType:void 0;case "VariableDeclarator":return a.init===s$1?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(vs)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=wn(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==s$1||e[n+2]?.type!=="ObjectExpression")return;let i=$e(e,n+2,t,r),l=Es(a);return !i||!l?void 0:discover(i,[l],r)?.type}case "ArrayExpression":{let o=$e(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=de.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return s.number;let i=a.left===s$1?a.right:a.left,l=wn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return $e(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function As(e,n){return e.filter(t=>t.node===n)}export{de as BINARY_OP,He as BINARY_OPS,Dn as FUNCTION_KINDS,xt as LOGICAL_OPS,Tn as UNARY_OPS,Ss as annotate,bs as annotateReturn,Ns as asExpression,Gt as binaryOpsProducing,_e as calleeAllowlist,Ke as capabilityNodes,at as check,F as childScope,Qt as collectBindings,sn as collectMutations,tn as collectUnused,Vr as componentProps,gn as componentPropsOf,$e as contextualTypeAt,Ct as createEnv,oe as createSink,S as diag,As as diagnosticsAt,Pr as extractModuleType,Lt as fromCapability,Ge as guard,Re as guardsFromCompiled,C as lookup,R as makeDiagnostic,Xe as maxArgs,qe as maxCallNesting,Je as maxDepth,ze as maxFunctionNesting,Ce as maxNestingOf,Ye as maxNodes,ks as memberCompletions,We as memberDepth,Ze as opResultSchema,Rt as resolveNamed,Ot as resolveScheme,Qe as resultType,vn as rootScope,Bs as scopeAt,ws as scopeCompletions,wn as typeAt,Kt as unaryOpsProducing,Ve as visibleNames};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/checker",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "TSLite type system — a structural type checker over the AST (the 'TypeScript of TSLite')",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -39,13 +39,13 @@
39
39
  "access": "public"
40
40
  },
41
41
  "dependencies": {
42
- "@tslite/capability": "0.3.0",
43
- "@tslite/codec": "0.5.0",
44
- "@tslite/core": "0.7.0",
42
+ "@tslite/capability": "0.4.0",
43
+ "@tslite/codec": "0.5.1",
44
+ "@tslite/core": "0.8.0",
45
45
  "@tslite/type-core": "0.3.1"
46
46
  },
47
47
  "devDependencies": {
48
- "@tslite/parser": "1.1.1"
48
+ "@tslite/parser": "1.1.2"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "tsup",