@tslite/checker 0.5.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +92 -2
- package/dist/index.d.ts +92 -2
- package/dist/index.js +1 -1
- package/package.json +4 -4
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 mn=(e={})=>core.rootScope(e),O=(e,n)=>core.childScope(e,n),R=(e,n)=>core.lookup(e,n),Te=e=>core.visibleNames(e),mt=(e={},n={},t={},s={},r=new Set,a=new Set,o={})=>({scope:mn(e),types:n,schemes:t,accessors:s,asserters:r,matchers:a,modules:o}),yt=(e,n)=>e.types[n],ht=(e,n)=>e.schemes[n];var yn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:yn[e],severity:"error",node:n,message:t}),A=(e,n,t,s="error")=>({code:e,kind:yn[e],severity:s,node:n,message:t}),S={notAssignable:(e,n,t,s={})=>{let r=typeCore.typeDiff(n,t,s).filter(o=>o.path.length>0),a=r.length?` ${typeCore.formatTypeDiff(r)}.`:"";return B("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${a}`)},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),unknownModule:(e,n)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(s=>typeCore.format(s)).join(", ")}).`),constraintViolation:(e,n,t,s)=>B("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(s)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>A("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>A("cast-unsound",e,`Conversion of type '${typeCore.format(n)}' to type '${typeCore.format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,s)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(s)}'.`)};function te(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Me(e,n,t={}){return n.flatMap(s=>s(e,t))}function H(e,n){let t=s=>{n(s);for(let r of core.childrenOf(s))t(r);};t(e);}var wt=e=>Array.isArray(e)?e:[e],gn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Pe(e,n="error"){return t=>{let s=[];return H(t,r=>{let a=capability.nodeViolation(r,e);a&&s.push(A("node-not-allowed",r,`'${a}' is not allowed by the capability profile.`,n));}),s}}function Sn(e,n="error"){let t=e.typeTier;return s=>{if(t==="author")return [];let r=[];return H(s,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);u.length&&r.push(A("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),r}}function w(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>w(t.type,n))||!!e.index&&w(e.index.value,n);case "array":return w(e.items,n);case "tuple":return e.elements.some(t=>w(t,n));case "union":case "intersection":return e.of.some(t=>w(t,n));case "fn":return e.params.some(t=>w(t.type,n))||w(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(s=>w(s.type,n))||w(t.returns,n));case "keyof":return w(e.of,n);case "index":return w(e.obj,n)||w(e.key,n);case "mapped":return w(e.over,n)||w(e.body,n);case "conditional":return w(e.check,n)||w(e.extends,n)||w(e.then,n)||w(e.else,n);case "returnType":case "parameters":return w(e.fn,n);case "apply":return e.args.some(t=>w(t,n));default:return false}}function Nn(e,n="error"){return t=>{if(!e.typeStrict)return [];let s=[];return H(t,r=>{let a=r;for(let o of [a.typeAnnotation,a.returnType])if(o&&w(o)){s.push(A("any-not-allowed",r,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),s}}function Fe(e,n="error"){let t=new Set(e);return s=>{let r=[];return H(s,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")r.push(A("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||r.push(A("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),r}}function he(e,n,t={}){let s=new Set(wt(e)),r=t.severity??"error",a=[...s].join("/");return o=>{let i=[],l=(u,p)=>{let d=s.has(u.type),m=d?p+1:p;d&&m>n&&i.push(A("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,r));for(let f of core.childrenOf(u))l(f,m);};return l(o,0),i}}var Oe=(e=3,n="error")=>he(gn,e,{hint:"use a pipe instead of nesting functions",severity:n}),Ie=(e,n="error")=>he("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),je=(e,n="error")=>he("MemberExpression",e,{severity:n});function $e(e,n="error"){return t=>{let s=[],r=(a,o)=>{if(o>e){s.push(A("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of core.childrenOf(a))r(i,o+1);};return r(t,0),s}}function Le(e,n="error"){return t=>{let s=0;return H(t,()=>{s++;}),s>e?[A("too-large",t,`Expression has ${s} nodes (max ${e}).`,n)]:[]}}function Ue(e,n="error"){return t=>{let s=[];return H(t,r=>{if(r.type==="CallExpression"){let a=r.arguments;a&&a.length>e&&s.push(A("too-large",r,`Call has ${a.length} arguments (max ${e}).`,n));}}),s}}function Ve(e,n={},t="error"){return (s,r)=>{let a=r.overlay?.get(s)?.type;return a?typeCore.subtype(a,e,n)?[]:[A("wrong-result-type",s,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function ge(e){let n=[Pe(e),Sn(e),Nn(e)];return e.hostAllow!=="*"&&n.push(Fe([...e.hostAllow])),n}function Et(e){return ge(capability.compileProfile(e))}var q=e=>({bindings:new Map,parent:e}),Bn=e=>e.charCodeAt(0)===95;function Se(e,n,t,s,r,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:s,kind:r,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function re(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)re(s,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let s=t.path[0];typeof s=="string"&&Ne(n,s);return}for(let s of Object.keys(t))re(t[s],n);}function kn(e,n){let t=e;re(t.typeAnnotation,n),re(t.returnType,n);}function Ne(e,n){for(let t=e;t;t=t.parent){let s=t.bindings.get(n);if(s){s.used=true;return}}}function G(e,n,t,s,r,a){if(e)switch(e.type){case "Identifier":{let o=e.name;kn(e,n),Se(n,t,o,e,s,r||a&&Bn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")G(u.argument,n,t,s,r,false);else {let m=u;m.computed&&b(m.key,n,t),G(m.value,n,t,s,r||d,!m.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;G(i.type==="RestElement"?i.argument:i,n,t,s,r,true);}return}case "AssignmentPattern":G(e.left,n,t,s,r,a);return;case "RestElement":G(e.argument,n,t,s,r,true);return;default:return}}function se(e,n,t){if(e)switch(e.type){case "AssignmentPattern":b(e.right,n,t),se(e.left,n,t);return;case "ObjectPattern":for(let s of e.properties)se(s.type==="RestElement"?s.argument:s.value,n,t);return;case "ArrayPattern":for(let s of e.elements)s&&se(s,n,t);return;case "RestElement":se(e.argument,n,t);return;default:return}}function bn(e,n,t,s){for(let r of e.declarations)G(r.id,n,t,"local",s,false),b(r.init,n,t);}function xe(e,n,t){let s=e,r=q(n),a=s.params??[];for(let o of a)G(o,r,t,"parameter",false,true);for(let o of a)se(o,r,t);b(s.body,r,t);}function b(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(kn(e,n),e.type){case "Identifier":Ne(n,e.name);return;case "MemberExpression":{let s=e;b(s.object,n,t),s.computed&&b(s.property,n,t);return}case "Property":{let s=e;s.computed&&b(s.key,n,t),b(s.value,n,t);return}case "Program":case "BlockStatement":{let s=q(n);for(let r of e.body??[])b(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":xe(e,n,t);return;case "FunctionDeclaration":{let s=e.id;s&&Se(n,t,s.name,s,"local",false),xe(e,n,t);return}case "CatchClause":{let s=e,r=q(n);G(s.param,r,t,"local",true,false),b(s.body,r,t);return}case "SwitchStatement":{let s=e;b(s.discriminant,n,t);let r=q(n);for(let a of s.cases){b(a.test,r,t);for(let o of a.consequent??[])b(o,r,t);}return}case "ForStatement":{let s=e,r=q(n);b(s.init,r,t),b(s.test,r,t),b(s.update,r,t),b(s.body,r,t);return}case "ForOfStatement":case "ForInStatement":{let s=e;b(s.right,n,t);let r=q(n),a=s.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)G(o.id,r,t,"local",false,true);else b(a,r,t);b(s.body,r,t);return}case "VariableDeclaration":bn(e,n,t,false);return;case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&Se(n,t,r.name,r,"import",Bn(r.name));}return}case "ExportNamedDeclaration":{let s=e;if(s.declaration){let r=s.declaration;if(r.type==="VariableDeclaration")bn(r,n,t,true);else if(r.type==="FunctionDeclaration"){let a=r.id;a&&Se(n,t,a.name,a,"local",true),xe(r,n,t);}else b(r,n,t);}else for(let r of s.specifiers)Ne(n,r.local.name);return}case "TSAsExpression":b(e.expression,n,t);return;case "TSTypeAliasDeclaration":re(e.typeAnnotation,n);return;case "JsonExpression":Ge(e.body,n,t);return;case "JSXOpeningElement":{let s=e;wn(s.name,n);for(let r of s.attributes??[])b(r,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":b(e.value,n,t);return;default:{let s=core.VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)b(i,n,t);else b(o,n,t);}return}}}function wn(e,n,t){e&&(e.type==="JSXIdentifier"?Ne(n,e.name):e.type==="JSXMemberExpression"&&wn(e.object,n));}function Ge(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ge(r,n,t);return}let s=e;if("#expr"in s){try{b(codec.fromJson(s),n,t);}catch{}return}for(let r of Object.keys(s))Ge(s[r],n,t);}function Ke(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};b(e,q(void 0),t);let s=[];for(let r of t.all)r.used||r.exempt||(r.kind==="parameter"?n.parameters:n.locals)&&s.push(S.unusedName(r.node,r.name));return s}var Tt=new Set(["const","import"]),ae=e=>({binds:new Map,parent:e});function Rt(e,n){for(let t=e;t;t=t.parent){let s=t.binds.get(n);if(s)return s}}function _(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?_(n.argument):_(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?_(n):[]);case "AssignmentPattern":return _(e.left);case "RestElement":return _(e.argument);default:return []}}var be=(e,n,t)=>{for(let s of _(n))e.binds.set(s.name,t);};function We(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of _(e))We(a,n,t);return}let s=e.name,r=Rt(n,s);r&&Tt.has(r)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,s,r==="import"?"import":"const")));}function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let s=e;We(s.left,n,t),M(s.right,n,t);return}case "UpdateExpression":{We(e.argument,n,t);return}case "Program":case "BlockStatement":{let s=ae(n);for(let r of e.body??[])M(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=ae(n);for(let a of s.params??[])be(r,a,"param");M(s.body,r,t);return}case "CatchClause":{let s=e,r=ae(n);be(r,s.param,"param"),M(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=ae(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)be(r,o.id,a.kind);else a&&M(a,r,t);M(s.right,n,t),M(s.test,r,t),M(s.update,r,t),M(s.body,r,t);return}case "VariableDeclaration":{let s=e;for(let r of s.declarations)M(r.init,n,t),be(n,r.id,s.kind);return}case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&n.binds.set(r.name,"import");}return}case "ExportNamedDeclaration":{let s=e;s.declaration&&M(s.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":M(e.expression,n,t);return;default:{let s=core.VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)M(i,n,t);else M(o,n,t);}return}}}function ze(e){let n={out:[],invalid:new WeakSet};return M(e,ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var oe=e=>({decls:new Map,parent:e});function Pt(e,n){for(let t=e;t;t=t.parent){let s=t.decls.get(n);if(s)return s}}function Z(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?Z(n.argument):Z(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?Z(n):[]);case "AssignmentPattern":return Z(e.left);case "RestElement":return Z(e.argument);default:return []}}var Be=(e,n)=>{for(let t of Z(n))e.decls.set(t.name,t);};function C(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let s=Pt(n,e.name);s&&s!==e&&t.set(e,s);return}case "MemberExpression":{let s=e;C(s.object,n,t),s.computed&&C(s.property,n,t);return}case "Property":{let s=e;s.computed&&C(s.key,n,t),C(s.value,n,t);return}case "Program":case "BlockStatement":{let s=oe(n);for(let r of e.body??[])C(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=e.id;r&&n.decls.set(r.name,r);let a=oe(n);for(let o of s.params??[])Be(a,o);C(s.body,a,t);return}case "CatchClause":{let s=e,r=oe(n);Be(r,s.param),C(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=oe(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Be(r,o.id);else a&&C(a,r,t);C(s.right,n,t),C(s.test,r,t),C(s.update,r,t),C(s.body,r,t);return}case "VariableDeclaration":{for(let s of e.declarations)Be(n,s.id),C(s.init,n,t);return}case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&n.decls.set(r.name,r);}return}case "TSTypeAliasDeclaration":{let s=e.id;s&&n.decls.set(s.name,s);return}case "TSAsExpression":C(e.expression,n,t);return;default:{let s=core.VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)C(i,n,t);else C(o,n,t);}return}}}function Ft(e){let n=new WeakMap;return C(e,oe(void 0),n),n}var Je=e=>e.typeAnnotation,qe=e=>e.returnType,U=e=>e.type==="Identifier"?e.name:null,vn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?U(n.id):null}return U(e)},le=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function En(e){let n=s=>s&&s.type==="Literal"&&typeof s.value=="string"?s.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let s=[];for(let r of e[0].elements){let a=n(r);if(a===null)return null;s.push(a);}return s}let t=[];for(let s of e){let r=n(s);if(r===null)return null;t.push(r);}return t.length?t:null}function _e(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=_e(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Xe(e){let n=e;if(n.regex||n.bigint)return typeCore.s.unknown;let t=n.value;return t===null?typeCore.s.null:t===void 0?typeCore.s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:typeCore.s.unknown}var X=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):Xe(e)},Qe=e=>e.type==="ArrowFunctionExpression",An=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,we=e=>An(e)?e.args[0]:e,ue=e=>An(e)?e:typeCore.s.promise(e);function ie(e){return e.t==="tuple"?true:e.t==="array"?ie(e.items):e.t==="union"?e.of.some(ie):false}function ke(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ke(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ke(e.bound):false}var V=(e,n)=>{let t=e;for(let s=0;s<50&&t.t==="apply";s++){let r=typeCore.expand1(t,n);if(r===t||r.t==="apply"&&r.name===t.name)break;t=r;}return t};function Dn(e){let n=qe(e);return n?{t:"fn",params:e.params.map((s,r)=>({name:U(s)??`arg${r}`,type:Je(s)??typeCore.s.unknown})),returns:e.async?ue(n):n}:null}var K={then:{},else:{}},In=new Set(["string","number","boolean","undefined","function","object"]),Cn={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function jn(e,n){switch(n){case "string":return e.t==="string"||e.t==="literal"&&typeof e.value=="string";case "number":return e.t==="number"||e.t==="literal"&&typeof e.value=="number";case "boolean":return e.t==="boolean"||e.t==="literal"&&typeof e.value=="boolean";case "undefined":return e.t==="undefined";case "function":return e.t==="fn"||e.t==="overload";case "object":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="null";default:return false}}var $t=typeCore.s.literal(true),Lt=typeCore.s.literal(false),x=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[$t,Lt]:[e];function Tn(e,n){let t=e,s=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof s.value=="string"?{name:t.argument.name,tag:s.value}:null}function Ut(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let s=x(e).filter(r=>typeCore.subtype(r,n,t));return s.length?typeCore.normalizeUnion(s):n}function Vt(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let s=x(e).filter(r=>!typeCore.subtype(r,n,t));return s.length?typeCore.normalizeUnion(s):null}function xt(e,n){if(!In.has(n))return null;if(e.t==="unknown"||e.t==="any")return Cn[n]??e;let t=x(e).filter(s=>jn(s,n));return t.length?typeCore.normalizeUnion(t):Cn[n]??e}function Gt(e,n){if(!In.has(n)||e.t==="unknown"||e.t==="any")return null;let t=x(e).filter(s=>!jn(s,n));return t.length?typeCore.normalizeUnion(t):null}function Rn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function Mn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Pn(e,n,t,s,r){let a=x(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return s?!!u&&typeCore.subtype(t,u,r):!(u&&typeCore.subtype(u,t,r))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function Fn(e,n,t){let s=x(e),r=o=>o.t==="object"&&(n in o.props||!!o.index),a=s.filter(o=>t?r(o):!r(o));return a.length&&a.length<s.length?typeCore.normalizeUnion(a):null}function Kt(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function Wt(e,n,t){let s=x(e),r=s.filter(a=>!typeCore.equals(a,n,t));return r.length&&r.length<s.length?typeCore.normalizeUnion(r):null}var zt=e=>e.t==="null"||e.t==="undefined",$n=e=>zt(e)||e.t==="literal"&&!e.value,Jt=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=x(e),t=n.filter(s=>!$n(s));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},qt=e=>{let n=x(e),t=n.filter($n);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},On=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,j=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),_t=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function pe(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let f=s.left,N=s.right;if(f.type==="Literal"&&typeof f.value=="string"&&N.type==="Identifier"){let g=N.name,E=R(n,g);if(!E)return K;let v=String(f.value);return j(g,Fn(E,v,true),Fn(E,v,false))}return K}if(!_t(s.operator))return K;let r=s.operator==="!=="||s.operator==="!=",a=s.left,o=s.right,i=Tn(a,o)??Tn(o,a);if(i){let f=R(n,i.name);if(!f)return K;let N=xt(f,i.tag),g=Gt(f,i.tag);return r?j(i.name,g,N):j(i.name,N,g)}let l=On(a),u=On(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let f=p.name,N=R(n,f);if(!N)return K;let E=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],v=x(N),pn=v.filter(Ce=>E.includes(Ce.t)),De=v.filter(Ce=>!E.includes(Ce.t)),dn=pn.length?typeCore.normalizeUnion(pn):null,fn=De.length&&De.length<v.length?typeCore.normalizeUnion(De):null;return r?j(f,fn,dn):j(f,dn,fn)}let d=Rn(a,o)??Rn(o,a);if(d){let f=R(n,d.name);if(!f)return K;let N=Kt(f,d.lit,t),g=Wt(f,d.lit,t);return r?j(d.name,g,N):j(d.name,N,g)}let m=Mn(a,o)??Mn(o,a);if(m){let f=R(n,m.name);if(!f)return K;let N=Pn(f,m.prop,m.lit,true,t),g=Pn(f,m.prop,m.lit,false,t);return r?j(m.name,g,N):j(m.name,N,g)}return K}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=pe(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=Qt(e,n,t);if(s)return s}if(e.type==="Identifier"){let s=e.name,r=R(n,s);if(r)return j(s,Jt(r),qt(r))}return K}function Xt(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 Qt(e,n,t){let s=e.callee;if(s.type!=="Identifier")return null;let r=R(n,s.name);if(!r)return null;let a=Xt(r,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?j(i,Ut(l,a.type,t),Vt(l,a.type,t)):null}var W=(e,n)=>Object.keys(n).length?O(e,n):e;function I(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>I(t));case "IfStatement":{let n=e;return !!n.alternate&&I(n.consequent)&&I(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&I(n.finalizer))return true;let t=!n.handler||I(n.handler.body);return I(n.block)&&t}default:return false}}var ps=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ds(e){let n=[];return e.maxDepth!==void 0&&n.push($e(e.maxDepth)),e.maxNodes!==void 0&&n.push(Le(e.maxNodes)),e.maxArgs!==void 0&&n.push(Ue(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Oe(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(Ie(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(je(e.memberDepth)),n}function fs(e,n){let t=e.typeRefs;return t?.length?t.filter(s=>!(s.name in n)).map(s=>A("unknown-name",{type:"Identifier",name:s.name,loc:s.loc},`Cannot find name '${s.name}'.`)):[]}function _n(e,n,t={}){let s={...ps(n.types),...n.schemes,...ys(e)},r=ze(e),a={overlay:new WeakMap,sink:te(),env:n,schemes:s,importNames:new Set,resolvedSchemes:new Set,invalidTargets:r.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?capability.compileProfile(t.profile):void 0;o&&typeCore.configureTypeLimits(o.typeLimits);try{let i,l=hs(e,a);try{i=y(e,l,a);}catch(d){if(d instanceof typeCore.TypeEvalLimitError)a.sink.report(A("too-deep",e,d.message));else if(d instanceof typeCore.UnionTooComplexError)a.sink.report(A("too-complex-union",e,d.message));else throw d;i=typeCore.s.unknown;}let u=[];o&&u.push(...ge(o)),t.limits&&u.push(...ds(t.limits)),t.resultType&&u.push(Ve(t.resultType,s));let p=[...a.sink.all,...r.diagnostics,...fs(e,s),...t.unused?Ke(e,t.unused):[],...u.length?Me(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function ms(e,n,t={}){let s=_n(e,n,t),r={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let m=U(d.id),f=s.overlay.get(d);m&&f&&(r[m]=f.type,p.push(m));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,m=s.overlay.get(u);d&&m&&(r[d]=m.type,p.push(d));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=s.overlay.get(u.declaration);o=p?p.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)r[p]&&(l[u]={type:r[p]});o!==void 0&&(l.default={type:o});}else for(let u in r)l[u]={type:r[u]};return {type:{t:"object",props:l},diagnostics:s.diagnostics}}var ys=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let s=t;s.id?.name&&s.typeAnnotation&&(n[s.id.name]={params:s.typeParameters??[],body:s.typeAnnotation});}}),n};function hs(e,n){let t=n.env.modules,s={};core.walk(e,{ImportDeclaration(r){let a=r,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)s[l.local.name]=typeCore.s.unknown;return}for(let l of a.specifiers){let u=l.local.name;if(u in s){n.sink.report(S.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){s[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",d=typeCore.discover(i,[p],n.schemes);d?s[u]=d.type:(n.sink.report(S.noSuchMember(l,i,p)),s[u]=typeCore.s.unknown);}}});for(let r in s)n.importNames.add(r);return Object.keys(s).length?O(n.env.scope,s):n.env.scope}var h=(e,n,t,s)=>(e.overlay.set(n,{type:t,scope:s}),t);function y(e,n,t,s){switch(e.type){case Xn:return e.schema;case "JSXElement":case "JSXFragment":return h(t,e,y(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return h(t,e,Xe(e),n);case "Identifier":{let r=e.name,a=R(n,r);return a===void 0?r==="undefined"?h(t,e,typeCore.s.undefined,n):(t.sink.report(S.unknownName(e,r)),h(t,e,typeCore.s.unknown,n)):h(t,e,a,n)}case "MemberExpression":return h(t,e,Ns(e,n,t),n);case "CallExpression":return h(t,e,ws(e,n,t,s),n);case "ArrowFunctionExpression":return an(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),h(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),h(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),h(t,e,typeCore.s.unknown,n);case "BlockStatement":return h(t,e,st(e,n,t),n);case "ReturnStatement":{let r=e.argument;return h(t,e,r?y(r,n,t):typeCore.s.unknown,n)}case "IfStatement":return L(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return L(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "AssignmentExpression":{let r=e,a=r.left,o=y(a,n,t);if(a.type==="MemberExpression"){let p=t.overlay.get(a.object)?.type,d=p&&typeCore.apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(S.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(r.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=y(r.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(d)),h(t,e,d,n)}if(u&&i!==null){let d=y(r.right,n,t);return typeCore.subtype(d,u,t.schemes)||t.sink.report(S.notAssignable(r.right,d,u,t.schemes)),t.assignFlow.set(e,rt(u,d,t.schemes)),h(t,e,d,n)}let p=J(r.right,o,n,t);return h(t,e,p,n)}return h(t,e,y(r.right,n,t),n)}case "UpdateExpression":{let r=e,a=y(r.argument,n,t);return de(a,t.schemes)||t.sink.report(S.arithmeticOperand(r.argument,"operand")),h(t,e,typeCore.s.number,n)}case "ExpressionStatement":return h(t,e,y(e.expression,n,t),n);case "VariableDeclaration":return Ee(e,n,t),h(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":{let r=e.id?.name,a=r?t.schemes[r]:void 0;return h(t,e,a?Cs(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return h(t,e,Ws(e,n,t),n);case "LogicalExpression":{let r=e,a=y(r.left,n,t),o=y(r.right,n,t);return h(t,e,zs(r.operator,a,o),n)}case "UnaryExpression":return h(t,e,Xs(e,n,t),n);case "ConditionalExpression":{let r=e;y(r.test,n,t);let a=pe(r.test,n,t.schemes),o=y(r.consequent,W(n,a.then),t),i=y(r.alternate,W(n,a.else),t);return h(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return h(t,e,Qs(e,n,t),n);case "ArrayExpression":return h(t,e,lt(e,n,t),n);case "TemplateLiteral":{for(let r of e.expressions)y(r,n,t);return h(t,e,typeCore.s.string,n)}case "AwaitExpression":{let r=e.argument,a=r?y(r,n,t):typeCore.s.unknown;return h(t,e,we(a),n)}case "Program":{let r=ve(e.body,n,t,new Set(t.importNames)).scope;return h(t,e,typeCore.s.unknown,r)}case "JsonExpression":return h(t,e,en(e.body,n,t,e),n);case "ChainExpression":return h(t,e,typeCore.normalizeUnion([y(e.expression,n,t),typeCore.s.undefined]),n);case "TSAsExpression":{let r=e,a=y(r.expression,n,t),o=ye(r.typeAnnotation,n,t,e);return !typeCore.subtype(a,o,t.schemes)&&!typeCore.subtype(o,a,t.schemes)&&t.sink.report(S.castUnsound(e,a,o)),h(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),h(t,e,typeCore.s.unknown,n)}}var gs=new Set(["constructor","prototype","__proto__"]);function Ss(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 Ns(e,n,t){let s=y(e.object,n,t),r=Ss(e);if(r!==null&&gs.has(r))return t.sink.report(S.forbiddenMember(e,r)),typeCore.s.unknown;if(e.computed){let i=y(e.property,n,t),l=typeCore.resolveTypeOp(typeCore.s.index(s,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&Ln(e,s,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(s,[a],t.schemes);return o?o.type:(Ln(e,s,a,t),typeCore.s.unknown)}function Ln(e,n,t,s){let r=typeCore.isScheme(n,s.schemes)?typeCore.expand1(n,s.schemes):n;r.t==="object"||r.t==="array"||r.t==="tuple"||r.t==="union"?s.sink.report(S.noSuchMember(e,n,t)):r.t!=="any"&&r.t!=="unknown"&&s.sink.report(S.notObject(e,n));}function bs(e,n,t){if(!e||e.type!=="Identifier")return;let s=e.name;if(R(n,s)===void 0)return;let r=t.schemes[s];return r&&r.params.length===0?r.body:void 0}function Bs(e,n,t,s){let r=V(y(n[0],t,s),s.schemes),o=(r.t==="fn"?r:r.t==="overload"?r.signatures[0]:void 0)?.params[0]?.type,i=n.length>1?y(n[1],t,s):typeCore.s.undefined;if(o){let l=typeCore.typeDiff(i,o,s.schemes);l.length&&s.sink.report(S.propsMismatch(n[1]??e,o,typeCore.formatTypeDiff(l)));}return h(s,e,typeCore.s.boolean,t)}var Xn="TSLiteSyntheticArg",ks=e=>({type:Xn,schema:e});function Qn(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let s=[],r=null;for(let a of e){if(a.type!=="SpreadElement"){s.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)s.push(l);continue}let i=V(y(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)s.push(ks(l));else r={elem:i.t==="array"?i.items:typeCore.s.unknown,node:a};}return {nodes:s,spread:r}}function ws(e,n,t,s){let r=e.arguments,a=_e(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let m=En(r);if(m){let f=typeCore.discover(d,m,t.schemes);return f?f.type:(t.sink.report(S.noSuchMember(e,d,m.join("."))),typeCore.s.unknown)}return r.forEach(f=>y(f,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let d=bs(r[0],n,t);for(let m=1;m<r.length;m++)y(r[m],n,t);return d??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return Bs(e,r,n,t);let o=y(e.callee,n,t);if(o.t==="any")return r.forEach(d=>y(d,n,t)),typeCore.s.any;if(o.t==="overload")return Es(e,o,n,t,s);if(o.t!=="fn")return r.forEach(d=>y(d,n,t)),t.sink.report(S.notCallable(e,o)),typeCore.s.unknown;let i=Qn(r,n,t),l=i.nodes.map(d=>Yn(d,n,t)),u=et(e),p=!u||nt(o,u.length);return p||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),Hn(e,o,i.nodes,l,n,t,i.spread,s,p?u:void 0)}function Yn(e,n,t){if(Qe(e))return typeCore.s.any;if(e.type!=="CallExpression")return y(e,n,t);let s=te(),r=y(e,n,{...t,sink:s});return s.hasErrors()?typeCore.s.any:(s.all.forEach(a=>t.sink.report(a)),r)}function Hn(e,n,t,s,r,a,o=null,i,l){let u=f=>{if(!i)return f;let N=typeCore.substitute(n.returns,f);if(N.t==="fn"&&i.t==="fn"){let g=f,E=Math.min(N.params.length,i.params.length);for(let v=0;v<E;v++)g=typeCore.unify(N.params[v].type,i.params[v].type,g)??g;return typeCore.unify(N.returns,i.returns,g)??g}return typeCore.unify(N,i,f)??f},p=l?Rs(e,n,l,a):void 0,d=p??u(typeCore.instantiateLoose(n,s).bindings);t.forEach((f,N)=>{if(Qe(f)){let g=typeCore.widenType(typeCore.substitute(n.params[N]?.type??typeCore.s.any,d));s[N]=an(f,r,a,g);}else if(f.type==="CallExpression"&&s[N].t==="any")s[N]=y(f,r,a,typeCore.substitute(n.params[N]?.type??typeCore.s.unknown,d));else if(f.type==="Literal"){let g=n.params[N]?.type??typeCore.s.unknown,E=g.t==="var"?g.bound?typeCore.substitute(g.bound,d):g:typeCore.substitute(g,d);ke(E)&&(s[N]=h(a,f,X(f),r));}else if(f.type==="ArrayExpression"){let g=typeCore.substitute(n.params[N]?.type??typeCore.s.unknown,d);ie(g)&&(s[N]=ln(f,g,r,a));}});let m=p??u(typeCore.instantiateLoose(n,s).bindings);return p||vs(e,n,m,a),Os(e,n,s,m,a,t,o),t.forEach((f,N)=>{let g=n.params[N];f.type==="ObjectExpression"&&g&&!g.variadic&&on(f,typeCore.substitute(g.type,m),a);}),typeCore.widenInferred(typeCore.groundVars(typeCore.substitute(n.returns,m),a.schemes))}var Un=new WeakMap;function Zn(e){let n=Un.get(e);if(n)return n;let t=new Map,s=new WeakSet;for(let r of e.params)P(r.type,t,s);return P(e.returns,t,s),Un.set(e,t),t}function P(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":P(e.items,n,t);return;case "union":for(let s of e.of)P(s,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let s in e.props)P(e.props[s].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let s of e.params)P(s.type,n,t);P(e.returns,n,t);return;case "overload":for(let s of e.signatures){for(let r of s.params)P(r.type,n,t);P(s.returns,n,t);}return;case "apply":for(let s of e.args)P(s,n,t);return;case "keyof":P(e.of,n,t);return;case "index":P(e.obj,n,t),P(e.key,n,t);return;case "mapped":P(e.over,n,t),P(e.body,n,t);return;default:return}}function vs(e,n,t,s){let r=Zn(n);if(r.size!==0)for(let[a,o]of r){let i=t[a];if(!i)continue;let l=typeCore.substitute(o,t);typeCore.subtype(i,l,s.schemes)||s.sink.report(S.constraintViolation(e,a,i,l));}}function Es(e,n,t,s,r){let a=Qn(e.arguments,t,s),o=a.nodes,i=o.map(p=>Yn(p,t,s)),l=et(e),u=l?n.signatures.filter(p=>nt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,m)=>Math.max(d,m.typeParams?.length??0),0);return s.sink.report(S.wrongTypeArgumentCount(e,p,l.length)),Vn(e,n.signatures,a,o,i,t,s,r,void 0)}return Vn(e,u,a,o,i,t,s,r,l)}function Vn(e,n,t,s,r,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?Ms(m,s.length):Ps(m,s.length),d=u.signatures.find(m=>p(m)&&Fs(m,r,o));if(!d){let m=u.signatures.filter(p);m.length===1?d=m[0]:u.signatures.length===1&&(d=u.signatures[0]);}return d?Hn(e,d,s,r,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,r)),typeCore.s.unknown)}function As(e,n,t,s){let r=R(n,e[0]);if(r===void 0)return t.sink.report(S.unknownName(s,e[0])),typeCore.s.unknown;let a=e.slice(1),o=a.length?typeCore.discover(r,a,t.schemes)?.type:r;return o?o.t==="literal"?typeCore.s.literal(o.value):o:(t.sink.report(S.noSuchMember(s,r,a.join("."))),typeCore.s.unknown)}function ye(e,n,t,s){let r=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let m=r(d);return m!==d&&(u=true),m});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return As(o.path,n,t,s);if(o.t==="apply"&&typeof o.name=="string"&&(Ds(o.name,n,t,s),!(o.name in t.schemes)))return typeCore.s.any;let i=false,l={};for(let u of Object.keys(o)){let p=r(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return r(e)}function Ds(e,n,t,s){if(t.resolvedSchemes.has(e))return;let r=t.schemes[e];if(!r)return;t.resolvedSchemes.add(e);let a=ye(r.body,n,t,s);a!==r.body&&(t.schemes[e]={...r,body:a});}function Cs(e,n,t,s,r){let a={...t,sink:te(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=ye(e,n,a,s);return a.sink.hasErrors()?e:r?o:typeCore.groundVars(o,t.schemes)}var rn=(e,n,t)=>{let s=Je(e);return s===void 0?s:ye(s,n,t,e)},Ts=(e,n,t)=>{let s=qe(e);return s===void 0?s:ye(s,n,t,e)},et=e=>{let n=e.typeArguments;return n?.length?n:void 0},nt=(e,n)=>(e.typeParams?.length??0)===n;function Rs(e,n,t,s){let r=n.typeParams??[],a={};r.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Zn(n)){let u=o[i];if(!u)continue;let p=typeCore.groundVars(typeCore.substitute(l,o),s.schemes);typeCore.subtype(u,p,s.schemes)||s.sink.report(S.constraintViolation(e,i,u,p));}return o}function Ms(e,n){let t=0,s=false;for(let r of e.params)r.variadic?s=true:r.optional||t++;return n>=t&&(s||n<e.params.length)}function Ps(e,n){let t=0;for(let s of e.params){if(s.variadic)return n>=t;s.optional||t++;}return n>=t&&n<=e.params.length}function Fs(e,n,t){let{bindings:s}=typeCore.instantiateLoose(e,n);for(let r=0;r<e.params.length;r++){let a=e.params[r];if(a.variadic)return true;if(r>=n.length){if(!a.optional)return false;continue}if(!typeCore.subtype(n[r],typeCore.substitute(a.type,s),t.schemes))return false}return true}function Os(e,n,t,s,r,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic)break;let d=typeCore.substitute(p.type,s);if(u>=t.length){!p.optional&&!o&&r.sink.report(S.missingArgument(e,p.name,d));continue}typeCore.subtype(t[u],d,r.schemes)||r.sink.report(S.notAssignable(i(u),t[u],d,r.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){r.sink.report(S.spreadArgument(o.node));return}if(l){let d=typeCore.substitute(l.type,s),m=d.t==="array"?d.items:typeCore.s.unknown;typeCore.subtype(o.elem,m,r.schemes)||r.sink.report(S.notAssignable(o.node,o.elem,m,r.schemes));}return}!l&&t.length>n.params.length&&r.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function J(e,n,t,s){let r=V(n,s.schemes);switch(e.type){case "Literal":{let o=X(e);return typeCore.subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,n,t)}case "ArrayExpression":{if(ie(r)){let o=ln(e,r,t,s);return typeCore.subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,o,t)}if(r.t==="array"){for(let o of e.elements){if(!o)continue;let i=o;i.type==="SpreadElement"?J(i.argument,n,t,s):J(i,r.items,t,s);}return h(s,e,n,t)}break}case "ObjectExpression":{if(r.t==="object"){let o={};for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){y(u.argument,t,s);continue}let p=u,d=le(p),m=d!==null?typeCore.ownProp(r.props,d)?.type:void 0,f=m?J(p.value,m,t,s):y(p.value,t,s);d!==null&&(o[d]={type:f}),h(s,u,f,t);}let i={t:"object",props:o};return typeCore.subtype(i,n,s.schemes)||s.sink.report(S.notAssignable(e,i,n,s.schemes)),h(s,e,n,t)}break}case "ArrowFunctionExpression":{if(r.t==="fn"){let o=an(e,t,s,r);return typeCore.subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,n,t)}break}case "ConditionalExpression":{let o=e;return y(o.test,t,s),J(o.consequent,n,t,s),J(o.alternate,n,t,s),h(s,e,n,t)}}let a=y(e,t,s);return typeCore.subtype(a,n,s.schemes)||s.sink.report(S.notAssignable(e,a,n,s.schemes)),h(s,e,a,t)}function an(e,n,t,s){let r=s&&s.t==="fn"?s:void 0,a={},o=new Map,i=e.params.map((f,N)=>{let g=f,E=U(g),v=rn(g,n,t)??r?.params[N]?.type??typeCore.s.unknown;return E?(a[E]=v,(v.t==="union"||v.t==="boolean")&&o.set(E,v)):g.type!=="Identifier"&&Q(g,v,a,n,t),t.overlay.set(g,{type:v,scope:n}),{name:E??`arg${N}`,type:v}}),l=O(n,a),u=e.body,p=Ts(e,n,t);if(u.type!=="BlockStatement"&&p){let f=e.async?we(p):p;J(u,f,l,t);let N=e.async?ue(p):p;return h(t,e,{t:"fn",params:i,returns:N},n)}let d=u.type==="BlockStatement"?h(t,u,st(u,l,t,new Set(Object.keys(a)),o),l):y(u,l,t),m=e.async?ue(d):d;if(p){let f=e.async?we(p):p,N=e.async?d:m;typeCore.subtype(N,f,t.schemes)||t.sink.report(S.notAssignable(u,m,p,t.schemes));let g=e.async?ue(p):p;return h(t,e,{t:"fn",params:i,returns:g},n)}return h(t,e,{t:"fn",params:i,returns:typeCore.widenType(m)},n)}function ne(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ne(n.argument):ne(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ne(n.argument):ne(n):[]);case "AssignmentPattern":return ne(e.left);default:return []}}function tt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ne(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?tt(e.declaration):[]}function st(e,n,t,s=new Set,r){let{returns:a}=ve(e.body,n,t,s,r),o=!I(e);return a.length===0?o?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(o?[...a,typeCore.s.undefined]:a)}var Is=[typeCore.s.literal(true),typeCore.s.literal(false)];function js(e){return e.t==="union"?e.of:e.t==="boolean"?Is:[e]}function rt(e,n,t){let s=js(e);if(s.length<=1)return e;let r=s.filter(o=>typeCore.subtype(n,o,t));if(r.length===0)return e;let a=typeCore.normalizeUnion(r);return typeCore.subtype(n,a,t)?a:e}function at(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let s=t,r=s.left;if(s.operator!=="="||r.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:r.name,type:a}:null}function Y(e,n,t){switch(e.type){case "BlockStatement":{let s=n;for(let r of e.body){let a=Y(r,s,t);if(s=a.types,a.exits)return {types:s,exits:true}}return {types:s,exits:false}}case "ExpressionStatement":{let s=at(e,t);if(!s)return {types:n,exits:false};let r=new Map(n);return r.set(s.name,s.type),{types:r,exits:false}}case "IfStatement":{let s=ot(e,n,t);if(s.size===0)return {types:n,exits:I(e)};let r=new Map(n);for(let[a,o]of s)r.set(a,o);return {types:r,exits:I(e)}}case "TryStatement":{let s=e,r=[],a=Y(s.block,n,t);if(a.exits||r.push(a.types),s.handler){let i=Y(s.handler.body,n,t);i.exits||r.push(i.types);}let o=$s(n,r);return s.finalizer&&(o=Y(s.finalizer,o,t).types),{types:o,exits:I(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function ot(e,n,t){let s=Y(e.consequent,n,t),r=e.alternate?Y(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];s.exits||l.push(s.types.get(i)??n.get(i)),r.exits||l.push(r.types.get(i)??n.get(i)),l.length&&o.set(i,typeCore.normalizeUnion(l));}return o}function it(e,n){let t=new Map,s=r=>{let a=R(e,r);a!==void 0&&t.set(r,a);};for(let r of n.evolving)s(r);for(let r of n.declaredMut.keys())s(r);return t}function $s(e,n){let t=new Map(e);if(n.length===0)return t;for(let s of e.keys()){let r=n.map(a=>a.get(s)??e.get(s));t.set(s,typeCore.normalizeUnion(r));}return t}function Ls(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let s=it(n,t),r=Y(e,s,t);if(r.exits)return n;let a={};for(let[o,i]of r.types)s.has(o)&&i!==s.get(o)&&(a[o]=i);return W(n,a)}function ve(e,n,t,s=new Set,r){if(!(r&&r.size)&&!Us(e))return xn(e,n,t,s);let a=new Set(t.evolving),o=new Map(t.declaredMut);if(r)for(let[i,l]of r)t.declaredMut.set(i,l);try{return xn(e,n,t,s)}finally{t.evolving.clear();for(let i of a)t.evolving.add(i);t.declaredMut.clear();for(let[i,l]of o)t.declaredMut.set(i,l);}}function Us(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let s=t.declaration;if(s?.type==="VariableDeclaration"&&s.kind!=="const")return true}}return false}function xn(e,n,t,s){let r=n,a=[];for(let o of e){let i=o;for(let l of tt(i))s.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):s.add(l.name);if(i.type==="VariableDeclaration")r=Ee(i,r,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")r=Ee(l.declaration,r,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=y(l.declaration,r,t),p=U(l.declaration.id);p&&(r=O(r,{[p]:u}));}else for(let u of l.specifiers)R(r,u.local.name)===void 0&&t.sink.report(S.unknownName(u.local,u.local.name));}else if(i.type==="ExportDefaultDeclaration")y(i.declaration,r,t);else if(i.type==="FunctionDeclaration"){let l=y(i,r,t),u=U(i.id);u&&(r=O(r,{[u]:l}));}else if(i.type==="IfStatement"){let l=i,u=t.evolving.size||t.declaredMut.size?it(r,t):null;if(a.push(...L(i,r,t)),u&&u.size){let p=ot(l,u,t);p.size&&(r=W(r,Object.fromEntries(p)));}!l.alternate&&I(l.consequent)&&(r=W(r,pe(l.test,r,t.schemes).else));}else {a.push(...L(i,r,t));let l=at(i,t);l?r=W(r,{[l.name]:l.type}):(i.type==="BlockStatement"||i.type==="TryStatement")&&(r=Ls(i,r,t));}}return {scope:r,returns:a}}function L(e,n,t){switch(e.type){case "ReturnStatement":{let s=e.argument,r=s?y(s,n,t):typeCore.s.unknown;return h(t,e,r,n),[r]}case "IfStatement":{let s=e;y(s.test,n,t);let r=pe(s.test,n,t.schemes),a=L(s.consequent,W(n,r.then),t);return s.alternate&&a.push(...L(s.alternate,W(n,r.else),t)),h(t,e,typeCore.s.unknown,n),a}case "BlockStatement":{let{returns:s}=ve(e.body,n,t);return h(t,e,s.length?typeCore.normalizeUnion(s):typeCore.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,r=n;s.init&&(s.init.type==="VariableDeclaration"?r=Ee(s.init,r,t):y(s.init,r,t)),s.test&&y(s.test,r,t),s.update&&y(s.update,r,t);let a=L(s.body,r,t);return h(t,e,typeCore.s.unknown,n),a}case "ForOfStatement":case "ForInStatement":{let s=e,r=y(s.right,n,t),a=e.type==="ForOfStatement"?r.t==="array"?r.items:typeCore.s.unknown:typeCore.s.string,o=vn(s.left),i=o?O(n,{[o]:a}):n,l=L(s.body,i,t);return h(t,e,typeCore.s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return h(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&y(s,n,t),h(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let s=e,r=L(s.block,n,t);if(s.handler){let a=s.handler.param,o=a?U(a):null,i=o?O(n,{[o]:typeCore.s.unknown}):n;r.push(...L(s.handler.body,i,t));}return s.finalizer&&r.push(...L(s.finalizer,n,t)),h(t,e,typeCore.s.unknown,n),r}case "SwitchStatement":{let s=e;y(s.discriminant,n,t);let r=n,a=[];for(let o of s.cases){o.test&&y(o.test,r,t);let i=ve(o.consequent,r,t);r=i.scope,a.push(...i.returns);}return h(t,e,typeCore.s.unknown,n),a}default:return y(e,n,t),[]}}function Vs(e,n,t){let s=typeCore.discover(e,[n],t.schemes);return s?s.type:typeCore.s.unknown}function xs(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function Gs(e,n){if(e.t!=="object")return e;let t={};for(let s in e.props)n.includes(s)||(t[s]=e.props[s]);return typeCore.s.object(t,e.index)}function Ks(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function Q(e,n,t,s,r){switch(e.type){case "Identifier":{let a=rn(e,s,r)??n;t[e.name]=a,r.overlay.set(e,{type:a,scope:s});return}case "AssignmentPattern":{let a=e,o=typeCore.widenType(y(a.right,s,r)),{type:i}=typeCore.withoutUndefined(n),l=i.t==="unknown"?o:typeCore.normalizeUnion([i,o]);Q(a.left,l,t,s,r);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Q(o.argument,Gs(n,a),t,s,r);continue}let i=o,l=le(i);l!=null&&a.push(l);let u=l!=null?Vs(n,l,r):typeCore.s.unknown;Q(i.value,u,t,s,r);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Q(i.argument,Ks(n,o),t,s,r):Q(i,xs(n,o),t,s,r);});return}}}function on(e,n,t){let s=V(n,t.schemes),a=(s.t==="union"?s.of.map(o=>V(o,t.schemes)):[s]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=le(i);if(l===null)continue;let u=a.filter(p=>l in p.props);if(!u.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&on(i.value,u[0].props[l].type,t);}}function Ee(e,n,t){let s={};for(let r of e.declarations){let a=r.id,o=U(a),i=rn(a,n,t);if(!r.init){if(o&&e.kind!=="const"){i?(s[o]=i,Gn(o,i,t)):(s[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(r)),o&&(s[o]=i??typeCore.s.unknown);continue}let l=i??(r.init.type==="ArrowFunctionExpression"?Dn(r.init):null),u=o&&l?O(n,{[o]:l}):n,p,d=null;i?(J(r.init,i,u,t),r.init.type==="ObjectExpression"&&on(r.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&r.init.type==="Literal"&&(p=rt(i,X(r.init),t.schemes))):(p=y(r.init,u,t),e.kind!=="const"&&(p=typeCore.widenLiteral(p)),d=p),h(t,r,p,n),o?(s[o]=p,e.kind!=="const"&&d&&Gn(o,d,t)):Q(a,p,s,n,t);}return h(t,e,typeCore.s.unknown,n),O(n,s)}function Gn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Ws(e,n,t){let s=y(e.left,n,t),r=y(e.right,n,t),a=e.operator;if(a==="+")return Kn(s,t.schemes)||Kn(r,t.schemes)?typeCore.s.string:de(s,t.schemes)&&de(r,t.schemes)?typeCore.s.number:(t.sink.report(S.operatorNotApplicable(e,"+",s,r)),typeCore.s.number);if(Js.has(a))return de(s,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),de(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right")),typeCore.s.number;if(qs.has(a)){if(!Ae(s)&&!Ae(r)){let o=typeCore.apparentType(s,t.schemes),i=typeCore.apparentType(r,t.schemes),l=typeCore.subtype(o,typeCore.s.number,t.schemes),u=typeCore.subtype(i,typeCore.s.number,t.schemes);l&&u||!l&&!u&&(typeCore.subtype(o,i,t.schemes)||typeCore.subtype(i,o,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,s,r));}return typeCore.s.boolean}return typeCore.s.boolean}var Ae=e=>e.t==="any"||e.t==="unknown",de=(e,n)=>Ae(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),Kn=(e,n)=>!Ae(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),Wn={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},He=e=>e.t==="null"||e.t==="undefined";function zs(e,n,t){if(n.t==="any"||n.t==="unknown")return typeCore.normalizeUnion([n,t]);let s=n.t==="union"?[...n.of]:n.t==="boolean"?[typeCore.s.literal(true),typeCore.s.literal(false)]:[n];if(e==="??")return typeCore.normalizeUnion([...s.filter(a=>!He(a)),t]);if(e==="||")return typeCore.normalizeUnion([...s.filter(a=>!He(a)&&!(a.t==="literal"&&!a.value)),t]);let r=s.flatMap(a=>He(a)?[a]:a.t==="literal"?a.value?[]:[a]:Wn[a.t]?[Wn[a.t]]:[]);return typeCore.normalizeUnion([...r,t])}var Js=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),qs=new Set(["<",">","<=",">="]),_s=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function Xs(e,n,t){let s=y(e.argument,n,t);switch(e.operator){case "!":return s.t==="literal"?{t:"literal",value:!s.value,fresh:true}:typeCore.s.boolean;case "-":return s.t==="literal"&&typeof s.value=="number"?{t:"literal",value:-s.value,fresh:true}:typeCore.s.number;case "+":case "~":return typeCore.s.number;case "typeof":return _s;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function Qs(e,n,t){let s={},r,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=V(y(p.argument,n,t),t.schemes);if(g.t==="object"){for(let E in g.props)s[E]=g.props[E];g.index&&(r={key:g.index.key,type:g.index.value});}continue}let d=p,m=y(d.value,n,t),f=typeCore.widen(m);if(h(t,p,m,n),d.computed){let g=V(y(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(s[g.value]={type:f},a.push(f)):g.t==="literal"&&typeof g.value=="number"?(s[String(g.value)]={type:f},a.push(f),o.push(f)):g.t==="string"?(i=true,a.push(f)):g.t==="number"&&(l=true,a.push(f),o.push(f));continue}let N=le(d);N!==null&&(s[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}return i?r={key:"string",type:typeCore.normalizeUnion(a)}:l&&(r={key:"number",type:typeCore.normalizeUnion(o)}),r?{t:"object",props:s,index:{key:r.key,value:r.type}}:{t:"object",props:s}}function lt(e,n,t){let s=[];for(let r of e.elements){if(!r)continue;let a=r;if(a.type==="SpreadElement"){let o=V(y(a.argument,n,t),t.schemes);o.t==="array"?s.push(o.items):o.t==="tuple"&&s.push(...o.elements);continue}s.push(typeCore.widen(y(a,n,t)));}return typeCore.s.array(s.length?typeCore.normalizeUnion(s):typeCore.s.unknown)}function ln(e,n,t,s){let r=V(n,s.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?ln(l,u,t,s):typeCore.widen(y(l,t,s));if(r.t==="tuple"&&o&&a.length===r.elements.length){let l=a.map((u,p)=>i(u,r.elements[p]));return h(s,e,{t:"tuple",elements:l},t)}if(r.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){y(p.argument,t,s);continue}l.push(i(p,r.items));}return h(s,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return lt(e,t,s)}function en(e,n,t,s){if(e===null)return typeCore.s.null;switch(typeof e){case "string":return typeCore.s.string;case "number":return typeCore.s.number;case "boolean":return typeCore.s.boolean;case "object":break;default:return typeCore.s.unknown}if(Array.isArray(e)){let o=e.map(i=>en(i,n,t,s));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let r=e;if("#expr"in r){let o;try{o=codec.fromJson(r);}catch{return t.sink.report(S.unsupported(s,`'#expr: ${String(r["#expr"])}'`)),typeCore.s.unknown}return y(o,n,t)}let a={};for(let o of Object.keys(r))a[o]={type:en(r[o],n,t,s)};return {t:"object",props:a}}var Ys=(e,n)=>({...e,typeAnnotation:n}),Hs=(e,n)=>({...e,returnType:n}),Zs=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function ut(e,n){return e.get(n)?.type}function er(e,n){return e.get(n)?.scope}function nr(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function tr(e,n){let t=e.get(n)?.scope;return t?[...Te(t)].map(([s,r])=>({key:s,type:r,optional:false})):[]}var sr=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function rr(e){if(!e||e.computed)return;let n=e.key;if(n?.type==="Identifier")return n.name;if(n?.type==="Literal"&&typeof n.value=="string")return n.value}function cn(e,n,t,s={}){let r=e[n],a=e[n+1];if(!(!r||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===r?a.returnType:void 0;case "VariableDeclarator":return a.init===r?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(sr)?.returnType;case "CallExpression":case "NewExpression":{let o=(a.arguments??[]).indexOf(r);if(o<0)return;let i=ut(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==r||e[n+2]?.type!=="ObjectExpression")return;let i=cn(e,n+2,t,s),l=rr(a);return !i||!l?void 0:typeCore.discover(i,[l],s)?.type}case "ArrayExpression":{let o=cn(e,n+1,t,s);return o?typeCore.discover(o,["[]"],s)?.type:void 0}default:return}}function ar(e,n){return e.filter(t=>t.node===n)}exports.FUNCTION_KINDS=gn;exports.annotate=Ys;exports.annotateReturn=Hs;exports.asExpression=Zs;exports.calleeAllowlist=Fe;exports.capabilityNodes=Pe;exports.check=_n;exports.childScope=O;exports.collectBindings=Ft;exports.collectMutations=ze;exports.collectUnused=Ke;exports.contextualTypeAt=cn;exports.createEnv=mt;exports.createSink=te;exports.diag=S;exports.diagnosticsAt=ar;exports.extractModuleType=ms;exports.fromCapability=Et;exports.guard=Me;exports.guardsFromCompiled=ge;exports.lookup=R;exports.makeDiagnostic=A;exports.maxArgs=Ue;exports.maxCallNesting=Ie;exports.maxDepth=$e;exports.maxFunctionNesting=Oe;exports.maxNestingOf=he;exports.maxNodes=Le;exports.memberCompletions=nr;exports.memberDepth=je;exports.resolveNamed=yt;exports.resolveScheme=ht;exports.resultType=Ve;exports.rootScope=mn;exports.scopeAt=er;exports.scopeCompletions=tr;exports.typeAt=ut;exports.visibleNames=Te;Object.keys(typeCore).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return typeCore[k]}})});
|
|
1
|
+
'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec');var Bn=(e={})=>core.rootScope(e),I=(e,n)=>core.childScope(e,n),D=(e,n)=>core.lookup(e,n),Me=e=>core.visibleNames(e),wt=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:Bn(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),Et=(e,n)=>e.types[n],vt=(e,n)=>e.schemes[n];var kn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:kn[e],severity:"error",node:n,message:t}),A=(e,n,t,r="error")=>({code:e,kind:kn[e],severity:r,node:n,message:t}),S={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r),a=s.filter(u=>u.path.length>0),o=a.length?` ${typeCore.formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${o}`),l=s.filter(u=>u.kind==="missing"&&u.path.length===1).map(u=>({name:u.path[0],type:u.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),unknownModule:(e,n)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(r=>typeCore.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>B("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(r)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>A("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>A("cast-unsound",e,`Conversion of type '${typeCore.format(n)}' to type '${typeCore.format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(r)}'.`)};function re(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Fe(e,n,t={}){return n.flatMap(r=>r(e,t))}function Z(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var Pt=e=>Array.isArray(e)?e:[e],En=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function je(e,n="error"){return t=>{let r=[];return Z(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(A("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function vn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return Z(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 u=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);u.length&&s.push(A("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function w(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>w(t.type,n))||!!e.index&&w(e.index.value,n);case "array":return w(e.items,n);case "tuple":return e.elements.some(t=>w(t,n));case "union":case "intersection":return e.of.some(t=>w(t,n));case "fn":return e.params.some(t=>w(t.type,n))||w(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>w(r.type,n))||w(t.returns,n));case "keyof":return w(e.of,n);case "index":return w(e.obj,n)||w(e.key,n);case "mapped":return w(e.over,n)||w(e.body,n);case "conditional":return w(e.check,n)||w(e.extends,n)||w(e.then,n)||w(e.else,n);case "returnType":case "parameters":return w(e.fn,n);case "apply":return e.args.some(t=>w(t,n));default:return false}}function An(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return Z(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&w(o)){r.push(A("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function Ue(e,n="error"){let t=new Set(e);return r=>{let s=[];return Z(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(A("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(A("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Se(e,n,t={}){let r=new Set(Pt(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(u,c)=>{let d=r.has(u.type),f=d?c+1:c;d&&f>n&&i.push(A("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of core.childrenOf(u))l(m,f);};return l(o,0),i}}var Le=(e=3,n="error")=>Se(En,e,{hint:"use a pipe instead of nesting functions",severity:n}),$e=(e,n="error")=>Se("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),xe=(e,n="error")=>Se("MemberExpression",e,{severity:n});function Ve(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(A("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 Ge(e,n="error"){return t=>{let r=0;return Z(t,()=>{r++;}),r>e?[A("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function Ke(e,n="error"){return t=>{let r=[];return Z(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(A("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function _e(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[A("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function be(e){let n=[je(e),vn(e),An(e)];return e.hostAllow!=="*"&&n.push(Ue([...e.hostAllow])),n}function It(e){return be(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"}],se=new Map(qe.map(e=>[e.op,e])),Dn={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string},We=e=>Dn[e],Cn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Ft={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string,undefined:typeCore.s.undefined},jt=[{op:"&&"},{op:"||"},{op:"??"}];function Ut(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(Dn[t.result],e,n))}function Lt(e,n={}){return Cn.filter(t=>typeCore.subtype(Ft[t.result],e,n))}var J=e=>({bindings:new Map,parent:e}),On=e=>e.charCodeAt(0)===95;function Be(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 oe(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)oe(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&ke(n,r);return}for(let r of Object.keys(t))oe(t[r],n);}function Tn(e,n){let t=e;oe(t.typeAnnotation,n),oe(t.returnType,n);}function ke(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function K(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Tn(e,n),Be(n,t,o,e,r,s||a&&On(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,c)=>{let d=l&&c<o.length-1;if(u.type==="RestElement")K(u.argument,n,t,r,s,false);else {let f=u;f.computed&&N(f.key,n,t),K(f.value,n,t,r,s||d,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;K(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":K(e.left,n,t,r,s,a);return;case "RestElement":K(e.argument,n,t,r,s,true);return;default:return}}function ae(e,n,t){if(e)switch(e.type){case "AssignmentPattern":N(e.right,n,t),ae(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)ae(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&ae(r,n,t);return;case "RestElement":ae(e.argument,n,t);return;default:return}}function Rn(e,n,t,r){for(let s of e.declarations)K(s.id,n,t,"local",r,false),N(s.init,n,t);}function ze(e,n,t){let r=e,s=J(n),a=r.params??[];for(let o of a)K(o,s,t,"parameter",false,true);for(let o of a)ae(o,s,t);N(r.body,s,t);}function N(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Tn(e,n),e.type){case "Identifier":ke(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=J(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&&Be(n,t,r.name,r,"local",false),ze(e,n,t);return}case "CatchClause":{let r=e,s=J(n);K(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=J(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=J(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=J(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)K(o.id,s,t,"local",false,true);else N(a,s,t);N(r.body,s,t);return}case "VariableDeclaration":Rn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Be(n,t,s.name,s,"import",On(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Rn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Be(n,t,a.name,a,"local",true),ze(s,n,t);}else N(s,n,t);}else for(let s of r.specifiers)ke(n,s.local.name);return}case "TSAsExpression":N(e.expression,n,t);return;case "TSTypeAliasDeclaration":oe(e.typeAnnotation,n);return;case "JsonExpression":Je(e.body,n,t);return;case "JSXOpeningElement":{let r=e;Pn(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 Pn(e,n,t){e&&(e.type==="JSXIdentifier"?ke(n,e.name):e.type==="JSXMemberExpression"&&Pn(e.object,n));}function Je(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)Je(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))Je(r[s],n,t);}function Ye(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};N(e,J(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 Gt=new Set(["const","import"]),ie=e=>({binds:new Map,parent:e});function Kt(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function Y(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?Y(n.argument):Y(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?Y(n):[]);case "AssignmentPattern":return Y(e.left);case "RestElement":return Y(e.argument);default:return []}}var we=(e,n,t)=>{for(let r of Y(n))e.binds.set(r.name,t);};function Xe(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of Y(e))Xe(a,n,t);return}let r=e.name,s=Kt(n,r);s&&Gt.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;Xe(r.left,n,t),T(r.right,n,t);return}case "UpdateExpression":{Xe(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=ie(n);for(let s of e.body??[])T(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=ie(n);for(let a of r.params??[])we(s,a,"param");T(r.body,s,t);return}case "CatchClause":{let r=e,s=ie(n);we(s,r.param,"param"),T(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=ie(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)we(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),we(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 Qe(e){let n={out:[],invalid:new WeakSet};return T(e,ie(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var le=e=>({decls:new Map,parent:e});function qt(e,n){for(let t=e;t;t=t.parent){let r=t.decls.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 Ee=(e,n)=>{for(let t of ee(n))e.decls.set(t.name,t);};function R(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=qt(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;R(r.object,n,t),r.computed&&R(r.property,n,t);return}case "Property":{let r=e;r.computed&&R(r.key,n,t),R(r.value,n,t);return}case "Program":case "BlockStatement":{let r=le(n);for(let s of e.body??[])R(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=le(n);for(let o of r.params??[])Ee(a,o);R(r.body,a,t);return}case "CatchClause":{let r=e,s=le(n);Ee(s,r.param),R(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=le(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ee(s,o.id);else a&&R(a,s,t);R(r.right,n,t),R(r.test,s,t),R(r.update,s,t),R(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)Ee(n,r.id),R(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":R(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)R(i,n,t);else R(o,n,t);}return}}}function Wt(e){let n=new WeakMap;return R(e,le(void 0),n),n}var He=e=>e.typeAnnotation,Ze=e=>e.returnType,x=e=>e.type==="Identifier"?e.name:null,Mn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?x(n.id):null}return x(e)},ce=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function In(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 en(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=en(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function nn(e){let n=e;if(n.regex||n.bigint)return typeCore.s.unknown;let t=n.value;return t===null?typeCore.s.null:t===void 0?typeCore.s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:typeCore.s.unknown}var X=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):nn(e)},tn=e=>e.type==="ArrowFunctionExpression",Fn=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Ae=e=>Fn(e)?e.args[0]:e,pe=e=>Fn(e)?e:typeCore.s.promise(e);function ue(e){return e.t==="tuple"?true:e.t==="array"?ue(e.items):e.t==="union"?e.of.some(ue):false}function ve(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ve(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ve(e.bound):false}var j=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=typeCore.expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function jn(e){let n=Ze(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:x(r)??`arg${s}`,type:He(r)??typeCore.s.unknown})),returns:e.async?pe(n):n}:null}var _={then:{},else:{}},_n=new Set(["string","number","boolean","undefined","function","object"]),Un={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function qn(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 Xt=typeCore.s.literal(true),Qt=typeCore.s.literal(false),V=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Xt,Qt]:[e];function Ln(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 Ht(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=V(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function Zt(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=V(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function er(e,n){if(!_n.has(n))return null;if(e.t==="unknown"||e.t==="any")return Un[n]??e;let t=V(e).filter(r=>qn(r,n));return t.length?typeCore.normalizeUnion(t):Un[n]??e}function nr(e,n){if(!_n.has(n)||e.t==="unknown"||e.t==="any")return null;let t=V(e).filter(r=>!qn(r,n));return t.length?typeCore.normalizeUnion(t):null}function $n(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function xn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Vn(e,n,t,r,s){let a=V(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return r?!!u&&typeCore.subtype(t,u,s):!(u&&typeCore.subtype(u,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function Gn(e,n,t){let r=V(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 tr(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function rr(e,n,t){let r=V(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var sr=e=>e.t==="null"||e.t==="undefined",Wn=e=>sr(e)||e.t==="literal"&&!e.value,ar=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=V(e),t=n.filter(r=>!Wn(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},or=e=>{let n=V(e),t=n.filter(Wn);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Kn=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}:{}}),ir=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function me(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=D(n,g);if(!v)return _;let E=String(m.value);return U(g,Gn(v,E,true),Gn(v,E,false))}return _}if(!ir(r.operator))return _;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=Ln(a,o)??Ln(o,a);if(i){let m=D(n,i.name);if(!m)return _;let b=er(m,i.tag),g=nr(m,i.tag);return s?U(i.name,g,b):U(i.name,b,g)}let l=Kn(a),u=Kn(o),c=l?o:u?a:null;if((l||u)&&c?.type==="Identifier"){let m=c.name,b=D(n,m);if(!b)return _;let v=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??u],E=V(b),Sn=E.filter(Pe=>v.includes(Pe.t)),Te=E.filter(Pe=>!v.includes(Pe.t)),bn=Sn.length?typeCore.normalizeUnion(Sn):null,Nn=Te.length&&Te.length<E.length?typeCore.normalizeUnion(Te):null;return s?U(m,Nn,bn):U(m,bn,Nn)}let d=$n(a,o)??$n(o,a);if(d){let m=D(n,d.name);if(!m)return _;let b=tr(m,d.lit,t),g=rr(m,d.lit,t);return s?U(d.name,g,b):U(d.name,b,g)}let f=xn(a,o)??xn(o,a);if(f){let m=D(n,f.name);if(!m)return _;let b=Vn(m,f.prop,f.lit,true,t),g=Vn(m,f.prop,f.lit,false,t);return s?U(f.name,g,b):U(f.name,b,g)}return _}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=me(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=ur(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=D(n,r);if(s)return U(r,ar(s),or(s))}return _}function lr(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 ur(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=D(n,r.name);if(!s)return null;let a=lr(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=D(n,i);return l?U(i,Ht(l,a.type,t),Zt(l,a.type,t)):null}var q=(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 Er=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function vr(e){let n=[];return e.maxDepth!==void 0&&n.push(Ve(e.maxDepth)),e.maxNodes!==void 0&&n.push(Ge(e.maxNodes)),e.maxArgs!==void 0&&n.push(Ke(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Le(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push($e(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(xe(e.memberDepth)),n}function Ar(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>A("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function rt(e,n,t={}){let r={...Er(n.types),...n.schemes,...Cr(e)},s=Qe(e),a={overlay:new WeakMap,sink:re(),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=Rr(e,a);try{i=h(e,l,a);}catch(d){if(d instanceof typeCore.TypeEvalLimitError)a.sink.report(A("too-deep",e,d.message));else if(d instanceof typeCore.UnionTooComplexError)a.sink.report(A("too-complex-union",e,d.message));else throw d;i=typeCore.s.unknown;}let u=[];o&&u.push(...be(o)),t.limits&&u.push(...vr(t.limits)),t.resultType&&u.push(_e(t.resultType,r));let c=[...a.sink.all,...s.diagnostics,...Ar(e,r),...t.unused?Ye(e,t.unused):[],...u.length?Fe(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:c,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function Dr(e,n,t={}){let r=rt(e,n,t),s={},a=new Map,o,i=u=>{let c=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let f=x(d.id),m=r.overlay.get(d);f&&m&&(s[f]=m.type,c.push(f));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,f=r.overlay.get(u);d&&f&&(s[d]=f.type,c.push(d));}return c};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let c=u;if(c.declaration)for(let d of i(c.declaration))a.set(d,d);else for(let d of c.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let c=r.overlay.get(u.declaration);o=c?c.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,c]of a)s[c]&&(l[u]={type:s[c]});o!==void 0&&(l.default={type:o});}else for(let u in s)l[u]={type:s[u]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Cr=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 Rr(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 u=l.local.name;if(u in r){n.sink.report(S.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){r[u]=i;continue}let c=l.type==="ImportSpecifier"?l.imported.name:"default",d=typeCore.discover(i,[c],n.schemes);d?r[u]=d.type:(n.sink.report(S.noSuchMember(l,i,c)),r[u]=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,nn(e),n);case "Placeholder":return y(t,e,typeCore.s.any,n);case "Identifier":{let s=e.name,a=D(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,Pr(e,n,t),n);case "CallExpression":return y(t,e,Ur(e,n,t,r),n);case "ArrowFunctionExpression":return mn(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,dt(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 c=t.overlay.get(a.object)?.type,d=c&&typeCore.apparentType(c,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(S.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=h(s.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(d)),y(t,e,d,n)}if(u&&i!==null){let d=h(s.right,n,t);return typeCore.subtype(d,u,t.schemes)||t.sink.report(S.notAssignable(s.right,d,u,t.schemes)),t.assignFlow.set(e,mt(u,d,t.schemes)),y(t,e,d,n)}let c=z(s.right,o,n,t);return y(t,e,c,n)}return y(t,e,h(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=h(s.argument,n,t);return fe(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 Ce(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?Gr(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return y(t,e,ss(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,as(s.operator,a,o),n)}case "UnaryExpression":return y(t,e,is(e,n,t),n);case "ConditionalExpression":{let s=e;h(s.test,n,t);let a=me(s.test,n,t.schemes),o=h(s.consequent,q(n,a.then),t),i=h(s.alternate,q(n,a.else),t);return y(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return y(t,e,ls(e,n,t),n);case "ArrayExpression":return y(t,e,gt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions)h(s,n,t);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,Ae(a),n)}case "Program":{let s=De(e.body,n,t,new Set(t.importNames)).scope;return y(t,e,typeCore.s.unknown,s)}case "JsonExpression":return y(t,e,on(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=ge(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 Or=new Set(["constructor","prototype","__proto__"]);function Tr(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 Pr(e,n,t){let r=h(e.object,n,t),s=Tr(e);if(s!==null&&Or.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"&&zn(e,r,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(r,[a],t.schemes);return o?o.type:(zn(e,r,a,t),typeCore.s.unknown)}function zn(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 Mr(e,n,t){if(!e||e.type!=="Identifier")return;let r=e.name;if(D(n,r)===void 0)return;let s=t.schemes[r];return s&&s.params.length===0?s.body:void 0}function pn(e,n){let t=j(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function Ir(e,n){let t=D(e.scope,n);if(!t)return;let r=pn(t,e.schemes);return r?j(r,e.schemes):void 0}function Fr(e,n,t,r){let s=pn(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",jr=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=j(h(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(jr(l));else s={elem:i.t==="array"?i.items:typeCore.s.unknown,node:a};}return {nodes:r,spread:s}}function Ur(e,n,t,r){let s=e.arguments,a=en(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=In(s);if(f){let m=typeCore.discover(d,f,t.schemes);return m?m.type:(t.sink.report(S.noSuchMember(e,d,f.join("."))),typeCore.s.unknown)}return s.forEach(m=>h(m,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let d=Mr(s[0],n,t);for(let f=1;f<s.length;f++)h(s[f],n,t);return d??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return Fr(e,s,n,t);let o=h(e.callee,n,t);if(o.t==="any")return s.forEach(d=>h(d,n,t)),typeCore.s.any;if(o.t==="overload")return $r(e,o,n,t,r);if(o.t!=="fn")return s.forEach(d=>h(d,n,t)),t.sink.report(S.notCallable(e,o)),typeCore.s.unknown;let i=at(s,n,t),l=i.nodes.map(d=>ot(d,n,t)),u=ut(e),c=!u||ct(o,u.length);return c||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),it(e,o,i.nodes,l,n,t,i.spread,r,c?u:void 0)}function ot(e,n,t){if(tn(e))return typeCore.s.any;if(e.type!=="CallExpression")return h(e,n,t);let r=re(),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 u=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 E=0;E<v;E++)g=typeCore.unify(b.params[E].type,i.params[E].type,g)??g;return typeCore.unify(b.returns,i.returns,g)??g}return typeCore.unify(b,i,m)??m},c=l?_r(e,n,l,a):void 0,d=c??u(typeCore.instantiateLoose(n,r).bindings);t.forEach((m,b)=>{if(tn(m)){let g=typeCore.widenType(typeCore.substitute(n.params[b]?.type??typeCore.s.any,d));r[b]=mn(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,d));else if(m.type==="Literal"){let g=n.params[b]?.type??typeCore.s.unknown,v=g.t==="var"?g.bound?typeCore.substitute(g.bound,d):g:typeCore.substitute(g,d);ve(v)&&(r[b]=y(a,m,X(m),s));}else if(m.type==="ArrayExpression"){let g=typeCore.substitute(n.params[b]?.type??typeCore.s.unknown,d);ue(g)&&(r[b]=yn(m,g,s,a));}});let f=c??u(typeCore.instantiateLoose(n,r).bindings);return c||Lr(e,n,f,a),Jr(e,n,r,f,a,t,o),t.forEach((m,b)=>{let g=n.params[b];m.type==="ObjectExpression"&&g&&!g.variadic&&fn(m,typeCore.substitute(g.type,f),a);}),typeCore.widenInferred(typeCore.groundVars(typeCore.substitute(n.returns,f),a.schemes))}var Jn=new WeakMap;function lt(e){let n=Jn.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),Jn.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 Lr(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 $r(e,n,t,r,s){let a=at(e.arguments,t,r),o=a.nodes,i=o.map(c=>ot(c,t,r)),l=ut(e),u=l?n.signatures.filter(c=>ct(c,l.length)):n.signatures;if(l&&!u.length){let c=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(S.wrongTypeArgumentCount(e,c,l.length)),Yn(e,n.signatures,a,o,i,t,r,s,void 0)}return Yn(e,u,a,o,i,t,r,s,l)}function Yn(e,n,t,r,s,a,o,i,l){let u={t:"overload",signatures:n},c=f=>t.spread?qr(f,r.length):Wr(f,r.length),d=u.signatures.find(f=>c(f)&&zr(f,s,o));if(!d){let f=u.signatures.filter(c);f.length===1?d=f[0]:u.signatures.length===1&&(d=u.signatures[0]);}return d?it(e,d,r,s,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,s)),typeCore.s.unknown)}function xr(e,n,t,r){let s=D(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 ge(e,n,t,r){let s=a=>{if(Array.isArray(a)){let u=false,c=a.map(d=>{let f=s(d);return f!==d&&(u=true),f});return u?c:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return xr(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(Vr(o.name,n,t,r),!(o.name in t.schemes)))return typeCore.s.any;let i=false,l={};for(let u of Object.keys(o)){let c=s(o[u]);c!==o[u]&&(i=true),l[u]=c;}return i?l:o};return s(e)}function Vr(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=ge(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Gr(e,n,t,r,s){let a={...t,sink:re(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=ge(e,n,a,r);return a.sink.hasErrors()?e:s?o:typeCore.groundVars(o,t.schemes)}var dn=(e,n,t)=>{let r=He(e);return r===void 0?r:ge(r,n,t,e)},Kr=(e,n,t)=>{let r=Ze(e);return r===void 0?r:ge(r,n,t,e)},ut=e=>{let n=e.typeArguments;return n?.length?n:void 0},ct=(e,n)=>(e.typeParams?.length??0)===n;function _r(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 u=o[i];if(!u)continue;let c=typeCore.groundVars(typeCore.substitute(l,o),r.schemes);typeCore.subtype(u,c,r.schemes)||r.sink.report(S.constraintViolation(e,i,u,c));}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 Wr(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 Jr(e,n,t,r,s,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let c=n.params[u];if(c.variadic)break;let d=typeCore.substitute(c.type,r);if(u>=t.length){!c.optional&&!o&&s.sink.report(S.missingArgument(e,c.name,d));continue}typeCore.subtype(t[u],d,s.schemes)||s.sink.report(S.notAssignable(i(u),t[u],d,s.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,c=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=c&&(l||u<n.params.length))){s.sink.report(S.spreadArgument(o.node));return}if(l){let d=typeCore.substitute(l.type,r),f=d.t==="array"?d.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 z(e,n,t,r){let s=j(n,r.schemes);switch(e.type){case "Literal":{let o=X(e);return typeCore.subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,n,t)}case "ArrayExpression":{if(ue(s)){let o=yn(e,s,t,r);return typeCore.subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,o,t)}if(s.t==="array"){for(let o of e.elements){if(!o)continue;let i=o;i.type==="SpreadElement"?z(i.argument,n,t,r):z(i,s.items,t,r);}return y(r,e,n,t)}break}case "ObjectExpression":{if(s.t==="object"){let o={};for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){h(u.argument,t,r);continue}let c=u,d=ce(c),f=d!==null?typeCore.ownProp(s.props,d)?.type:void 0,m=f?z(c.value,f,t,r):h(c.value,t,r);d!==null&&(o[d]={type:m}),y(r,u,m,t);}let i={t:"object",props:o};return typeCore.subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,n,t)}break}case "ArrowFunctionExpression":{if(s.t==="fn"){let o=mn(e,t,r,s);return typeCore.subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,n,t)}break}case "ConditionalExpression":{let o=e;return h(o.test,t,r),z(o.consequent,n,t,r),z(o.alternate,n,t,r),y(r,e,n,t)}case "Placeholder":return y(r,e,n,t)}let a=h(e,t,r);return typeCore.subtype(a,n,r.schemes)||r.sink.report(S.notAssignable(e,a,n,r.schemes)),y(r,e,a,t)}function mn(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a={},o=new Map,i=e.params.map((m,b)=>{let g=m,v=x(g),E=dn(g,n,t)??s?.params[b]?.type??typeCore.s.unknown;return v?(a[v]=E,(E.t==="union"||E.t==="boolean")&&o.set(v,E)):g.type!=="Identifier"&&Q(g,E,a,n,t),t.overlay.set(g,{type:E,scope:n}),{name:v??`arg${b}`,type:E}}),l=I(n,a),u=e.body,c=Kr(e,n,t);if(u.type!=="BlockStatement"&&c){let m=e.async?Ae(c):c;z(u,m,l,t);let b=e.async?pe(c):c;return y(t,e,{t:"fn",params:i,returns:b},n)}let d=u.type==="BlockStatement"?y(t,u,dt(u,l,t,new Set(Object.keys(a)),o),l):h(u,l,t),f=e.async?pe(d):d;if(c){let m=e.async?Ae(c):c,b=e.async?d:f;typeCore.subtype(b,m,t.schemes)||t.sink.report(S.notAssignable(u,f,c,t.schemes));let g=e.async?pe(c):c;return y(t,e,{t:"fn",params:i,returns:g},n)}return y(t,e,{t:"fn",params:i,returns:typeCore.widenType(f)},n)}function te(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?te(n.argument):te(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?te(n.argument):te(n):[]);case "AssignmentPattern":return te(e.left);default:return []}}function pt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>te(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?pt(e.declaration):[]}function dt(e,n,t,r=new Set,s){let{returns:a}=De(e.body,n,t,r,s),o=!F(e);return a.length===0?o?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(o?[...a,typeCore.s.undefined]:a)}var Yr=[typeCore.s.literal(true),typeCore.s.literal(false)];function Xr(e){return e.t==="union"?e.of:e.t==="boolean"?Yr:[e]}function mt(e,n,t){let r=Xr(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 ft(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 H(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=H(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=ft(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=yt(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=H(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=H(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Qr(n,s);return r.finalizer&&(o=H(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 yt(e,n,t){let r=H(e.consequent,n,t),s=e.alternate?H(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 ht(e,n){let t=new Map,r=s=>{let a=D(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 Qr(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 Hr(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=ht(n,t),s=H(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 q(n,a)}function De(e,n,t,r=new Set,s){if(!(s&&s.size)&&!Zr(e))return Xn(e,n,t,r);let a=new Set(t.evolving),o=new Map(t.declaredMut);if(s)for(let[i,l]of s)t.declaredMut.set(i,l);try{return Xn(e,n,t,r)}finally{t.evolving.clear();for(let i of a)t.evolving.add(i);t.declaredMut.clear();for(let[i,l]of o)t.declaredMut.set(i,l);}}function Zr(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 Xn(e,n,t,r){let s=n,a=[];for(let o of e){let i=o;for(let l of pt(i))r.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):r.add(l.name);if(i.type==="VariableDeclaration")s=Ce(i,s,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")s=Ce(l.declaration,s,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=h(l.declaration,s,t),c=x(l.declaration.id);c&&(s=I(s,{[c]:u}));}else for(let u of l.specifiers)D(s,u.local.name)===void 0&&t.sink.report(S.unknownName(u.local,u.local.name));}else if(i.type==="ExportDefaultDeclaration")h(i.declaration,s,t);else if(i.type==="FunctionDeclaration"){let l=h(i,s,t),u=x(i.id);u&&(s=I(s,{[u]:l}));}else if(i.type==="IfStatement"){let l=i,u=t.evolving.size||t.declaredMut.size?ht(s,t):null;if(a.push(...$(i,s,t)),u&&u.size){let c=yt(l,u,t);c.size&&(s=q(s,Object.fromEntries(c)));}!l.alternate&&F(l.consequent)&&(s=q(s,me(l.test,s,t.schemes).else));}else {a.push(...$(i,s,t));let l=ft(i,t);l?s=q(s,{[l.name]:l.type}):(i.type==="BlockStatement"||i.type==="TryStatement")&&(s=Hr(i,s,t));}}return {scope:s,returns:a}}function $(e,n,t){switch(e.type){case "ReturnStatement":{let r=e.argument,s=r?h(r,n,t):typeCore.s.unknown;return y(t,e,s,n),[s]}case "IfStatement":{let r=e;h(r.test,n,t);let s=me(r.test,n,t.schemes),a=$(r.consequent,q(n,s.then),t);return r.alternate&&a.push(...$(r.alternate,q(n,s.else),t)),y(t,e,typeCore.s.unknown,n),a}case "BlockStatement":{let{returns:r}=De(e.body,n,t);return y(t,e,r.length?typeCore.normalizeUnion(r):typeCore.s.void,n),r}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let r=e,s=n;r.init&&(r.init.type==="VariableDeclaration"?s=Ce(r.init,s,t):h(r.init,s,t)),r.test&&h(r.test,s,t),r.update&&h(r.update,s,t);let a=$(r.body,s,t);return y(t,e,typeCore.s.unknown,n),a}case "ForOfStatement":case "ForInStatement":{let r=e,s=h(r.right,n,t),a=e.type==="ForOfStatement"?s.t==="array"?s.items:typeCore.s.unknown:typeCore.s.string,o=Mn(r.left),i=o?I(n,{[o]:a}):n,l=$(r.body,i,t);return y(t,e,typeCore.s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return y(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let r=e.argument;return r&&h(r,n,t),y(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let r=e,s=$(r.block,n,t);if(r.handler){let a=r.handler.param,o=a?x(a):null,i=o?I(n,{[o]:typeCore.s.unknown}):n;s.push(...$(r.handler.body,i,t));}return r.finalizer&&s.push(...$(r.finalizer,n,t)),y(t,e,typeCore.s.unknown,n),s}case "SwitchStatement":{let r=e;h(r.discriminant,n,t);let s=n,a=[];for(let o of r.cases){o.test&&h(o.test,s,t);let i=De(o.consequent,s,t);s=i.scope,a.push(...i.returns);}return y(t,e,typeCore.s.unknown,n),a}default:return h(e,n,t),[]}}function es(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function ns(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function ts(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 rs(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function Q(e,n,t,r,s){switch(e.type){case "Identifier":{let a=dn(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]);Q(a.left,l,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Q(o.argument,ts(n,a),t,r,s);continue}let i=o,l=ce(i);l!=null&&a.push(l);let u=l!=null?es(n,l,s):typeCore.s.unknown;Q(i.value,u,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Q(i.argument,rs(n,o),t,r,s):Q(i,ns(n,o),t,r,s);});return}}}function fn(e,n,t){let r=j(n,t.schemes),a=(r.t==="union"?r.of.map(o=>j(o,t.schemes)):[r]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=ce(i);if(l===null)continue;let u=a.filter(c=>l in c.props);if(!u.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&fn(i.value,u[0].props[l].type,t);}}function Ce(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=x(a),i=dn(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,Qn(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"?jn(s.init):null),u=o&&l?I(n,{[o]:l}):n,c,d=null;i?(z(s.init,i,u,t),s.init.type==="ObjectExpression"&&fn(s.init,i,t),c=i,d=i,(i.t==="union"||i.t==="boolean")&&s.init.type==="Literal"&&(c=mt(i,X(s.init),t.schemes))):(c=h(s.init,u,t),e.kind!=="const"&&(c=typeCore.widenLiteral(c)),d=c),y(t,s,c,n),o?(r[o]=c,e.kind!=="const"&&d&&Qn(o,d,t)):Q(a,c,r,n,t);}return y(t,e,typeCore.s.unknown,n),I(n,r)}function Qn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function ss(e,n,t){let r=h(e.left,n,t),s=h(e.right,n,t),a=e.operator,o=se.get(a);if(!o)return typeCore.s.boolean;if(o.category==="additive")return Hn(r,t.schemes)||Hn(s,t.schemes)?typeCore.s.string:fe(r,t.schemes)&&fe(s,t.schemes)?typeCore.s.number:(t.sink.report(S.operatorNotApplicable(e,"+",r,s)),typeCore.s.number);if(o.category==="arithmetic"||o.category==="bitwise")fe(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),fe(s,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!Re(r)&&!Re(s)){let i=typeCore.apparentType(r,t.schemes),l=typeCore.apparentType(s,t.schemes),u=typeCore.subtype(i,typeCore.s.number,t.schemes),c=typeCore.subtype(l,typeCore.s.number,t.schemes);u&&c||!u&&!c&&(typeCore.subtype(i,l,t.schemes)||typeCore.subtype(l,i,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,r,s));}return We(o.result)}var Re=e=>e.t==="any"||e.t==="unknown",fe=(e,n)=>Re(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),Hn=(e,n)=>!Re(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),Zn={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},sn=e=>e.t==="null"||e.t==="undefined";function as(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=>!sn(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!sn(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>sn(a)?[a]:a.t==="literal"?a.value?[]:[a]:Zn[a.t]?[Zn[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var os=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function is(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 os;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function ls(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let u of e.properties){let c=u;if(c.type==="SpreadElement"){let g=j(h(c.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 d=c,f=h(d.value,n,t),m=typeCore.widen(f);if(y(t,c,f,n),d.computed){let g=j(h(d.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=ce(d);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 gt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=j(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 yn(e,n,t,r){let s=j(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?yn(l,u,t,r):typeCore.widen(h(l,t,r));if(s.t==="tuple"&&o&&a.length===s.elements.length){let l=a.map((u,c)=>i(u,s.elements[c]));return y(r,e,{t:"tuple",elements:l},t)}if(s.t==="array"){let l=[];for(let u of a){if(!u)continue;let c=u;if(c.type==="SpreadElement"){h(c.argument,t,r);continue}l.push(i(c,s.items));}return y(r,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return gt(e,t,r)}function on(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=>on(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:on(s[o],n,t,r)};return {t:"object",props:a}}var us=(e,n)=>({...e,typeAnnotation:n}),cs=(e,n)=>({...e,returnType:n}),ps=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function gn(e,n){return e.get(n)?.type}function ds(e,n){return e.get(n)?.scope}function ms(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function fs(e,n){let t=e.get(n)?.scope;return t?[...Me(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var ys=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function hs(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 Oe(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(ys)?.returnType;case "CallExpression":case "NewExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=gn(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=Oe(e,n+2,t,r),l=hs(a);return !i||!l?void 0:typeCore.discover(i,[l],r)?.type}case "ArrayExpression":{let o=Oe(e,n+1,t,r);return o?typeCore.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=se.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=gn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Oe(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?typeCore.s.number:void 0}default:return}}function gs(e,n){return e.filter(t=>t.node===n)}exports.BINARY_OP=se;exports.BINARY_OPS=qe;exports.FUNCTION_KINDS=En;exports.LOGICAL_OPS=jt;exports.UNARY_OPS=Cn;exports.annotate=us;exports.annotateReturn=cs;exports.asExpression=ps;exports.binaryOpsProducing=Ut;exports.calleeAllowlist=Ue;exports.capabilityNodes=je;exports.check=rt;exports.childScope=I;exports.collectBindings=Wt;exports.collectMutations=Qe;exports.collectUnused=Ye;exports.componentProps=Ir;exports.componentPropsOf=pn;exports.contextualTypeAt=Oe;exports.createEnv=wt;exports.createSink=re;exports.diag=S;exports.diagnosticsAt=gs;exports.extractModuleType=Dr;exports.fromCapability=It;exports.guard=Fe;exports.guardsFromCompiled=be;exports.lookup=D;exports.makeDiagnostic=A;exports.maxArgs=Ke;exports.maxCallNesting=$e;exports.maxDepth=Ve;exports.maxFunctionNesting=Le;exports.maxNestingOf=Se;exports.maxNodes=Ge;exports.memberCompletions=ms;exports.memberDepth=xe;exports.opResultSchema=We;exports.resolveNamed=Et;exports.resolveScheme=vt;exports.resultType=_e;exports.rootScope=Bn;exports.scopeAt=ds;exports.scopeCompletions=fs;exports.typeAt=gn;exports.unaryOpsProducing=Lt;exports.visibleNames=Me;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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Schema, Schemes, TypeScheme, ObjectSchema, Completion } from '@tslite/type-core';
|
|
2
2
|
export * from '@tslite/type-core';
|
|
3
|
-
import { Scope as Scope$1, BaseNode, Node } from '@tslite/core';
|
|
3
|
+
import { Scope as Scope$1, BaseNode, Node, types } from '@tslite/core';
|
|
4
4
|
import { CapabilityProfile, CompiledProfile } from '@tslite/capability';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -91,6 +91,30 @@ type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-s
|
|
|
91
91
|
* distingue "isto é programa inválido" de "isto é incompatibilidade de tipo".
|
|
92
92
|
*/
|
|
93
93
|
type DiagnosticKind = "semantic" | "type" | "capability";
|
|
94
|
+
/**
|
|
95
|
+
* Uma propriedade que o tipo esperado exige e o valor não tem.
|
|
96
|
+
*
|
|
97
|
+
* O `type` é o ESPERADO — é o que permite a quem corrige inserir um valor
|
|
98
|
+
* plausível (`""`, `0`, `[]`) em vez de um buraco.
|
|
99
|
+
*/
|
|
100
|
+
interface MissingProperty {
|
|
101
|
+
readonly name: string;
|
|
102
|
+
readonly type: Schema;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Dado ESTRUTURADO do erro, para quem vai **agir** sobre ele.
|
|
106
|
+
*
|
|
107
|
+
* É o campo `data` do LSP, que existe exatamente para isto: levar informação do
|
|
108
|
+
* diagnóstico até o code action, sem que ninguém precise reconstruí-la. Aqui a
|
|
109
|
+
* motivação é concreta — o `notAssignable` já roda o `typeDiff` para escrever a
|
|
110
|
+
* mensagem; jogar o resultado fora obrigaria a camada de correção a recomputá-lo,
|
|
111
|
+
* e ela **não tem como**: o tipo ESPERADO não está no overlay.
|
|
112
|
+
*/
|
|
113
|
+
type DiagnosticData = {
|
|
114
|
+
readonly kind: "missing-properties";
|
|
115
|
+
/** As propriedades ausentes na RAIZ do valor (as aninhadas ficam de fora). */
|
|
116
|
+
readonly properties: readonly MissingProperty[];
|
|
117
|
+
};
|
|
94
118
|
interface Diagnostic {
|
|
95
119
|
readonly code: DiagnosticCode;
|
|
96
120
|
/** A classe do diagnóstico (deriva do `code`) — ver {@link DiagnosticKind}. */
|
|
@@ -99,6 +123,8 @@ interface Diagnostic {
|
|
|
99
123
|
/** O nó culpado — identidade por referência. */
|
|
100
124
|
readonly node: BaseNode;
|
|
101
125
|
readonly message: string;
|
|
126
|
+
/** Ver {@link DiagnosticData}. Presente só onde há o que agir. */
|
|
127
|
+
readonly data?: DiagnosticData;
|
|
102
128
|
}
|
|
103
129
|
/**
|
|
104
130
|
* Builder genérico de diagnóstico (severidade configurável). Usado pelos
|
|
@@ -293,6 +319,29 @@ declare function extractModuleType(program: Node, env: Env, opts?: CheckOptions)
|
|
|
293
319
|
type: ObjectSchema;
|
|
294
320
|
diagnostics: readonly Diagnostic[];
|
|
295
321
|
};
|
|
322
|
+
/**
|
|
323
|
+
* O DIFERENCIAL — `matchesProps(Component, payload)`: extrai as props do componente
|
|
324
|
+
* react-like (`(props) => Element`; agnóstico ao framework, `Element` é `apply` opaco)
|
|
325
|
+
* e verifica, em edit-time, se o `payload` (saída de um serviço de automação/nocode) é
|
|
326
|
+
* **compatível** com elas: `payload ≤ props`. Campos a MAIS no payload são OK (o
|
|
327
|
+
* componente usa um subconjunto); faltar prop obrigatória ou tipo-errado →
|
|
328
|
+
* `props-mismatch`. Retorna `boolean` (a resposta de runtime). Componente inválido
|
|
329
|
+
* (sem assinatura de função) → não checa.
|
|
330
|
+
*/
|
|
331
|
+
/**
|
|
332
|
+
* As props de um componente react-like (`(props) => Element`): a 1ª assinatura, 1º
|
|
333
|
+
* param. É o SSOT da extração — o `matchesProps` (D24, VALIDAÇÃO) e o
|
|
334
|
+
* `componentProps` (AUTORIA, o matchesProps invertido) consomem os dois. Devolve o
|
|
335
|
+
* tipo CRU do param (o `matchesProps` o passa pro `typeDiff`, que resolve).
|
|
336
|
+
*/
|
|
337
|
+
declare function componentPropsOf(componentType: Schema, schemes: Schemes): Schema | undefined;
|
|
338
|
+
/**
|
|
339
|
+
* As props do componente registrado como `name` no `env`, para AUTORIA — gerar um
|
|
340
|
+
* form (um campo por prop). É o `matchesProps` **INVERTIDO** (validação → autoria):
|
|
341
|
+
* lê o prop-schema em vez de casar um payload contra ele. Devolve o objeto de props
|
|
342
|
+
* JÁ RESOLVIDO (nome → forma), ou `undefined` se `name` não é `(props) => Element`.
|
|
343
|
+
*/
|
|
344
|
+
declare function componentProps(env: Env, name: string): Schema | undefined;
|
|
296
345
|
|
|
297
346
|
/** Contexto opcional de um guard (o overlay de tipos, p/ regras type-aware). */
|
|
298
347
|
interface GuardContext {
|
|
@@ -351,6 +400,47 @@ declare function guardsFromCompiled(c: CompiledProfile): Profile;
|
|
|
351
400
|
*/
|
|
352
401
|
declare function fromCapability(profile: CapabilityProfile): Profile;
|
|
353
402
|
|
|
403
|
+
type BinaryOpCategory = "additive" | "arithmetic" | "bitwise" | "relational" | "equality";
|
|
404
|
+
/**
|
|
405
|
+
* O tipo que o operador PRODUZ — como marcador. `"additive"` é o `+` (condicional:
|
|
406
|
+
* `string`|`number`), resolvido no checker. Os demais mapeiam 1:1 num `Schema`.
|
|
407
|
+
*/
|
|
408
|
+
type OpResult = "number" | "boolean" | "string" | "additive";
|
|
409
|
+
interface BinaryOpSpec {
|
|
410
|
+
readonly op: types.BinaryOperator;
|
|
411
|
+
readonly category: BinaryOpCategory;
|
|
412
|
+
readonly result: OpResult;
|
|
413
|
+
}
|
|
414
|
+
/** O catálogo dos binários da Linguagem (o `in`/`instanceof` ficam fora: OO/nicho). */
|
|
415
|
+
declare const BINARY_OPS: readonly BinaryOpSpec[];
|
|
416
|
+
/** Lookup O(1) por operador. */
|
|
417
|
+
declare const BINARY_OP: ReadonlyMap<string, BinaryOpSpec>;
|
|
418
|
+
/** O `Schema` que o operador produz — o SSOT do tipo de retorno. `+` (additive) é
|
|
419
|
+
* condicional e NÃO tem schema fixo: quem chama trata (ver `binaryType` no checker). */
|
|
420
|
+
declare const opResultSchema: (r: Exclude<OpResult, "additive">) => Schema;
|
|
421
|
+
interface UnaryOpSpec {
|
|
422
|
+
readonly op: types.UnaryOperator;
|
|
423
|
+
/** O tipo ao qual o resultado é ASSIGNÁVEL (upper bound). O `unaryType` faz
|
|
424
|
+
* folding de literal (`-1`→`-1`, `!0`→`true`), então o real é um subtipo disto. */
|
|
425
|
+
readonly result: "number" | "boolean" | "string" | "undefined";
|
|
426
|
+
}
|
|
427
|
+
declare const UNARY_OPS: readonly UnaryOpSpec[];
|
|
428
|
+
interface LogicalOpSpec {
|
|
429
|
+
readonly op: types.LogicalOperator;
|
|
430
|
+
}
|
|
431
|
+
/** Os lógicos COMPÕEM o tipo dos operandos (`a && b` refina; não é tipo fixo) —
|
|
432
|
+
* por isso sem `result`. No slot, um lógico serve quando os operandos servem. */
|
|
433
|
+
declare const LOGICAL_OPS: readonly LogicalOpSpec[];
|
|
434
|
+
/**
|
|
435
|
+
* Os operadores BINÁRIOS cujo resultado é assignável a `target` — a base das
|
|
436
|
+
* sugestões de um slot. Num slot `boolean`: relacionais + igualdades. Num slot
|
|
437
|
+
* `number`: aritméticos/bitwise + `+`. O `+` (additive) serve a slot string OU
|
|
438
|
+
* number. `any`/`unknown` no `target` casa tudo (`subtype` já resolve).
|
|
439
|
+
*/
|
|
440
|
+
declare function binaryOpsProducing(target: Schema, schemes?: Schemes): readonly BinaryOpSpec[];
|
|
441
|
+
/** Os operadores UNÁRIOS cujo resultado (upper bound) é assignável a `target`. */
|
|
442
|
+
declare function unaryOpsProducing(target: Schema, schemes?: Schemes): readonly UnaryOpSpec[];
|
|
443
|
+
|
|
354
444
|
/**
|
|
355
445
|
* Diagnósticos de reatribuição de binding imutável (`const`, `import`).
|
|
356
446
|
*
|
|
@@ -433,4 +523,4 @@ declare function contextualTypeAt(ancestors: readonly BaseNode[], i: number, ove
|
|
|
433
523
|
/** Os diagnósticos que apontam para `node`. */
|
|
434
524
|
declare function diagnosticsAt(diagnostics: readonly Diagnostic[], node: BaseNode): readonly Diagnostic[];
|
|
435
525
|
|
|
436
|
-
export { type BindingMap, type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, type Profile, type Scope, type Severity, type TypeOverlay, type UnusedOptions, annotate, annotateReturn, asExpression, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, contextualTypeAt, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, visibleNames };
|
|
526
|
+
export { BINARY_OP, BINARY_OPS, type BinaryOpCategory, type BinaryOpSpec, type BindingMap, type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticData, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, LOGICAL_OPS, type LogicalOpSpec, type MissingProperty, type OpResult, type Profile, type Scope, type Severity, type TypeOverlay, UNARY_OPS, type UnaryOpSpec, type UnusedOptions, annotate, annotateReturn, asExpression, binaryOpsProducing, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, componentProps, componentPropsOf, contextualTypeAt, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, opResultSchema, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, unaryOpsProducing, visibleNames };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Schema, Schemes, TypeScheme, ObjectSchema, Completion } from '@tslite/type-core';
|
|
2
2
|
export * from '@tslite/type-core';
|
|
3
|
-
import { Scope as Scope$1, BaseNode, Node } from '@tslite/core';
|
|
3
|
+
import { Scope as Scope$1, BaseNode, Node, types } from '@tslite/core';
|
|
4
4
|
import { CapabilityProfile, CompiledProfile } from '@tslite/capability';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -91,6 +91,30 @@ type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-s
|
|
|
91
91
|
* distingue "isto é programa inválido" de "isto é incompatibilidade de tipo".
|
|
92
92
|
*/
|
|
93
93
|
type DiagnosticKind = "semantic" | "type" | "capability";
|
|
94
|
+
/**
|
|
95
|
+
* Uma propriedade que o tipo esperado exige e o valor não tem.
|
|
96
|
+
*
|
|
97
|
+
* O `type` é o ESPERADO — é o que permite a quem corrige inserir um valor
|
|
98
|
+
* plausível (`""`, `0`, `[]`) em vez de um buraco.
|
|
99
|
+
*/
|
|
100
|
+
interface MissingProperty {
|
|
101
|
+
readonly name: string;
|
|
102
|
+
readonly type: Schema;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Dado ESTRUTURADO do erro, para quem vai **agir** sobre ele.
|
|
106
|
+
*
|
|
107
|
+
* É o campo `data` do LSP, que existe exatamente para isto: levar informação do
|
|
108
|
+
* diagnóstico até o code action, sem que ninguém precise reconstruí-la. Aqui a
|
|
109
|
+
* motivação é concreta — o `notAssignable` já roda o `typeDiff` para escrever a
|
|
110
|
+
* mensagem; jogar o resultado fora obrigaria a camada de correção a recomputá-lo,
|
|
111
|
+
* e ela **não tem como**: o tipo ESPERADO não está no overlay.
|
|
112
|
+
*/
|
|
113
|
+
type DiagnosticData = {
|
|
114
|
+
readonly kind: "missing-properties";
|
|
115
|
+
/** As propriedades ausentes na RAIZ do valor (as aninhadas ficam de fora). */
|
|
116
|
+
readonly properties: readonly MissingProperty[];
|
|
117
|
+
};
|
|
94
118
|
interface Diagnostic {
|
|
95
119
|
readonly code: DiagnosticCode;
|
|
96
120
|
/** A classe do diagnóstico (deriva do `code`) — ver {@link DiagnosticKind}. */
|
|
@@ -99,6 +123,8 @@ interface Diagnostic {
|
|
|
99
123
|
/** O nó culpado — identidade por referência. */
|
|
100
124
|
readonly node: BaseNode;
|
|
101
125
|
readonly message: string;
|
|
126
|
+
/** Ver {@link DiagnosticData}. Presente só onde há o que agir. */
|
|
127
|
+
readonly data?: DiagnosticData;
|
|
102
128
|
}
|
|
103
129
|
/**
|
|
104
130
|
* Builder genérico de diagnóstico (severidade configurável). Usado pelos
|
|
@@ -293,6 +319,29 @@ declare function extractModuleType(program: Node, env: Env, opts?: CheckOptions)
|
|
|
293
319
|
type: ObjectSchema;
|
|
294
320
|
diagnostics: readonly Diagnostic[];
|
|
295
321
|
};
|
|
322
|
+
/**
|
|
323
|
+
* O DIFERENCIAL — `matchesProps(Component, payload)`: extrai as props do componente
|
|
324
|
+
* react-like (`(props) => Element`; agnóstico ao framework, `Element` é `apply` opaco)
|
|
325
|
+
* e verifica, em edit-time, se o `payload` (saída de um serviço de automação/nocode) é
|
|
326
|
+
* **compatível** com elas: `payload ≤ props`. Campos a MAIS no payload são OK (o
|
|
327
|
+
* componente usa um subconjunto); faltar prop obrigatória ou tipo-errado →
|
|
328
|
+
* `props-mismatch`. Retorna `boolean` (a resposta de runtime). Componente inválido
|
|
329
|
+
* (sem assinatura de função) → não checa.
|
|
330
|
+
*/
|
|
331
|
+
/**
|
|
332
|
+
* As props de um componente react-like (`(props) => Element`): a 1ª assinatura, 1º
|
|
333
|
+
* param. É o SSOT da extração — o `matchesProps` (D24, VALIDAÇÃO) e o
|
|
334
|
+
* `componentProps` (AUTORIA, o matchesProps invertido) consomem os dois. Devolve o
|
|
335
|
+
* tipo CRU do param (o `matchesProps` o passa pro `typeDiff`, que resolve).
|
|
336
|
+
*/
|
|
337
|
+
declare function componentPropsOf(componentType: Schema, schemes: Schemes): Schema | undefined;
|
|
338
|
+
/**
|
|
339
|
+
* As props do componente registrado como `name` no `env`, para AUTORIA — gerar um
|
|
340
|
+
* form (um campo por prop). É o `matchesProps` **INVERTIDO** (validação → autoria):
|
|
341
|
+
* lê o prop-schema em vez de casar um payload contra ele. Devolve o objeto de props
|
|
342
|
+
* JÁ RESOLVIDO (nome → forma), ou `undefined` se `name` não é `(props) => Element`.
|
|
343
|
+
*/
|
|
344
|
+
declare function componentProps(env: Env, name: string): Schema | undefined;
|
|
296
345
|
|
|
297
346
|
/** Contexto opcional de um guard (o overlay de tipos, p/ regras type-aware). */
|
|
298
347
|
interface GuardContext {
|
|
@@ -351,6 +400,47 @@ declare function guardsFromCompiled(c: CompiledProfile): Profile;
|
|
|
351
400
|
*/
|
|
352
401
|
declare function fromCapability(profile: CapabilityProfile): Profile;
|
|
353
402
|
|
|
403
|
+
type BinaryOpCategory = "additive" | "arithmetic" | "bitwise" | "relational" | "equality";
|
|
404
|
+
/**
|
|
405
|
+
* O tipo que o operador PRODUZ — como marcador. `"additive"` é o `+` (condicional:
|
|
406
|
+
* `string`|`number`), resolvido no checker. Os demais mapeiam 1:1 num `Schema`.
|
|
407
|
+
*/
|
|
408
|
+
type OpResult = "number" | "boolean" | "string" | "additive";
|
|
409
|
+
interface BinaryOpSpec {
|
|
410
|
+
readonly op: types.BinaryOperator;
|
|
411
|
+
readonly category: BinaryOpCategory;
|
|
412
|
+
readonly result: OpResult;
|
|
413
|
+
}
|
|
414
|
+
/** O catálogo dos binários da Linguagem (o `in`/`instanceof` ficam fora: OO/nicho). */
|
|
415
|
+
declare const BINARY_OPS: readonly BinaryOpSpec[];
|
|
416
|
+
/** Lookup O(1) por operador. */
|
|
417
|
+
declare const BINARY_OP: ReadonlyMap<string, BinaryOpSpec>;
|
|
418
|
+
/** O `Schema` que o operador produz — o SSOT do tipo de retorno. `+` (additive) é
|
|
419
|
+
* condicional e NÃO tem schema fixo: quem chama trata (ver `binaryType` no checker). */
|
|
420
|
+
declare const opResultSchema: (r: Exclude<OpResult, "additive">) => Schema;
|
|
421
|
+
interface UnaryOpSpec {
|
|
422
|
+
readonly op: types.UnaryOperator;
|
|
423
|
+
/** O tipo ao qual o resultado é ASSIGNÁVEL (upper bound). O `unaryType` faz
|
|
424
|
+
* folding de literal (`-1`→`-1`, `!0`→`true`), então o real é um subtipo disto. */
|
|
425
|
+
readonly result: "number" | "boolean" | "string" | "undefined";
|
|
426
|
+
}
|
|
427
|
+
declare const UNARY_OPS: readonly UnaryOpSpec[];
|
|
428
|
+
interface LogicalOpSpec {
|
|
429
|
+
readonly op: types.LogicalOperator;
|
|
430
|
+
}
|
|
431
|
+
/** Os lógicos COMPÕEM o tipo dos operandos (`a && b` refina; não é tipo fixo) —
|
|
432
|
+
* por isso sem `result`. No slot, um lógico serve quando os operandos servem. */
|
|
433
|
+
declare const LOGICAL_OPS: readonly LogicalOpSpec[];
|
|
434
|
+
/**
|
|
435
|
+
* Os operadores BINÁRIOS cujo resultado é assignável a `target` — a base das
|
|
436
|
+
* sugestões de um slot. Num slot `boolean`: relacionais + igualdades. Num slot
|
|
437
|
+
* `number`: aritméticos/bitwise + `+`. O `+` (additive) serve a slot string OU
|
|
438
|
+
* number. `any`/`unknown` no `target` casa tudo (`subtype` já resolve).
|
|
439
|
+
*/
|
|
440
|
+
declare function binaryOpsProducing(target: Schema, schemes?: Schemes): readonly BinaryOpSpec[];
|
|
441
|
+
/** Os operadores UNÁRIOS cujo resultado (upper bound) é assignável a `target`. */
|
|
442
|
+
declare function unaryOpsProducing(target: Schema, schemes?: Schemes): readonly UnaryOpSpec[];
|
|
443
|
+
|
|
354
444
|
/**
|
|
355
445
|
* Diagnósticos de reatribuição de binding imutável (`const`, `import`).
|
|
356
446
|
*
|
|
@@ -433,4 +523,4 @@ declare function contextualTypeAt(ancestors: readonly BaseNode[], i: number, ove
|
|
|
433
523
|
/** Os diagnósticos que apontam para `node`. */
|
|
434
524
|
declare function diagnosticsAt(diagnostics: readonly Diagnostic[], node: BaseNode): readonly Diagnostic[];
|
|
435
525
|
|
|
436
|
-
export { type BindingMap, type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, type Profile, type Scope, type Severity, type TypeOverlay, type UnusedOptions, annotate, annotateReturn, asExpression, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, contextualTypeAt, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, visibleNames };
|
|
526
|
+
export { BINARY_OP, BINARY_OPS, type BinaryOpCategory, type BinaryOpSpec, type BindingMap, type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticData, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, LOGICAL_OPS, type LogicalOpSpec, type MissingProperty, type OpResult, type Profile, type Scope, type Severity, type TypeOverlay, UNARY_OPS, type UnaryOpSpec, type UnusedOptions, annotate, annotateReturn, asExpression, binaryOpsProducing, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, componentProps, componentPropsOf, contextualTypeAt, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, opResultSchema, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, unaryOpsProducing, visibleNames };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,ownProp,withoutUndefined,widen,unify,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,childrenOf,VisitorKeys}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var mn=(e={})=>rootScope(e),O=(e,n)=>childScope(e,n),R=(e,n)=>lookup(e,n),Te=e=>visibleNames(e),mt=(e={},n={},t={},s={},r=new Set,a=new Set,o={})=>({scope:mn(e),types:n,schemes:t,accessors:s,asserters:r,matchers:a,modules:o}),yt=(e,n)=>e.types[n],ht=(e,n)=>e.schemes[n];var yn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:yn[e],severity:"error",node:n,message:t}),A=(e,n,t,s="error")=>({code:e,kind:yn[e],severity:s,node:n,message:t}),S={notAssignable:(e,n,t,s={})=>{let r=typeDiff(n,t,s).filter(o=>o.path.length>0),a=r.length?` ${formatTypeDiff(r)}.`:"";return B("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${a}`)},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),unknownModule:(e,n)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(s=>format(s)).join(", ")}).`),constraintViolation:(e,n,t,s)=>B("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(s)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>A("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>A("cast-unsound",e,`Conversion of type '${format(n)}' to type '${format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,s)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(s)}'.`)};function te(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Me(e,n,t={}){return n.flatMap(s=>s(e,t))}function H(e,n){let t=s=>{n(s);for(let r of childrenOf(s))t(r);};t(e);}var wt=e=>Array.isArray(e)?e:[e],gn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function Pe(e,n="error"){return t=>{let s=[];return H(t,r=>{let a=nodeViolation(r,e);a&&s.push(A("node-not-allowed",r,`'${a}' is not allowed by the capability profile.`,n));}),s}}function Sn(e,n="error"){let t=e.typeTier;return s=>{if(t==="author")return [];let r=[];return H(s,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=typeFeatureViolations(typeFeatures(l,i),t);u.length&&r.push(A("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),r}}function w(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>w(t.type,n))||!!e.index&&w(e.index.value,n);case "array":return w(e.items,n);case "tuple":return e.elements.some(t=>w(t,n));case "union":case "intersection":return e.of.some(t=>w(t,n));case "fn":return e.params.some(t=>w(t.type,n))||w(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(s=>w(s.type,n))||w(t.returns,n));case "keyof":return w(e.of,n);case "index":return w(e.obj,n)||w(e.key,n);case "mapped":return w(e.over,n)||w(e.body,n);case "conditional":return w(e.check,n)||w(e.extends,n)||w(e.then,n)||w(e.else,n);case "returnType":case "parameters":return w(e.fn,n);case "apply":return e.args.some(t=>w(t,n));default:return false}}function Nn(e,n="error"){return t=>{if(!e.typeStrict)return [];let s=[];return H(t,r=>{let a=r;for(let o of [a.typeAnnotation,a.returnType])if(o&&w(o)){s.push(A("any-not-allowed",r,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),s}}function Fe(e,n="error"){let t=new Set(e);return s=>{let r=[];return H(s,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")r.push(A("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||r.push(A("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),r}}function he(e,n,t={}){let s=new Set(wt(e)),r=t.severity??"error",a=[...s].join("/");return o=>{let i=[],l=(u,p)=>{let d=s.has(u.type),m=d?p+1:p;d&&m>n&&i.push(A("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,r));for(let f of childrenOf(u))l(f,m);};return l(o,0),i}}var Oe=(e=3,n="error")=>he(gn,e,{hint:"use a pipe instead of nesting functions",severity:n}),Ie=(e,n="error")=>he("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),je=(e,n="error")=>he("MemberExpression",e,{severity:n});function $e(e,n="error"){return t=>{let s=[],r=(a,o)=>{if(o>e){s.push(A("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of childrenOf(a))r(i,o+1);};return r(t,0),s}}function Le(e,n="error"){return t=>{let s=0;return H(t,()=>{s++;}),s>e?[A("too-large",t,`Expression has ${s} nodes (max ${e}).`,n)]:[]}}function Ue(e,n="error"){return t=>{let s=[];return H(t,r=>{if(r.type==="CallExpression"){let a=r.arguments;a&&a.length>e&&s.push(A("too-large",r,`Call has ${a.length} arguments (max ${e}).`,n));}}),s}}function Ve(e,n={},t="error"){return (s,r)=>{let a=r.overlay?.get(s)?.type;return a?subtype(a,e,n)?[]:[A("wrong-result-type",s,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function ge(e){let n=[Pe(e),Sn(e),Nn(e)];return e.hostAllow!=="*"&&n.push(Fe([...e.hostAllow])),n}function Et(e){return ge(compileProfile(e))}var q=e=>({bindings:new Map,parent:e}),Bn=e=>e.charCodeAt(0)===95;function Se(e,n,t,s,r,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:s,kind:r,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function re(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)re(s,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let s=t.path[0];typeof s=="string"&&Ne(n,s);return}for(let s of Object.keys(t))re(t[s],n);}function kn(e,n){let t=e;re(t.typeAnnotation,n),re(t.returnType,n);}function Ne(e,n){for(let t=e;t;t=t.parent){let s=t.bindings.get(n);if(s){s.used=true;return}}}function G(e,n,t,s,r,a){if(e)switch(e.type){case "Identifier":{let o=e.name;kn(e,n),Se(n,t,o,e,s,r||a&&Bn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")G(u.argument,n,t,s,r,false);else {let m=u;m.computed&&b(m.key,n,t),G(m.value,n,t,s,r||d,!m.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;G(i.type==="RestElement"?i.argument:i,n,t,s,r,true);}return}case "AssignmentPattern":G(e.left,n,t,s,r,a);return;case "RestElement":G(e.argument,n,t,s,r,true);return;default:return}}function se(e,n,t){if(e)switch(e.type){case "AssignmentPattern":b(e.right,n,t),se(e.left,n,t);return;case "ObjectPattern":for(let s of e.properties)se(s.type==="RestElement"?s.argument:s.value,n,t);return;case "ArrayPattern":for(let s of e.elements)s&&se(s,n,t);return;case "RestElement":se(e.argument,n,t);return;default:return}}function bn(e,n,t,s){for(let r of e.declarations)G(r.id,n,t,"local",s,false),b(r.init,n,t);}function xe(e,n,t){let s=e,r=q(n),a=s.params??[];for(let o of a)G(o,r,t,"parameter",false,true);for(let o of a)se(o,r,t);b(s.body,r,t);}function b(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(kn(e,n),e.type){case "Identifier":Ne(n,e.name);return;case "MemberExpression":{let s=e;b(s.object,n,t),s.computed&&b(s.property,n,t);return}case "Property":{let s=e;s.computed&&b(s.key,n,t),b(s.value,n,t);return}case "Program":case "BlockStatement":{let s=q(n);for(let r of e.body??[])b(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":xe(e,n,t);return;case "FunctionDeclaration":{let s=e.id;s&&Se(n,t,s.name,s,"local",false),xe(e,n,t);return}case "CatchClause":{let s=e,r=q(n);G(s.param,r,t,"local",true,false),b(s.body,r,t);return}case "SwitchStatement":{let s=e;b(s.discriminant,n,t);let r=q(n);for(let a of s.cases){b(a.test,r,t);for(let o of a.consequent??[])b(o,r,t);}return}case "ForStatement":{let s=e,r=q(n);b(s.init,r,t),b(s.test,r,t),b(s.update,r,t),b(s.body,r,t);return}case "ForOfStatement":case "ForInStatement":{let s=e;b(s.right,n,t);let r=q(n),a=s.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)G(o.id,r,t,"local",false,true);else b(a,r,t);b(s.body,r,t);return}case "VariableDeclaration":bn(e,n,t,false);return;case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&Se(n,t,r.name,r,"import",Bn(r.name));}return}case "ExportNamedDeclaration":{let s=e;if(s.declaration){let r=s.declaration;if(r.type==="VariableDeclaration")bn(r,n,t,true);else if(r.type==="FunctionDeclaration"){let a=r.id;a&&Se(n,t,a.name,a,"local",true),xe(r,n,t);}else b(r,n,t);}else for(let r of s.specifiers)Ne(n,r.local.name);return}case "TSAsExpression":b(e.expression,n,t);return;case "TSTypeAliasDeclaration":re(e.typeAnnotation,n);return;case "JsonExpression":Ge(e.body,n,t);return;case "JSXOpeningElement":{let s=e;wn(s.name,n);for(let r of s.attributes??[])b(r,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":b(e.value,n,t);return;default:{let s=VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)b(i,n,t);else b(o,n,t);}return}}}function wn(e,n,t){e&&(e.type==="JSXIdentifier"?Ne(n,e.name):e.type==="JSXMemberExpression"&&wn(e.object,n));}function Ge(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ge(r,n,t);return}let s=e;if("#expr"in s){try{b(fromJson(s),n,t);}catch{}return}for(let r of Object.keys(s))Ge(s[r],n,t);}function Ke(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};b(e,q(void 0),t);let s=[];for(let r of t.all)r.used||r.exempt||(r.kind==="parameter"?n.parameters:n.locals)&&s.push(S.unusedName(r.node,r.name));return s}var Tt=new Set(["const","import"]),ae=e=>({binds:new Map,parent:e});function Rt(e,n){for(let t=e;t;t=t.parent){let s=t.binds.get(n);if(s)return s}}function _(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?_(n.argument):_(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?_(n):[]);case "AssignmentPattern":return _(e.left);case "RestElement":return _(e.argument);default:return []}}var be=(e,n,t)=>{for(let s of _(n))e.binds.set(s.name,t);};function We(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of _(e))We(a,n,t);return}let s=e.name,r=Rt(n,s);r&&Tt.has(r)&&(t.invalid.add(e),t.out.push(S.assignToConst(e,s,r==="import"?"import":"const")));}function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let s=e;We(s.left,n,t),M(s.right,n,t);return}case "UpdateExpression":{We(e.argument,n,t);return}case "Program":case "BlockStatement":{let s=ae(n);for(let r of e.body??[])M(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=ae(n);for(let a of s.params??[])be(r,a,"param");M(s.body,r,t);return}case "CatchClause":{let s=e,r=ae(n);be(r,s.param,"param"),M(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=ae(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)be(r,o.id,a.kind);else a&&M(a,r,t);M(s.right,n,t),M(s.test,r,t),M(s.update,r,t),M(s.body,r,t);return}case "VariableDeclaration":{let s=e;for(let r of s.declarations)M(r.init,n,t),be(n,r.id,s.kind);return}case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&n.binds.set(r.name,"import");}return}case "ExportNamedDeclaration":{let s=e;s.declaration&&M(s.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":M(e.expression,n,t);return;default:{let s=VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)M(i,n,t);else M(o,n,t);}return}}}function ze(e){let n={out:[],invalid:new WeakSet};return M(e,ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var oe=e=>({decls:new Map,parent:e});function Pt(e,n){for(let t=e;t;t=t.parent){let s=t.decls.get(n);if(s)return s}}function Z(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?Z(n.argument):Z(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?Z(n):[]);case "AssignmentPattern":return Z(e.left);case "RestElement":return Z(e.argument);default:return []}}var Be=(e,n)=>{for(let t of Z(n))e.decls.set(t.name,t);};function C(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let s=Pt(n,e.name);s&&s!==e&&t.set(e,s);return}case "MemberExpression":{let s=e;C(s.object,n,t),s.computed&&C(s.property,n,t);return}case "Property":{let s=e;s.computed&&C(s.key,n,t),C(s.value,n,t);return}case "Program":case "BlockStatement":{let s=oe(n);for(let r of e.body??[])C(r,s,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let s=e,r=e.id;r&&n.decls.set(r.name,r);let a=oe(n);for(let o of s.params??[])Be(a,o);C(s.body,a,t);return}case "CatchClause":{let s=e,r=oe(n);Be(r,s.param),C(s.body,r,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let s=e,r=oe(n),a=s.left??s.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Be(r,o.id);else a&&C(a,r,t);C(s.right,n,t),C(s.test,r,t),C(s.update,r,t),C(s.body,r,t);return}case "VariableDeclaration":{for(let s of e.declarations)Be(n,s.id),C(s.init,n,t);return}case "ImportDeclaration":{for(let s of e.specifiers){let r=s.local;r&&n.decls.set(r.name,r);}return}case "TSTypeAliasDeclaration":{let s=e.id;s&&n.decls.set(s.name,s);return}case "TSAsExpression":C(e.expression,n,t);return;default:{let s=VisitorKeys[e.type];if(!s)return;let r=e;for(let a of s){let o=r[a];if(Array.isArray(o))for(let i of o)C(i,n,t);else C(o,n,t);}return}}}function Ft(e){let n=new WeakMap;return C(e,oe(void 0),n),n}var Je=e=>e.typeAnnotation,qe=e=>e.returnType,U=e=>e.type==="Identifier"?e.name:null,vn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?U(n.id):null}return U(e)},le=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function En(e){let n=s=>s&&s.type==="Literal"&&typeof s.value=="string"?s.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let s=[];for(let r of e[0].elements){let a=n(r);if(a===null)return null;s.push(a);}return s}let t=[];for(let s of e){let r=n(s);if(r===null)return null;t.push(r);}return t.length?t:null}function _e(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=_e(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function Xe(e){let n=e;if(n.regex||n.bigint)return s.unknown;let t=n.value;return t===null?s.null:t===void 0?s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:s.unknown}var X=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):Xe(e)},Qe=e=>e.type==="ArrowFunctionExpression",An=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,we=e=>An(e)?e.args[0]:e,ue=e=>An(e)?e:s.promise(e);function ie(e){return e.t==="tuple"?true:e.t==="array"?ie(e.items):e.t==="union"?e.of.some(ie):false}function ke(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ke(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ke(e.bound):false}var V=(e,n)=>{let t=e;for(let s=0;s<50&&t.t==="apply";s++){let r=expand1(t,n);if(r===t||r.t==="apply"&&r.name===t.name)break;t=r;}return t};function Dn(e){let n=qe(e);return n?{t:"fn",params:e.params.map((s$1,r)=>({name:U(s$1)??`arg${r}`,type:Je(s$1)??s.unknown})),returns:e.async?ue(n):n}:null}var K={then:{},else:{}},In=new Set(["string","number","boolean","undefined","function","object"]),Cn={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function jn(e,n){switch(n){case "string":return e.t==="string"||e.t==="literal"&&typeof e.value=="string";case "number":return e.t==="number"||e.t==="literal"&&typeof e.value=="number";case "boolean":return e.t==="boolean"||e.t==="literal"&&typeof e.value=="boolean";case "undefined":return e.t==="undefined";case "function":return e.t==="fn"||e.t==="overload";case "object":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="null";default:return false}}var $t=s.literal(true),Lt=s.literal(false),x=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[$t,Lt]:[e];function Tn(e,n){let t=e,s=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof s.value=="string"?{name:t.argument.name,tag:s.value}:null}function Ut(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let s=x(e).filter(r=>subtype(r,n,t));return s.length?normalizeUnion(s):n}function Vt(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let s=x(e).filter(r=>!subtype(r,n,t));return s.length?normalizeUnion(s):null}function xt(e,n){if(!In.has(n))return null;if(e.t==="unknown"||e.t==="any")return Cn[n]??e;let t=x(e).filter(s=>jn(s,n));return t.length?normalizeUnion(t):Cn[n]??e}function Gt(e,n){if(!In.has(n)||e.t==="unknown"||e.t==="any")return null;let t=x(e).filter(s=>!jn(s,n));return t.length?normalizeUnion(t):null}function Rn(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function Mn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Pn(e,n,t,s,r){let a=x(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return s?!!u&&subtype(t,u,r):!(u&&subtype(u,t,r))});return i.length&&i.length<a.length?normalizeUnion(i):null}function Fn(e,n,t){let s=x(e),r=o=>o.t==="object"&&(n in o.props||!!o.index),a=s.filter(o=>t?r(o):!r(o));return a.length&&a.length<s.length?normalizeUnion(a):null}function Kt(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function Wt(e,n,t){let s=x(e),r=s.filter(a=>!equals(a,n,t));return r.length&&r.length<s.length?normalizeUnion(r):null}var zt=e=>e.t==="null"||e.t==="undefined",$n=e=>zt(e)||e.t==="literal"&&!e.value,Jt=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=x(e),t=n.filter(s=>!$n(s));return t.length&&t.length<n.length?normalizeUnion(t):null},qt=e=>{let n=x(e),t=n.filter($n);return t.length&&t.length<n.length?normalizeUnion(t):null},On=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,j=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),_t=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function pe(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let f=s.left,N=s.right;if(f.type==="Literal"&&typeof f.value=="string"&&N.type==="Identifier"){let g=N.name,E=R(n,g);if(!E)return K;let v=String(f.value);return j(g,Fn(E,v,true),Fn(E,v,false))}return K}if(!_t(s.operator))return K;let r=s.operator==="!=="||s.operator==="!=",a=s.left,o=s.right,i=Tn(a,o)??Tn(o,a);if(i){let f=R(n,i.name);if(!f)return K;let N=xt(f,i.tag),g=Gt(f,i.tag);return r?j(i.name,g,N):j(i.name,N,g)}let l=On(a),u=On(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let f=p.name,N=R(n,f);if(!N)return K;let E=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],v=x(N),pn=v.filter(Ce=>E.includes(Ce.t)),De=v.filter(Ce=>!E.includes(Ce.t)),dn=pn.length?normalizeUnion(pn):null,fn=De.length&&De.length<v.length?normalizeUnion(De):null;return r?j(f,fn,dn):j(f,dn,fn)}let d=Rn(a,o)??Rn(o,a);if(d){let f=R(n,d.name);if(!f)return K;let N=Kt(f,d.lit,t),g=Wt(f,d.lit,t);return r?j(d.name,g,N):j(d.name,N,g)}let m=Mn(a,o)??Mn(o,a);if(m){let f=R(n,m.name);if(!f)return K;let N=Pn(f,m.prop,m.lit,true,t),g=Pn(f,m.prop,m.lit,false,t);return r?j(m.name,g,N):j(m.name,N,g)}return K}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=pe(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=Qt(e,n,t);if(s)return s}if(e.type==="Identifier"){let s=e.name,r=R(n,s);if(r)return j(s,Jt(r),qt(r))}return K}function Xt(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 Qt(e,n,t){let s=e.callee;if(s.type!=="Identifier")return null;let r=R(n,s.name);if(!r)return null;let a=Xt(r,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?j(i,Ut(l,a.type,t),Vt(l,a.type,t)):null}var W=(e,n)=>Object.keys(n).length?O(e,n):e;function I(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>I(t));case "IfStatement":{let n=e;return !!n.alternate&&I(n.consequent)&&I(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&I(n.finalizer))return true;let t=!n.handler||I(n.handler.body);return I(n.block)&&t}default:return false}}var ps=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function ds(e){let n=[];return e.maxDepth!==void 0&&n.push($e(e.maxDepth)),e.maxNodes!==void 0&&n.push(Le(e.maxNodes)),e.maxArgs!==void 0&&n.push(Ue(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Oe(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(Ie(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(je(e.memberDepth)),n}function fs(e,n){let t=e.typeRefs;return t?.length?t.filter(s=>!(s.name in n)).map(s=>A("unknown-name",{type:"Identifier",name:s.name,loc:s.loc},`Cannot find name '${s.name}'.`)):[]}function _n(e,n,t={}){let s$1={...ps(n.types),...n.schemes,...ys(e)},r=ze(e),a={overlay:new WeakMap,sink:te(),env:n,schemes:s$1,importNames:new Set,resolvedSchemes:new Set,invalidTargets:r.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?compileProfile(t.profile):void 0;o&&configureTypeLimits(o.typeLimits);try{let i,l=hs(e,a);try{i=y(e,l,a);}catch(d){if(d instanceof TypeEvalLimitError)a.sink.report(A("too-deep",e,d.message));else if(d instanceof UnionTooComplexError)a.sink.report(A("too-complex-union",e,d.message));else throw d;i=s.unknown;}let u=[];o&&u.push(...ge(o)),t.limits&&u.push(...ds(t.limits)),t.resultType&&u.push(Ve(t.resultType,s$1));let p=[...a.sink.all,...r.diagnostics,...fs(e,s$1),...t.unused?Ke(e,t.unused):[],...u.length?Me(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function ms(e,n,t={}){let s$1=_n(e,n,t),r={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let m=U(d.id),f=s$1.overlay.get(d);m&&f&&(r[m]=f.type,p.push(m));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,m=s$1.overlay.get(u);d&&m&&(r[d]=m.type,p.push(d));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=s$1.overlay.get(u.declaration);o=p?p.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)r[p]&&(l[u]={type:r[p]});o!==void 0&&(l.default={type:o});}else for(let u in r)l[u]={type:r[u]};return {type:{t:"object",props:l},diagnostics:s$1.diagnostics}}var ys=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let s=t;s.id?.name&&s.typeAnnotation&&(n[s.id.name]={params:s.typeParameters??[],body:s.typeAnnotation});}}),n};function hs(e,n){let t=n.env.modules,s$1={};walk(e,{ImportDeclaration(r){let a=r,o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(S.unknownModule(a.source,String(o)));for(let l of a.specifiers)s$1[l.local.name]=s.unknown;return}for(let l of a.specifiers){let u=l.local.name;if(u in s$1){n.sink.report(S.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){s$1[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",d=discover(i,[p],n.schemes);d?s$1[u]=d.type:(n.sink.report(S.noSuchMember(l,i,p)),s$1[u]=s.unknown);}}});for(let r in s$1)n.importNames.add(r);return Object.keys(s$1).length?O(n.env.scope,s$1):n.env.scope}var h=(e,n,t,s)=>(e.overlay.set(n,{type:t,scope:s}),t);function y(e,n,t,s$1){switch(e.type){case Xn:return e.schema;case "JSXElement":case "JSXFragment":return h(t,e,y(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return h(t,e,Xe(e),n);case "Identifier":{let r=e.name,a=R(n,r);return a===void 0?r==="undefined"?h(t,e,s.undefined,n):(t.sink.report(S.unknownName(e,r)),h(t,e,s.unknown,n)):h(t,e,a,n)}case "MemberExpression":return h(t,e,Ns(e,n,t),n);case "CallExpression":return h(t,e,ws(e,n,t,s$1),n);case "ArrowFunctionExpression":return an(e,n,t);case "FunctionDeclaration":return t.sink.report(S.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),h(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(S.unsupported(e,"anonymous function (use an arrow)")),h(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(S.unsupported(e,"'this'")),h(t,e,s.unknown,n);case "BlockStatement":return h(t,e,st(e,n,t),n);case "ReturnStatement":{let r=e.argument;return h(t,e,r?y(r,n,t):s.unknown,n)}case "IfStatement":return L(e,n,t),t.overlay.get(e)?.type??s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return L(e,n,t),t.overlay.get(e)?.type??s.unknown;case "AssignmentExpression":{let r=e,a=r.left,o=y(a,n,t);if(a.type==="MemberExpression"){let p=t.overlay.get(a.object)?.type,d=p&&apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(S.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(r.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=y(r.right,n,t);return t.assignFlow.set(e,widenLiteral(d)),h(t,e,d,n)}if(u&&i!==null){let d=y(r.right,n,t);return subtype(d,u,t.schemes)||t.sink.report(S.notAssignable(r.right,d,u,t.schemes)),t.assignFlow.set(e,rt(u,d,t.schemes)),h(t,e,d,n)}let p=J(r.right,o,n,t);return h(t,e,p,n)}return h(t,e,y(r.right,n,t),n)}case "UpdateExpression":{let r=e,a=y(r.argument,n,t);return de(a,t.schemes)||t.sink.report(S.arithmeticOperand(r.argument,"operand")),h(t,e,s.number,n)}case "ExpressionStatement":return h(t,e,y(e.expression,n,t),n);case "VariableDeclaration":return Ee(e,n,t),h(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let r=e.id?.name,a=r?t.schemes[r]:void 0;return h(t,e,a?Cs(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return h(t,e,Ws(e,n,t),n);case "LogicalExpression":{let r=e,a=y(r.left,n,t),o=y(r.right,n,t);return h(t,e,zs(r.operator,a,o),n)}case "UnaryExpression":return h(t,e,Xs(e,n,t),n);case "ConditionalExpression":{let r=e;y(r.test,n,t);let a=pe(r.test,n,t.schemes),o=y(r.consequent,W(n,a.then),t),i=y(r.alternate,W(n,a.else),t);return h(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return h(t,e,Qs(e,n,t),n);case "ArrayExpression":return h(t,e,lt(e,n,t),n);case "TemplateLiteral":{for(let r of e.expressions)y(r,n,t);return h(t,e,s.string,n)}case "AwaitExpression":{let r=e.argument,a=r?y(r,n,t):s.unknown;return h(t,e,we(a),n)}case "Program":{let r=ve(e.body,n,t,new Set(t.importNames)).scope;return h(t,e,s.unknown,r)}case "JsonExpression":return h(t,e,en(e.body,n,t,e),n);case "ChainExpression":return h(t,e,normalizeUnion([y(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let r=e,a=y(r.expression,n,t),o=ye(r.typeAnnotation,n,t,e);return !subtype(a,o,t.schemes)&&!subtype(o,a,t.schemes)&&t.sink.report(S.castUnsound(e,a,o)),h(t,e,o,n)}default:return t.sink.report(S.unsupported(e,`'${e.type}'`)),h(t,e,s.unknown,n)}}var gs=new Set(["constructor","prototype","__proto__"]);function Ss(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 Ns(e,n,t){let s$1=y(e.object,n,t),r=Ss(e);if(r!==null&&gs.has(r))return t.sink.report(S.forbiddenMember(e,r)),s.unknown;if(e.computed){let i=y(e.property,n,t),l=resolveTypeOp(s.index(s$1,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&Ln(e,s$1,i.value,t),s.unknown)}let a=e.property.name,o=discover(s$1,[a],t.schemes);return o?o.type:(Ln(e,s$1,a,t),s.unknown)}function Ln(e,n,t,s){let r=isScheme(n,s.schemes)?expand1(n,s.schemes):n;r.t==="object"||r.t==="array"||r.t==="tuple"||r.t==="union"?s.sink.report(S.noSuchMember(e,n,t)):r.t!=="any"&&r.t!=="unknown"&&s.sink.report(S.notObject(e,n));}function bs(e,n,t){if(!e||e.type!=="Identifier")return;let s=e.name;if(R(n,s)===void 0)return;let r=t.schemes[s];return r&&r.params.length===0?r.body:void 0}function Bs(e,n,t,s$1){let r=V(y(n[0],t,s$1),s$1.schemes),o=(r.t==="fn"?r:r.t==="overload"?r.signatures[0]:void 0)?.params[0]?.type,i=n.length>1?y(n[1],t,s$1):s.undefined;if(o){let l=typeDiff(i,o,s$1.schemes);l.length&&s$1.sink.report(S.propsMismatch(n[1]??e,o,formatTypeDiff(l)));}return h(s$1,e,s.boolean,t)}var Xn="TSLiteSyntheticArg",ks=e=>({type:Xn,schema:e});function Qn(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let s$1=[],r=null;for(let a of e){if(a.type!=="SpreadElement"){s$1.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)s$1.push(l);continue}let i=V(y(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)s$1.push(ks(l));else r={elem:i.t==="array"?i.items:s.unknown,node:a};}return {nodes:s$1,spread:r}}function ws(e,n,t,s$1){let r=e.arguments,a=_e(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let m=En(r);if(m){let f=discover(d,m,t.schemes);return f?f.type:(t.sink.report(S.noSuchMember(e,d,m.join("."))),s.unknown)}return r.forEach(f=>y(f,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let d=bs(r[0],n,t);for(let m=1;m<r.length;m++)y(r[m],n,t);return d??s.unknown}if(a&&t.env.matchers?.has(a))return Bs(e,r,n,t);let o=y(e.callee,n,t);if(o.t==="any")return r.forEach(d=>y(d,n,t)),s.any;if(o.t==="overload")return Es(e,o,n,t,s$1);if(o.t!=="fn")return r.forEach(d=>y(d,n,t)),t.sink.report(S.notCallable(e,o)),s.unknown;let i=Qn(r,n,t),l=i.nodes.map(d=>Yn(d,n,t)),u=et(e),p=!u||nt(o,u.length);return p||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),Hn(e,o,i.nodes,l,n,t,i.spread,s$1,p?u:void 0)}function Yn(e,n,t){if(Qe(e))return s.any;if(e.type!=="CallExpression")return y(e,n,t);let s$1=te(),r=y(e,n,{...t,sink:s$1});return s$1.hasErrors()?s.any:(s$1.all.forEach(a=>t.sink.report(a)),r)}function Hn(e,n,t,s$1,r,a,o=null,i,l){let u=f=>{if(!i)return f;let N=substitute(n.returns,f);if(N.t==="fn"&&i.t==="fn"){let g=f,E=Math.min(N.params.length,i.params.length);for(let v=0;v<E;v++)g=unify(N.params[v].type,i.params[v].type,g)??g;return unify(N.returns,i.returns,g)??g}return unify(N,i,f)??f},p=l?Rs(e,n,l,a):void 0,d=p??u(instantiateLoose(n,s$1).bindings);t.forEach((f,N)=>{if(Qe(f)){let g=widenType(substitute(n.params[N]?.type??s.any,d));s$1[N]=an(f,r,a,g);}else if(f.type==="CallExpression"&&s$1[N].t==="any")s$1[N]=y(f,r,a,substitute(n.params[N]?.type??s.unknown,d));else if(f.type==="Literal"){let g=n.params[N]?.type??s.unknown,E=g.t==="var"?g.bound?substitute(g.bound,d):g:substitute(g,d);ke(E)&&(s$1[N]=h(a,f,X(f),r));}else if(f.type==="ArrayExpression"){let g=substitute(n.params[N]?.type??s.unknown,d);ie(g)&&(s$1[N]=ln(f,g,r,a));}});let m=p??u(instantiateLoose(n,s$1).bindings);return p||vs(e,n,m,a),Os(e,n,s$1,m,a,t,o),t.forEach((f,N)=>{let g=n.params[N];f.type==="ObjectExpression"&&g&&!g.variadic&&on(f,substitute(g.type,m),a);}),widenInferred(groundVars(substitute(n.returns,m),a.schemes))}var Un=new WeakMap;function Zn(e){let n=Un.get(e);if(n)return n;let t=new Map,s=new WeakSet;for(let r of e.params)P(r.type,t,s);return P(e.returns,t,s),Un.set(e,t),t}function P(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":P(e.items,n,t);return;case "union":for(let s of e.of)P(s,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let s in e.props)P(e.props[s].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let s of e.params)P(s.type,n,t);P(e.returns,n,t);return;case "overload":for(let s of e.signatures){for(let r of s.params)P(r.type,n,t);P(s.returns,n,t);}return;case "apply":for(let s of e.args)P(s,n,t);return;case "keyof":P(e.of,n,t);return;case "index":P(e.obj,n,t),P(e.key,n,t);return;case "mapped":P(e.over,n,t),P(e.body,n,t);return;default:return}}function vs(e,n,t,s){let r=Zn(n);if(r.size!==0)for(let[a,o]of r){let i=t[a];if(!i)continue;let l=substitute(o,t);subtype(i,l,s.schemes)||s.sink.report(S.constraintViolation(e,a,i,l));}}function Es(e,n,t,s,r){let a=Qn(e.arguments,t,s),o=a.nodes,i=o.map(p=>Yn(p,t,s)),l=et(e),u=l?n.signatures.filter(p=>nt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,m)=>Math.max(d,m.typeParams?.length??0),0);return s.sink.report(S.wrongTypeArgumentCount(e,p,l.length)),Vn(e,n.signatures,a,o,i,t,s,r,void 0)}return Vn(e,u,a,o,i,t,s,r,l)}function Vn(e,n,t,s$1,r,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?Ms(m,s$1.length):Ps(m,s$1.length),d=u.signatures.find(m=>p(m)&&Fs(m,r,o));if(!d){let m=u.signatures.filter(p);m.length===1?d=m[0]:u.signatures.length===1&&(d=u.signatures[0]);}return d?Hn(e,d,s$1,r,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,r)),s.unknown)}function As(e,n,t,s$1){let r=R(n,e[0]);if(r===void 0)return t.sink.report(S.unknownName(s$1,e[0])),s.unknown;let a=e.slice(1),o=a.length?discover(r,a,t.schemes)?.type:r;return o?o.t==="literal"?s.literal(o.value):o:(t.sink.report(S.noSuchMember(s$1,r,a.join("."))),s.unknown)}function ye(e,n,t,s$1){let r=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let m=r(d);return m!==d&&(u=true),m});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return As(o.path,n,t,s$1);if(o.t==="apply"&&typeof o.name=="string"&&(Ds(o.name,n,t,s$1),!(o.name in t.schemes)))return s.any;let i=false,l={};for(let u of Object.keys(o)){let p=r(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return r(e)}function Ds(e,n,t,s){if(t.resolvedSchemes.has(e))return;let r=t.schemes[e];if(!r)return;t.resolvedSchemes.add(e);let a=ye(r.body,n,t,s);a!==r.body&&(t.schemes[e]={...r,body:a});}function Cs(e,n,t,s,r){let a={...t,sink:te(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=ye(e,n,a,s);return a.sink.hasErrors()?e:r?o:groundVars(o,t.schemes)}var rn=(e,n,t)=>{let s=Je(e);return s===void 0?s:ye(s,n,t,e)},Ts=(e,n,t)=>{let s=qe(e);return s===void 0?s:ye(s,n,t,e)},et=e=>{let n=e.typeArguments;return n?.length?n:void 0},nt=(e,n)=>(e.typeParams?.length??0)===n;function Rs(e,n,t,s){let r=n.typeParams??[],a={};r.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Zn(n)){let u=o[i];if(!u)continue;let p=groundVars(substitute(l,o),s.schemes);subtype(u,p,s.schemes)||s.sink.report(S.constraintViolation(e,i,u,p));}return o}function Ms(e,n){let t=0,s=false;for(let r of e.params)r.variadic?s=true:r.optional||t++;return n>=t&&(s||n<e.params.length)}function Ps(e,n){let t=0;for(let s of e.params){if(s.variadic)return n>=t;s.optional||t++;}return n>=t&&n<=e.params.length}function Fs(e,n,t){let{bindings:s}=instantiateLoose(e,n);for(let r=0;r<e.params.length;r++){let a=e.params[r];if(a.variadic)return true;if(r>=n.length){if(!a.optional)return false;continue}if(!subtype(n[r],substitute(a.type,s),t.schemes))return false}return true}function Os(e,n,t,s$1,r,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic)break;let d=substitute(p.type,s$1);if(u>=t.length){!p.optional&&!o&&r.sink.report(S.missingArgument(e,p.name,d));continue}subtype(t[u],d,r.schemes)||r.sink.report(S.notAssignable(i(u),t[u],d,r.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){r.sink.report(S.spreadArgument(o.node));return}if(l){let d=substitute(l.type,s$1),m=d.t==="array"?d.items:s.unknown;subtype(o.elem,m,r.schemes)||r.sink.report(S.notAssignable(o.node,o.elem,m,r.schemes));}return}!l&&t.length>n.params.length&&r.sink.report(S.excessArgument(i(n.params.length),n.params.length,t.length));}function J(e,n,t,s){let r=V(n,s.schemes);switch(e.type){case "Literal":{let o=X(e);return subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,n,t)}case "ArrayExpression":{if(ie(r)){let o=ln(e,r,t,s);return subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,o,t)}if(r.t==="array"){for(let o of e.elements){if(!o)continue;let i=o;i.type==="SpreadElement"?J(i.argument,n,t,s):J(i,r.items,t,s);}return h(s,e,n,t)}break}case "ObjectExpression":{if(r.t==="object"){let o={};for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){y(u.argument,t,s);continue}let p=u,d=le(p),m=d!==null?ownProp(r.props,d)?.type:void 0,f=m?J(p.value,m,t,s):y(p.value,t,s);d!==null&&(o[d]={type:f}),h(s,u,f,t);}let i={t:"object",props:o};return subtype(i,n,s.schemes)||s.sink.report(S.notAssignable(e,i,n,s.schemes)),h(s,e,n,t)}break}case "ArrowFunctionExpression":{if(r.t==="fn"){let o=an(e,t,s,r);return subtype(o,n,s.schemes)||s.sink.report(S.notAssignable(e,o,n,s.schemes)),h(s,e,n,t)}break}case "ConditionalExpression":{let o=e;return y(o.test,t,s),J(o.consequent,n,t,s),J(o.alternate,n,t,s),h(s,e,n,t)}}let a=y(e,t,s);return subtype(a,n,s.schemes)||s.sink.report(S.notAssignable(e,a,n,s.schemes)),h(s,e,a,t)}function an(e,n,t,s$1){let r=s$1&&s$1.t==="fn"?s$1:void 0,a={},o=new Map,i=e.params.map((f,N)=>{let g=f,E=U(g),v=rn(g,n,t)??r?.params[N]?.type??s.unknown;return E?(a[E]=v,(v.t==="union"||v.t==="boolean")&&o.set(E,v)):g.type!=="Identifier"&&Q(g,v,a,n,t),t.overlay.set(g,{type:v,scope:n}),{name:E??`arg${N}`,type:v}}),l=O(n,a),u=e.body,p=Ts(e,n,t);if(u.type!=="BlockStatement"&&p){let f=e.async?we(p):p;J(u,f,l,t);let N=e.async?ue(p):p;return h(t,e,{t:"fn",params:i,returns:N},n)}let d=u.type==="BlockStatement"?h(t,u,st(u,l,t,new Set(Object.keys(a)),o),l):y(u,l,t),m=e.async?ue(d):d;if(p){let f=e.async?we(p):p,N=e.async?d:m;subtype(N,f,t.schemes)||t.sink.report(S.notAssignable(u,m,p,t.schemes));let g=e.async?ue(p):p;return h(t,e,{t:"fn",params:i,returns:g},n)}return h(t,e,{t:"fn",params:i,returns:widenType(m)},n)}function ne(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ne(n.argument):ne(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?ne(n.argument):ne(n):[]);case "AssignmentPattern":return ne(e.left);default:return []}}function tt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>ne(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?tt(e.declaration):[]}function st(e,n,t,s$1=new Set,r){let{returns:a}=ve(e.body,n,t,s$1,r),o=!I(e);return a.length===0?o?s.void:s.union([]):normalizeUnion(o?[...a,s.undefined]:a)}var Is=[s.literal(true),s.literal(false)];function js(e){return e.t==="union"?e.of:e.t==="boolean"?Is:[e]}function rt(e,n,t){let s=js(e);if(s.length<=1)return e;let r=s.filter(o=>subtype(n,o,t));if(r.length===0)return e;let a=normalizeUnion(r);return subtype(n,a,t)?a:e}function at(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let s=t,r=s.left;if(s.operator!=="="||r.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:r.name,type:a}:null}function Y(e,n,t){switch(e.type){case "BlockStatement":{let s=n;for(let r of e.body){let a=Y(r,s,t);if(s=a.types,a.exits)return {types:s,exits:true}}return {types:s,exits:false}}case "ExpressionStatement":{let s=at(e,t);if(!s)return {types:n,exits:false};let r=new Map(n);return r.set(s.name,s.type),{types:r,exits:false}}case "IfStatement":{let s=ot(e,n,t);if(s.size===0)return {types:n,exits:I(e)};let r=new Map(n);for(let[a,o]of s)r.set(a,o);return {types:r,exits:I(e)}}case "TryStatement":{let s=e,r=[],a=Y(s.block,n,t);if(a.exits||r.push(a.types),s.handler){let i=Y(s.handler.body,n,t);i.exits||r.push(i.types);}let o=$s(n,r);return s.finalizer&&(o=Y(s.finalizer,o,t).types),{types:o,exits:I(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function ot(e,n,t){let s=Y(e.consequent,n,t),r=e.alternate?Y(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];s.exits||l.push(s.types.get(i)??n.get(i)),r.exits||l.push(r.types.get(i)??n.get(i)),l.length&&o.set(i,normalizeUnion(l));}return o}function it(e,n){let t=new Map,s=r=>{let a=R(e,r);a!==void 0&&t.set(r,a);};for(let r of n.evolving)s(r);for(let r of n.declaredMut.keys())s(r);return t}function $s(e,n){let t=new Map(e);if(n.length===0)return t;for(let s of e.keys()){let r=n.map(a=>a.get(s)??e.get(s));t.set(s,normalizeUnion(r));}return t}function Ls(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let s=it(n,t),r=Y(e,s,t);if(r.exits)return n;let a={};for(let[o,i]of r.types)s.has(o)&&i!==s.get(o)&&(a[o]=i);return W(n,a)}function ve(e,n,t,s=new Set,r){if(!(r&&r.size)&&!Us(e))return xn(e,n,t,s);let a=new Set(t.evolving),o=new Map(t.declaredMut);if(r)for(let[i,l]of r)t.declaredMut.set(i,l);try{return xn(e,n,t,s)}finally{t.evolving.clear();for(let i of a)t.evolving.add(i);t.declaredMut.clear();for(let[i,l]of o)t.declaredMut.set(i,l);}}function Us(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let s=t.declaration;if(s?.type==="VariableDeclaration"&&s.kind!=="const")return true}}return false}function xn(e,n,t,s){let r=n,a=[];for(let o of e){let i=o;for(let l of tt(i))s.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):s.add(l.name);if(i.type==="VariableDeclaration")r=Ee(i,r,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")r=Ee(l.declaration,r,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=y(l.declaration,r,t),p=U(l.declaration.id);p&&(r=O(r,{[p]:u}));}else for(let u of l.specifiers)R(r,u.local.name)===void 0&&t.sink.report(S.unknownName(u.local,u.local.name));}else if(i.type==="ExportDefaultDeclaration")y(i.declaration,r,t);else if(i.type==="FunctionDeclaration"){let l=y(i,r,t),u=U(i.id);u&&(r=O(r,{[u]:l}));}else if(i.type==="IfStatement"){let l=i,u=t.evolving.size||t.declaredMut.size?it(r,t):null;if(a.push(...L(i,r,t)),u&&u.size){let p=ot(l,u,t);p.size&&(r=W(r,Object.fromEntries(p)));}!l.alternate&&I(l.consequent)&&(r=W(r,pe(l.test,r,t.schemes).else));}else {a.push(...L(i,r,t));let l=at(i,t);l?r=W(r,{[l.name]:l.type}):(i.type==="BlockStatement"||i.type==="TryStatement")&&(r=Ls(i,r,t));}}return {scope:r,returns:a}}function L(e,n,t){switch(e.type){case "ReturnStatement":{let s$1=e.argument,r=s$1?y(s$1,n,t):s.unknown;return h(t,e,r,n),[r]}case "IfStatement":{let s$1=e;y(s$1.test,n,t);let r=pe(s$1.test,n,t.schemes),a=L(s$1.consequent,W(n,r.then),t);return s$1.alternate&&a.push(...L(s$1.alternate,W(n,r.else),t)),h(t,e,s.unknown,n),a}case "BlockStatement":{let{returns:s$1}=ve(e.body,n,t);return h(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,r=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?r=Ee(s$1.init,r,t):y(s$1.init,r,t)),s$1.test&&y(s$1.test,r,t),s$1.update&&y(s$1.update,r,t);let a=L(s$1.body,r,t);return h(t,e,s.unknown,n),a}case "ForOfStatement":case "ForInStatement":{let s$1=e,r=y(s$1.right,n,t),a=e.type==="ForOfStatement"?r.t==="array"?r.items:s.unknown:s.string,o=vn(s$1.left),i=o?O(n,{[o]:a}):n,l=L(s$1.body,i,t);return h(t,e,s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return h(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&y(s$1,n,t),h(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,r=L(s$1.block,n,t);if(s$1.handler){let a=s$1.handler.param,o=a?U(a):null,i=o?O(n,{[o]:s.unknown}):n;r.push(...L(s$1.handler.body,i,t));}return s$1.finalizer&&r.push(...L(s$1.finalizer,n,t)),h(t,e,s.unknown,n),r}case "SwitchStatement":{let s$1=e;y(s$1.discriminant,n,t);let r=n,a=[];for(let o of s$1.cases){o.test&&y(o.test,r,t);let i=ve(o.consequent,r,t);r=i.scope,a.push(...i.returns);}return h(t,e,s.unknown,n),a}default:return y(e,n,t),[]}}function Vs(e,n,t){let s$1=discover(e,[n],t.schemes);return s$1?s$1.type:s.unknown}function xs(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function Gs(e,n){if(e.t!=="object")return e;let t={};for(let s in e.props)n.includes(s)||(t[s]=e.props[s]);return s.object(t,e.index)}function Ks(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function Q(e,n,t,s$1,r){switch(e.type){case "Identifier":{let a=rn(e,s$1,r)??n;t[e.name]=a,r.overlay.set(e,{type:a,scope:s$1});return}case "AssignmentPattern":{let a=e,o=widenType(y(a.right,s$1,r)),{type:i}=withoutUndefined(n),l=i.t==="unknown"?o:normalizeUnion([i,o]);Q(a.left,l,t,s$1,r);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Q(o.argument,Gs(n,a),t,s$1,r);continue}let i=o,l=le(i);l!=null&&a.push(l);let u=l!=null?Vs(n,l,r):s.unknown;Q(i.value,u,t,s$1,r);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Q(i.argument,Ks(n,o),t,s$1,r):Q(i,xs(n,o),t,s$1,r);});return}}}function on(e,n,t){let s=V(n,t.schemes),a=(s.t==="union"?s.of.map(o=>V(o,t.schemes)):[s]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=le(i);if(l===null)continue;let u=a.filter(p=>l in p.props);if(!u.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&on(i.value,u[0].props[l].type,t);}}function Ee(e,n,t){let s$1={};for(let r of e.declarations){let a=r.id,o=U(a),i=rn(a,n,t);if(!r.init){if(o&&e.kind!=="const"){i?(s$1[o]=i,Gn(o,i,t)):(s$1[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(S.constNeedsInit(r)),o&&(s$1[o]=i??s.unknown);continue}let l=i??(r.init.type==="ArrowFunctionExpression"?Dn(r.init):null),u=o&&l?O(n,{[o]:l}):n,p,d=null;i?(J(r.init,i,u,t),r.init.type==="ObjectExpression"&&on(r.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&r.init.type==="Literal"&&(p=rt(i,X(r.init),t.schemes))):(p=y(r.init,u,t),e.kind!=="const"&&(p=widenLiteral(p)),d=p),h(t,r,p,n),o?(s$1[o]=p,e.kind!=="const"&&d&&Gn(o,d,t)):Q(a,p,s$1,n,t);}return h(t,e,s.unknown,n),O(n,s$1)}function Gn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Ws(e,n,t){let s$1=y(e.left,n,t),r=y(e.right,n,t),a=e.operator;if(a==="+")return Kn(s$1,t.schemes)||Kn(r,t.schemes)?s.string:de(s$1,t.schemes)&&de(r,t.schemes)?s.number:(t.sink.report(S.operatorNotApplicable(e,"+",s$1,r)),s.number);if(Js.has(a))return de(s$1,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),de(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right")),s.number;if(qs.has(a)){if(!Ae(s$1)&&!Ae(r)){let o=apparentType(s$1,t.schemes),i=apparentType(r,t.schemes),l=subtype(o,s.number,t.schemes),u=subtype(i,s.number,t.schemes);l&&u||!l&&!u&&(subtype(o,i,t.schemes)||subtype(i,o,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,s$1,r));}return s.boolean}return s.boolean}var Ae=e=>e.t==="any"||e.t==="unknown",de=(e,n)=>Ae(e)||subtype(apparentType(e,n),s.number,n),Kn=(e,n)=>!Ae(e)&&subtype(apparentType(e,n),s.string,n),Wn={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},He=e=>e.t==="null"||e.t==="undefined";function zs(e,n,t){if(n.t==="any"||n.t==="unknown")return normalizeUnion([n,t]);let s$1=n.t==="union"?[...n.of]:n.t==="boolean"?[s.literal(true),s.literal(false)]:[n];if(e==="??")return normalizeUnion([...s$1.filter(a=>!He(a)),t]);if(e==="||")return normalizeUnion([...s$1.filter(a=>!He(a)&&!(a.t==="literal"&&!a.value)),t]);let r=s$1.flatMap(a=>He(a)?[a]:a.t==="literal"?a.value?[]:[a]:Wn[a.t]?[Wn[a.t]]:[]);return normalizeUnion([...r,t])}var Js=new Set(["-","*","/","%","**","&","|","^","<<",">>",">>>"]),qs=new Set(["<",">","<=",">="]),_s=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function Xs(e,n,t){let s$1=y(e.argument,n,t);switch(e.operator){case "!":return s$1.t==="literal"?{t:"literal",value:!s$1.value,fresh:true}:s.boolean;case "-":return s$1.t==="literal"&&typeof s$1.value=="number"?{t:"literal",value:-s$1.value,fresh:true}:s.number;case "+":case "~":return s.number;case "typeof":return _s;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function Qs(e,n,t){let s={},r,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=V(y(p.argument,n,t),t.schemes);if(g.t==="object"){for(let E in g.props)s[E]=g.props[E];g.index&&(r={key:g.index.key,type:g.index.value});}continue}let d=p,m=y(d.value,n,t),f=widen(m);if(h(t,p,m,n),d.computed){let g=V(y(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(s[g.value]={type:f},a.push(f)):g.t==="literal"&&typeof g.value=="number"?(s[String(g.value)]={type:f},a.push(f),o.push(f)):g.t==="string"?(i=true,a.push(f)):g.t==="number"&&(l=true,a.push(f),o.push(f));continue}let N=le(d);N!==null&&(s[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}return i?r={key:"string",type:normalizeUnion(a)}:l&&(r={key:"number",type:normalizeUnion(o)}),r?{t:"object",props:s,index:{key:r.key,value:r.type}}:{t:"object",props:s}}function lt(e,n,t){let s$1=[];for(let r of e.elements){if(!r)continue;let a=r;if(a.type==="SpreadElement"){let o=V(y(a.argument,n,t),t.schemes);o.t==="array"?s$1.push(o.items):o.t==="tuple"&&s$1.push(...o.elements);continue}s$1.push(widen(y(a,n,t)));}return s.array(s$1.length?normalizeUnion(s$1):s.unknown)}function ln(e,n,t,s$1){let r=V(n,s$1.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?ln(l,u,t,s$1):widen(y(l,t,s$1));if(r.t==="tuple"&&o&&a.length===r.elements.length){let l=a.map((u,p)=>i(u,r.elements[p]));return h(s$1,e,{t:"tuple",elements:l},t)}if(r.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){y(p.argument,t,s$1);continue}l.push(i(p,r.items));}return h(s$1,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return lt(e,t,s$1)}function en(e,n,t,s$1){if(e===null)return s.null;switch(typeof e){case "string":return s.string;case "number":return s.number;case "boolean":return s.boolean;case "object":break;default:return s.unknown}if(Array.isArray(e)){let o=e.map(i=>en(i,n,t,s$1));return s.array(o.length?normalizeUnion(o):s.unknown)}let r=e;if("#expr"in r){let o;try{o=fromJson(r);}catch{return t.sink.report(S.unsupported(s$1,`'#expr: ${String(r["#expr"])}'`)),s.unknown}return y(o,n,t)}let a={};for(let o of Object.keys(r))a[o]={type:en(r[o],n,t,s$1)};return {t:"object",props:a}}var Ys=(e,n)=>({...e,typeAnnotation:n}),Hs=(e,n)=>({...e,returnType:n}),Zs=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function ut(e,n){return e.get(n)?.type}function er(e,n){return e.get(n)?.scope}function nr(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function tr(e,n){let t=e.get(n)?.scope;return t?[...Te(t)].map(([s,r])=>({key:s,type:r,optional:false})):[]}var sr=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function rr(e){if(!e||e.computed)return;let n=e.key;if(n?.type==="Identifier")return n.name;if(n?.type==="Literal"&&typeof n.value=="string")return n.value}function cn(e,n,t,s={}){let r=e[n],a=e[n+1];if(!(!r||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===r?a.returnType:void 0;case "VariableDeclarator":return a.init===r?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(sr)?.returnType;case "CallExpression":case "NewExpression":{let o=(a.arguments??[]).indexOf(r);if(o<0)return;let i=ut(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==r||e[n+2]?.type!=="ObjectExpression")return;let i=cn(e,n+2,t,s),l=rr(a);return !i||!l?void 0:discover(i,[l],s)?.type}case "ArrayExpression":{let o=cn(e,n+1,t,s);return o?discover(o,["[]"],s)?.type:void 0}default:return}}function ar(e,n){return e.filter(t=>t.node===n)}export{gn as FUNCTION_KINDS,Ys as annotate,Hs as annotateReturn,Zs as asExpression,Fe as calleeAllowlist,Pe as capabilityNodes,_n as check,O as childScope,Ft as collectBindings,ze as collectMutations,Ke as collectUnused,cn as contextualTypeAt,mt as createEnv,te as createSink,S as diag,ar as diagnosticsAt,ms as extractModuleType,Et as fromCapability,Me as guard,ge as guardsFromCompiled,R as lookup,A as makeDiagnostic,Ue as maxArgs,Ie as maxCallNesting,$e as maxDepth,Oe as maxFunctionNesting,he as maxNestingOf,Le as maxNodes,nr as memberCompletions,je as memberDepth,yt as resolveNamed,ht as resolveScheme,Ve as resultType,mn as rootScope,er as scopeAt,tr as scopeCompletions,ut as typeAt,Te as visibleNames};
|
|
1
|
+
import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,ownProp,withoutUndefined,widen,unify,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,childrenOf,VisitorKeys}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var Bn=(e={})=>rootScope(e),I=(e,n)=>childScope(e,n),D=(e,n)=>lookup(e,n),Me=e=>visibleNames(e),wt=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:Bn(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),Et=(e,n)=>e.types[n],vt=(e,n)=>e.schemes[n];var kn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:kn[e],severity:"error",node:n,message:t}),A=(e,n,t,r="error")=>({code:e,kind:kn[e],severity:r,node:n,message:t}),S={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(u=>u.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),l=s.filter(u=>u.kind==="missing"&&u.path.length===1).map(u=>({name:u.path[0],type:u.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),unknownModule:(e,n)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>B("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>A("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>A("cast-unsound",e,`Conversion of type '${format(n)}' to type '${format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(r)}'.`)};function re(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Fe(e,n,t={}){return n.flatMap(r=>r(e,t))}function Z(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var Pt=e=>Array.isArray(e)?e:[e],En=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function je(e,n="error"){return t=>{let r=[];return Z(t,s=>{let a=nodeViolation(s,e);a&&r.push(A("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function vn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return Z(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 u=typeFeatureViolations(typeFeatures(l,i),t);u.length&&s.push(A("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function w(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>w(t.type,n))||!!e.index&&w(e.index.value,n);case "array":return w(e.items,n);case "tuple":return e.elements.some(t=>w(t,n));case "union":case "intersection":return e.of.some(t=>w(t,n));case "fn":return e.params.some(t=>w(t.type,n))||w(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>w(r.type,n))||w(t.returns,n));case "keyof":return w(e.of,n);case "index":return w(e.obj,n)||w(e.key,n);case "mapped":return w(e.over,n)||w(e.body,n);case "conditional":return w(e.check,n)||w(e.extends,n)||w(e.then,n)||w(e.else,n);case "returnType":case "parameters":return w(e.fn,n);case "apply":return e.args.some(t=>w(t,n));default:return false}}function An(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return Z(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&w(o)){r.push(A("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function Ue(e,n="error"){let t=new Set(e);return r=>{let s=[];return Z(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(A("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(A("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Se(e,n,t={}){let r=new Set(Pt(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(u,c)=>{let d=r.has(u.type),f=d?c+1:c;d&&f>n&&i.push(A("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of childrenOf(u))l(m,f);};return l(o,0),i}}var Le=(e=3,n="error")=>Se(En,e,{hint:"use a pipe instead of nesting functions",severity:n}),$e=(e,n="error")=>Se("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),xe=(e,n="error")=>Se("MemberExpression",e,{severity:n});function Ve(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(A("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 Ge(e,n="error"){return t=>{let r=0;return Z(t,()=>{r++;}),r>e?[A("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function Ke(e,n="error"){return t=>{let r=[];return Z(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(A("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function _e(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[A("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function be(e){let n=[je(e),vn(e),An(e)];return e.hostAllow!=="*"&&n.push(Ue([...e.hostAllow])),n}function It(e){return be(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"}],se=new Map(qe.map(e=>[e.op,e])),Dn={number:s.number,boolean:s.boolean,string:s.string},We=e=>Dn[e],Cn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Ft={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},jt=[{op:"&&"},{op:"||"},{op:"??"}];function Ut(e,n={}){return qe.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(Dn[t.result],e,n))}function Lt(e,n={}){return Cn.filter(t=>subtype(Ft[t.result],e,n))}var J=e=>({bindings:new Map,parent:e}),On=e=>e.charCodeAt(0)===95;function Be(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 oe(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)oe(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&ke(n,r);return}for(let r of Object.keys(t))oe(t[r],n);}function Tn(e,n){let t=e;oe(t.typeAnnotation,n),oe(t.returnType,n);}function ke(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function K(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Tn(e,n),Be(n,t,o,e,r,s||a&&On(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,c)=>{let d=l&&c<o.length-1;if(u.type==="RestElement")K(u.argument,n,t,r,s,false);else {let f=u;f.computed&&N(f.key,n,t),K(f.value,n,t,r,s||d,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;K(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":K(e.left,n,t,r,s,a);return;case "RestElement":K(e.argument,n,t,r,s,true);return;default:return}}function ae(e,n,t){if(e)switch(e.type){case "AssignmentPattern":N(e.right,n,t),ae(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)ae(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&ae(r,n,t);return;case "RestElement":ae(e.argument,n,t);return;default:return}}function Rn(e,n,t,r){for(let s of e.declarations)K(s.id,n,t,"local",r,false),N(s.init,n,t);}function ze(e,n,t){let r=e,s=J(n),a=r.params??[];for(let o of a)K(o,s,t,"parameter",false,true);for(let o of a)ae(o,s,t);N(r.body,s,t);}function N(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Tn(e,n),e.type){case "Identifier":ke(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=J(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&&Be(n,t,r.name,r,"local",false),ze(e,n,t);return}case "CatchClause":{let r=e,s=J(n);K(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=J(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=J(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=J(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)K(o.id,s,t,"local",false,true);else N(a,s,t);N(r.body,s,t);return}case "VariableDeclaration":Rn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Be(n,t,s.name,s,"import",On(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Rn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Be(n,t,a.name,a,"local",true),ze(s,n,t);}else N(s,n,t);}else for(let s of r.specifiers)ke(n,s.local.name);return}case "TSAsExpression":N(e.expression,n,t);return;case "TSTypeAliasDeclaration":oe(e.typeAnnotation,n);return;case "JsonExpression":Je(e.body,n,t);return;case "JSXOpeningElement":{let r=e;Pn(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 Pn(e,n,t){e&&(e.type==="JSXIdentifier"?ke(n,e.name):e.type==="JSXMemberExpression"&&Pn(e.object,n));}function Je(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)Je(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))Je(r[s],n,t);}function Ye(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};N(e,J(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 Gt=new Set(["const","import"]),ie=e=>({binds:new Map,parent:e});function Kt(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function Y(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?Y(n.argument):Y(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?Y(n):[]);case "AssignmentPattern":return Y(e.left);case "RestElement":return Y(e.argument);default:return []}}var we=(e,n,t)=>{for(let r of Y(n))e.binds.set(r.name,t);};function Xe(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of Y(e))Xe(a,n,t);return}let r=e.name,s=Kt(n,r);s&&Gt.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;Xe(r.left,n,t),T(r.right,n,t);return}case "UpdateExpression":{Xe(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=ie(n);for(let s of e.body??[])T(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=ie(n);for(let a of r.params??[])we(s,a,"param");T(r.body,s,t);return}case "CatchClause":{let r=e,s=ie(n);we(s,r.param,"param"),T(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=ie(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)we(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),we(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 Qe(e){let n={out:[],invalid:new WeakSet};return T(e,ie(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var le=e=>({decls:new Map,parent:e});function qt(e,n){for(let t=e;t;t=t.parent){let r=t.decls.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 Ee=(e,n)=>{for(let t of ee(n))e.decls.set(t.name,t);};function R(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=qt(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;R(r.object,n,t),r.computed&&R(r.property,n,t);return}case "Property":{let r=e;r.computed&&R(r.key,n,t),R(r.value,n,t);return}case "Program":case "BlockStatement":{let r=le(n);for(let s of e.body??[])R(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=le(n);for(let o of r.params??[])Ee(a,o);R(r.body,a,t);return}case "CatchClause":{let r=e,s=le(n);Ee(s,r.param),R(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=le(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ee(s,o.id);else a&&R(a,s,t);R(r.right,n,t),R(r.test,s,t),R(r.update,s,t),R(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)Ee(n,r.id),R(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":R(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)R(i,n,t);else R(o,n,t);}return}}}function Wt(e){let n=new WeakMap;return R(e,le(void 0),n),n}var He=e=>e.typeAnnotation,Ze=e=>e.returnType,x=e=>e.type==="Identifier"?e.name:null,Mn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?x(n.id):null}return x(e)},ce=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function In(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 en(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=en(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function nn(e){let n=e;if(n.regex||n.bigint)return s.unknown;let t=n.value;return t===null?s.null:t===void 0?s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:s.unknown}var X=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):nn(e)},tn=e=>e.type==="ArrowFunctionExpression",Fn=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Ae=e=>Fn(e)?e.args[0]:e,pe=e=>Fn(e)?e:s.promise(e);function ue(e){return e.t==="tuple"?true:e.t==="array"?ue(e.items):e.t==="union"?e.of.some(ue):false}function ve(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ve(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ve(e.bound):false}var j=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function jn(e){let n=Ze(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:x(r)??`arg${s$1}`,type:He(r)??s.unknown})),returns:e.async?pe(n):n}:null}var _={then:{},else:{}},_n=new Set(["string","number","boolean","undefined","function","object"]),Un={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function qn(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 Xt=s.literal(true),Qt=s.literal(false),V=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Xt,Qt]:[e];function Ln(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 Ht(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=V(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function Zt(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=V(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function er(e,n){if(!_n.has(n))return null;if(e.t==="unknown"||e.t==="any")return Un[n]??e;let t=V(e).filter(r=>qn(r,n));return t.length?normalizeUnion(t):Un[n]??e}function nr(e,n){if(!_n.has(n)||e.t==="unknown"||e.t==="any")return null;let t=V(e).filter(r=>!qn(r,n));return t.length?normalizeUnion(t):null}function $n(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function xn(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=X(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function Vn(e,n,t,r,s){let a=V(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return r?!!u&&subtype(t,u,s):!(u&&subtype(u,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function Gn(e,n,t){let r=V(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 tr(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function rr(e,n,t){let r=V(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var sr=e=>e.t==="null"||e.t==="undefined",Wn=e=>sr(e)||e.t==="literal"&&!e.value,ar=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=V(e),t=n.filter(r=>!Wn(r));return t.length&&t.length<n.length?normalizeUnion(t):null},or=e=>{let n=V(e),t=n.filter(Wn);return t.length&&t.length<n.length?normalizeUnion(t):null},Kn=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}:{}}),ir=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function me(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=D(n,g);if(!v)return _;let E=String(m.value);return U(g,Gn(v,E,true),Gn(v,E,false))}return _}if(!ir(r.operator))return _;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=Ln(a,o)??Ln(o,a);if(i){let m=D(n,i.name);if(!m)return _;let b=er(m,i.tag),g=nr(m,i.tag);return s?U(i.name,g,b):U(i.name,b,g)}let l=Kn(a),u=Kn(o),c=l?o:u?a:null;if((l||u)&&c?.type==="Identifier"){let m=c.name,b=D(n,m);if(!b)return _;let v=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??u],E=V(b),Sn=E.filter(Pe=>v.includes(Pe.t)),Te=E.filter(Pe=>!v.includes(Pe.t)),bn=Sn.length?normalizeUnion(Sn):null,Nn=Te.length&&Te.length<E.length?normalizeUnion(Te):null;return s?U(m,Nn,bn):U(m,bn,Nn)}let d=$n(a,o)??$n(o,a);if(d){let m=D(n,d.name);if(!m)return _;let b=tr(m,d.lit,t),g=rr(m,d.lit,t);return s?U(d.name,g,b):U(d.name,b,g)}let f=xn(a,o)??xn(o,a);if(f){let m=D(n,f.name);if(!m)return _;let b=Vn(m,f.prop,f.lit,true,t),g=Vn(m,f.prop,f.lit,false,t);return s?U(f.name,g,b):U(f.name,b,g)}return _}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=me(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=ur(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=D(n,r);if(s)return U(r,ar(s),or(s))}return _}function lr(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 ur(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=D(n,r.name);if(!s)return null;let a=lr(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=D(n,i);return l?U(i,Ht(l,a.type,t),Zt(l,a.type,t)):null}var q=(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 Er=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function vr(e){let n=[];return e.maxDepth!==void 0&&n.push(Ve(e.maxDepth)),e.maxNodes!==void 0&&n.push(Ge(e.maxNodes)),e.maxArgs!==void 0&&n.push(Ke(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(Le(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push($e(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(xe(e.memberDepth)),n}function Ar(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>A("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function rt(e,n,t={}){let r={...Er(n.types),...n.schemes,...Cr(e)},s$1=Qe(e),a={overlay:new WeakMap,sink:re(),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=Rr(e,a);try{i=h(e,l,a);}catch(d){if(d instanceof TypeEvalLimitError)a.sink.report(A("too-deep",e,d.message));else if(d instanceof UnionTooComplexError)a.sink.report(A("too-complex-union",e,d.message));else throw d;i=s.unknown;}let u=[];o&&u.push(...be(o)),t.limits&&u.push(...vr(t.limits)),t.resultType&&u.push(_e(t.resultType,r));let c=[...a.sink.all,...s$1.diagnostics,...Ar(e,r),...t.unused?Ye(e,t.unused):[],...u.length?Fe(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:c,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function Dr(e,n,t={}){let r=rt(e,n,t),s$1={},a=new Map,o,i=u=>{let c=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let f=x(d.id),m=r.overlay.get(d);f&&m&&(s$1[f]=m.type,c.push(f));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,f=r.overlay.get(u);d&&f&&(s$1[d]=f.type,c.push(d));}return c};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let c=u;if(c.declaration)for(let d of i(c.declaration))a.set(d,d);else for(let d of c.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let c=r.overlay.get(u.declaration);o=c?c.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,c]of a)s$1[c]&&(l[u]={type:s$1[c]});o!==void 0&&(l.default={type:o});}else for(let u in s$1)l[u]={type:s$1[u]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Cr=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 Rr(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 u=l.local.name;if(u in r){n.sink.report(S.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){r[u]=i;continue}let c=l.type==="ImportSpecifier"?l.imported.name:"default",d=discover(i,[c],n.schemes);d?r[u]=d.type:(n.sink.report(S.noSuchMember(l,i,c)),r[u]=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,nn(e),n);case "Placeholder":return y(t,e,s.any,n);case "Identifier":{let s$1=e.name,a=D(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,Pr(e,n,t),n);case "CallExpression":return y(t,e,Ur(e,n,t,r),n);case "ArrowFunctionExpression":return mn(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,dt(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 c=t.overlay.get(a.object)?.type,d=c&&apparentType(c,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(S.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=h(s.right,n,t);return t.assignFlow.set(e,widenLiteral(d)),y(t,e,d,n)}if(u&&i!==null){let d=h(s.right,n,t);return subtype(d,u,t.schemes)||t.sink.report(S.notAssignable(s.right,d,u,t.schemes)),t.assignFlow.set(e,mt(u,d,t.schemes)),y(t,e,d,n)}let c=z(s.right,o,n,t);return y(t,e,c,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 fe(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 Ce(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?Gr(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return y(t,e,ss(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,as(s.operator,a,o),n)}case "UnaryExpression":return y(t,e,is(e,n,t),n);case "ConditionalExpression":{let s=e;h(s.test,n,t);let a=me(s.test,n,t.schemes),o=h(s.consequent,q(n,a.then),t),i=h(s.alternate,q(n,a.else),t);return y(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return y(t,e,ls(e,n,t),n);case "ArrayExpression":return y(t,e,gt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions)h(s,n,t);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,Ae(a),n)}case "Program":{let s$1=De(e.body,n,t,new Set(t.importNames)).scope;return y(t,e,s.unknown,s$1)}case "JsonExpression":return y(t,e,on(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=ge(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 Or=new Set(["constructor","prototype","__proto__"]);function Tr(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 Pr(e,n,t){let r=h(e.object,n,t),s$1=Tr(e);if(s$1!==null&&Or.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"&&zn(e,r,i.value,t),s.unknown)}let a=e.property.name,o=discover(r,[a],t.schemes);return o?o.type:(zn(e,r,a,t),s.unknown)}function zn(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 Mr(e,n,t){if(!e||e.type!=="Identifier")return;let r=e.name;if(D(n,r)===void 0)return;let s=t.schemes[r];return s&&s.params.length===0?s.body:void 0}function pn(e,n){let t=j(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function Ir(e,n){let t=D(e.scope,n);if(!t)return;let r=pn(t,e.schemes);return r?j(r,e.schemes):void 0}function Fr(e,n,t,r){let s$1=pn(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",jr=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=j(h(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(jr(l));else s$1={elem:i.t==="array"?i.items:s.unknown,node:a};}return {nodes:r,spread:s$1}}function Ur(e,n,t,r){let s$1=e.arguments,a=en(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=In(s$1);if(f){let m=discover(d,f,t.schemes);return m?m.type:(t.sink.report(S.noSuchMember(e,d,f.join("."))),s.unknown)}return s$1.forEach(m=>h(m,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let d=Mr(s$1[0],n,t);for(let f=1;f<s$1.length;f++)h(s$1[f],n,t);return d??s.unknown}if(a&&t.env.matchers?.has(a))return Fr(e,s$1,n,t);let o=h(e.callee,n,t);if(o.t==="any")return s$1.forEach(d=>h(d,n,t)),s.any;if(o.t==="overload")return $r(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(d=>h(d,n,t)),t.sink.report(S.notCallable(e,o)),s.unknown;let i=at(s$1,n,t),l=i.nodes.map(d=>ot(d,n,t)),u=ut(e),c=!u||ct(o,u.length);return c||t.sink.report(S.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),it(e,o,i.nodes,l,n,t,i.spread,r,c?u:void 0)}function ot(e,n,t){if(tn(e))return s.any;if(e.type!=="CallExpression")return h(e,n,t);let r=re(),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 u=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 E=0;E<v;E++)g=unify(b.params[E].type,i.params[E].type,g)??g;return unify(b.returns,i.returns,g)??g}return unify(b,i,m)??m},c=l?_r(e,n,l,a):void 0,d=c??u(instantiateLoose(n,r).bindings);t.forEach((m,b)=>{if(tn(m)){let g=widenType(substitute(n.params[b]?.type??s.any,d));r[b]=mn(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,d));else if(m.type==="Literal"){let g=n.params[b]?.type??s.unknown,v=g.t==="var"?g.bound?substitute(g.bound,d):g:substitute(g,d);ve(v)&&(r[b]=y(a,m,X(m),s$1));}else if(m.type==="ArrayExpression"){let g=substitute(n.params[b]?.type??s.unknown,d);ue(g)&&(r[b]=yn(m,g,s$1,a));}});let f=c??u(instantiateLoose(n,r).bindings);return c||Lr(e,n,f,a),Jr(e,n,r,f,a,t,o),t.forEach((m,b)=>{let g=n.params[b];m.type==="ObjectExpression"&&g&&!g.variadic&&fn(m,substitute(g.type,f),a);}),widenInferred(groundVars(substitute(n.returns,f),a.schemes))}var Jn=new WeakMap;function lt(e){let n=Jn.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),Jn.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 Lr(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 $r(e,n,t,r,s){let a=at(e.arguments,t,r),o=a.nodes,i=o.map(c=>ot(c,t,r)),l=ut(e),u=l?n.signatures.filter(c=>ct(c,l.length)):n.signatures;if(l&&!u.length){let c=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(S.wrongTypeArgumentCount(e,c,l.length)),Yn(e,n.signatures,a,o,i,t,r,s,void 0)}return Yn(e,u,a,o,i,t,r,s,l)}function Yn(e,n,t,r,s$1,a,o,i,l){let u={t:"overload",signatures:n},c=f=>t.spread?qr(f,r.length):Wr(f,r.length),d=u.signatures.find(f=>c(f)&&zr(f,s$1,o));if(!d){let f=u.signatures.filter(c);f.length===1?d=f[0]:u.signatures.length===1&&(d=u.signatures[0]);}return d?it(e,d,r,s$1,a,o,t.spread,i,l):(o.sink.report(S.noMatchingOverload(e,u,s$1)),s.unknown)}function xr(e,n,t,r){let s$1=D(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 ge(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let u=false,c=a.map(d=>{let f=s$1(d);return f!==d&&(u=true),f});return u?c:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return xr(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(Vr(o.name,n,t,r),!(o.name in t.schemes)))return s.any;let i=false,l={};for(let u of Object.keys(o)){let c=s$1(o[u]);c!==o[u]&&(i=true),l[u]=c;}return i?l:o};return s$1(e)}function Vr(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=ge(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Gr(e,n,t,r,s){let a={...t,sink:re(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=ge(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var dn=(e,n,t)=>{let r=He(e);return r===void 0?r:ge(r,n,t,e)},Kr=(e,n,t)=>{let r=Ze(e);return r===void 0?r:ge(r,n,t,e)},ut=e=>{let n=e.typeArguments;return n?.length?n:void 0},ct=(e,n)=>(e.typeParams?.length??0)===n;function _r(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 u=o[i];if(!u)continue;let c=groundVars(substitute(l,o),r.schemes);subtype(u,c,r.schemes)||r.sink.report(S.constraintViolation(e,i,u,c));}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 Wr(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 Jr(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let c=n.params[u];if(c.variadic)break;let d=substitute(c.type,r);if(u>=t.length){!c.optional&&!o&&s$1.sink.report(S.missingArgument(e,c.name,d));continue}subtype(t[u],d,s$1.schemes)||s$1.sink.report(S.notAssignable(i(u),t[u],d,s$1.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,c=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=c&&(l||u<n.params.length))){s$1.sink.report(S.spreadArgument(o.node));return}if(l){let d=substitute(l.type,r),f=d.t==="array"?d.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 z(e,n,t,r){let s=j(n,r.schemes);switch(e.type){case "Literal":{let o=X(e);return subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,n,t)}case "ArrayExpression":{if(ue(s)){let o=yn(e,s,t,r);return subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,o,t)}if(s.t==="array"){for(let o of e.elements){if(!o)continue;let i=o;i.type==="SpreadElement"?z(i.argument,n,t,r):z(i,s.items,t,r);}return y(r,e,n,t)}break}case "ObjectExpression":{if(s.t==="object"){let o={};for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){h(u.argument,t,r);continue}let c=u,d=ce(c),f=d!==null?ownProp(s.props,d)?.type:void 0,m=f?z(c.value,f,t,r):h(c.value,t,r);d!==null&&(o[d]={type:m}),y(r,u,m,t);}let i={t:"object",props:o};return subtype(i,n,r.schemes)||r.sink.report(S.notAssignable(e,i,n,r.schemes)),y(r,e,n,t)}break}case "ArrowFunctionExpression":{if(s.t==="fn"){let o=mn(e,t,r,s);return subtype(o,n,r.schemes)||r.sink.report(S.notAssignable(e,o,n,r.schemes)),y(r,e,n,t)}break}case "ConditionalExpression":{let o=e;return h(o.test,t,r),z(o.consequent,n,t,r),z(o.alternate,n,t,r),y(r,e,n,t)}case "Placeholder":return y(r,e,n,t)}let a=h(e,t,r);return subtype(a,n,r.schemes)||r.sink.report(S.notAssignable(e,a,n,r.schemes)),y(r,e,a,t)}function mn(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a={},o=new Map,i=e.params.map((m,b)=>{let g=m,v=x(g),E=dn(g,n,t)??s$1?.params[b]?.type??s.unknown;return v?(a[v]=E,(E.t==="union"||E.t==="boolean")&&o.set(v,E)):g.type!=="Identifier"&&Q(g,E,a,n,t),t.overlay.set(g,{type:E,scope:n}),{name:v??`arg${b}`,type:E}}),l=I(n,a),u=e.body,c=Kr(e,n,t);if(u.type!=="BlockStatement"&&c){let m=e.async?Ae(c):c;z(u,m,l,t);let b=e.async?pe(c):c;return y(t,e,{t:"fn",params:i,returns:b},n)}let d=u.type==="BlockStatement"?y(t,u,dt(u,l,t,new Set(Object.keys(a)),o),l):h(u,l,t),f=e.async?pe(d):d;if(c){let m=e.async?Ae(c):c,b=e.async?d:f;subtype(b,m,t.schemes)||t.sink.report(S.notAssignable(u,f,c,t.schemes));let g=e.async?pe(c):c;return y(t,e,{t:"fn",params:i,returns:g},n)}return y(t,e,{t:"fn",params:i,returns:widenType(f)},n)}function te(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?te(n.argument):te(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?te(n.argument):te(n):[]);case "AssignmentPattern":return te(e.left);default:return []}}function pt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>te(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?pt(e.declaration):[]}function dt(e,n,t,r=new Set,s$1){let{returns:a}=De(e.body,n,t,r,s$1),o=!F(e);return a.length===0?o?s.void:s.union([]):normalizeUnion(o?[...a,s.undefined]:a)}var Yr=[s.literal(true),s.literal(false)];function Xr(e){return e.t==="union"?e.of:e.t==="boolean"?Yr:[e]}function mt(e,n,t){let r=Xr(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 ft(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 H(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=H(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=ft(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=yt(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=H(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=H(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Qr(n,s);return r.finalizer&&(o=H(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 yt(e,n,t){let r=H(e.consequent,n,t),s=e.alternate?H(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 ht(e,n){let t=new Map,r=s=>{let a=D(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 Qr(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 Hr(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=ht(n,t),s=H(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 q(n,a)}function De(e,n,t,r=new Set,s){if(!(s&&s.size)&&!Zr(e))return Xn(e,n,t,r);let a=new Set(t.evolving),o=new Map(t.declaredMut);if(s)for(let[i,l]of s)t.declaredMut.set(i,l);try{return Xn(e,n,t,r)}finally{t.evolving.clear();for(let i of a)t.evolving.add(i);t.declaredMut.clear();for(let[i,l]of o)t.declaredMut.set(i,l);}}function Zr(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 Xn(e,n,t,r){let s=n,a=[];for(let o of e){let i=o;for(let l of pt(i))r.has(l.name)?t.sink.report(S.cannotRedeclare(l,l.name)):r.add(l.name);if(i.type==="VariableDeclaration")s=Ce(i,s,t);else if(i.type!=="ImportDeclaration")if(i.type==="ExportNamedDeclaration"){let l=i;if(l.declaration?.type==="VariableDeclaration")s=Ce(l.declaration,s,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=h(l.declaration,s,t),c=x(l.declaration.id);c&&(s=I(s,{[c]:u}));}else for(let u of l.specifiers)D(s,u.local.name)===void 0&&t.sink.report(S.unknownName(u.local,u.local.name));}else if(i.type==="ExportDefaultDeclaration")h(i.declaration,s,t);else if(i.type==="FunctionDeclaration"){let l=h(i,s,t),u=x(i.id);u&&(s=I(s,{[u]:l}));}else if(i.type==="IfStatement"){let l=i,u=t.evolving.size||t.declaredMut.size?ht(s,t):null;if(a.push(...$(i,s,t)),u&&u.size){let c=yt(l,u,t);c.size&&(s=q(s,Object.fromEntries(c)));}!l.alternate&&F(l.consequent)&&(s=q(s,me(l.test,s,t.schemes).else));}else {a.push(...$(i,s,t));let l=ft(i,t);l?s=q(s,{[l.name]:l.type}):(i.type==="BlockStatement"||i.type==="TryStatement")&&(s=Hr(i,s,t));}}return {scope:s,returns:a}}function $(e,n,t){switch(e.type){case "ReturnStatement":{let r=e.argument,s$1=r?h(r,n,t):s.unknown;return y(t,e,s$1,n),[s$1]}case "IfStatement":{let r=e;h(r.test,n,t);let s$1=me(r.test,n,t.schemes),a=$(r.consequent,q(n,s$1.then),t);return r.alternate&&a.push(...$(r.alternate,q(n,s$1.else),t)),y(t,e,s.unknown,n),a}case "BlockStatement":{let{returns:r}=De(e.body,n,t);return y(t,e,r.length?normalizeUnion(r):s.void,n),r}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let r=e,s$1=n;r.init&&(r.init.type==="VariableDeclaration"?s$1=Ce(r.init,s$1,t):h(r.init,s$1,t)),r.test&&h(r.test,s$1,t),r.update&&h(r.update,s$1,t);let a=$(r.body,s$1,t);return y(t,e,s.unknown,n),a}case "ForOfStatement":case "ForInStatement":{let r=e,s$1=h(r.right,n,t),a=e.type==="ForOfStatement"?s$1.t==="array"?s$1.items:s.unknown:s.string,o=Mn(r.left),i=o?I(n,{[o]:a}):n,l=$(r.body,i,t);return y(t,e,s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return y(t,e,s.unknown,n),[];case "ThrowStatement":{let r=e.argument;return r&&h(r,n,t),y(t,e,s.unknown,n),[]}case "TryStatement":{let r=e,s$1=$(r.block,n,t);if(r.handler){let a=r.handler.param,o=a?x(a):null,i=o?I(n,{[o]:s.unknown}):n;s$1.push(...$(r.handler.body,i,t));}return r.finalizer&&s$1.push(...$(r.finalizer,n,t)),y(t,e,s.unknown,n),s$1}case "SwitchStatement":{let r=e;h(r.discriminant,n,t);let s$1=n,a=[];for(let o of r.cases){o.test&&h(o.test,s$1,t);let i=De(o.consequent,s$1,t);s$1=i.scope,a.push(...i.returns);}return y(t,e,s.unknown,n),a}default:return h(e,n,t),[]}}function es(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function ns(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function ts(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 rs(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function Q(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=dn(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]);Q(a.left,l,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Q(o.argument,ts(n,a),t,r,s$1);continue}let i=o,l=ce(i);l!=null&&a.push(l);let u=l!=null?es(n,l,s$1):s.unknown;Q(i.value,u,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Q(i.argument,rs(n,o),t,r,s$1):Q(i,ns(n,o),t,r,s$1);});return}}}function fn(e,n,t){let r=j(n,t.schemes),a=(r.t==="union"?r.of.map(o=>j(o,t.schemes)):[r]).filter(o=>o.t==="object"&&!o.index);if(a.length&&!a.some(o=>Object.keys(o.props).length===0))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=ce(i);if(l===null)continue;let u=a.filter(c=>l in c.props);if(!u.length){t.sink.report(S.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&fn(i.value,u[0].props[l].type,t);}}function Ce(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=x(a),i=dn(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,Qn(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"?jn(s$1.init):null),u=o&&l?I(n,{[o]:l}):n,c,d=null;i?(z(s$1.init,i,u,t),s$1.init.type==="ObjectExpression"&&fn(s$1.init,i,t),c=i,d=i,(i.t==="union"||i.t==="boolean")&&s$1.init.type==="Literal"&&(c=mt(i,X(s$1.init),t.schemes))):(c=h(s$1.init,u,t),e.kind!=="const"&&(c=widenLiteral(c)),d=c),y(t,s$1,c,n),o?(r[o]=c,e.kind!=="const"&&d&&Qn(o,d,t)):Q(a,c,r,n,t);}return y(t,e,s.unknown,n),I(n,r)}function Qn(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function ss(e,n,t){let r=h(e.left,n,t),s$1=h(e.right,n,t),a=e.operator,o=se.get(a);if(!o)return s.boolean;if(o.category==="additive")return Hn(r,t.schemes)||Hn(s$1,t.schemes)?s.string:fe(r,t.schemes)&&fe(s$1,t.schemes)?s.number:(t.sink.report(S.operatorNotApplicable(e,"+",r,s$1)),s.number);if(o.category==="arithmetic"||o.category==="bitwise")fe(r,t.schemes)||t.sink.report(S.arithmeticOperand(e.left,"left")),fe(s$1,t.schemes)||t.sink.report(S.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!Re(r)&&!Re(s$1)){let i=apparentType(r,t.schemes),l=apparentType(s$1,t.schemes),u=subtype(i,s.number,t.schemes),c=subtype(l,s.number,t.schemes);u&&c||!u&&!c&&(subtype(i,l,t.schemes)||subtype(l,i,t.schemes))||t.sink.report(S.operatorNotApplicable(e,a,r,s$1));}return We(o.result)}var Re=e=>e.t==="any"||e.t==="unknown",fe=(e,n)=>Re(e)||subtype(apparentType(e,n),s.number,n),Hn=(e,n)=>!Re(e)&&subtype(apparentType(e,n),s.string,n),Zn={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},sn=e=>e.t==="null"||e.t==="undefined";function as(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=>!sn(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!sn(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>sn(a)?[a]:a.t==="literal"?a.value?[]:[a]:Zn[a.t]?[Zn[a.t]]:[]);return normalizeUnion([...s$1,t])}var os=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function is(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 os;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function ls(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let u of e.properties){let c=u;if(c.type==="SpreadElement"){let g=j(h(c.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 d=c,f=h(d.value,n,t),m=widen(f);if(y(t,c,f,n),d.computed){let g=j(h(d.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=ce(d);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 gt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=j(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 yn(e,n,t,r){let s$1=j(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?yn(l,u,t,r):widen(h(l,t,r));if(s$1.t==="tuple"&&o&&a.length===s$1.elements.length){let l=a.map((u,c)=>i(u,s$1.elements[c]));return y(r,e,{t:"tuple",elements:l},t)}if(s$1.t==="array"){let l=[];for(let u of a){if(!u)continue;let c=u;if(c.type==="SpreadElement"){h(c.argument,t,r);continue}l.push(i(c,s$1.items));}return y(r,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return gt(e,t,r)}function on(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=>on(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:on(s$1[o],n,t,r)};return {t:"object",props:a}}var us=(e,n)=>({...e,typeAnnotation:n}),cs=(e,n)=>({...e,returnType:n}),ps=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function gn(e,n){return e.get(n)?.type}function ds(e,n){return e.get(n)?.scope}function ms(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function fs(e,n){let t=e.get(n)?.scope;return t?[...Me(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var ys=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function hs(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 Oe(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(ys)?.returnType;case "CallExpression":case "NewExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=gn(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=Oe(e,n+2,t,r),l=hs(a);return !i||!l?void 0:discover(i,[l],r)?.type}case "ArrayExpression":{let o=Oe(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=se.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=gn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Oe(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function gs(e,n){return e.filter(t=>t.node===n)}export{se as BINARY_OP,qe as BINARY_OPS,En as FUNCTION_KINDS,jt as LOGICAL_OPS,Cn as UNARY_OPS,us as annotate,cs as annotateReturn,ps as asExpression,Ut as binaryOpsProducing,Ue as calleeAllowlist,je as capabilityNodes,rt as check,I as childScope,Wt as collectBindings,Qe as collectMutations,Ye as collectUnused,Ir as componentProps,pn as componentPropsOf,Oe as contextualTypeAt,wt as createEnv,re as createSink,S as diag,gs as diagnosticsAt,Dr as extractModuleType,It as fromCapability,Fe as guard,be as guardsFromCompiled,D as lookup,A as makeDiagnostic,Ke as maxArgs,$e as maxCallNesting,Ve as maxDepth,Le as maxFunctionNesting,Se as maxNestingOf,Ge as maxNodes,ms as memberCompletions,xe as memberDepth,We as opResultSchema,Et as resolveNamed,vt as resolveScheme,_e as resultType,Bn as rootScope,ds as scopeAt,fs as scopeCompletions,gn as typeAt,Lt as unaryOpsProducing,Me as visibleNames};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tslite/checker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.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",
|
|
@@ -40,12 +40,12 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@tslite/capability": "0.2.0",
|
|
43
|
-
"@tslite/codec": "0.4.
|
|
44
|
-
"@tslite/core": "0.
|
|
43
|
+
"@tslite/codec": "0.4.1",
|
|
44
|
+
"@tslite/core": "0.6.0",
|
|
45
45
|
"@tslite/type-core": "0.3.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@tslite/parser": "0.
|
|
48
|
+
"@tslite/parser": "0.6.2"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"build": "tsup",
|