@tslite/checker 0.14.0 → 1.0.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 +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +1 -1
- package/package.json +7 -7
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'),ae=require('@tslite/core/builders'),languageService=require('@tslite/language-service');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var ae__namespace=/*#__PURE__*/_interopNamespace(ae);var Zn=(e={})=>core.rootScope(e),ie=(e,n)=>core.childScope(e,n),U=(e,n)=>core.lookup(e,n),on=e=>{let n=core.visibleNames(e);for(let t of n.keys())t.includes(".")&&n.delete(t);return n},Hn=new Set(["types","schemes","accessors","asserters","matchers","modules"]),Br=(e={},n)=>{let t=n??{},r=Object.keys(t).filter(s=>!Hn.has(s));if(r.length>0)throw new core.TSLiteError("invalid-env-options",`createEnv: unknown option(s) ${r.map(s=>`'${s}'`).join(", ")} \u2014 expected ${[...Hn].join(", ")}. Named types go under 'types'.`,{unknown:r});return {scope:Zn(e),types:t.types??{},schemes:t.schemes??{},accessors:t.accessors??{},asserters:t.asserters??new Set,matchers:t.matchers??new Set,modules:t.modules??{}}},kr=(e,n)=>e.types[n],wr=(e,n)=>e.schemes[n];var et={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","required-after-optional":"type","not-iterable":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","unprovable-value":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","narrowing-cast-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},k=(e,n,t)=>({code:e,kind:et[e],severity:"error",node:n,message:t}),P=(e,n,t,r="error")=>({code:e,kind:et[e],severity:r,node:n,message:t}),h={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r),a=s.filter(l=>l.path.length>0),o=a.length?` ${typeCore.formatTypeDiff(a)}.`:"",i=k("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${o}`),c=s.filter(l=>l.kind==="missing"&&l.path.length===1).map(l=>({name:l.path[0],type:l.expected}));return c.length?{...i,data:{kind:"missing-properties",properties:c}}:i},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),notASchema:(e,n)=>k("not-a-schema",e,`'${n}' refers to a value, but no type named '${n}' is declared. An asserter needs a schema that is both a value in scope and a declared type.`),typeAsValue:(e,n)=>k("type-as-value",e,`'${n}' only refers to a type, but is being used as a value here. Types are erased at runtime: register '${n}' as a value in scope for the asserter to prove it.`),asserterNeedsName:(e,n)=>k("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>k("shadows-schema",e,`'${n}' shadows the schema of the same name: an asserter would type against the declared schema but prove against this value at runtime. Rename the binding.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>k("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>k("not-iterable",e,`Type '${typeCore.format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(r=>typeCore.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>k("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(r)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>k("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),genericTypeArity:(e,n,t,r)=>k("wrong-type-argument-count",e,r===0?`Type '${n}' is not generic.`:t===r?`Generic type '${n}' requires ${r} type argument${r===1?"":"s"}.`:`Generic type '${n}' requires between ${t} and ${r} type arguments.`),forbiddenMember:(e,n)=>k("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>P("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>k("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>k("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>k("cast-unsound",e,`Conversion of type '${typeCore.format(n)}' to type '${typeCore.format(t)}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.`),unprovableValue:(e,n,t,r)=>k("unprovable-value",e,`A value of type '${typeCore.format(n)}' can never satisfy '${r}' (${typeCore.format(t)}): the types do not overlap, so this proof can only fail at runtime.`),arithmeticOperand:(e,n)=>k("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>k("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...k("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${typeCore.format(n)}' and '${typeCore.format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...k("implicit-coercion",e,`Cannot convert '${typeCore.format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function le(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Te(e,n,t){let r=typeCore.baseLiteralType(e);return typeCore.comparable(n,typeCore.widenType(r),t)||typeCore.comparable(r,n,t)}function tt(e,n,t){return typeCore.subtype(e,n,t)}function cn(e,n,t={}){return n.flatMap(r=>r(e,t))}function pe(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var Mr=e=>Array.isArray(e)?e:[e],rt=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function un(e,n="error"){return t=>{let r=[];return pe(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(P("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function st(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return pe(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let c of [o.typeAnnotation,o.returnType]){if(!c)continue;let l=capability.typeFeatureViolations(typeCore.typeFeatures(c,i),t);l.length&&s.push(P("type-feature-not-allowed",a,`authoring type feature${l.length>1?"s":""} '${l.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function R(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=>R(t.type,n))||!!e.index&&R(e.index.value,n);case "array":return R(e.items,n);case "tuple":return e.elements.some(t=>R(t,n));case "union":case "intersection":return e.of.some(t=>R(t,n));case "fn":return e.params.some(t=>R(t.type,n))||R(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>R(r.type,n))||R(t.returns,n));case "keyof":return R(e.of,n);case "index":return R(e.obj,n)||R(e.key,n);case "mapped":return R(e.over,n)||R(e.body,n);case "conditional":return R(e.check,n)||R(e.extends,n)||R(e.then,n)||R(e.else,n);case "returnType":case "parameters":return R(e.fn,n);case "apply":return e.args.some(t=>R(t,n));default:return false}}function at(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return pe(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&R(o)){r.push(P("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function ot(e,n="error"){return (t,r)=>{let s=r.overlay;if(!e.typeStrict||!s)return [];let a=r.schemes??{},o=[];return pe(t,i=>{if(i.type!=="TSAsExpression")return;let{expression:c}=i,l=s.get(c)?.type,u=s.get(i)?.type;!l||!u||R(u)||!Te(l,u,a)||tt(l,u,a)||o.push(P("narrowing-cast-not-allowed",i,`A cast may only widen under 'strict': '${typeCore.format(l)}' is not assignable to '${typeCore.format(u)}'. Narrow with a type guard, or prove the value with an asserter.`,n));}),o}}function pn(e,n="error"){let t=new Set(e);return r=>{let s=[];return pe(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(P("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(P("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Je(e,n,t={}){let r=new Set(Mr(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],c=(l,u)=>{let p=r.has(l.type),y=p?u+1:u;p&&y>n&&i.push(P("too-deep",l,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let f of core.childrenOf(l))c(f,y);};return c(o,0),i}}var dn=(e=3,n="error")=>Je(rt,e,{hint:"use a pipe instead of nesting functions",severity:n}),fn=(e,n="error")=>Je("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),mn=(e,n="error")=>Je("MemberExpression",e,{severity:n});function yn(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(P("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 hn(e,n="error"){return t=>{let r=0;return pe(t,()=>{r++;}),r>e?[P("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function gn(e,n="error"){return t=>{let r=[];return pe(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(P("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Sn(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[P("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function Ye(e){let n=[un(e),st(e),at(e),ot(e)];return e.hostAllow!=="*"&&n.push(pn([...e.hostAllow])),n}function Ir(e){return Ye(capability.compileProfile(e))}var bn=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],Pe=new Map(bn.map(e=>[e.op,e])),it={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string},Nn=e=>it[e],lt=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Fr={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string,undefined:typeCore.s.undefined},$r=[{op:"&&"},{op:"||"},{op:"??"}];function Lr(e,n={}){return bn.filter(t=>t.result==="additive"?typeCore.subtype(typeCore.s.string,e,n)||typeCore.subtype(typeCore.s.number,e,n):typeCore.subtype(it[t.result],e,n))}function Ur(e,n={}){return lt.filter(t=>typeCore.subtype(Fr[t.result],e,n))}var de=e=>({bindings:new Map,parent:e}),ut=e=>e.charCodeAt(0)===95;function Qe(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 je(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)je(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&He(n,r);return}for(let r of Object.keys(t))je(t[r],n);}function pt(e,n){let t=e;je(t.typeAnnotation,n),je(t.returnType,n);}function He(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function ee(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;pt(e,n),Qe(n,t,o,e,r,s||a&&ut(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],c=!!i&&i.type==="RestElement";o.forEach((l,u)=>{let p=c&&u<o.length-1;if(l.type==="RestElement")ee(l.argument,n,t,r,s,false);else {let y=l;y.computed&&v(y.key,n,t),ee(y.value,n,t,r,s||p,!y.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;ee(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":ee(e.left,n,t,r,s,a);return;case "RestElement":ee(e.argument,n,t,r,s,true);return;default:return}}function Me(e,n,t){if(e)switch(e.type){case "AssignmentPattern":v(e.right,n,t),Me(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)Me(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&Me(r,n,t);return;case "RestElement":Me(e.argument,n,t);return;default:return}}function ct(e,n,t,r){for(let s of e.declarations)ee(s.id,n,t,"local",r,false),v(s.init,n,t);}function Bn(e,n,t){let r=e,s=de(n),a=r.params??[];for(let o of a)ee(o,s,t,"parameter",false,true);for(let o of a)Me(o,s,t);v(r.body,s,t);}function v(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(pt(e,n),e.type){case "Identifier":He(n,e.name);return;case "MemberExpression":{let r=e;v(r.object,n,t),r.computed&&v(r.property,n,t);return}case "Property":{let r=e;r.computed&&v(r.key,n,t),v(r.value,n,t);return}case "Program":case "BlockStatement":{let r=de(n);for(let s of e.body??[])v(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":Bn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Qe(n,t,r.name,r,"local",false),Bn(e,n,t);return}case "CatchClause":{let r=e,s=de(n);ee(r.param,s,t,"local",true,false),v(r.body,s,t);return}case "SwitchStatement":{let r=e;v(r.discriminant,n,t);let s=de(n);for(let a of r.cases){v(a.test,s,t);for(let o of a.consequent??[])v(o,s,t);}return}case "ForStatement":{let r=e,s=de(n);v(r.init,s,t),v(r.test,s,t),v(r.update,s,t),v(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;v(r.right,n,t);let s=de(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)ee(o.id,s,t,"local",false,true);else v(a,s,t);v(r.body,s,t);return}case "VariableDeclaration":ct(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Qe(n,t,s.name,s,"import",ut(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")ct(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Qe(n,t,a.name,a,"local",true),Bn(s,n,t);}else v(s,n,t);}else for(let s of r.specifiers)He(n,s.local.name);return}case "TSAsExpression":v(e.expression,n,t);return;case "TSTypeAliasDeclaration":je(e.typeAnnotation,n);return;case "JsonExpression":kn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;dt(r.name,n);for(let s of r.attributes??[])v(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":v(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)v(i,n,t);else v(o,n,t);}return}}}function dt(e,n,t){e&&(e.type==="JSXIdentifier"?He(n,e.name):e.type==="JSXMemberExpression"&&dt(e.object,n));}function kn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)kn(s,n,t);return}let r=e;if(core.isExprMarker(r)){try{v(codec.fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))kn(r[s],n,t);}function wn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};v(e,de(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(h.unusedName(s.node,s.name));return r}var qr=new Set(["const","import"]),Ie=e=>({binds:new Map,parent:e});function _r(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function fe(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?fe(n.argument):fe(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?fe(n):[]);case "AssignmentPattern":return fe(e.left);case "RestElement":return fe(e.argument);default:return []}}var Ze=(e,n,t)=>{for(let r of fe(n))e.binds.set(r.name,t);};function vn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of fe(e))vn(a,n,t);return}let r=e.name,s=_r(n,r);s&&qr.has(s)&&(t.invalid.add(e),t.out.push(h.assignToConst(e,r,s==="import"?"import":"const")));}function F(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;vn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{vn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ie(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ie(n);for(let a of r.params??[])Ze(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ie(n);Ze(s,r.param,"param"),F(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)Ze(s,o.id,a.kind);else a&&F(a,s,t);F(r.right,n,t),F(r.test,s,t),F(r.update,s,t),F(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)F(s.init,n,t),Ze(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&&F(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":F(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)F(i,n,t);else F(o,n,t);}return}}}function En(e){let n={out:[],invalid:new WeakSet};return F(e,Ie(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var Fe=e=>({decls:new Map,parent:e});function zr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function ve(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ve(n.argument):ve(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ve(n):[]);case "AssignmentPattern":return ve(e.left);case "RestElement":return ve(e.argument);default:return []}}var en=(e,n)=>{for(let t of ve(n))e.decls.set(t.name,t);};function j(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=zr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;j(r.object,n,t),r.computed&&j(r.property,n,t);return}case "Property":{let r=e;r.computed&&j(r.key,n,t),j(r.value,n,t);return}case "Program":case "BlockStatement":{let r=Fe(n);for(let s of e.body??[])j(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=Fe(n);for(let o of r.params??[])en(a,o);j(r.body,a,t);return}case "CatchClause":{let r=e,s=Fe(n);en(s,r.param),j(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Fe(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)en(s,o.id);else a&&j(a,s,t);j(r.right,n,t),j(r.test,s,t),j(r.update,s,t),j(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)en(n,r.id),j(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":j(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)j(i,n,t);else j(o,n,t);}return}}}function Jr(e){let n=new WeakMap;return j(e,Fe(void 0),n),n}var An=e=>e.typeAnnotation,Dn=e=>e.returnType,G=e=>e.type==="Identifier"?e.name:null,ft=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?G(n.id):null}return G(e)},mt=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Ae=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function yt(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function On(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=On(n.object);return t===null?null:`${t}.${n.property.name}`}return null}var Le=e=>{if(e.type!=="TemplateLiteral")return null;let n=e;if(n.expressions.length!==0||n.quasis.length!==1)return null;let{cooked:t,raw:r}=n.quasis[0].value;return t??r},me=e=>e.type==="Literal"||Le(e)!==null;function Ue(e){let n=Le(e);if(n!==null)return {t:"literal",value:n,fresh:true};let t=e;if(t.regex||t.bigint)return typeCore.s.unknown;let r=t.value;return r===null?typeCore.s.null:r===void 0?typeCore.s.undefined:typeof r=="string"||typeof r=="number"||typeof r=="boolean"?{t:"literal",value:r,fresh:true}:typeCore.s.unknown}var ye=e=>{let n=Le(e);if(n!==null)return typeCore.s.literal(n);let t=e.value;return t===null?typeCore.s.null:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?typeCore.s.literal(t):Ue(e)},Cn=e=>e.type==="ArrowFunctionExpression",ht=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Ve=e=>ht(e)?e.args[0]:e,Ge=e=>ht(e)?e:typeCore.s.promise(e);function $e(e){return e.t==="tuple"?true:e.t==="array"?$e(e.items):e.t==="union"?e.of.some($e):false}function Ee(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Ee(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Ee(e.bound):false}var W=(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 gt(e){let n=Dn(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:G(r)??`arg${s}`,type:An(r)??typeCore.s.unknown})),returns:e.async?Ge(n):n}:null}var te={then:{},else:{}};function J(e){if(e.type==="Identifier")return e.name;if(e.type!=="MemberExpression")return null;let n=e;if(n.optional)return null;let t=J(n.object);return t===null?null:!n.computed&&n.property.type==="Identifier"?`${t}.${n.property.name}`:n.computed&&n.property.type==="Literal"&&typeof n.property.value=="string"?`${t}.${n.property.value}`:null}var Rn=e=>e.includes(".");function Dt(e,n,t){let r=U(e,n);return r!==void 0?r:Ot(e,n,t)}var re=(e,n,t)=>{let r=Dt(e,n,t);return r===void 0?void 0:typeCore.apparentType(r,t)};function Ot(e,n,t){let r=n.lastIndexOf(".");if(r<0)return;let s=Dt(e,n.slice(0,r),t);if(s!==void 0)return typeCore.discover(s,[n.slice(r+1)],t)?.type}function Zr(e,n){let t=n+".",r=new Set;for(let s=e;s;s=s.parent)for(let a of Object.keys(s.vars))(a.startsWith(t)||a===n)&&Rn(a)&&r.add(a);return [...r].sort((s,a)=>s.length-a.length)}function Tn(e,n,t){let r=Zr(e,n);if(!r.length)return e;let s={};for(let a of r)s[a]=Ot(ie(e,s),a,t)??typeCore.s.unknown;return ie(e,s)}var Ct=new Set(["string","number","boolean","undefined","function","object"]),St={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function Rt(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 es=typeCore.s.literal(true),ns=typeCore.s.literal(false),Q=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[es,ns]:[e];function bt(e,n){let t=e,r=n;if(e.type==="UnaryExpression"&&t.operator==="typeof"&&n.type==="Literal"&&typeof r.value=="string"){let s=J(t.argument);if(s!==null)return {name:s,tag:r.value}}return null}function ts(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=Q(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function rs(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=Q(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function ss(e,n){if(!Ct.has(n))return null;if(e.t==="unknown"||e.t==="any")return St[n]??e;let t=Q(e).filter(r=>Rt(r,n));return t.length?typeCore.normalizeUnion(t):St[n]??e}function as(e,n){if(!Ct.has(n)||e.t==="unknown"||e.t==="any")return null;let t=Q(e).filter(r=>!Rt(r,n));return t.length?typeCore.normalizeUnion(t):null}function Nt(e,n){let t=J(e);if(t!==null&&me(n)){let r=ye(n);if(r.t==="literal"||r.t==="null")return {name:t,lit:r}}return null}function Bt(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.property.type==="Identifier"&&me(n)){let t=J(e.object),r=ye(n);if(t!==null&&(r.t==="literal"||r.t==="null"))return {name:t,prop:e.property.name,lit:r}}return null}function kt(e,n,t,r,s){let a=Q(e),o=c=>c.t==="object"?typeCore.ownProp(c.props,n)?.type:void 0,i=a.filter(c=>{let l=o(c);return r?!!l&&typeCore.subtype(t,l,s):!(l&&typeCore.subtype(l,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function wt(e,n,t){let r=Q(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 os(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function is(e,n,t){let r=Q(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var ls=e=>e.t==="null"||e.t==="undefined",Tt=e=>ls(e)||e.t==="literal"&&!e.value,cs=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=Q(e),t=n.filter(r=>!Tt(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},us=e=>{let n=Q(e),t=n.filter(Tt);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},vt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,z=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),ps=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function V(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let m=s.left,b=s.right,B=J(b);if(m.type==="Literal"&&typeof m.value=="string"&&B!==null){let D=re(n,B,t);if(!D)return te;let O=String(m.value);return z(B,wt(D,O,true),wt(D,O,false))}return te}if(!ps(s.operator))return te;let a=s.operator==="!=="||s.operator==="!=",o=s.left,i=s.right,c=bt(o,i)??bt(i,o);if(c){let m=re(n,c.name,t);if(!m)return te;let b=ss(m,c.tag),B=as(m,c.tag);return a?z(c.name,B,b):z(c.name,b,B)}let l=vt(o),u=vt(i),p=l?i:u?o:null,y=p?J(p):null;if((l||u)&&y!==null){let m=y,b=re(n,m,t);if(!b)return te;let D=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],O=Q(b),Be=O.filter(ue=>D.includes(ue.t)),C=O.filter(ue=>!D.includes(ue.t)),I=Be.length?typeCore.normalizeUnion(Be):null,T=C.length&&C.length<O.length?typeCore.normalizeUnion(C):null;return a?z(m,T,I):z(m,I,T)}let f=Nt(o,i)??Nt(i,o),N=Bt(o,i)??Bt(i,o);if(f||N){let m=te;if(f){let b=re(n,f.name,t);if(b){let B=os(b,f.lit,t),D=is(b,f.lit,t);m=a?z(f.name,D,B):z(f.name,B,D);}}if(N){let b=re(n,N.name,t);if(b){let B=kt(b,N.prop,N.lit,true,t),D=kt(b,N.prop,N.lit,false,t),O=a?z(N.name,D,B):z(N.name,B,D);m={then:{...m.then,...O.then},else:{...m.else,...O.else}};}}return m}return te}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=V(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=fs(e,n,t);if(s)return s}if(e.type==="LogicalExpression"){let s=e;if(s.operator==="&&"){let a=V(s.left,n,t),o=V(s.right,L(n,a.then),t);return {then:{...a.then,...o.then},else:Et(a.else,{...a.then,...o.else},n,t)}}if(s.operator==="||"){let a=V(s.left,n,t),o=V(s.right,L(n,a.else),t);return {then:Et(a.then,{...a.else,...o.then},n,t),else:{...a.else,...o.else}}}return te}let r=J(e);if(r!==null){let s=re(n,r,t);if(s)return z(r,cs(s),us(s))}return te}function Et(e,n,t,r){let s={};for(let a of Object.keys(e)){let o=e[a],i=n[a]??re(t,a,r);if(!i)continue;let c=typeCore.normalizeUnion([o,i]),l=re(t,a,r);l&&typeCore.equals(c,l)||(s[a]=c);}return s}function ds(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 fs(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=U(n,r.name);if(!s)return null;let a=ds(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param],i=o?J(o):null;if(i===null)return null;let c=re(n,i,t);return c?z(i,ts(c,a.type,t),rs(c,a.type,t)):null}var L=(e,n)=>Object.keys(n).length?ie(e,n):e;function x(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>x(t));case "IfStatement":{let n=e;return !!n.alternate&&x(n.consequent)&&x(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&x(n.finalizer))return true;let t=!n.handler||x(n.handler.body);return x(n.block)&&t}default:return false}}var Ms=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function js(e){let n=[];return e.maxDepth!==void 0&&n.push(yn(e.maxDepth)),e.maxNodes!==void 0&&n.push(hn(e.maxNodes)),e.maxArgs!==void 0&&n.push(gn(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(dn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(fn(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(mn(e.memberDepth)),n}function Is(e,n,t){let{min:r,max:s}=typeCore.schemeArity(e);if(n.length<r||n.length>s)return true;if(!e.bounds)return false;let a=typeCore.bindScheme(e,n);return e.params.some((o,i)=>{let c=e.bounds?.[o];return c!==void 0&&i<n.length&&!typeCore.subtype(n[i],typeCore.substitute(c,a),t)})}function Fs(e,n){let t=e.typeRefs;if(!t?.length)return [];let r=[];for(let s of t){let a={type:"Identifier",name:s.name,loc:s.loc},o=n[s.name];if(!o){r.push(P("unknown-name",a,`Cannot find name '${s.name}'.`));continue}let i=s.args;if(!i)continue;let{min:c,max:l}=typeCore.schemeArity(o);if(i.length<c||i.length>l){r.push(h.genericTypeArity(a,s.name,c,l));continue}if(!o.bounds)continue;let u=typeCore.bindScheme(o,i);o.params.forEach((p,y)=>{let f=o.bounds?.[p];if(!f||y>=i.length)return;let N=typeCore.substitute(f,u);typeCore.subtype(i[y],N,n)||r.push(h.constraintViolation(a,p,i[y],N));});}return r}function zt(e,n,t={}){let r={...Ms(n.types),...n.schemes,...Ls(e)},s=En(e),a={overlay:new WeakMap,sink:le(),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,c=Us(e,a);try{i=S(e,c,a);}catch(p){if(p instanceof typeCore.TypeEvalLimitError)a.sink.report(P("too-deep",e,p.message));else if(p instanceof typeCore.UnionTooComplexError)a.sink.report(P("too-complex-union",e,p.message));else throw p;i=typeCore.s.unknown;}let l=[];o&&l.push(...Ye(o)),t.limits&&l.push(...js(t.limits)),t.resultType&&l.push(Sn(t.resultType,r));let u=[...a.sink.all,...s.diagnostics,...Fs(e,r),...t.unused?wn(e,t.unused):[],...l.length?cn(e,l,{overlay:a.overlay,schemes:r}):[]];return {type:i,overlay:a.overlay,diagnostics:u,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function $s(e,n,t={}){let r=zt(e,n,t),s={},a=new Map,o,i=l=>{let u=[];if(l.type==="VariableDeclaration")for(let p of l.declarations){let y=G(p.id),f=r.overlay.get(p);y&&f&&(s[y]=f.type,u.push(y));}else if(l.type==="FunctionDeclaration"){let p=l.id?.name,y=r.overlay.get(l);p&&y&&(s[p]=y.type,u.push(p));}return u};for(let l of e.body??[])if(l.type==="VariableDeclaration"||l.type==="FunctionDeclaration")i(l);else if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration)for(let p of i(u.declaration))a.set(p,p);else for(let p of u.specifiers)a.set(p.exported.name,p.local.name);}else if(l.type==="ExportDefaultDeclaration"){let u=r.overlay.get(l.declaration);o=u?u.type:typeCore.s.unknown;}let c={};if(a.size||o!==void 0){for(let[l,u]of a)s[u]&&(c[l]={type:s[u]});o!==void 0&&(c.default={type:o});}else for(let l in s)c[l]={type:s[l]};return {type:{t:"object",props:c},diagnostics:r.diagnostics}}var Ls=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let r=t;if(!r.id?.name||!r.typeAnnotation)return;let s={},a={};for(let o of r.typeParamNodes??[])o.bound&&(s[o.name]=o.bound),o.default&&(a[o.name]=o.default);n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation,...Object.keys(s).length?{bounds:s}:{},...Object.keys(a).length?{defaults:a}:{}};}}),n};function Us(e,n){let t=n.env.modules,r={};core.walk(e,{ImportDeclaration(s){let a=s;if(a.importKind==="type")return;let o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(h.unknownModule(a.source,String(o)));for(let c of a.specifiers)r[c.local.name]=typeCore.s.unknown;return}for(let c of a.specifiers){if(c.importKind==="type")continue;let l=c.local.name;if(ce(l,c.local,n),l in r){n.sink.report(h.cannotRedeclare(c.local,l));continue}if(c.type==="ImportNamespaceSpecifier"){r[l]=i;continue}let u=c.type==="ImportSpecifier"?c.imported.name:"default",p=typeCore.discover(i,[u],n.schemes);p?r[l]=p.type:(n.sink.report(h.noSuchMember(c,i,u)),r[l]=typeCore.s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?ie(n.env.scope,r):n.env.scope}var g=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case Yt:return e.schema;case "JSXElement":case "JSXFragment":return g(t,e,S(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return g(t,e,Ue(e),n);case "Placeholder":return g(t,e,typeCore.s.any,n);case "Identifier":{let s=e.name,a=U(n,s);return a===void 0?s==="undefined"?g(t,e,typeCore.s.undefined,n):(t.sink.report(h.unknownName(e,s)),g(t,e,typeCore.s.any,n)):g(t,e,a,n)}case "MemberExpression":return g(t,e,Mt(e,n,t),n);case "CallExpression":return g(t,e,Js(e,n,t,r),n);case "ArrowFunctionExpression":return Kn(e,n,t);case "FunctionDeclaration":return t.sink.report(h.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),g(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(h.unsupported(e,"anonymous function (use an arrow)")),g(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(h.unsupported(e,"'this'")),g(t,e,typeCore.s.unknown,n);case "BlockStatement":return g(t,e,ar(e,n,t),n);case "ReturnStatement":{let s=e.argument;return g(t,e,s?S(s,n,t):typeCore.s.unknown,n)}case "IfStatement":return Y(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 Y(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=a.type==="MemberExpression"?g(t,a,Mt(a,n,t,true),n):S(a,n,t);if(a.type==="MemberExpression"){let u=t.overlay.get(a.object)?.type,p=u&&typeCore.apparentType(u,t.schemes);p&&(p.t==="array"||p.t==="tuple")&&p.readonly&&t.sink.report(h.readonlyWrite(a,p));}let i=a.type==="Identifier"?a.name:null,c=i!==null&&t.evolving.has(i),l=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(c&&i!==null){let p=S(s.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(p)),g(t,e,p,n)}if(l&&i!==null){let p=S(s.right,n,t);return typeCore.subtype(p,l,t.schemes)||t.sink.report(h.notAssignable(s.right,p,l,t.schemes)),t.assignFlow.set(e,or(l,p,t.schemes)),g(t,e,p,n)}let u=H(s.right,o,n,t);return g(t,e,u,n)}return g(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=S(s.argument,n,t);return Ke(a,t.schemes)||t.sink.report(h.arithmeticOperand(s.argument,"operand")),g(t,e,typeCore.s.number,n)}case "ExpressionStatement":return g(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return tn(e,n,t),g(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":{let s=e.id?.name,a=s?t.schemes[s]:void 0;return g(t,e,a?Zs(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return g(t,e,Sa(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=s.operator==="??"?{}:s.operator==="&&"?V(s.left,n,t.schemes).then:V(s.left,n,t.schemes).else,i=S(s.right,L(n,o),t);return g(t,e,Na(s.operator,a,i),n)}case "UnaryExpression":return g(t,e,ka(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=V(s.test,n,t.schemes),o=S(s.consequent,L(n,a.then),t),i=S(s.alternate,L(n,a.else),t);return g(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return g(t,e,wa(e,n,t),n);case "ArrayExpression":return g(t,e,pr(e,n,t),n);case "TemplateLiteral":{if(Le(e)!==null)return g(t,e,Ue(e),n);for(let s of e.expressions){let a=S(s,n,t);ur(a,t.schemes)||t.sink.report(h.notTextConvertible(s,a));}return g(t,e,typeCore.s.string,n)}case "AwaitExpression":{let s=e.argument,a=s?S(s,n,t):typeCore.s.unknown;return g(t,e,Ve(a),n)}case "Program":{let s=nn(e.body,n,t,new Set(t.importNames)).scope;return g(t,e,typeCore.s.unknown,s)}case "JsonExpression":return g(t,e,$n(e.body,n,t,e),n);case "ChainExpression":return g(t,e,typeCore.normalizeUnion([S(e.expression,n,t),typeCore.s.undefined]),n);case "TSAsExpression":{let s=e,a=S(s.expression,n,t),o=Ce(s.typeAnnotation,n,t,e);return Te(a,o,t.schemes)||t.sink.report(h.castUnsound(e,a,o)),g(t,e,o,n)}default:return t.sink.report(h.unsupported(e,`'${e.type}'`)),g(t,e,typeCore.s.unknown,n)}}var Vs=new Set(["constructor","prototype","__proto__"]);function Gs(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function Mt(e,n,t,r=false){let s=S(e.object,n,t),a=Gs(e);if(a!==null&&Vs.has(a))return t.sink.report(h.forbiddenMember(e,a)),typeCore.s.unknown;let o=xs(e,s,n,t),i=r?null:J(e);if(i!==null&&Rn(i)&&o.t!=="unknown"){let c=U(n,i);if(c!==void 0&&typeCore.subtype(c,o,t.schemes))return c}return o}function xs(e,n,t,r){if(e.computed){let o=S(e.property,t,r),i=typeCore.resolveTypeOp(typeCore.s.index(n,o));return i.t!=="index"?i:(o.t==="literal"&&typeof o.value=="string"&&jt(e,n,o.value,r),typeCore.s.unknown)}let s=e.property.name,a=typeCore.discover(n,[s],r.schemes);return a?a.type:(jt(e,n,s,r),typeCore.s.unknown)}function jt(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(h.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(h.notObject(e,n));}function Ks(e,n,t,r){let s=e.arguments[0];if(!s){r.sink.report(h.missingArgument(e,"schema",typeCore.s.unknown));return}if(s.type!=="Identifier"){r.sink.report(h.asserterNeedsName(s,n));return}let a=s.name,o=U(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?h.typeAsValue(s,a):h.unknownName(s,a));return}if(!i||i.params.length>0){r.sink.report(h.notASchema(s,a));return}if(!(Jt(a,r)&&!qs(t,a)))return r.overlay.set(s,{type:i.body,scope:t}),i.body}function Jt(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&U(n.env.scope,e)!==void 0}function qs(e,n){for(let t=e;t;t=t.parent)if(Object.prototype.hasOwnProperty.call(t.vars,n))return t.parent===null;return false}function ce(e,n,t){Jt(e,t)&&t.sink.report(h.shadowsSchema(n,e));}function Gn(e,n){let t=W(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function _s(e,n){let t=U(e.scope,n);if(!t)return;let r=Gn(t,e.schemes);return r?W(r,e.schemes):void 0}function Ws(e,n,t,r){let s=Gn(S(n[0],t,r),r.schemes),a=n.length>1?S(n[1],t,r):typeCore.s.undefined;if(s){let o=typeCore.typeDiff(a,s,r.schemes);o.length&&r.sink.report(h.propsMismatch(n[1]??e,s,typeCore.formatTypeDiff(o)));}return g(r,e,typeCore.s.boolean,t)}var Yt="TSLiteSyntheticArg",zs=e=>({type:Yt,schema:e});function Xt(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(c=>c&&c.type!=="SpreadElement")){for(let c of o.elements)r.push(c);continue}let i=W(S(o,n,t),t.schemes);if(i.t==="tuple")for(let c of i.elements)r.push(zs(c));else s={elem:qn(i,o,t),node:a};}return {nodes:r,spread:s}}function Js(e,n,t,r){let s=e.arguments,a=On(e.callee);if(a){let p=t.env.accessors?.[a];if(p){let y=yt(s);if(y){let f=typeCore.discover(p,y,t.schemes);return f?f.type:(t.sink.report(h.noSuchMember(e,p,y.join("."))),typeCore.s.unknown)}return s.forEach(f=>S(f,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let p=Ks(e,a,n,t);s.length<2&&s.length>0&&t.sink.report(h.missingArgument(e,"value",typeCore.s.unknown));for(let y=1;y<s.length;y++){let f=S(s[y],n,t);y===1&&p&&typeCore.freeVars(f).size===0&&!Te(f,p,t.schemes)&&t.sink.report(h.unprovableValue(s[y],f,p,e.arguments[0].name));}return p??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return Ws(e,s,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s.forEach(p=>S(p,n,t)),typeCore.s.any;if(o.t==="overload")return Xs(e,o,n,t,r);if(o.t!=="fn")return s.forEach(p=>S(p,n,t)),t.sink.report(h.notCallable(e,o)),typeCore.s.unknown;let i=Xt(s,n,t),c=i.nodes.map(p=>Qt(p,n,t)),l=Zt(e),u=!l||er(o,l.length);return u||t.sink.report(h.wrongTypeArgumentCount(e,o.typeParams?.length??0,l.length)),In(e,o,i.nodes,c,n,t,i.spread,r,u?l:void 0)}function Qt(e,n,t){if(Cn(e))return typeCore.s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=le(),s=S(e,n,{...t,sink:r});return r.hasErrors()?typeCore.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function In(e,n,t,r,s,a,o=null,i,c){let l=m=>{if(!i)return m;let b=typeCore.substitute(n.returns,m);if(b.t==="fn"&&i.t==="fn"){let B=m,D=Math.min(b.params.length,i.params.length);for(let O=0;O<D;O++)B=typeCore.unify(b.params[O].type,i.params[O].type,B)??B;return typeCore.unify(b.returns,i.returns,B)??B}return typeCore.unify(b,i,m)??m},u=c?na(e,n,c,a):void 0,p=u??l(typeCore.instantiateLoose(n,r).bindings),y=new Set;t.forEach((m,b)=>{if(Cn(m)){let B=typeCore.widenType(typeCore.substitute(n.params[b]?.type??typeCore.s.any,p));r[b]=Kn(m,s,a,B);}else if(m.type==="CallExpression"&&r[b].t==="any")r[b]=S(m,s,a,typeCore.substitute(n.params[b]?.type??typeCore.s.unknown,p));else if(me(m)){let B=n.params[b]?.type??typeCore.s.unknown,D=B.t==="var"?B.bound?typeCore.substitute(B.bound,p):B:typeCore.substitute(B,p);Ee(D)&&(r[b]=g(a,m,ye(m),s));}else if(m.type==="ArrayExpression"||m.type==="ObjectExpression"||m.type==="ConditionalExpression"){let B=n.params[b]?.type??typeCore.s.unknown,D=typeCore.substitute(B,p);if(m.type==="ArrayExpression"&&$e(D)){r[b]=_n(m,D,s,a);return}let O=B.t==="var"?B.bound?typeCore.substitute(B.bound,p):void 0:D;O&&dr(O,a.schemes)&&(y.add(b),r[b]=va(m,O,s,a,B.t==="var")??r[b]);}});let f=u??l(typeCore.instantiateLoose(n,r).bindings);u||Ys(e,n,f,a),aa(e,n,r,f,a,t,o),t.forEach((m,b)=>{let B=n.params[b];m.type==="ObjectExpression"&&B&&!B.variadic&&!y.has(b)&&Fn(m,typeCore.substitute(B.type,f),a);});let N=typeCore.substitute(n.returns,f);return typeCore.widenInferred(typeCore.groundVars(N.t==="union"?typeCore.normalizeUnion(N.of):N,a.schemes))}var It=new WeakMap;function Ht(e){let n=It.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)$(s.type,t,r);return $(e.returns,t,r),It.set(e,t),t}function $(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":$(e.items,n,t);return;case "union":for(let r of e.of)$(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)$(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)$(r.type,n,t);$(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)$(s.type,n,t);$(r.returns,n,t);}return;case "apply":for(let r of e.args)$(r,n,t);return;case "keyof":$(e.of,n,t);return;case "index":$(e.obj,n,t),$(e.key,n,t);return;case "mapped":$(e.over,n,t),$(e.body,n,t);return;default:return}}function Ys(e,n,t,r){let s=Ht(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let c=typeCore.substitute(o,t);typeCore.subtype(i,c,r.schemes)||r.sink.report(h.constraintViolation(e,a,i,c));}}function Xs(e,n,t,r,s){let a=Xt(e.arguments,t,r),o=a.nodes,i=o.map(u=>Qt(u,t,r)),c=Zt(e),l=c?n.signatures.filter(u=>er(u,c.length)):n.signatures;if(c&&!l.length){let u=n.signatures.reduce((p,y)=>Math.max(p,y.typeParams?.length??0),0);return r.sink.report(h.wrongTypeArgumentCount(e,u,c.length)),Ft(e,n.signatures,a,o,i,t,r,s,void 0)}return Ft(e,l,a,o,i,t,r,s,c)}function Ft(e,n,t,r,s,a,o,i,c){let l={t:"overload",signatures:n},u=f=>t.spread?ta(f,r.length):ra(f,r.length),p=l.signatures.filter(u);if(p.length>1&&s.some(f=>f.t==="any"))for(let f of p){let N=le(),m=In(e,f,r,[...s],a,{...o,sink:N},t.spread,i,c);if(!N.hasErrors())return N.all.forEach(b=>o.sink.report(b)),m}let y=l.signatures.find(f=>u(f)&&sa(f,s,o));if(!y){let f=l.signatures.filter(u);f.length===1?y=f[0]:l.signatures.length===1&&(y=l.signatures[0]);}return y?In(e,y,r,s,a,o,t.spread,i,c):(o.sink.report(h.noMatchingOverload(e,l,s)),typeCore.s.unknown)}function Qs(e,n,t,r){let s=U(n,e[0]);if(s===void 0)return t.sink.report(h.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(h.noSuchMember(r,s,a.join("."))),typeCore.s.unknown)}function Ce(e,n,t,r){let s=a=>{if(Array.isArray(a)){let l=false,u=a.map(p=>{let y=s(p);return y!==p&&(l=true),y});return l?u:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Qs(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"){Hs(o.name,n,t,r);let l=t.schemes[o.name];if(!l)return typeCore.s.any;if(Array.isArray(o.args)&&Is(l,o.args,t.schemes))return typeCore.s.any}let i=false,c={};for(let l of Object.keys(o)){let u=s(o[l]);u!==o[l]&&(i=true),c[l]=u;}return i?c:o};return s(e)}function Hs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Ce(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Zs(e,n,t,r,s){let a={...t,sink:le(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Ce(e,n,a,r);return a.sink.hasErrors()?e:s?o:typeCore.groundVars(o,t.schemes)}var qe=(e,n,t)=>{let r=An(e);return r===void 0?r:Ce(r,n,t,e)},ea=(e,n,t)=>{let r=Dn(e);return r===void 0?r:Ce(r,n,t,e)},Zt=e=>{let n=e.typeArguments;return n?.length?n:void 0},er=(e,n)=>(e.typeParams?.length??0)===n;function na(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,c)=>a[i]=t[c]);let o=a;for(let[i,c]of Ht(n)){let l=o[i];if(!l)continue;let u=typeCore.groundVars(typeCore.substitute(c,o),r.schemes);typeCore.subtype(l,u,r.schemes)||r.sink.report(h.constraintViolation(e,i,l,u));}return o}function ta(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 ra(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 sa(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){let o=typeCore.substitute(a.type,r),i=o.t==="array"?o.items:typeCore.s.unknown;for(let c=s;c<n.length;c++)if(!typeCore.subtype(n[c],i,t.schemes))return false;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 aa(e,n,t,r,s,a=e.arguments??[],o=null){let i=l=>a[l]??e;for(let l=0;l<n.params.length;l++){let u=n.params[l];if(u.variadic){let y=typeCore.substitute(u.type,r),f=y.t==="array"?y.items:typeCore.s.unknown;for(let N=l;N<t.length;N++)typeCore.subtype(t[N],f,s.schemes)||s.sink.report(h.notAssignable(i(N),t[N],f,s.schemes));break}let p=typeCore.substitute(u.type,r);if(l>=t.length){!u.optional&&!o&&s.sink.report(h.missingArgument(e,u.name,p));continue}typeCore.subtype(t[l],p,s.schemes)||s.sink.report(h.notAssignable(i(l),t[l],p,s.schemes));}let c=n.params.find(l=>l.variadic);if(o){let l=t.length,u=n.params.filter(p=>!p.optional&&!p.variadic).length;if(!(l>=u&&(c||l<n.params.length))){s.sink.report(h.spreadArgument(o.node));return}if(c){let p=typeCore.substitute(c.type,r),y=p.t==="array"?p.items:typeCore.s.unknown;typeCore.subtype(o.elem,y,s.schemes)||s.sink.report(h.notAssignable(o.node,o.elem,y,s.schemes));}return}!c&&t.length>n.params.length&&s.sink.report(h.excessArgument(i(n.params.length),n.params.length,t.length));}function We(e,n,t){if(e.t==="object"){let r=typeCore.ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>We(typeCore.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:typeCore.resolveTypeOp({t:"intersection",of:r})}if(e.t==="union")return nr(e.of,n,t)}function nr(e,n,t){let r=e.map(s=>We(typeCore.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length?typeCore.normalizeUnion(r):void 0}var xn=e=>e.t==="literal"||e.t==="null"||e.t==="undefined"||e.t==="boolean"||e.t==="union"&&e.of.every(xn),$t=new WeakMap;function oa(e,n,t){let r=$t.get(t);if(r)return r;let s=new Set;for(let o of e)if(o.t==="object")for(let i of Object.keys(o.props))s.add(i);let a=new Set;for(let o of s){let c=e.map(u=>We(u,o,n)).filter(u=>u!==void 0);if(!c.some(xn))continue;c.length===e.length&&c.every(u=>typeCore.equals(u,c[0]))||a.add(o);}return $t.set(t,a),a}var tr=e=>e.type==="Literal"||e.type==="Identifier"||e.type==="TemplateLiteral"||e.type==="MemberExpression"&&!e.computed&&tr(e.object),ia=(e,n)=>e.some(t=>t.t==="object"&&typeCore.ownProp(t.props,n)?.optional===true);function rr(e,n,t,r,s){let a=oa(n,r,s),o=new Set;if(!a.size)return {chosen:n,ignored:o};let i=[],c=new Set;for(let p of e.properties){if(p.type!=="Property")continue;let y=p,f=Ae(y);if(f===null||(c.add(f),!a.has(f)||!tr(y.value)))continue;let N=t(y);N&&xn(N)&&i.push([f,N]);}for(let p of a)!c.has(p)&&ia(n,p)&&i.push([p,typeCore.s.undefined]);let l=n.map(()=>1);for(let[p,y]of i){let f=false;n.forEach((N,m)=>{if(l[m]!==1)return;let b=We(N,p,r);b!==void 0&&(typeCore.subtype(y,b,r)?f=true:l[m]=2);}),n.forEach((N,m)=>{l[m]===2&&(l[m]=f?0:1);}),f||o.add(p);}let u=n.filter((p,y)=>l[y]===1);return {chosen:u.length?u:n,ignored:o}}function Lt(e,n,t,r,s,a=false){let o={},i={};for(let c of e.properties){let l=c;if(l.type==="SpreadElement"){let N=typeCore.apparentType(S(l.argument,t,r),r.schemes);if(N.t==="object")for(let[m,b]of Object.entries(N.props))o[m]=b,i[m]=b;continue}let u=l,p=Ae(u),y=p!==null?n(p):void 0,f=y?H(u.value,y,t,r,s):typeCore.widen(S(u.value,t,r));p!==null&&(o[p]={type:a?f:y??f},i[p]={type:f}),g(r,l,f,t);}return {checked:o,narrowed:i}}function H(e,n,t,r,s=false){let a=typeCore.apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=typeCore.resolveConditional(a,r.schemes)??a),me(e)?"Literal":e.type){case "Literal":{let i=ye(e);return typeCore.subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,s?Ee(n)?i:typeCore.widen(Ue(e)):n,t)}case "ArrayExpression":{if($e(a)){let i=_n(e,a,t,r);return typeCore.subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,i,t)}if(a.t==="array"){let i=[];for(let l of e.elements){if(!l)continue;let u=l;if(u.type==="SpreadElement"){let p=H(u.argument,n,t,r,s);p.t==="array"&&i.push(p.items);}else i.push(H(u,a.items,t,r,s));}let c=s&&i.length>0?typeCore.s.array(typeCore.normalizeUnion(i)):n;return g(r,e,c,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let{checked:i,narrowed:c}=Lt(e,p=>We(a,p,r.schemes),t,r,s),l=Fn(e,n,r),u={t:"object",props:i};return !l&&!typeCore.subtype(u,n,r.schemes)&&r.sink.report(h.notAssignable(e,u,n,r.schemes)),g(r,e,s?{t:"object",props:c}:n,t)}if(a.t==="union"){let i=a.of.filter(b=>b.t==="object"||b.t==="intersection");if(!i.length)break;let c=e,{chosen:l,ignored:u}=rr(c,i,b=>S(b.value,t,{...r,sink:le()}),r.schemes,n),p=r.sink.all.length,{checked:y,narrowed:f}=Lt(c,b=>nr(u.has(b)?i:l,b,r.schemes),t,r,s,true),N=Fn(c,n,r),m={t:"object",props:y};return !N&&r.sink.all.length===p&&!typeCore.subtype(m,n,r.schemes)&&r.sink.report(h.notAssignable(e,m,n,r.schemes)),g(r,e,s?{t:"object",props:f}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Kn(e,t,r,a);return typeCore.subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let c=V(i.test,t,r.schemes),l=H(i.consequent,n,L(t,c.then),r,s),u=H(i.alternate,n,L(t,c.else),r,s);return g(r,e,s?typeCore.normalizeUnion([l,u]):n,t)}case "Placeholder":return g(r,e,n,t)}let o=S(e,t,r);return typeCore.subtype(o,n,r.schemes)||r.sink.report(h.notAssignable(e,o,n,r.schemes)),g(r,e,o,t)}function Kn(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=C=>a?.length?{...C,typeParams:a}:C,i={},c=new Map,l=e.params.map((C,I)=>{let T=C,ue=s?.params[I]?.type;if(T.type==="RestElement"){let oe=T.argument,_=qe(oe,n,t)??(s?.params[I]?.variadic?ue:void 0)??typeCore.s.array(typeCore.s.unknown),X=G(oe);return X?(ce(X,oe,t),i[X]=_):se(oe,_,i,n,t),t.overlay.set(oe,{type:_,scope:n}),t.overlay.set(T,{type:_,scope:n}),{name:X??`arg${I}`,type:_,variadic:true}}if(T.type==="AssignmentPattern"){let oe=T.left,sn=qe(oe,n,t)??ue;se(T,sn??typeCore.s.unknown,i,n,t);let _=G(oe),X=_?i[_]:void 0,an=sn??X??typeCore.s.unknown,Qn=an.t==="unknown"?an:typeCore.normalizeUnion([an,typeCore.s.undefined]);return _&&X&&(X.t==="union"||X.t==="boolean")&&c.set(_,X),t.overlay.set(T,{type:Qn,scope:n}),{name:_??`arg${I}`,type:Qn,optional:true}}let ke=G(T),Yn=qe(T,n,t),Re=Yn??ue??typeCore.s.unknown,Xn=T.type==="Identifier"&&(!!T.optional||Yn===void 0&&!!s?.params[I]?.optional),we=Xn&&Re.t!=="unknown"?typeCore.normalizeUnion([Re,typeCore.s.undefined]):Re;return ke?(ce(ke,T,t),i[ke]=we,(we.t==="union"||we.t==="boolean")&&c.set(ke,we)):T.type!=="Identifier"&&se(T,Re,i,n,t),t.overlay.set(T,{type:we,scope:n}),Xn?{name:ke??`arg${I}`,type:we,optional:true}:{name:ke??`arg${I}`,type:Re}}),u=false;l.forEach((C,I)=>{C.optional?u=true:!C.variadic&&u&&t.sink.report(h.requiredAfterOptional(e.params[I]));});let p=Ne(n,i,t),y=e.body,f=ea(e,n,t),N=e.returnGuard,m=N?{param:N.param,type:Ce(N.type,n,t,e)}:void 0;if(m){let C=l[m.param];C&&!typeCore.subtype(m.type,C.type,t.schemes)&&t.sink.report(h.notAssignable(e,m.type,C.type,t.schemes));}let b=C=>m?{...C,guard:m}:C;if(y.type!=="BlockStatement"&&f){let C=e.async?Ve(f):f;H(y,C,p,t);let I=e.async?Ge(f):f;return g(t,e,b(o({t:"fn",params:l,returns:I})),n)}let B=f??s?.returns,D=B&&e.async?Ve(B):B,O=y.type==="BlockStatement"?g(t,y,ar(y,p,t,new Set(Object.keys(i)),c,D),p):S(y,p,t),Be=e.async?Ge(O):O;if(f){let C=e.async?Ve(f):f,I=e.async?O:Be;typeCore.subtype(I,C,t.schemes)||t.sink.report(h.notAssignable(y,Be,f,t.schemes));let T=e.async?Ge(f):f;return g(t,e,b(o({t:"fn",params:l,returns:T})),n)}return g(t,e,o({t:"fn",params:l,returns:typeCore.widenType(Be)}),n)}function De(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?De(n.argument):De(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?De(n.argument):De(n):[]);case "AssignmentPattern":return De(e.left);default:return []}}function sr(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>De(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?sr(e.declaration):[]}function ar(e,n,t,r=new Set,s,a){let{returns:o}=nn(e.body,n,t,r,s,a),i=!x(e);return o.length===0?i?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(i?[...o,typeCore.s.undefined]:o)}var la=[typeCore.s.literal(true),typeCore.s.literal(false)];function ca(e){return e.t==="union"?e.of:e.t==="boolean"?la:[e]}function or(e,n,t){let r=ca(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 ir(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 ua(e){if(e.type!=="ExpressionStatement")return null;let n=e.expression;return n.type!=="AssignmentExpression"?null:J(n.left)}function Se(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=Se(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=ir(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=lr(e,n,t);if(r.size===0)return {types:n,exits:x(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:x(e)}}case "TryStatement":{let r=e,s=[],a=Se(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=Se(r.handler.body,n,t);i.exits||s.push(i.types);}let o=pa(n,s);return r.finalizer&&(o=Se(r.finalizer,o,t).types),{types:o,exits:x(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function lr(e,n,t){let r=Se(e.consequent,n,t),s=e.alternate?Se(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let c=[];r.exits||c.push(r.types.get(i)??n.get(i)),s.exits||c.push(s.types.get(i)??n.get(i)),c.length&&o.set(i,typeCore.normalizeUnion(c));}return o}function cr(e,n){let t=new Map,r=s=>{let a=U(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 pa(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 da(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=cr(n,t),s=Se(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return L(n,a)}function nn(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!fa(e))return Ut(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[c,l]of s)t.declaredMut.set(c,l);try{return Ut(e,n,t,r,a)}finally{t.evolving.clear();for(let c of o)t.evolving.add(c);t.declaredMut.clear();for(let[c,l]of i)t.declaredMut.set(c,l);}}function fa(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 Ut(e,n,t,r,s){let a=n,o=[];for(let i of e){let c=i;for(let l of sr(c))r.has(l.name)?t.sink.report(h.cannotRedeclare(l,l.name)):r.add(l.name);if(c.type==="VariableDeclaration")a=tn(c,a,t);else if(c.type!=="ImportDeclaration")if(c.type==="ExportNamedDeclaration"){let l=c;if(l.declaration?.type==="VariableDeclaration")a=tn(l.declaration,a,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=S(l.declaration,a,t),p=G(l.declaration.id);p&&(a=Ne(a,{[p]:u},t));}else for(let u of l.specifiers)U(a,u.local.name)===void 0&&t.sink.report(h.unknownName(u.local,u.local.name));}else if(c.type==="ExportDefaultDeclaration")S(c.declaration,a,t);else if(c.type==="FunctionDeclaration"){let l=S(c,a,t),u=G(c.id);u&&(a=Ne(a,{[u]:l},t));}else if(c.type==="IfStatement"){let l=c,u=t.evolving.size||t.declaredMut.size?cr(a,t):null;if(o.push(...Y(c,a,t,s)),u&&u.size){let p=lr(l,u,t);p.size&&(a=L(a,Object.fromEntries(p)));}!l.alternate&&x(l.consequent)&&(a=L(a,V(l.test,a,t.schemes).else));}else {o.push(...Y(c,a,t,s));let l=ir(c,t);l&&(a=L(a,{[l.name]:l.type}));let u=ua(c);u!==null?a=Tn(a,u,t.schemes):(c.type==="BlockStatement"||c.type==="TryStatement")&&(a=da(c,a,t));}}return {scope:a,returns:o}}function Y(e,n,t,r){switch(e.type){case "ReturnStatement":{let s=e.argument,a=s?r?(H(s,r,n,t),r):S(s,n,t):typeCore.s.unknown;return g(t,e,a,n),[a]}case "IfStatement":{let s=e;S(s.test,n,t);let a=V(s.test,n,t.schemes),o=Y(s.consequent,L(n,a.then),t,r);return s.alternate&&o.push(...Y(s.alternate,L(n,a.else),t,r)),g(t,e,typeCore.s.unknown,n),o}case "BlockStatement":{let{returns:s}=nn(e.body,n,t,void 0,void 0,r);return g(t,e,s.length?typeCore.normalizeUnion(s):typeCore.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,a=n;s.init&&(s.init.type==="VariableDeclaration"?a=tn(s.init,a,t):S(s.init,a,t)),s.test&&S(s.test,a,t),s.update&&S(s.update,a,t);let o=Y(s.body,a,t,r);return g(t,e,typeCore.s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s=e,a=S(s.right,n,t),o=e.type==="ForOfStatement"?qn(a,s.right,t):typeCore.s.string,i=ft(s.left);i&&ce(i,mt(s.left),t);let c=i?Ne(n,{[i]:o},t):n,l=Y(s.body,c,t,r);return g(t,e,typeCore.s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return g(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&S(s,n,t),g(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let s=e,a=Y(s.block,n,t,r);if(s.handler){let o=s.handler.param,i=o?G(o):null;i&&o&&ce(i,o,t);let c=i?Ne(n,{[i]:typeCore.s.unknown},t):n;a.push(...Y(s.handler.body,c,t,r));}return s.finalizer&&a.push(...Y(s.finalizer,n,t,r)),g(t,e,typeCore.s.unknown,n),a}case "SwitchStatement":{let s=e;S(s.discriminant,n,t);let a=n,o=[];for(let i of s.cases){i.test&&S(i.test,a,t);let c=nn(i.consequent,a,t,void 0,void 0,r);a=c.scope,o.push(...c.returns);}return g(t,e,typeCore.s.unknown,n),o}default:return S(e,n,t),[]}}function ma(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function qn(e,n,t){let r=W(e,t.schemes);switch(r.t){case "array":return r.items;case "tuple":return r.elements.length?typeCore.normalizeUnion([...r.elements]):typeCore.s.unknown;case "string":return typeCore.s.string;case "literal":if(typeof r.value=="string")return typeCore.s.string;break;case "unknown":case "any":return typeCore.s.unknown;case "union":return typeCore.normalizeUnion(r.of.map(s=>qn(s,n,t)));}return t.sink.report(h.notIterable(n,e)),typeCore.s.any}function ya(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function ha(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 ga(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function se(e,n,t,r,s){switch(e.type){case "Identifier":{let a=qe(e,r,s)??n;ce(e.name,e,s),t[e.name]=a,s.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=S(a.right,r,s);n.t!=="unknown"&&!typeCore.subtype(o,n,s.schemes)&&s.sink.report(h.notAssignable(a.right,o,n,s.schemes));let i=typeCore.widenType(o),{type:c}=typeCore.withoutUndefined(n),l=c.t==="unknown"?i:typeCore.normalizeUnion([c,i]),u=a.left;if(u.type==="Identifier"){let p=u.name;ce(p,u,s),t[p]=l,s.overlay.set(u,{type:l,scope:r});}else se(u,l,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){se(o.argument,ha(n,a),t,r,s);continue}let i=o,c=Ae(i);c!=null&&a.push(c);let l=c!=null?ma(n,c,s):typeCore.s.unknown;se(i.value,l,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?se(i.argument,ga(n,o),t,r,s):se(i,ya(n,o),t,r,s);});return}}}function Fn(e,n,t){let r=W(n,t.schemes),s=r.t==="union"?typeCore.apparentType(r,t.schemes):r,a=s.t==="union"?s.of.map(l=>W(l,t.schemes)):[s],i=(r.t==="union"?rr(e,a.filter(l=>l.t==="object"||l.t==="intersection"),l=>t.overlay.get(l.value)?.type,t.schemes,n).chosen:a).filter(l=>l.t==="object"&&(!l.index||l.index.key==="number"));if(!i.length||i.some(l=>Object.keys(l.props).length===0&&!l.index))return false;let c=false;for(let l of e.properties){if(l.type==="SpreadElement")continue;let u=l;if(u.computed)continue;let p=Ae(u);if(p===null)continue;i.filter(f=>p in f.props||f.index?.key==="number"&&typeCore.isNumericLiteralName(p)).length||(t.sink.report(h.excessProperty(u.key,p,n)),c=true);}return c}function tn(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=G(a);o&&ce(o,a,t);let i=qe(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,Vt(o,i,t)):(r[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(h.constNeedsInit(s)),o&&(r[o]=i??typeCore.s.unknown);continue}let c=i??(s.init.type==="ArrowFunctionExpression"?gt(s.init):null),l=o&&c?Ne(n,{[o]:c},t):n,u,p=null;i?(H(s.init,i,l,t),u=i,p=i,(i.t==="union"||i.t==="boolean")&&me(s.init)&&(u=or(i,ye(s.init),t.schemes))):(u=S(s.init,l,t),e.kind!=="const"&&(u=typeCore.widenLiteral(u)),p=u),g(t,s,u,n),o?(r[o]=u,e.kind!=="const"&&p&&Vt(o,p,t)):se(a,u,r,n,t);}return g(t,e,typeCore.s.unknown,n),Ne(n,r,t)}function Ne(e,n,t){let r=ie(e,n);for(let s of Object.keys(n))r=Tn(r,s,t.schemes);return r}function Vt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Sa(e,n,t){let r=S(e.left,n,t),s=S(e.right,n,t),a=e.operator,o=Pe.get(a);if(!o)return typeCore.s.boolean;if(o.category==="additive"){if(be(r)||be(s))return ge(r,t.schemes)||ge(s,t.schemes)?typeCore.s.string:typeCore.s.number;if(ge(r,t.schemes)&&ge(s,t.schemes))return typeCore.s.string;if(Ke(r,t.schemes)&&Ke(s,t.schemes))return typeCore.s.number;if(ge(r,t.schemes)||ge(s,t.schemes)){let c=ge(r,t.schemes)?s:r;return t.sink.report(h.implicitCoercion(e,r,s,ur(c,t.schemes))),typeCore.s.string}return t.sink.report(h.operatorNotApplicable(e,"+",r,s)),typeCore.s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ke(r,t.schemes)||t.sink.report(h.arithmeticOperand(e.left,"left")),Ke(s,t.schemes)||t.sink.report(h.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!be(r)&&!be(s)){let i=typeCore.apparentType(r,t.schemes),c=typeCore.apparentType(s,t.schemes),l=typeCore.subtype(i,typeCore.s.number,t.schemes),u=typeCore.subtype(c,typeCore.s.number,t.schemes);l&&u||!l&&!u&&(typeCore.subtype(i,c,t.schemes)||typeCore.subtype(c,i,t.schemes))||t.sink.report(h.operatorNotApplicable(e,a,r,s));}return Nn(o.result)}var be=e=>e.t==="any"||e.t==="unknown",Ke=(e,n)=>be(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),ge=(e,n)=>!be(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),ba=typeCore.s.union([typeCore.s.string,typeCore.s.number,typeCore.s.boolean,typeCore.s.null,typeCore.s.undefined]),ur=(e,n)=>be(e)||typeCore.subtype(typeCore.apparentType(e,n),ba,n),Gt={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},Mn=e=>e.t==="null"||e.t==="undefined";function Na(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=>!Mn(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!Mn(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>Mn(a)?[a]:a.t==="literal"?a.value?[]:[a]:Gt[a.t]?[Gt[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var Ba=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function ka(e,n,t){let r=S(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 Ba;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function wa(e,n,t){let r={},s,a=[],o=[],i=false,c=false;for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){let m=W(S(u.argument,n,t),t.schemes);if(m.t==="object"){for(let b in m.props)r[b]=m.props[b];m.index&&(s={key:m.index.key,type:m.index.value});}continue}let p=u,y=S(p.value,n,t),f=typeCore.widen(y);if(g(t,u,y,n),p.computed){let m=W(S(p.key,n,t),t.schemes);m.t==="literal"&&typeof m.value=="string"?(r[m.value]={type:f},a.push(f)):m.t==="literal"&&typeof m.value=="number"?(r[String(m.value)]={type:f},a.push(f),o.push(f)):m.t==="string"?(i=true,a.push(f)):m.t==="number"&&(c=true,a.push(f),o.push(f));continue}let N=Ae(p);N!==null&&(r[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}return i?s={key:"string",type:typeCore.normalizeUnion(a)}:c&&(s={key:"number",type:typeCore.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function pr(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=W(S(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(S(a,n,t)));}return typeCore.s.array(r.length?typeCore.normalizeUnion(r):typeCore.s.unknown)}function _n(e,n,t,r){let s=W(n,r.schemes),a=e.elements,o=a.every(c=>c&&c.type!=="SpreadElement"),i=(c,l)=>c.type==="ArrayExpression"?_n(c,l,t,r):Ee(l)?S(c,t,r):typeCore.widen(S(c,t,r));if(s.t==="tuple"&&o){let c=s.elements.length,l=typeCore.restIndex(s),u=l<0?0:c-l-1,p=f=>{if(l<0||f<l)return s.elements[f];let N=a.length-f;return N<=u?s.elements[c-N]:s.elements[l]},y=a.map((f,N)=>{let m=p(N);return m?i(f,m):typeCore.widen(S(f,t,r))});return g(r,e,{t:"tuple",elements:y},t)}if(s.t==="array"){let c=[];for(let l of a){if(!l)continue;let u=l;if(u.type==="SpreadElement"){S(u.argument,t,r);continue}c.push(i(u,s.items));}return g(r,e,typeCore.s.array(c.length?typeCore.normalizeUnion(c):typeCore.s.unknown),t)}return pr(e,t,r)}function $n(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=>$n(i,n,t,r));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let s=e;if(core.isExprMarker(s)){let o;try{o=codec.fromJson(s);}catch{return t.sink.report(h.unsupported(r,`'${core.EXPR_MARKER}: ${String(s[core.EXPR_MARKER])}'`)),typeCore.s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:$n(s[o],n,t,r)};return {t:"object",props:a}}function dr(e,n){let t=typeCore.apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":t.t==="union"?t.of.some(r=>dr(r,n)):false}function va(e,n,t,r,s){let a=le(),o=H(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=c=>r.sink.all.some(l=>l.node===c.node&&l.code===c.code&&l.message===c.message);for(let c of a.all)i(c)||r.sink.report(c);return a.hasErrors()?n:o}var Ea=(e,n)=>({...e,typeAnnotation:n}),Aa=(e,n)=>({...e,returnType:n}),Da=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function zn(e,n){return e.get(n)?.type}function Oa(e,n){return e.get(n)?.scope}function Ca(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function Ra(e,n){let t=e.get(n)?.scope;return t?[...on(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Ta=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Pa(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 rn(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(Ta)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=zn(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=rn(e,n+2,t,r),c=Pa(a);return !i||!c?void 0:typeCore.discover(i,[c],r)?.type}case "ArrayExpression":{let o=rn(e,n+1,t,r);return o?typeCore.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=Pe.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return typeCore.s.number;let i=a.left===s?a.right:a.left,c=zn(t,i);return c&&c.t!=="any"&&c.t!=="unknown"?c:void 0}case "LogicalExpression":return rn(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?typeCore.s.number:void 0}default:return}}function Ma(e,n){return e.filter(t=>t.node===n)}function $a(){let e=new WeakMap;return {stamp:(n,t)=>(e.set(n,t),n),get:n=>e.get(n)}}var La=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function Jn(e,n,t,r){if(core.isExprMarker(e)){let s=r.island?r.island(e,n):core.fromExprMarker(e);return t.stamp(s,n)}return Array.isArray(e)?t.stamp(ae__namespace.arrayExpression(e.map((s,a)=>Jn(s,r.child(n,a),t,r))),n):La(e)?t.stamp(ae__namespace.objectExpression(Object.entries(e).map(([s,a])=>{let o=r.child(n,s),i=t.stamp(ae__namespace.literal(s),o);return t.stamp(ae__namespace.property(i,Jn(a,o,t,r),false,false),o)})),n):t.stamp(ae__namespace.literal(e),n)}function Ua(e){let n=new WeakMap,t=[e];for(;t.length>0;){let r=t.pop();core.forEachChild(r,s=>{n.set(s,r),t.push(s);});}return n}function Va(e,n,t,r){let s=Ua(e),a=new Map,o=c=>{let l=a.get(c);return l===void 0&&(l=languageService.createPositionMap(c),a.set(c,l)),l},i=c=>{let l=c;for(;l!==void 0;){let u=t.get(l);if(u!==void 0)return u;l=s.get(l);}return r.fallback};return n.map(c=>{let l=i(c.node),u=r.textOf?.(l),p=u===void 0?void 0:yr(o(u),c.node.loc);return {diagnostic:c,anchor:l,...p?{span:p}:{}}})}function yr(e,n){if(!n?.start)return;let t=a=>e.offsetAt({line:a.line-1,column:a.column}),r=t(n.start),s=n.end?t(n.end):r;return {from:r,to:s<r?r:s}}function Ga(e,n){return yr(languageService.createPositionMap(e),n)}exports.BINARY_OP=Pe;exports.BINARY_OPS=bn;exports.FUNCTION_KINDS=rt;exports.LOGICAL_OPS=$r;exports.UNARY_OPS=lt;exports.anchorDiagnostics=Va;exports.annotate=Ea;exports.annotateReturn=Aa;exports.asExpression=Da;exports.binaryOpsProducing=Lr;exports.calleeAllowlist=pn;exports.capabilityNodes=un;exports.check=zt;exports.childScope=ie;exports.collectBindings=Jr;exports.collectMutations=En;exports.collectUnused=wn;exports.componentProps=_s;exports.componentPropsOf=Gn;exports.contextualTypeAt=rn;exports.createAnchors=$a;exports.createEnv=Br;exports.createSink=le;exports.diag=h;exports.diagnosticsAt=Ma;exports.extractModuleType=$s;exports.fromCapability=Ir;exports.guard=cn;exports.guardsFromCompiled=Ye;exports.lookup=U;exports.lowerValue=Jn;exports.makeDiagnostic=P;exports.maxArgs=gn;exports.maxCallNesting=fn;exports.maxDepth=yn;exports.maxFunctionNesting=dn;exports.maxNestingOf=Je;exports.maxNodes=hn;exports.memberCompletions=Ca;exports.memberDepth=mn;exports.opResultSchema=Nn;exports.resolveNamed=kr;exports.resolveScheme=wr;exports.resultType=Sn;exports.rootScope=Zn;exports.scopeAt=Oa;exports.scopeCompletions=Ra;exports.spanOf=Ga;exports.typeAt=zn;exports.unaryOpsProducing=Ur;exports.visibleNames=on;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 types=require('@tslite/types'),ast=require('@tslite/ast'),capability=require('@tslite/capability'),json=require('@tslite/json'),ae=require('@tslite/ast/builders'),languageService=require('@tslite/language-service');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var ae__namespace=/*#__PURE__*/_interopNamespace(ae);var Zn=(e={})=>ast.rootScope(e),ie=(e,n)=>ast.childScope(e,n),U=(e,n)=>ast.lookup(e,n),on=e=>{let n=ast.visibleNames(e);for(let t of n.keys())t.includes(".")&&n.delete(t);return n},Hn=new Set(["types","schemes","accessors","asserters","matchers","modules"]),Br=(e={},n)=>{let t=n??{},r=Object.keys(t).filter(s=>!Hn.has(s));if(r.length>0)throw new ast.TSLiteError("invalid-env-options",`createEnv: unknown option(s) ${r.map(s=>`'${s}'`).join(", ")} \u2014 expected ${[...Hn].join(", ")}. Named types go under 'types'.`,{unknown:r});return {scope:Zn(e),types:t.types??{},schemes:t.schemes??{},accessors:t.accessors??{},asserters:t.asserters??new Set,matchers:t.matchers??new Set,modules:t.modules??{}}},kr=(e,n)=>e.types[n],wr=(e,n)=>e.schemes[n];var et={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","required-after-optional":"type","not-iterable":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","unprovable-value":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","narrowing-cast-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},k=(e,n,t)=>({code:e,kind:et[e],severity:"error",node:n,message:t}),P=(e,n,t,r="error")=>({code:e,kind:et[e],severity:r,node:n,message:t}),h={notAssignable:(e,n,t,r={})=>{let s=types.typeDiff(n,t,r),a=s.filter(l=>l.path.length>0),o=a.length?` ${types.formatTypeDiff(a)}.`:"",i=k("not-assignable",e,`Type '${types.format(n)}' is not assignable to type '${types.format(t)}'.${o}`),c=s.filter(l=>l.kind==="missing"&&l.path.length===1).map(l=>({name:l.path[0],type:l.expected}));return c.length?{...i,data:{kind:"missing-properties",properties:c}}:i},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${types.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${types.format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${types.format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${types.format(t)}'.`),notASchema:(e,n)=>k("not-a-schema",e,`'${n}' refers to a value, but no type named '${n}' is declared. An asserter needs a schema that is both a value in scope and a declared type.`),typeAsValue:(e,n)=>k("type-as-value",e,`'${n}' only refers to a type, but is being used as a value here. Types are erased at runtime: register '${n}' as a value in scope for the asserter to prove it.`),asserterNeedsName:(e,n)=>k("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>k("shadows-schema",e,`'${n}' shadows the schema of the same name: an asserter would type against the declared schema but prove against this value at runtime. Rename the binding.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${types.format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>k("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>k("not-iterable",e,`Type '${types.format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${types.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${types.format(n)}' matches the arguments (${t.map(r=>types.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>k("constraint-violation",e,`Type '${types.format(t)}' does not satisfy the constraint '${n} extends ${types.format(r)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>k("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),genericTypeArity:(e,n,t,r)=>k("wrong-type-argument-count",e,r===0?`Type '${n}' is not generic.`:t===r?`Generic type '${n}' requires ${r} type argument${r===1?"":"s"}.`:`Generic type '${n}' requires between ${t} and ${r} type arguments.`),forbiddenMember:(e,n)=>k("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>P("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>k("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>k("readonly-write",e,`Index signature in type '${types.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>k("cast-unsound",e,`Conversion of type '${types.format(n)}' to type '${types.format(t)}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.`),unprovableValue:(e,n,t,r)=>k("unprovable-value",e,`A value of type '${types.format(n)}' can never satisfy '${r}' (${types.format(t)}): the types do not overlap, so this proof can only fail at runtime.`),arithmeticOperand:(e,n)=>k("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>k("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${types.format(t)}' and '${types.format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...k("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${types.format(n)}' and '${types.format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...k("implicit-coercion",e,`Cannot convert '${types.format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function le(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Te(e,n,t){let r=types.baseLiteralType(e);return types.comparable(n,types.widenType(r),t)||types.comparable(r,n,t)}function tt(e,n,t){return types.subtype(e,n,t)}function cn(e,n,t={}){return n.flatMap(r=>r(e,t))}function pe(e,n){let t=r=>{n(r);for(let s of ast.childrenOf(r))t(s);};t(e);}var Mr=e=>Array.isArray(e)?e:[e],rt=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function un(e,n="error"){return t=>{let r=[];return pe(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(P("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function st(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return pe(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let c of [o.typeAnnotation,o.returnType]){if(!c)continue;let l=capability.typeFeatureViolations(types.typeFeatures(c,i),t);l.length&&s.push(P("type-feature-not-allowed",a,`authoring type feature${l.length>1?"s":""} '${l.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function R(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=>R(t.type,n))||!!e.index&&R(e.index.value,n);case "array":return R(e.items,n);case "tuple":return e.elements.some(t=>R(t,n));case "union":case "intersection":return e.of.some(t=>R(t,n));case "fn":return e.params.some(t=>R(t.type,n))||R(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>R(r.type,n))||R(t.returns,n));case "keyof":return R(e.of,n);case "index":return R(e.obj,n)||R(e.key,n);case "mapped":return R(e.over,n)||R(e.body,n);case "conditional":return R(e.check,n)||R(e.extends,n)||R(e.then,n)||R(e.else,n);case "returnType":case "parameters":return R(e.fn,n);case "apply":return e.args.some(t=>R(t,n));default:return false}}function at(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return pe(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&R(o)){r.push(P("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function ot(e,n="error"){return (t,r)=>{let s=r.overlay;if(!e.typeStrict||!s)return [];let a=r.schemes??{},o=[];return pe(t,i=>{if(i.type!=="TSAsExpression")return;let{expression:c}=i,l=s.get(c)?.type,u=s.get(i)?.type;!l||!u||R(u)||!Te(l,u,a)||tt(l,u,a)||o.push(P("narrowing-cast-not-allowed",i,`A cast may only widen under 'strict': '${types.format(l)}' is not assignable to '${types.format(u)}'. Narrow with a type guard, or prove the value with an asserter.`,n));}),o}}function pn(e,n="error"){let t=new Set(e);return r=>{let s=[];return pe(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(P("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(P("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Je(e,n,t={}){let r=new Set(Mr(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],c=(l,u)=>{let p=r.has(l.type),y=p?u+1:u;p&&y>n&&i.push(P("too-deep",l,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let f of ast.childrenOf(l))c(f,y);};return c(o,0),i}}var dn=(e=3,n="error")=>Je(rt,e,{hint:"use a pipe instead of nesting functions",severity:n}),fn=(e,n="error")=>Je("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),mn=(e,n="error")=>Je("MemberExpression",e,{severity:n});function yn(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(P("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of ast.childrenOf(a))s(i,o+1);};return s(t,0),r}}function hn(e,n="error"){return t=>{let r=0;return pe(t,()=>{r++;}),r>e?[P("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function gn(e,n="error"){return t=>{let r=[];return pe(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(P("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Sn(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?types.subtype(a,e,n)?[]:[P("wrong-result-type",r,`Result type '${types.format(a)}' is not assignable to the required '${types.format(e)}'.`,t)]:[]}}function Ye(e){let n=[un(e),st(e),at(e),ot(e)];return e.hostAllow!=="*"&&n.push(pn([...e.hostAllow])),n}function Ir(e){return Ye(capability.compileProfile(e))}var bn=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],Pe=new Map(bn.map(e=>[e.op,e])),it={number:types.s.number,boolean:types.s.boolean,string:types.s.string},Nn=e=>it[e],lt=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Fr={number:types.s.number,boolean:types.s.boolean,string:types.s.string,undefined:types.s.undefined},$r=[{op:"&&"},{op:"||"},{op:"??"}];function Lr(e,n={}){return bn.filter(t=>t.result==="additive"?types.subtype(types.s.string,e,n)||types.subtype(types.s.number,e,n):types.subtype(it[t.result],e,n))}function Ur(e,n={}){return lt.filter(t=>types.subtype(Fr[t.result],e,n))}var de=e=>({bindings:new Map,parent:e}),ut=e=>e.charCodeAt(0)===95;function Qe(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 je(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)je(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&He(n,r);return}for(let r of Object.keys(t))je(t[r],n);}function pt(e,n){let t=e;je(t.typeAnnotation,n),je(t.returnType,n);}function He(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function ee(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;pt(e,n),Qe(n,t,o,e,r,s||a&&ut(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],c=!!i&&i.type==="RestElement";o.forEach((l,u)=>{let p=c&&u<o.length-1;if(l.type==="RestElement")ee(l.argument,n,t,r,s,false);else {let y=l;y.computed&&v(y.key,n,t),ee(y.value,n,t,r,s||p,!y.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;ee(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":ee(e.left,n,t,r,s,a);return;case "RestElement":ee(e.argument,n,t,r,s,true);return;default:return}}function Me(e,n,t){if(e)switch(e.type){case "AssignmentPattern":v(e.right,n,t),Me(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)Me(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&Me(r,n,t);return;case "RestElement":Me(e.argument,n,t);return;default:return}}function ct(e,n,t,r){for(let s of e.declarations)ee(s.id,n,t,"local",r,false),v(s.init,n,t);}function Bn(e,n,t){let r=e,s=de(n),a=r.params??[];for(let o of a)ee(o,s,t,"parameter",false,true);for(let o of a)Me(o,s,t);v(r.body,s,t);}function v(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(pt(e,n),e.type){case "Identifier":He(n,e.name);return;case "MemberExpression":{let r=e;v(r.object,n,t),r.computed&&v(r.property,n,t);return}case "Property":{let r=e;r.computed&&v(r.key,n,t),v(r.value,n,t);return}case "Program":case "BlockStatement":{let r=de(n);for(let s of e.body??[])v(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":Bn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Qe(n,t,r.name,r,"local",false),Bn(e,n,t);return}case "CatchClause":{let r=e,s=de(n);ee(r.param,s,t,"local",true,false),v(r.body,s,t);return}case "SwitchStatement":{let r=e;v(r.discriminant,n,t);let s=de(n);for(let a of r.cases){v(a.test,s,t);for(let o of a.consequent??[])v(o,s,t);}return}case "ForStatement":{let r=e,s=de(n);v(r.init,s,t),v(r.test,s,t),v(r.update,s,t),v(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;v(r.right,n,t);let s=de(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)ee(o.id,s,t,"local",false,true);else v(a,s,t);v(r.body,s,t);return}case "VariableDeclaration":ct(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Qe(n,t,s.name,s,"import",ut(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")ct(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Qe(n,t,a.name,a,"local",true),Bn(s,n,t);}else v(s,n,t);}else for(let s of r.specifiers)He(n,s.local.name);return}case "TSAsExpression":v(e.expression,n,t);return;case "TSTypeAliasDeclaration":je(e.typeAnnotation,n);return;case "JsonExpression":kn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;dt(r.name,n);for(let s of r.attributes??[])v(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":v(e.value,n,t);return;default:{let r=ast.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)v(i,n,t);else v(o,n,t);}return}}}function dt(e,n,t){e&&(e.type==="JSXIdentifier"?He(n,e.name):e.type==="JSXMemberExpression"&&dt(e.object,n));}function kn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)kn(s,n,t);return}let r=e;if(ast.isExprMarker(r)){try{v(json.fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))kn(r[s],n,t);}function wn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};v(e,de(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(h.unusedName(s.node,s.name));return r}var qr=new Set(["const","import"]),Ie=e=>({binds:new Map,parent:e});function _r(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function fe(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?fe(n.argument):fe(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?fe(n):[]);case "AssignmentPattern":return fe(e.left);case "RestElement":return fe(e.argument);default:return []}}var Ze=(e,n,t)=>{for(let r of fe(n))e.binds.set(r.name,t);};function vn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of fe(e))vn(a,n,t);return}let r=e.name,s=_r(n,r);s&&qr.has(s)&&(t.invalid.add(e),t.out.push(h.assignToConst(e,r,s==="import"?"import":"const")));}function F(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;vn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{vn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ie(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ie(n);for(let a of r.params??[])Ze(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ie(n);Ze(s,r.param,"param"),F(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)Ze(s,o.id,a.kind);else a&&F(a,s,t);F(r.right,n,t),F(r.test,s,t),F(r.update,s,t),F(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)F(s.init,n,t),Ze(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&&F(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":F(e.expression,n,t);return;default:{let r=ast.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)F(i,n,t);else F(o,n,t);}return}}}function En(e){let n={out:[],invalid:new WeakSet};return F(e,Ie(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var Fe=e=>({decls:new Map,parent:e});function zr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function ve(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ve(n.argument):ve(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ve(n):[]);case "AssignmentPattern":return ve(e.left);case "RestElement":return ve(e.argument);default:return []}}var en=(e,n)=>{for(let t of ve(n))e.decls.set(t.name,t);};function j(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=zr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;j(r.object,n,t),r.computed&&j(r.property,n,t);return}case "Property":{let r=e;r.computed&&j(r.key,n,t),j(r.value,n,t);return}case "Program":case "BlockStatement":{let r=Fe(n);for(let s of e.body??[])j(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=Fe(n);for(let o of r.params??[])en(a,o);j(r.body,a,t);return}case "CatchClause":{let r=e,s=Fe(n);en(s,r.param),j(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Fe(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)en(s,o.id);else a&&j(a,s,t);j(r.right,n,t),j(r.test,s,t),j(r.update,s,t),j(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)en(n,r.id),j(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":j(e.expression,n,t);return;default:{let r=ast.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)j(i,n,t);else j(o,n,t);}return}}}function Jr(e){let n=new WeakMap;return j(e,Fe(void 0),n),n}var An=e=>e.typeAnnotation,Dn=e=>e.returnType,G=e=>e.type==="Identifier"?e.name:null,ft=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?G(n.id):null}return G(e)},mt=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Ae=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function yt(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function On(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=On(n.object);return t===null?null:`${t}.${n.property.name}`}return null}var Le=e=>{if(e.type!=="TemplateLiteral")return null;let n=e;if(n.expressions.length!==0||n.quasis.length!==1)return null;let{cooked:t,raw:r}=n.quasis[0].value;return t??r},me=e=>e.type==="Literal"||Le(e)!==null;function Ue(e){let n=Le(e);if(n!==null)return {t:"literal",value:n,fresh:true};let t=e;if(t.regex||t.bigint)return types.s.unknown;let r=t.value;return r===null?types.s.null:r===void 0?types.s.undefined:typeof r=="string"||typeof r=="number"||typeof r=="boolean"?{t:"literal",value:r,fresh:true}:types.s.unknown}var ye=e=>{let n=Le(e);if(n!==null)return types.s.literal(n);let t=e.value;return t===null?types.s.null:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?types.s.literal(t):Ue(e)},Cn=e=>e.type==="ArrowFunctionExpression",ht=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Ve=e=>ht(e)?e.args[0]:e,Ge=e=>ht(e)?e:types.s.promise(e);function $e(e){return e.t==="tuple"?true:e.t==="array"?$e(e.items):e.t==="union"?e.of.some($e):false}function Ee(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Ee(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Ee(e.bound):false}var W=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=types.expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function gt(e){let n=Dn(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:G(r)??`arg${s}`,type:An(r)??types.s.unknown})),returns:e.async?Ge(n):n}:null}var te={then:{},else:{}};function J(e){if(e.type==="Identifier")return e.name;if(e.type!=="MemberExpression")return null;let n=e;if(n.optional)return null;let t=J(n.object);return t===null?null:!n.computed&&n.property.type==="Identifier"?`${t}.${n.property.name}`:n.computed&&n.property.type==="Literal"&&typeof n.property.value=="string"?`${t}.${n.property.value}`:null}var Rn=e=>e.includes(".");function Dt(e,n,t){let r=U(e,n);return r!==void 0?r:Ot(e,n,t)}var re=(e,n,t)=>{let r=Dt(e,n,t);return r===void 0?void 0:types.apparentType(r,t)};function Ot(e,n,t){let r=n.lastIndexOf(".");if(r<0)return;let s=Dt(e,n.slice(0,r),t);if(s!==void 0)return types.discover(s,[n.slice(r+1)],t)?.type}function Zr(e,n){let t=n+".",r=new Set;for(let s=e;s;s=s.parent)for(let a of Object.keys(s.vars))(a.startsWith(t)||a===n)&&Rn(a)&&r.add(a);return [...r].sort((s,a)=>s.length-a.length)}function Tn(e,n,t){let r=Zr(e,n);if(!r.length)return e;let s={};for(let a of r)s[a]=Ot(ie(e,s),a,t)??types.s.unknown;return ie(e,s)}var Ct=new Set(["string","number","boolean","undefined","function","object"]),St={string:types.s.string,number:types.s.number,boolean:types.s.boolean,undefined:types.s.undefined};function Rt(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 es=types.s.literal(true),ns=types.s.literal(false),Q=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[es,ns]:[e];function bt(e,n){let t=e,r=n;if(e.type==="UnaryExpression"&&t.operator==="typeof"&&n.type==="Literal"&&typeof r.value=="string"){let s=J(t.argument);if(s!==null)return {name:s,tag:r.value}}return null}function ts(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=Q(e).filter(s=>types.subtype(s,n,t));return r.length?types.normalizeUnion(r):n}function rs(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=Q(e).filter(s=>!types.subtype(s,n,t));return r.length?types.normalizeUnion(r):null}function ss(e,n){if(!Ct.has(n))return null;if(e.t==="unknown"||e.t==="any")return St[n]??e;let t=Q(e).filter(r=>Rt(r,n));return t.length?types.normalizeUnion(t):St[n]??e}function as(e,n){if(!Ct.has(n)||e.t==="unknown"||e.t==="any")return null;let t=Q(e).filter(r=>!Rt(r,n));return t.length?types.normalizeUnion(t):null}function Nt(e,n){let t=J(e);if(t!==null&&me(n)){let r=ye(n);if(r.t==="literal"||r.t==="null")return {name:t,lit:r}}return null}function Bt(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.property.type==="Identifier"&&me(n)){let t=J(e.object),r=ye(n);if(t!==null&&(r.t==="literal"||r.t==="null"))return {name:t,prop:e.property.name,lit:r}}return null}function kt(e,n,t,r,s){let a=Q(e),o=c=>c.t==="object"?types.ownProp(c.props,n)?.type:void 0,i=a.filter(c=>{let l=o(c);return r?!!l&&types.subtype(t,l,s):!(l&&types.subtype(l,t,s))});return i.length&&i.length<a.length?types.normalizeUnion(i):null}function wt(e,n,t){let r=Q(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?types.normalizeUnion(a):null}function os(e,n,t){return e.t==="unknown"||e.t==="any"||types.subtype(n,e,t)?n:null}function is(e,n,t){let r=Q(e),s=r.filter(a=>!types.equals(a,n,t));return s.length&&s.length<r.length?types.normalizeUnion(s):null}var ls=e=>e.t==="null"||e.t==="undefined",Tt=e=>ls(e)||e.t==="literal"&&!e.value,cs=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=Q(e),t=n.filter(r=>!Tt(r));return t.length&&t.length<n.length?types.normalizeUnion(t):null},us=e=>{let n=Q(e),t=n.filter(Tt);return t.length&&t.length<n.length?types.normalizeUnion(t):null},vt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,z=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),ps=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function V(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let m=s.left,b=s.right,B=J(b);if(m.type==="Literal"&&typeof m.value=="string"&&B!==null){let D=re(n,B,t);if(!D)return te;let O=String(m.value);return z(B,wt(D,O,true),wt(D,O,false))}return te}if(!ps(s.operator))return te;let a=s.operator==="!=="||s.operator==="!=",o=s.left,i=s.right,c=bt(o,i)??bt(i,o);if(c){let m=re(n,c.name,t);if(!m)return te;let b=ss(m,c.tag),B=as(m,c.tag);return a?z(c.name,B,b):z(c.name,b,B)}let l=vt(o),u=vt(i),p=l?i:u?o:null,y=p?J(p):null;if((l||u)&&y!==null){let m=y,b=re(n,m,t);if(!b)return te;let D=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],O=Q(b),Be=O.filter(ue=>D.includes(ue.t)),C=O.filter(ue=>!D.includes(ue.t)),I=Be.length?types.normalizeUnion(Be):null,T=C.length&&C.length<O.length?types.normalizeUnion(C):null;return a?z(m,T,I):z(m,I,T)}let f=Nt(o,i)??Nt(i,o),N=Bt(o,i)??Bt(i,o);if(f||N){let m=te;if(f){let b=re(n,f.name,t);if(b){let B=os(b,f.lit,t),D=is(b,f.lit,t);m=a?z(f.name,D,B):z(f.name,B,D);}}if(N){let b=re(n,N.name,t);if(b){let B=kt(b,N.prop,N.lit,true,t),D=kt(b,N.prop,N.lit,false,t),O=a?z(N.name,D,B):z(N.name,B,D);m={then:{...m.then,...O.then},else:{...m.else,...O.else}};}}return m}return te}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=V(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=fs(e,n,t);if(s)return s}if(e.type==="LogicalExpression"){let s=e;if(s.operator==="&&"){let a=V(s.left,n,t),o=V(s.right,L(n,a.then),t);return {then:{...a.then,...o.then},else:Et(a.else,{...a.then,...o.else},n,t)}}if(s.operator==="||"){let a=V(s.left,n,t),o=V(s.right,L(n,a.else),t);return {then:Et(a.then,{...a.else,...o.then},n,t),else:{...a.else,...o.else}}}return te}let r=J(e);if(r!==null){let s=re(n,r,t);if(s)return z(r,cs(s),us(s))}return te}function Et(e,n,t,r){let s={};for(let a of Object.keys(e)){let o=e[a],i=n[a]??re(t,a,r);if(!i)continue;let c=types.normalizeUnion([o,i]),l=re(t,a,r);l&&types.equals(c,l)||(s[a]=c);}return s}function ds(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 fs(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=U(n,r.name);if(!s)return null;let a=ds(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param],i=o?J(o):null;if(i===null)return null;let c=re(n,i,t);return c?z(i,ts(c,a.type,t),rs(c,a.type,t)):null}var L=(e,n)=>Object.keys(n).length?ie(e,n):e;function x(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>x(t));case "IfStatement":{let n=e;return !!n.alternate&&x(n.consequent)&&x(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&x(n.finalizer))return true;let t=!n.handler||x(n.handler.body);return x(n.block)&&t}default:return false}}var Ms=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function js(e){let n=[];return e.maxDepth!==void 0&&n.push(yn(e.maxDepth)),e.maxNodes!==void 0&&n.push(hn(e.maxNodes)),e.maxArgs!==void 0&&n.push(gn(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(dn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(fn(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(mn(e.memberDepth)),n}function Is(e,n,t){let{min:r,max:s}=types.schemeArity(e);if(n.length<r||n.length>s)return true;if(!e.bounds)return false;let a=types.bindScheme(e,n);return e.params.some((o,i)=>{let c=e.bounds?.[o];return c!==void 0&&i<n.length&&!types.subtype(n[i],types.substitute(c,a),t)})}function Fs(e,n){let t=e.typeRefs;if(!t?.length)return [];let r=[];for(let s of t){let a={type:"Identifier",name:s.name,loc:s.loc},o=n[s.name];if(!o){r.push(P("unknown-name",a,`Cannot find name '${s.name}'.`));continue}let i=s.args;if(!i)continue;let{min:c,max:l}=types.schemeArity(o);if(i.length<c||i.length>l){r.push(h.genericTypeArity(a,s.name,c,l));continue}if(!o.bounds)continue;let u=types.bindScheme(o,i);o.params.forEach((p,y)=>{let f=o.bounds?.[p];if(!f||y>=i.length)return;let N=types.substitute(f,u);types.subtype(i[y],N,n)||r.push(h.constraintViolation(a,p,i[y],N));});}return r}function zt(e,n,t={}){let r={...Ms(n.types),...n.schemes,...Ls(e)},s=En(e),a={overlay:new WeakMap,sink:le(),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&&types.configureTypeLimits(o.typeLimits);try{let i,c=Us(e,a);try{i=S(e,c,a);}catch(p){if(p instanceof types.TypeEvalLimitError)a.sink.report(P("too-deep",e,p.message));else if(p instanceof types.UnionTooComplexError)a.sink.report(P("too-complex-union",e,p.message));else throw p;i=types.s.unknown;}let l=[];o&&l.push(...Ye(o)),t.limits&&l.push(...js(t.limits)),t.resultType&&l.push(Sn(t.resultType,r));let u=[...a.sink.all,...s.diagnostics,...Fs(e,r),...t.unused?wn(e,t.unused):[],...l.length?cn(e,l,{overlay:a.overlay,schemes:r}):[]];return {type:i,overlay:a.overlay,diagnostics:u,schemes:a.schemes}}finally{o&&types.resetTypeLimits();}}function $s(e,n,t={}){let r=zt(e,n,t),s={},a=new Map,o,i=l=>{let u=[];if(l.type==="VariableDeclaration")for(let p of l.declarations){let y=G(p.id),f=r.overlay.get(p);y&&f&&(s[y]=f.type,u.push(y));}else if(l.type==="FunctionDeclaration"){let p=l.id?.name,y=r.overlay.get(l);p&&y&&(s[p]=y.type,u.push(p));}return u};for(let l of e.body??[])if(l.type==="VariableDeclaration"||l.type==="FunctionDeclaration")i(l);else if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration)for(let p of i(u.declaration))a.set(p,p);else for(let p of u.specifiers)a.set(p.exported.name,p.local.name);}else if(l.type==="ExportDefaultDeclaration"){let u=r.overlay.get(l.declaration);o=u?u.type:types.s.unknown;}let c={};if(a.size||o!==void 0){for(let[l,u]of a)s[u]&&(c[l]={type:s[u]});o!==void 0&&(c.default={type:o});}else for(let l in s)c[l]={type:s[l]};return {type:{t:"object",props:c},diagnostics:r.diagnostics}}var Ls=e=>{let n={};return ast.walk(e,{TSTypeAliasDeclaration(t){let r=t;if(!r.id?.name||!r.typeAnnotation)return;let s={},a={};for(let o of r.typeParamNodes??[])o.bound&&(s[o.name]=o.bound),o.default&&(a[o.name]=o.default);n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation,...Object.keys(s).length?{bounds:s}:{},...Object.keys(a).length?{defaults:a}:{}};}}),n};function Us(e,n){let t=n.env.modules,r={};ast.walk(e,{ImportDeclaration(s){let a=s;if(a.importKind==="type")return;let o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(h.unknownModule(a.source,String(o)));for(let c of a.specifiers)r[c.local.name]=types.s.unknown;return}for(let c of a.specifiers){if(c.importKind==="type")continue;let l=c.local.name;if(ce(l,c.local,n),l in r){n.sink.report(h.cannotRedeclare(c.local,l));continue}if(c.type==="ImportNamespaceSpecifier"){r[l]=i;continue}let u=c.type==="ImportSpecifier"?c.imported.name:"default",p=types.discover(i,[u],n.schemes);p?r[l]=p.type:(n.sink.report(h.noSuchMember(c,i,u)),r[l]=types.s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?ie(n.env.scope,r):n.env.scope}var g=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case Yt:return e.schema;case "JSXElement":case "JSXFragment":return g(t,e,S(ast.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return g(t,e,Ue(e),n);case "Placeholder":return g(t,e,types.s.any,n);case "Identifier":{let s=e.name,a=U(n,s);return a===void 0?s==="undefined"?g(t,e,types.s.undefined,n):(t.sink.report(h.unknownName(e,s)),g(t,e,types.s.any,n)):g(t,e,a,n)}case "MemberExpression":return g(t,e,Mt(e,n,t),n);case "CallExpression":return g(t,e,Js(e,n,t,r),n);case "ArrowFunctionExpression":return Kn(e,n,t);case "FunctionDeclaration":return t.sink.report(h.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),g(t,e,types.s.unknown,n);case "FunctionExpression":return t.sink.report(h.unsupported(e,"anonymous function (use an arrow)")),g(t,e,types.s.unknown,n);case "ThisExpression":return t.sink.report(h.unsupported(e,"'this'")),g(t,e,types.s.unknown,n);case "BlockStatement":return g(t,e,ar(e,n,t),n);case "ReturnStatement":{let s=e.argument;return g(t,e,s?S(s,n,t):types.s.unknown,n)}case "IfStatement":return Y(e,n,t),t.overlay.get(e)?.type??types.s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return Y(e,n,t),t.overlay.get(e)?.type??types.s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=a.type==="MemberExpression"?g(t,a,Mt(a,n,t,true),n):S(a,n,t);if(a.type==="MemberExpression"){let u=t.overlay.get(a.object)?.type,p=u&&types.apparentType(u,t.schemes);p&&(p.t==="array"||p.t==="tuple")&&p.readonly&&t.sink.report(h.readonlyWrite(a,p));}let i=a.type==="Identifier"?a.name:null,c=i!==null&&t.evolving.has(i),l=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(c&&i!==null){let p=S(s.right,n,t);return t.assignFlow.set(e,types.widenLiteral(p)),g(t,e,p,n)}if(l&&i!==null){let p=S(s.right,n,t);return types.subtype(p,l,t.schemes)||t.sink.report(h.notAssignable(s.right,p,l,t.schemes)),t.assignFlow.set(e,or(l,p,t.schemes)),g(t,e,p,n)}let u=H(s.right,o,n,t);return g(t,e,u,n)}return g(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=S(s.argument,n,t);return Ke(a,t.schemes)||t.sink.report(h.arithmeticOperand(s.argument,"operand")),g(t,e,types.s.number,n)}case "ExpressionStatement":return g(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return tn(e,n,t),g(t,e,types.s.unknown,n);case "TSTypeAliasDeclaration":{let s=e.id?.name,a=s?t.schemes[s]:void 0;return g(t,e,a?Zs(a.body,n,t,e,a.params.length>0):types.s.unknown,n)}case "BinaryExpression":return g(t,e,Sa(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=s.operator==="??"?{}:s.operator==="&&"?V(s.left,n,t.schemes).then:V(s.left,n,t.schemes).else,i=S(s.right,L(n,o),t);return g(t,e,Na(s.operator,a,i),n)}case "UnaryExpression":return g(t,e,ka(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=V(s.test,n,t.schemes),o=S(s.consequent,L(n,a.then),t),i=S(s.alternate,L(n,a.else),t);return g(t,e,types.normalizeUnion([o,i]),n)}case "ObjectExpression":return g(t,e,wa(e,n,t),n);case "ArrayExpression":return g(t,e,pr(e,n,t),n);case "TemplateLiteral":{if(Le(e)!==null)return g(t,e,Ue(e),n);for(let s of e.expressions){let a=S(s,n,t);ur(a,t.schemes)||t.sink.report(h.notTextConvertible(s,a));}return g(t,e,types.s.string,n)}case "AwaitExpression":{let s=e.argument,a=s?S(s,n,t):types.s.unknown;return g(t,e,Ve(a),n)}case "Program":{let s=nn(e.body,n,t,new Set(t.importNames)).scope;return g(t,e,types.s.unknown,s)}case "JsonExpression":return g(t,e,$n(e.body,n,t,e),n);case "ChainExpression":return g(t,e,types.normalizeUnion([S(e.expression,n,t),types.s.undefined]),n);case "TSAsExpression":{let s=e,a=S(s.expression,n,t),o=Ce(s.typeAnnotation,n,t,e);return Te(a,o,t.schemes)||t.sink.report(h.castUnsound(e,a,o)),g(t,e,o,n)}default:return t.sink.report(h.unsupported(e,`'${e.type}'`)),g(t,e,types.s.unknown,n)}}var Vs=new Set(["constructor","prototype","__proto__"]);function Gs(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function Mt(e,n,t,r=false){let s=S(e.object,n,t),a=Gs(e);if(a!==null&&Vs.has(a))return t.sink.report(h.forbiddenMember(e,a)),types.s.unknown;let o=xs(e,s,n,t),i=r?null:J(e);if(i!==null&&Rn(i)&&o.t!=="unknown"){let c=U(n,i);if(c!==void 0&&types.subtype(c,o,t.schemes))return c}return o}function xs(e,n,t,r){if(e.computed){let o=S(e.property,t,r),i=types.resolveTypeOp(types.s.index(n,o));return i.t!=="index"?i:(o.t==="literal"&&typeof o.value=="string"&&jt(e,n,o.value,r),types.s.unknown)}let s=e.property.name,a=types.discover(n,[s],r.schemes);return a?a.type:(jt(e,n,s,r),types.s.unknown)}function jt(e,n,t,r){let s=types.isScheme(n,r.schemes)?types.expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(h.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(h.notObject(e,n));}function Ks(e,n,t,r){let s=e.arguments[0];if(!s){r.sink.report(h.missingArgument(e,"schema",types.s.unknown));return}if(s.type!=="Identifier"){r.sink.report(h.asserterNeedsName(s,n));return}let a=s.name,o=U(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?h.typeAsValue(s,a):h.unknownName(s,a));return}if(!i||i.params.length>0){r.sink.report(h.notASchema(s,a));return}if(!(Jt(a,r)&&!qs(t,a)))return r.overlay.set(s,{type:i.body,scope:t}),i.body}function Jt(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&U(n.env.scope,e)!==void 0}function qs(e,n){for(let t=e;t;t=t.parent)if(Object.prototype.hasOwnProperty.call(t.vars,n))return t.parent===null;return false}function ce(e,n,t){Jt(e,t)&&t.sink.report(h.shadowsSchema(n,e));}function Gn(e,n){let t=W(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function _s(e,n){let t=U(e.scope,n);if(!t)return;let r=Gn(t,e.schemes);return r?W(r,e.schemes):void 0}function Ws(e,n,t,r){let s=Gn(S(n[0],t,r),r.schemes),a=n.length>1?S(n[1],t,r):types.s.undefined;if(s){let o=types.typeDiff(a,s,r.schemes);o.length&&r.sink.report(h.propsMismatch(n[1]??e,s,types.formatTypeDiff(o)));}return g(r,e,types.s.boolean,t)}var Yt="TSLiteSyntheticArg",zs=e=>({type:Yt,schema:e});function Xt(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(c=>c&&c.type!=="SpreadElement")){for(let c of o.elements)r.push(c);continue}let i=W(S(o,n,t),t.schemes);if(i.t==="tuple")for(let c of i.elements)r.push(zs(c));else s={elem:qn(i,o,t),node:a};}return {nodes:r,spread:s}}function Js(e,n,t,r){let s=e.arguments,a=On(e.callee);if(a){let p=t.env.accessors?.[a];if(p){let y=yt(s);if(y){let f=types.discover(p,y,t.schemes);return f?f.type:(t.sink.report(h.noSuchMember(e,p,y.join("."))),types.s.unknown)}return s.forEach(f=>S(f,n,t)),types.s.unknown}}if(a&&t.env.asserters?.has(a)){let p=Ks(e,a,n,t);s.length<2&&s.length>0&&t.sink.report(h.missingArgument(e,"value",types.s.unknown));for(let y=1;y<s.length;y++){let f=S(s[y],n,t);y===1&&p&&types.freeVars(f).size===0&&!Te(f,p,t.schemes)&&t.sink.report(h.unprovableValue(s[y],f,p,e.arguments[0].name));}return p??types.s.unknown}if(a&&t.env.matchers?.has(a))return Ws(e,s,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s.forEach(p=>S(p,n,t)),types.s.any;if(o.t==="overload")return Xs(e,o,n,t,r);if(o.t!=="fn")return s.forEach(p=>S(p,n,t)),t.sink.report(h.notCallable(e,o)),types.s.unknown;let i=Xt(s,n,t),c=i.nodes.map(p=>Qt(p,n,t)),l=Zt(e),u=!l||er(o,l.length);return u||t.sink.report(h.wrongTypeArgumentCount(e,o.typeParams?.length??0,l.length)),In(e,o,i.nodes,c,n,t,i.spread,r,u?l:void 0)}function Qt(e,n,t){if(Cn(e))return types.s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=le(),s=S(e,n,{...t,sink:r});return r.hasErrors()?types.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function In(e,n,t,r,s,a,o=null,i,c){let l=m=>{if(!i)return m;let b=types.substitute(n.returns,m);if(b.t==="fn"&&i.t==="fn"){let B=m,D=Math.min(b.params.length,i.params.length);for(let O=0;O<D;O++)B=types.unify(b.params[O].type,i.params[O].type,B)??B;return types.unify(b.returns,i.returns,B)??B}return types.unify(b,i,m)??m},u=c?na(e,n,c,a):void 0,p=u??l(types.instantiateLoose(n,r).bindings),y=new Set;t.forEach((m,b)=>{if(Cn(m)){let B=types.widenType(types.substitute(n.params[b]?.type??types.s.any,p));r[b]=Kn(m,s,a,B);}else if(m.type==="CallExpression"&&r[b].t==="any")r[b]=S(m,s,a,types.substitute(n.params[b]?.type??types.s.unknown,p));else if(me(m)){let B=n.params[b]?.type??types.s.unknown,D=B.t==="var"?B.bound?types.substitute(B.bound,p):B:types.substitute(B,p);Ee(D)&&(r[b]=g(a,m,ye(m),s));}else if(m.type==="ArrayExpression"||m.type==="ObjectExpression"||m.type==="ConditionalExpression"){let B=n.params[b]?.type??types.s.unknown,D=types.substitute(B,p);if(m.type==="ArrayExpression"&&$e(D)){r[b]=_n(m,D,s,a);return}let O=B.t==="var"?B.bound?types.substitute(B.bound,p):void 0:D;O&&dr(O,a.schemes)&&(y.add(b),r[b]=va(m,O,s,a,B.t==="var")??r[b]);}});let f=u??l(types.instantiateLoose(n,r).bindings);u||Ys(e,n,f,a),aa(e,n,r,f,a,t,o),t.forEach((m,b)=>{let B=n.params[b];m.type==="ObjectExpression"&&B&&!B.variadic&&!y.has(b)&&Fn(m,types.substitute(B.type,f),a);});let N=types.substitute(n.returns,f);return types.widenInferred(types.groundVars(N.t==="union"?types.normalizeUnion(N.of):N,a.schemes))}var It=new WeakMap;function Ht(e){let n=It.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)$(s.type,t,r);return $(e.returns,t,r),It.set(e,t),t}function $(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":$(e.items,n,t);return;case "union":for(let r of e.of)$(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)$(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)$(r.type,n,t);$(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)$(s.type,n,t);$(r.returns,n,t);}return;case "apply":for(let r of e.args)$(r,n,t);return;case "keyof":$(e.of,n,t);return;case "index":$(e.obj,n,t),$(e.key,n,t);return;case "mapped":$(e.over,n,t),$(e.body,n,t);return;default:return}}function Ys(e,n,t,r){let s=Ht(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let c=types.substitute(o,t);types.subtype(i,c,r.schemes)||r.sink.report(h.constraintViolation(e,a,i,c));}}function Xs(e,n,t,r,s){let a=Xt(e.arguments,t,r),o=a.nodes,i=o.map(u=>Qt(u,t,r)),c=Zt(e),l=c?n.signatures.filter(u=>er(u,c.length)):n.signatures;if(c&&!l.length){let u=n.signatures.reduce((p,y)=>Math.max(p,y.typeParams?.length??0),0);return r.sink.report(h.wrongTypeArgumentCount(e,u,c.length)),Ft(e,n.signatures,a,o,i,t,r,s,void 0)}return Ft(e,l,a,o,i,t,r,s,c)}function Ft(e,n,t,r,s,a,o,i,c){let l={t:"overload",signatures:n},u=f=>t.spread?ta(f,r.length):ra(f,r.length),p=l.signatures.filter(u);if(p.length>1&&s.some(f=>f.t==="any"))for(let f of p){let N=le(),m=In(e,f,r,[...s],a,{...o,sink:N},t.spread,i,c);if(!N.hasErrors())return N.all.forEach(b=>o.sink.report(b)),m}let y=l.signatures.find(f=>u(f)&&sa(f,s,o));if(!y){let f=l.signatures.filter(u);f.length===1?y=f[0]:l.signatures.length===1&&(y=l.signatures[0]);}return y?In(e,y,r,s,a,o,t.spread,i,c):(o.sink.report(h.noMatchingOverload(e,l,s)),types.s.unknown)}function Qs(e,n,t,r){let s=U(n,e[0]);if(s===void 0)return t.sink.report(h.unknownName(r,e[0])),types.s.unknown;let a=e.slice(1),o=a.length?types.discover(s,a,t.schemes)?.type:s;return o?o.t==="literal"?types.s.literal(o.value):o:(t.sink.report(h.noSuchMember(r,s,a.join("."))),types.s.unknown)}function Ce(e,n,t,r){let s=a=>{if(Array.isArray(a)){let l=false,u=a.map(p=>{let y=s(p);return y!==p&&(l=true),y});return l?u:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Qs(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"){Hs(o.name,n,t,r);let l=t.schemes[o.name];if(!l)return types.s.any;if(Array.isArray(o.args)&&Is(l,o.args,t.schemes))return types.s.any}let i=false,c={};for(let l of Object.keys(o)){let u=s(o[l]);u!==o[l]&&(i=true),c[l]=u;}return i?c:o};return s(e)}function Hs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Ce(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Zs(e,n,t,r,s){let a={...t,sink:le(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Ce(e,n,a,r);return a.sink.hasErrors()?e:s?o:types.groundVars(o,t.schemes)}var qe=(e,n,t)=>{let r=An(e);return r===void 0?r:Ce(r,n,t,e)},ea=(e,n,t)=>{let r=Dn(e);return r===void 0?r:Ce(r,n,t,e)},Zt=e=>{let n=e.typeArguments;return n?.length?n:void 0},er=(e,n)=>(e.typeParams?.length??0)===n;function na(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,c)=>a[i]=t[c]);let o=a;for(let[i,c]of Ht(n)){let l=o[i];if(!l)continue;let u=types.groundVars(types.substitute(c,o),r.schemes);types.subtype(l,u,r.schemes)||r.sink.report(h.constraintViolation(e,i,l,u));}return o}function ta(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 ra(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 sa(e,n,t){let{bindings:r}=types.instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic){let o=types.substitute(a.type,r),i=o.t==="array"?o.items:types.s.unknown;for(let c=s;c<n.length;c++)if(!types.subtype(n[c],i,t.schemes))return false;return true}if(s>=n.length){if(!a.optional)return false;continue}if(!types.subtype(n[s],types.substitute(a.type,r),t.schemes))return false}return true}function aa(e,n,t,r,s,a=e.arguments??[],o=null){let i=l=>a[l]??e;for(let l=0;l<n.params.length;l++){let u=n.params[l];if(u.variadic){let y=types.substitute(u.type,r),f=y.t==="array"?y.items:types.s.unknown;for(let N=l;N<t.length;N++)types.subtype(t[N],f,s.schemes)||s.sink.report(h.notAssignable(i(N),t[N],f,s.schemes));break}let p=types.substitute(u.type,r);if(l>=t.length){!u.optional&&!o&&s.sink.report(h.missingArgument(e,u.name,p));continue}types.subtype(t[l],p,s.schemes)||s.sink.report(h.notAssignable(i(l),t[l],p,s.schemes));}let c=n.params.find(l=>l.variadic);if(o){let l=t.length,u=n.params.filter(p=>!p.optional&&!p.variadic).length;if(!(l>=u&&(c||l<n.params.length))){s.sink.report(h.spreadArgument(o.node));return}if(c){let p=types.substitute(c.type,r),y=p.t==="array"?p.items:types.s.unknown;types.subtype(o.elem,y,s.schemes)||s.sink.report(h.notAssignable(o.node,o.elem,y,s.schemes));}return}!c&&t.length>n.params.length&&s.sink.report(h.excessArgument(i(n.params.length),n.params.length,t.length));}function We(e,n,t){if(e.t==="object"){let r=types.ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>We(types.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:types.resolveTypeOp({t:"intersection",of:r})}if(e.t==="union")return nr(e.of,n,t)}function nr(e,n,t){let r=e.map(s=>We(types.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length?types.normalizeUnion(r):void 0}var xn=e=>e.t==="literal"||e.t==="null"||e.t==="undefined"||e.t==="boolean"||e.t==="union"&&e.of.every(xn),$t=new WeakMap;function oa(e,n,t){let r=$t.get(t);if(r)return r;let s=new Set;for(let o of e)if(o.t==="object")for(let i of Object.keys(o.props))s.add(i);let a=new Set;for(let o of s){let c=e.map(u=>We(u,o,n)).filter(u=>u!==void 0);if(!c.some(xn))continue;c.length===e.length&&c.every(u=>types.equals(u,c[0]))||a.add(o);}return $t.set(t,a),a}var tr=e=>e.type==="Literal"||e.type==="Identifier"||e.type==="TemplateLiteral"||e.type==="MemberExpression"&&!e.computed&&tr(e.object),ia=(e,n)=>e.some(t=>t.t==="object"&&types.ownProp(t.props,n)?.optional===true);function rr(e,n,t,r,s){let a=oa(n,r,s),o=new Set;if(!a.size)return {chosen:n,ignored:o};let i=[],c=new Set;for(let p of e.properties){if(p.type!=="Property")continue;let y=p,f=Ae(y);if(f===null||(c.add(f),!a.has(f)||!tr(y.value)))continue;let N=t(y);N&&xn(N)&&i.push([f,N]);}for(let p of a)!c.has(p)&&ia(n,p)&&i.push([p,types.s.undefined]);let l=n.map(()=>1);for(let[p,y]of i){let f=false;n.forEach((N,m)=>{if(l[m]!==1)return;let b=We(N,p,r);b!==void 0&&(types.subtype(y,b,r)?f=true:l[m]=2);}),n.forEach((N,m)=>{l[m]===2&&(l[m]=f?0:1);}),f||o.add(p);}let u=n.filter((p,y)=>l[y]===1);return {chosen:u.length?u:n,ignored:o}}function Lt(e,n,t,r,s,a=false){let o={},i={};for(let c of e.properties){let l=c;if(l.type==="SpreadElement"){let N=types.apparentType(S(l.argument,t,r),r.schemes);if(N.t==="object")for(let[m,b]of Object.entries(N.props))o[m]=b,i[m]=b;continue}let u=l,p=Ae(u),y=p!==null?n(p):void 0,f=y?H(u.value,y,t,r,s):types.widen(S(u.value,t,r));p!==null&&(o[p]={type:a?f:y??f},i[p]={type:f}),g(r,l,f,t);}return {checked:o,narrowed:i}}function H(e,n,t,r,s=false){let a=types.apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=types.resolveConditional(a,r.schemes)??a),me(e)?"Literal":e.type){case "Literal":{let i=ye(e);return types.subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,s?Ee(n)?i:types.widen(Ue(e)):n,t)}case "ArrayExpression":{if($e(a)){let i=_n(e,a,t,r);return types.subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,i,t)}if(a.t==="array"){let i=[];for(let l of e.elements){if(!l)continue;let u=l;if(u.type==="SpreadElement"){let p=H(u.argument,n,t,r,s);p.t==="array"&&i.push(p.items);}else i.push(H(u,a.items,t,r,s));}let c=s&&i.length>0?types.s.array(types.normalizeUnion(i)):n;return g(r,e,c,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let{checked:i,narrowed:c}=Lt(e,p=>We(a,p,r.schemes),t,r,s),l=Fn(e,n,r),u={t:"object",props:i};return !l&&!types.subtype(u,n,r.schemes)&&r.sink.report(h.notAssignable(e,u,n,r.schemes)),g(r,e,s?{t:"object",props:c}:n,t)}if(a.t==="union"){let i=a.of.filter(b=>b.t==="object"||b.t==="intersection");if(!i.length)break;let c=e,{chosen:l,ignored:u}=rr(c,i,b=>S(b.value,t,{...r,sink:le()}),r.schemes,n),p=r.sink.all.length,{checked:y,narrowed:f}=Lt(c,b=>nr(u.has(b)?i:l,b,r.schemes),t,r,s,true),N=Fn(c,n,r),m={t:"object",props:y};return !N&&r.sink.all.length===p&&!types.subtype(m,n,r.schemes)&&r.sink.report(h.notAssignable(e,m,n,r.schemes)),g(r,e,s?{t:"object",props:f}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Kn(e,t,r,a);return types.subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let c=V(i.test,t,r.schemes),l=H(i.consequent,n,L(t,c.then),r,s),u=H(i.alternate,n,L(t,c.else),r,s);return g(r,e,s?types.normalizeUnion([l,u]):n,t)}case "Placeholder":return g(r,e,n,t)}let o=S(e,t,r);return types.subtype(o,n,r.schemes)||r.sink.report(h.notAssignable(e,o,n,r.schemes)),g(r,e,o,t)}function Kn(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=C=>a?.length?{...C,typeParams:a}:C,i={},c=new Map,l=e.params.map((C,I)=>{let T=C,ue=s?.params[I]?.type;if(T.type==="RestElement"){let oe=T.argument,_=qe(oe,n,t)??(s?.params[I]?.variadic?ue:void 0)??types.s.array(types.s.unknown),X=G(oe);return X?(ce(X,oe,t),i[X]=_):se(oe,_,i,n,t),t.overlay.set(oe,{type:_,scope:n}),t.overlay.set(T,{type:_,scope:n}),{name:X??`arg${I}`,type:_,variadic:true}}if(T.type==="AssignmentPattern"){let oe=T.left,sn=qe(oe,n,t)??ue;se(T,sn??types.s.unknown,i,n,t);let _=G(oe),X=_?i[_]:void 0,an=sn??X??types.s.unknown,Qn=an.t==="unknown"?an:types.normalizeUnion([an,types.s.undefined]);return _&&X&&(X.t==="union"||X.t==="boolean")&&c.set(_,X),t.overlay.set(T,{type:Qn,scope:n}),{name:_??`arg${I}`,type:Qn,optional:true}}let ke=G(T),Yn=qe(T,n,t),Re=Yn??ue??types.s.unknown,Xn=T.type==="Identifier"&&(!!T.optional||Yn===void 0&&!!s?.params[I]?.optional),we=Xn&&Re.t!=="unknown"?types.normalizeUnion([Re,types.s.undefined]):Re;return ke?(ce(ke,T,t),i[ke]=we,(we.t==="union"||we.t==="boolean")&&c.set(ke,we)):T.type!=="Identifier"&&se(T,Re,i,n,t),t.overlay.set(T,{type:we,scope:n}),Xn?{name:ke??`arg${I}`,type:we,optional:true}:{name:ke??`arg${I}`,type:Re}}),u=false;l.forEach((C,I)=>{C.optional?u=true:!C.variadic&&u&&t.sink.report(h.requiredAfterOptional(e.params[I]));});let p=Ne(n,i,t),y=e.body,f=ea(e,n,t),N=e.returnGuard,m=N?{param:N.param,type:Ce(N.type,n,t,e)}:void 0;if(m){let C=l[m.param];C&&!types.subtype(m.type,C.type,t.schemes)&&t.sink.report(h.notAssignable(e,m.type,C.type,t.schemes));}let b=C=>m?{...C,guard:m}:C;if(y.type!=="BlockStatement"&&f){let C=e.async?Ve(f):f;H(y,C,p,t);let I=e.async?Ge(f):f;return g(t,e,b(o({t:"fn",params:l,returns:I})),n)}let B=f??s?.returns,D=B&&e.async?Ve(B):B,O=y.type==="BlockStatement"?g(t,y,ar(y,p,t,new Set(Object.keys(i)),c,D),p):S(y,p,t),Be=e.async?Ge(O):O;if(f){let C=e.async?Ve(f):f,I=e.async?O:Be;types.subtype(I,C,t.schemes)||t.sink.report(h.notAssignable(y,Be,f,t.schemes));let T=e.async?Ge(f):f;return g(t,e,b(o({t:"fn",params:l,returns:T})),n)}return g(t,e,o({t:"fn",params:l,returns:types.widenType(Be)}),n)}function De(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?De(n.argument):De(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?De(n.argument):De(n):[]);case "AssignmentPattern":return De(e.left);default:return []}}function sr(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>De(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?sr(e.declaration):[]}function ar(e,n,t,r=new Set,s,a){let{returns:o}=nn(e.body,n,t,r,s,a),i=!x(e);return o.length===0?i?types.s.void:types.s.union([]):types.normalizeUnion(i?[...o,types.s.undefined]:o)}var la=[types.s.literal(true),types.s.literal(false)];function ca(e){return e.t==="union"?e.of:e.t==="boolean"?la:[e]}function or(e,n,t){let r=ca(e);if(r.length<=1)return e;let s=r.filter(o=>types.subtype(n,o,t));if(s.length===0)return e;let a=types.normalizeUnion(s);return types.subtype(n,a,t)?a:e}function ir(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 ua(e){if(e.type!=="ExpressionStatement")return null;let n=e.expression;return n.type!=="AssignmentExpression"?null:J(n.left)}function Se(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=Se(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=ir(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=lr(e,n,t);if(r.size===0)return {types:n,exits:x(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:x(e)}}case "TryStatement":{let r=e,s=[],a=Se(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=Se(r.handler.body,n,t);i.exits||s.push(i.types);}let o=pa(n,s);return r.finalizer&&(o=Se(r.finalizer,o,t).types),{types:o,exits:x(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function lr(e,n,t){let r=Se(e.consequent,n,t),s=e.alternate?Se(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let c=[];r.exits||c.push(r.types.get(i)??n.get(i)),s.exits||c.push(s.types.get(i)??n.get(i)),c.length&&o.set(i,types.normalizeUnion(c));}return o}function cr(e,n){let t=new Map,r=s=>{let a=U(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 pa(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,types.normalizeUnion(s));}return t}function da(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=cr(n,t),s=Se(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return L(n,a)}function nn(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!fa(e))return Ut(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[c,l]of s)t.declaredMut.set(c,l);try{return Ut(e,n,t,r,a)}finally{t.evolving.clear();for(let c of o)t.evolving.add(c);t.declaredMut.clear();for(let[c,l]of i)t.declaredMut.set(c,l);}}function fa(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 Ut(e,n,t,r,s){let a=n,o=[];for(let i of e){let c=i;for(let l of sr(c))r.has(l.name)?t.sink.report(h.cannotRedeclare(l,l.name)):r.add(l.name);if(c.type==="VariableDeclaration")a=tn(c,a,t);else if(c.type!=="ImportDeclaration")if(c.type==="ExportNamedDeclaration"){let l=c;if(l.declaration?.type==="VariableDeclaration")a=tn(l.declaration,a,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=S(l.declaration,a,t),p=G(l.declaration.id);p&&(a=Ne(a,{[p]:u},t));}else for(let u of l.specifiers)U(a,u.local.name)===void 0&&t.sink.report(h.unknownName(u.local,u.local.name));}else if(c.type==="ExportDefaultDeclaration")S(c.declaration,a,t);else if(c.type==="FunctionDeclaration"){let l=S(c,a,t),u=G(c.id);u&&(a=Ne(a,{[u]:l},t));}else if(c.type==="IfStatement"){let l=c,u=t.evolving.size||t.declaredMut.size?cr(a,t):null;if(o.push(...Y(c,a,t,s)),u&&u.size){let p=lr(l,u,t);p.size&&(a=L(a,Object.fromEntries(p)));}!l.alternate&&x(l.consequent)&&(a=L(a,V(l.test,a,t.schemes).else));}else {o.push(...Y(c,a,t,s));let l=ir(c,t);l&&(a=L(a,{[l.name]:l.type}));let u=ua(c);u!==null?a=Tn(a,u,t.schemes):(c.type==="BlockStatement"||c.type==="TryStatement")&&(a=da(c,a,t));}}return {scope:a,returns:o}}function Y(e,n,t,r){switch(e.type){case "ReturnStatement":{let s=e.argument,a=s?r?(H(s,r,n,t),r):S(s,n,t):types.s.unknown;return g(t,e,a,n),[a]}case "IfStatement":{let s=e;S(s.test,n,t);let a=V(s.test,n,t.schemes),o=Y(s.consequent,L(n,a.then),t,r);return s.alternate&&o.push(...Y(s.alternate,L(n,a.else),t,r)),g(t,e,types.s.unknown,n),o}case "BlockStatement":{let{returns:s}=nn(e.body,n,t,void 0,void 0,r);return g(t,e,s.length?types.normalizeUnion(s):types.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,a=n;s.init&&(s.init.type==="VariableDeclaration"?a=tn(s.init,a,t):S(s.init,a,t)),s.test&&S(s.test,a,t),s.update&&S(s.update,a,t);let o=Y(s.body,a,t,r);return g(t,e,types.s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s=e,a=S(s.right,n,t),o=e.type==="ForOfStatement"?qn(a,s.right,t):types.s.string,i=ft(s.left);i&&ce(i,mt(s.left),t);let c=i?Ne(n,{[i]:o},t):n,l=Y(s.body,c,t,r);return g(t,e,types.s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return g(t,e,types.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&S(s,n,t),g(t,e,types.s.unknown,n),[]}case "TryStatement":{let s=e,a=Y(s.block,n,t,r);if(s.handler){let o=s.handler.param,i=o?G(o):null;i&&o&&ce(i,o,t);let c=i?Ne(n,{[i]:types.s.unknown},t):n;a.push(...Y(s.handler.body,c,t,r));}return s.finalizer&&a.push(...Y(s.finalizer,n,t,r)),g(t,e,types.s.unknown,n),a}case "SwitchStatement":{let s=e;S(s.discriminant,n,t);let a=n,o=[];for(let i of s.cases){i.test&&S(i.test,a,t);let c=nn(i.consequent,a,t,void 0,void 0,r);a=c.scope,o.push(...c.returns);}return g(t,e,types.s.unknown,n),o}default:return S(e,n,t),[]}}function ma(e,n,t){let r=types.discover(e,[n],t.schemes);return r?r.type:types.s.unknown}function qn(e,n,t){let r=W(e,t.schemes);switch(r.t){case "array":return r.items;case "tuple":return r.elements.length?types.normalizeUnion([...r.elements]):types.s.unknown;case "string":return types.s.string;case "literal":if(typeof r.value=="string")return types.s.string;break;case "unknown":case "any":return types.s.unknown;case "union":return types.normalizeUnion(r.of.map(s=>qn(s,n,t)));}return t.sink.report(h.notIterable(n,e)),types.s.any}function ya(e,n){let t=types.resolveTypeOp(types.s.index(e,types.s.literal(n)));return t.t==="index"?types.s.unknown:t}function ha(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 types.s.object(t,e.index)}function ga(e,n){return e.t==="tuple"?types.s.tuple(e.elements.slice(n)):e.t==="array"?e:types.s.array(types.s.unknown)}function se(e,n,t,r,s){switch(e.type){case "Identifier":{let a=qe(e,r,s)??n;ce(e.name,e,s),t[e.name]=a,s.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=S(a.right,r,s);n.t!=="unknown"&&!types.subtype(o,n,s.schemes)&&s.sink.report(h.notAssignable(a.right,o,n,s.schemes));let i=types.widenType(o),{type:c}=types.withoutUndefined(n),l=c.t==="unknown"?i:types.normalizeUnion([c,i]),u=a.left;if(u.type==="Identifier"){let p=u.name;ce(p,u,s),t[p]=l,s.overlay.set(u,{type:l,scope:r});}else se(u,l,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){se(o.argument,ha(n,a),t,r,s);continue}let i=o,c=Ae(i);c!=null&&a.push(c);let l=c!=null?ma(n,c,s):types.s.unknown;se(i.value,l,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?se(i.argument,ga(n,o),t,r,s):se(i,ya(n,o),t,r,s);});return}}}function Fn(e,n,t){let r=W(n,t.schemes),s=r.t==="union"?types.apparentType(r,t.schemes):r,a=s.t==="union"?s.of.map(l=>W(l,t.schemes)):[s],i=(r.t==="union"?rr(e,a.filter(l=>l.t==="object"||l.t==="intersection"),l=>t.overlay.get(l.value)?.type,t.schemes,n).chosen:a).filter(l=>l.t==="object"&&(!l.index||l.index.key==="number"));if(!i.length||i.some(l=>Object.keys(l.props).length===0&&!l.index))return false;let c=false;for(let l of e.properties){if(l.type==="SpreadElement")continue;let u=l;if(u.computed)continue;let p=Ae(u);if(p===null)continue;i.filter(f=>p in f.props||f.index?.key==="number"&&types.isNumericLiteralName(p)).length||(t.sink.report(h.excessProperty(u.key,p,n)),c=true);}return c}function tn(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=G(a);o&&ce(o,a,t);let i=qe(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,Vt(o,i,t)):(r[o]=types.s.undefined,t.evolving.add(o));continue}t.sink.report(h.constNeedsInit(s)),o&&(r[o]=i??types.s.unknown);continue}let c=i??(s.init.type==="ArrowFunctionExpression"?gt(s.init):null),l=o&&c?Ne(n,{[o]:c},t):n,u,p=null;i?(H(s.init,i,l,t),u=i,p=i,(i.t==="union"||i.t==="boolean")&&me(s.init)&&(u=or(i,ye(s.init),t.schemes))):(u=S(s.init,l,t),e.kind!=="const"&&(u=types.widenLiteral(u)),p=u),g(t,s,u,n),o?(r[o]=u,e.kind!=="const"&&p&&Vt(o,p,t)):se(a,u,r,n,t);}return g(t,e,types.s.unknown,n),Ne(n,r,t)}function Ne(e,n,t){let r=ie(e,n);for(let s of Object.keys(n))r=Tn(r,s,t.schemes);return r}function Vt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Sa(e,n,t){let r=S(e.left,n,t),s=S(e.right,n,t),a=e.operator,o=Pe.get(a);if(!o)return types.s.boolean;if(o.category==="additive"){if(be(r)||be(s))return ge(r,t.schemes)||ge(s,t.schemes)?types.s.string:types.s.number;if(ge(r,t.schemes)&&ge(s,t.schemes))return types.s.string;if(Ke(r,t.schemes)&&Ke(s,t.schemes))return types.s.number;if(ge(r,t.schemes)||ge(s,t.schemes)){let c=ge(r,t.schemes)?s:r;return t.sink.report(h.implicitCoercion(e,r,s,ur(c,t.schemes))),types.s.string}return t.sink.report(h.operatorNotApplicable(e,"+",r,s)),types.s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ke(r,t.schemes)||t.sink.report(h.arithmeticOperand(e.left,"left")),Ke(s,t.schemes)||t.sink.report(h.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!be(r)&&!be(s)){let i=types.apparentType(r,t.schemes),c=types.apparentType(s,t.schemes),l=types.subtype(i,types.s.number,t.schemes),u=types.subtype(c,types.s.number,t.schemes);l&&u||!l&&!u&&(types.subtype(i,c,t.schemes)||types.subtype(c,i,t.schemes))||t.sink.report(h.operatorNotApplicable(e,a,r,s));}return Nn(o.result)}var be=e=>e.t==="any"||e.t==="unknown",Ke=(e,n)=>be(e)||types.subtype(types.apparentType(e,n),types.s.number,n),ge=(e,n)=>!be(e)&&types.subtype(types.apparentType(e,n),types.s.string,n),ba=types.s.union([types.s.string,types.s.number,types.s.boolean,types.s.null,types.s.undefined]),ur=(e,n)=>be(e)||types.subtype(types.apparentType(e,n),ba,n),Gt={string:types.s.literal(""),number:types.s.literal(0),boolean:types.s.literal(false)},Mn=e=>e.t==="null"||e.t==="undefined";function Na(e,n,t){if(n.t==="any"||n.t==="unknown")return types.normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[types.s.literal(true),types.s.literal(false)]:[n];if(e==="??")return types.normalizeUnion([...r.filter(a=>!Mn(a)),t]);if(e==="||")return types.normalizeUnion([...r.filter(a=>!Mn(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>Mn(a)?[a]:a.t==="literal"?a.value?[]:[a]:Gt[a.t]?[Gt[a.t]]:[]);return types.normalizeUnion([...s,t])}var Ba=types.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>types.s.literal(e)));function ka(e,n,t){let r=S(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:types.s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:types.s.number;case "+":case "~":return types.s.number;case "typeof":return Ba;case "delete":return types.s.boolean;case "void":return types.s.undefined;default:return types.s.unknown}}function wa(e,n,t){let r={},s,a=[],o=[],i=false,c=false;for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){let m=W(S(u.argument,n,t),t.schemes);if(m.t==="object"){for(let b in m.props)r[b]=m.props[b];m.index&&(s={key:m.index.key,type:m.index.value});}continue}let p=u,y=S(p.value,n,t),f=types.widen(y);if(g(t,u,y,n),p.computed){let m=W(S(p.key,n,t),t.schemes);m.t==="literal"&&typeof m.value=="string"?(r[m.value]={type:f},a.push(f)):m.t==="literal"&&typeof m.value=="number"?(r[String(m.value)]={type:f},a.push(f),o.push(f)):m.t==="string"?(i=true,a.push(f)):m.t==="number"&&(c=true,a.push(f),o.push(f));continue}let N=Ae(p);N!==null&&(r[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}return i?s={key:"string",type:types.normalizeUnion(a)}:c&&(s={key:"number",type:types.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function pr(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=W(S(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(types.widen(S(a,n,t)));}return types.s.array(r.length?types.normalizeUnion(r):types.s.unknown)}function _n(e,n,t,r){let s=W(n,r.schemes),a=e.elements,o=a.every(c=>c&&c.type!=="SpreadElement"),i=(c,l)=>c.type==="ArrayExpression"?_n(c,l,t,r):Ee(l)?S(c,t,r):types.widen(S(c,t,r));if(s.t==="tuple"&&o){let c=s.elements.length,l=types.restIndex(s),u=l<0?0:c-l-1,p=f=>{if(l<0||f<l)return s.elements[f];let N=a.length-f;return N<=u?s.elements[c-N]:s.elements[l]},y=a.map((f,N)=>{let m=p(N);return m?i(f,m):types.widen(S(f,t,r))});return g(r,e,{t:"tuple",elements:y},t)}if(s.t==="array"){let c=[];for(let l of a){if(!l)continue;let u=l;if(u.type==="SpreadElement"){S(u.argument,t,r);continue}c.push(i(u,s.items));}return g(r,e,types.s.array(c.length?types.normalizeUnion(c):types.s.unknown),t)}return pr(e,t,r)}function $n(e,n,t,r){if(e===null)return types.s.null;switch(typeof e){case "string":return types.s.string;case "number":return types.s.number;case "boolean":return types.s.boolean;case "object":break;default:return types.s.unknown}if(Array.isArray(e)){let o=e.map(i=>$n(i,n,t,r));return types.s.array(o.length?types.normalizeUnion(o):types.s.unknown)}let s=e;if(ast.isExprMarker(s)){let o;try{o=json.fromJson(s);}catch{return t.sink.report(h.unsupported(r,`'${ast.EXPR_MARKER}: ${String(s[ast.EXPR_MARKER])}'`)),types.s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:$n(s[o],n,t,r)};return {t:"object",props:a}}function dr(e,n){let t=types.apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":t.t==="union"?t.of.some(r=>dr(r,n)):false}function va(e,n,t,r,s){let a=le(),o=H(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=c=>r.sink.all.some(l=>l.node===c.node&&l.code===c.code&&l.message===c.message);for(let c of a.all)i(c)||r.sink.report(c);return a.hasErrors()?n:o}var Ea=(e,n)=>({...e,typeAnnotation:n}),Aa=(e,n)=>({...e,returnType:n}),Da=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function zn(e,n){return e.get(n)?.type}function Oa(e,n){return e.get(n)?.scope}function Ca(e,n){let t=e.get(n)?.type;return t?types.discover(t,[])?.completions??[]:[]}function Ra(e,n){let t=e.get(n)?.scope;return t?[...on(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Ta=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Pa(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 rn(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(Ta)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=zn(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=rn(e,n+2,t,r),c=Pa(a);return !i||!c?void 0:types.discover(i,[c],r)?.type}case "ArrayExpression":{let o=rn(e,n+1,t,r);return o?types.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=Pe.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return types.s.number;let i=a.left===s?a.right:a.left,c=zn(t,i);return c&&c.t!=="any"&&c.t!=="unknown"?c:void 0}case "LogicalExpression":return rn(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?types.s.number:void 0}default:return}}function Ma(e,n){return e.filter(t=>t.node===n)}function $a(){let e=new WeakMap;return {stamp:(n,t)=>(e.set(n,t),n),get:n=>e.get(n)}}var La=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function Jn(e,n,t,r){if(ast.isExprMarker(e)){let s=r.island?r.island(e,n):ast.fromExprMarker(e);return t.stamp(s,n)}return Array.isArray(e)?t.stamp(ae__namespace.arrayExpression(e.map((s,a)=>Jn(s,r.child(n,a),t,r))),n):La(e)?t.stamp(ae__namespace.objectExpression(Object.entries(e).map(([s,a])=>{let o=r.child(n,s),i=t.stamp(ae__namespace.literal(s),o);return t.stamp(ae__namespace.property(i,Jn(a,o,t,r),false,false),o)})),n):t.stamp(ae__namespace.literal(e),n)}function Ua(e){let n=new WeakMap,t=[e];for(;t.length>0;){let r=t.pop();ast.forEachChild(r,s=>{n.set(s,r),t.push(s);});}return n}function Va(e,n,t,r){let s=Ua(e),a=new Map,o=c=>{let l=a.get(c);return l===void 0&&(l=languageService.createPositionMap(c),a.set(c,l)),l},i=c=>{let l=c;for(;l!==void 0;){let u=t.get(l);if(u!==void 0)return u;l=s.get(l);}return r.fallback};return n.map(c=>{let l=i(c.node),u=r.textOf?.(l),p=u===void 0?void 0:yr(o(u),c.node.loc);return {diagnostic:c,anchor:l,...p?{span:p}:{}}})}function yr(e,n){if(!n?.start)return;let t=a=>e.offsetAt({line:a.line-1,column:a.column}),r=t(n.start),s=n.end?t(n.end):r;return {from:r,to:s<r?r:s}}function Ga(e,n){return yr(languageService.createPositionMap(e),n)}exports.BINARY_OP=Pe;exports.BINARY_OPS=bn;exports.FUNCTION_KINDS=rt;exports.LOGICAL_OPS=$r;exports.UNARY_OPS=lt;exports.anchorDiagnostics=Va;exports.annotate=Ea;exports.annotateReturn=Aa;exports.asExpression=Da;exports.binaryOpsProducing=Lr;exports.calleeAllowlist=pn;exports.capabilityNodes=un;exports.check=zt;exports.childScope=ie;exports.collectBindings=Jr;exports.collectMutations=En;exports.collectUnused=wn;exports.componentProps=_s;exports.componentPropsOf=Gn;exports.contextualTypeAt=rn;exports.createAnchors=$a;exports.createEnv=Br;exports.createSink=le;exports.diag=h;exports.diagnosticsAt=Ma;exports.extractModuleType=$s;exports.fromCapability=Ir;exports.guard=cn;exports.guardsFromCompiled=Ye;exports.lookup=U;exports.lowerValue=Jn;exports.makeDiagnostic=P;exports.maxArgs=gn;exports.maxCallNesting=fn;exports.maxDepth=yn;exports.maxFunctionNesting=dn;exports.maxNestingOf=Je;exports.maxNodes=hn;exports.memberCompletions=Ca;exports.memberDepth=mn;exports.opResultSchema=Nn;exports.resolveNamed=kr;exports.resolveScheme=wr;exports.resultType=Sn;exports.rootScope=Zn;exports.scopeAt=Oa;exports.scopeCompletions=Ra;exports.spanOf=Ga;exports.typeAt=zn;exports.unaryOpsProducing=Ur;exports.visibleNames=on;Object.keys(types).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return types[k]}})});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Schema, Schemes, TypeScheme, ObjectSchema, Completion } from '@tslite/
|
|
2
|
-
export * from '@tslite/
|
|
3
|
-
import { Scope as Scope$1, BaseNode, Node, types, Expression, SourceLocation } from '@tslite/
|
|
1
|
+
import { Schema, Schemes, TypeScheme, ObjectSchema, Completion } from '@tslite/types';
|
|
2
|
+
export * from '@tslite/types';
|
|
3
|
+
import { Scope as Scope$1, BaseNode, Node, types as types$1, Expression, SourceLocation } from '@tslite/ast';
|
|
4
4
|
import { CapabilityProfile, CompiledProfile } from '@tslite/capability';
|
|
5
5
|
import { Span } from '@tslite/language-service';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Um nível de escopo léxico (nome → `Schema`), sobre o `Scope<T>` genérico do
|
|
9
|
-
* `
|
|
9
|
+
* `ast` — a mesma cadeia que o `behavior` usa, com o payload do eixo de tipos.
|
|
10
10
|
*/
|
|
11
11
|
type Scope = Scope$1<Schema>;
|
|
12
12
|
/** Cria um escopo raiz (sem pai). */
|
|
@@ -353,7 +353,7 @@ interface CheckOptions {
|
|
|
353
353
|
* Sem ele, `check` faz **só type-checking** (sem opinar sobre capability).
|
|
354
354
|
*
|
|
355
355
|
* Capability **desinstala** features (o que pode existir em runtime — junto do
|
|
356
|
-
* interpret/
|
|
356
|
+
* interpret/codegen); é ortogonal aos `limits`/`resultType` abaixo, que **validam**.
|
|
357
357
|
*/
|
|
358
358
|
readonly profile?: CapabilityProfile;
|
|
359
359
|
/**
|
|
@@ -442,7 +442,7 @@ declare const FUNCTION_KINDS: readonly ["ArrowFunctionExpression", "FunctionExpr
|
|
|
442
442
|
/**
|
|
443
443
|
* O guard de **capability**: percorre `root` e reporta `node-not-allowed` em todo
|
|
444
444
|
* nó proibido por `compiled` — via `nodeViolation`, a **fonte única** de gating
|
|
445
|
-
* compartilhada com o interpret e o
|
|
445
|
+
* compartilhada com o interpret e o codegen. É o que `fromCapability` monta (+ o
|
|
446
446
|
* host allowlist). Garante que os 3 consumidores concordam por construção.
|
|
447
447
|
*/
|
|
448
448
|
declare function capabilityNodes(compiled: CompiledProfile, severity?: Severity): Guard;
|
|
@@ -491,7 +491,7 @@ type BinaryOpCategory = "additive" | "arithmetic" | "bitwise" | "relational" | "
|
|
|
491
491
|
*/
|
|
492
492
|
type OpResult = "number" | "boolean" | "string" | "additive";
|
|
493
493
|
interface BinaryOpSpec {
|
|
494
|
-
readonly op: types.BinaryOperator;
|
|
494
|
+
readonly op: types$1.BinaryOperator;
|
|
495
495
|
readonly category: BinaryOpCategory;
|
|
496
496
|
readonly result: OpResult;
|
|
497
497
|
}
|
|
@@ -503,14 +503,14 @@ declare const BINARY_OP: ReadonlyMap<string, BinaryOpSpec>;
|
|
|
503
503
|
* condicional e NÃO tem schema fixo: quem chama trata (ver `binaryType` no checker). */
|
|
504
504
|
declare const opResultSchema: (r: Exclude<OpResult, "additive">) => Schema;
|
|
505
505
|
interface UnaryOpSpec {
|
|
506
|
-
readonly op: types.UnaryOperator;
|
|
506
|
+
readonly op: types$1.UnaryOperator;
|
|
507
507
|
/** O tipo ao qual o resultado é ASSIGNÁVEL (upper bound). O `unaryType` faz
|
|
508
508
|
* folding de literal (`-1`→`-1`, `!0`→`true`), então o real é um subtipo disto. */
|
|
509
509
|
readonly result: "number" | "boolean" | "string" | "undefined";
|
|
510
510
|
}
|
|
511
511
|
declare const UNARY_OPS: readonly UnaryOpSpec[];
|
|
512
512
|
interface LogicalOpSpec {
|
|
513
|
-
readonly op: types.LogicalOperator;
|
|
513
|
+
readonly op: types$1.LogicalOperator;
|
|
514
514
|
}
|
|
515
515
|
/** Os lógicos COMPÕEM o tipo dos operandos (`a && b` refina; não é tipo fixo) —
|
|
516
516
|
* por isso sem `result`. No slot, um lógico serve quando os operandos servem. */
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Schema, Schemes, TypeScheme, ObjectSchema, Completion } from '@tslite/
|
|
2
|
-
export * from '@tslite/
|
|
3
|
-
import { Scope as Scope$1, BaseNode, Node, types, Expression, SourceLocation } from '@tslite/
|
|
1
|
+
import { Schema, Schemes, TypeScheme, ObjectSchema, Completion } from '@tslite/types';
|
|
2
|
+
export * from '@tslite/types';
|
|
3
|
+
import { Scope as Scope$1, BaseNode, Node, types as types$1, Expression, SourceLocation } from '@tslite/ast';
|
|
4
4
|
import { CapabilityProfile, CompiledProfile } from '@tslite/capability';
|
|
5
5
|
import { Span } from '@tslite/language-service';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Um nível de escopo léxico (nome → `Schema`), sobre o `Scope<T>` genérico do
|
|
9
|
-
* `
|
|
9
|
+
* `ast` — a mesma cadeia que o `behavior` usa, com o payload do eixo de tipos.
|
|
10
10
|
*/
|
|
11
11
|
type Scope = Scope$1<Schema>;
|
|
12
12
|
/** Cria um escopo raiz (sem pai). */
|
|
@@ -353,7 +353,7 @@ interface CheckOptions {
|
|
|
353
353
|
* Sem ele, `check` faz **só type-checking** (sem opinar sobre capability).
|
|
354
354
|
*
|
|
355
355
|
* Capability **desinstala** features (o que pode existir em runtime — junto do
|
|
356
|
-
* interpret/
|
|
356
|
+
* interpret/codegen); é ortogonal aos `limits`/`resultType` abaixo, que **validam**.
|
|
357
357
|
*/
|
|
358
358
|
readonly profile?: CapabilityProfile;
|
|
359
359
|
/**
|
|
@@ -442,7 +442,7 @@ declare const FUNCTION_KINDS: readonly ["ArrowFunctionExpression", "FunctionExpr
|
|
|
442
442
|
/**
|
|
443
443
|
* O guard de **capability**: percorre `root` e reporta `node-not-allowed` em todo
|
|
444
444
|
* nó proibido por `compiled` — via `nodeViolation`, a **fonte única** de gating
|
|
445
|
-
* compartilhada com o interpret e o
|
|
445
|
+
* compartilhada com o interpret e o codegen. É o que `fromCapability` monta (+ o
|
|
446
446
|
* host allowlist). Garante que os 3 consumidores concordam por construção.
|
|
447
447
|
*/
|
|
448
448
|
declare function capabilityNodes(compiled: CompiledProfile, severity?: Severity): Guard;
|
|
@@ -491,7 +491,7 @@ type BinaryOpCategory = "additive" | "arithmetic" | "bitwise" | "relational" | "
|
|
|
491
491
|
*/
|
|
492
492
|
type OpResult = "number" | "boolean" | "string" | "additive";
|
|
493
493
|
interface BinaryOpSpec {
|
|
494
|
-
readonly op: types.BinaryOperator;
|
|
494
|
+
readonly op: types$1.BinaryOperator;
|
|
495
495
|
readonly category: BinaryOpCategory;
|
|
496
496
|
readonly result: OpResult;
|
|
497
497
|
}
|
|
@@ -503,14 +503,14 @@ declare const BINARY_OP: ReadonlyMap<string, BinaryOpSpec>;
|
|
|
503
503
|
* condicional e NÃO tem schema fixo: quem chama trata (ver `binaryType` no checker). */
|
|
504
504
|
declare const opResultSchema: (r: Exclude<OpResult, "additive">) => Schema;
|
|
505
505
|
interface UnaryOpSpec {
|
|
506
|
-
readonly op: types.UnaryOperator;
|
|
506
|
+
readonly op: types$1.UnaryOperator;
|
|
507
507
|
/** O tipo ao qual o resultado é ASSIGNÁVEL (upper bound). O `unaryType` faz
|
|
508
508
|
* folding de literal (`-1`→`-1`, `!0`→`true`), então o real é um subtipo disto. */
|
|
509
509
|
readonly result: "number" | "boolean" | "string" | "undefined";
|
|
510
510
|
}
|
|
511
511
|
declare const UNARY_OPS: readonly UnaryOpSpec[];
|
|
512
512
|
interface LogicalOpSpec {
|
|
513
|
-
readonly op: types.LogicalOperator;
|
|
513
|
+
readonly op: types$1.LogicalOperator;
|
|
514
514
|
}
|
|
515
515
|
/** Os lógicos COMPÕEM o tipo dos operandos (`a && b` refina; não é tipo fixo) —
|
|
516
516
|
* por isso sem `result`. No slot, um lógico serve quando os operandos servem. */
|
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,freeVars,instantiateLoose,widenType,substitute,widenInferred,groundVars,resolveConditional,widen,withoutUndefined,isNumericLiteralName,restIndex,schemeArity,bindScheme,baseLiteralType,comparable,unify,equals,ownProp,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,TSLiteError,walk,desugarJSX,isExprMarker,EXPR_MARKER,fromExprMarker,childrenOf,VisitorKeys,forEachChild}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';import*as ae from'@tslite/core/builders';import {createPositionMap}from'@tslite/language-service';var Zn=(e={})=>rootScope(e),ie=(e,n)=>childScope(e,n),U=(e,n)=>lookup(e,n),on=e=>{let n=visibleNames(e);for(let t of n.keys())t.includes(".")&&n.delete(t);return n},Hn=new Set(["types","schemes","accessors","asserters","matchers","modules"]),Br=(e={},n)=>{let t=n??{},r=Object.keys(t).filter(s=>!Hn.has(s));if(r.length>0)throw new TSLiteError("invalid-env-options",`createEnv: unknown option(s) ${r.map(s=>`'${s}'`).join(", ")} \u2014 expected ${[...Hn].join(", ")}. Named types go under 'types'.`,{unknown:r});return {scope:Zn(e),types:t.types??{},schemes:t.schemes??{},accessors:t.accessors??{},asserters:t.asserters??new Set,matchers:t.matchers??new Set,modules:t.modules??{}}},kr=(e,n)=>e.types[n],wr=(e,n)=>e.schemes[n];var et={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","required-after-optional":"type","not-iterable":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","unprovable-value":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","narrowing-cast-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},k=(e,n,t)=>({code:e,kind:et[e],severity:"error",node:n,message:t}),P=(e,n,t,r="error")=>({code:e,kind:et[e],severity:r,node:n,message:t}),h={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(l=>l.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=k("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),c=s.filter(l=>l.kind==="missing"&&l.path.length===1).map(l=>({name:l.path[0],type:l.expected}));return c.length?{...i,data:{kind:"missing-properties",properties:c}}:i},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),notASchema:(e,n)=>k("not-a-schema",e,`'${n}' refers to a value, but no type named '${n}' is declared. An asserter needs a schema that is both a value in scope and a declared type.`),typeAsValue:(e,n)=>k("type-as-value",e,`'${n}' only refers to a type, but is being used as a value here. Types are erased at runtime: register '${n}' as a value in scope for the asserter to prove it.`),asserterNeedsName:(e,n)=>k("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>k("shadows-schema",e,`'${n}' shadows the schema of the same name: an asserter would type against the declared schema but prove against this value at runtime. Rename the binding.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>k("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>k("not-iterable",e,`Type '${format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>k("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>k("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),genericTypeArity:(e,n,t,r)=>k("wrong-type-argument-count",e,r===0?`Type '${n}' is not generic.`:t===r?`Generic type '${n}' requires ${r} type argument${r===1?"":"s"}.`:`Generic type '${n}' requires between ${t} and ${r} type arguments.`),forbiddenMember:(e,n)=>k("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>P("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>k("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>k("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>k("cast-unsound",e,`Conversion of type '${format(n)}' to type '${format(t)}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.`),unprovableValue:(e,n,t,r)=>k("unprovable-value",e,`A value of type '${format(n)}' can never satisfy '${r}' (${format(t)}): the types do not overlap, so this proof can only fail at runtime.`),arithmeticOperand:(e,n)=>k("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>k("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...k("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${format(n)}' and '${format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...k("implicit-coercion",e,`Cannot convert '${format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function le(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Te(e,n,t){let r=baseLiteralType(e);return comparable(n,widenType(r),t)||comparable(r,n,t)}function tt(e,n,t){return subtype(e,n,t)}function cn(e,n,t={}){return n.flatMap(r=>r(e,t))}function pe(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var Mr=e=>Array.isArray(e)?e:[e],rt=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function un(e,n="error"){return t=>{let r=[];return pe(t,s=>{let a=nodeViolation(s,e);a&&r.push(P("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function st(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return pe(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let c of [o.typeAnnotation,o.returnType]){if(!c)continue;let l=typeFeatureViolations(typeFeatures(c,i),t);l.length&&s.push(P("type-feature-not-allowed",a,`authoring type feature${l.length>1?"s":""} '${l.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function R(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=>R(t.type,n))||!!e.index&&R(e.index.value,n);case "array":return R(e.items,n);case "tuple":return e.elements.some(t=>R(t,n));case "union":case "intersection":return e.of.some(t=>R(t,n));case "fn":return e.params.some(t=>R(t.type,n))||R(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>R(r.type,n))||R(t.returns,n));case "keyof":return R(e.of,n);case "index":return R(e.obj,n)||R(e.key,n);case "mapped":return R(e.over,n)||R(e.body,n);case "conditional":return R(e.check,n)||R(e.extends,n)||R(e.then,n)||R(e.else,n);case "returnType":case "parameters":return R(e.fn,n);case "apply":return e.args.some(t=>R(t,n));default:return false}}function at(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return pe(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&R(o)){r.push(P("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function ot(e,n="error"){return (t,r)=>{let s=r.overlay;if(!e.typeStrict||!s)return [];let a=r.schemes??{},o=[];return pe(t,i=>{if(i.type!=="TSAsExpression")return;let{expression:c}=i,l=s.get(c)?.type,u=s.get(i)?.type;!l||!u||R(u)||!Te(l,u,a)||tt(l,u,a)||o.push(P("narrowing-cast-not-allowed",i,`A cast may only widen under 'strict': '${format(l)}' is not assignable to '${format(u)}'. Narrow with a type guard, or prove the value with an asserter.`,n));}),o}}function pn(e,n="error"){let t=new Set(e);return r=>{let s=[];return pe(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(P("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(P("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Je(e,n,t={}){let r=new Set(Mr(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],c=(l,u)=>{let p=r.has(l.type),y=p?u+1:u;p&&y>n&&i.push(P("too-deep",l,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let f of childrenOf(l))c(f,y);};return c(o,0),i}}var dn=(e=3,n="error")=>Je(rt,e,{hint:"use a pipe instead of nesting functions",severity:n}),fn=(e,n="error")=>Je("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),mn=(e,n="error")=>Je("MemberExpression",e,{severity:n});function yn(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(P("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 hn(e,n="error"){return t=>{let r=0;return pe(t,()=>{r++;}),r>e?[P("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function gn(e,n="error"){return t=>{let r=[];return pe(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(P("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Sn(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[P("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function Ye(e){let n=[un(e),st(e),at(e),ot(e)];return e.hostAllow!=="*"&&n.push(pn([...e.hostAllow])),n}function Ir(e){return Ye(compileProfile(e))}var bn=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],Pe=new Map(bn.map(e=>[e.op,e])),it={number:s.number,boolean:s.boolean,string:s.string},Nn=e=>it[e],lt=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Fr={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},$r=[{op:"&&"},{op:"||"},{op:"??"}];function Lr(e,n={}){return bn.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(it[t.result],e,n))}function Ur(e,n={}){return lt.filter(t=>subtype(Fr[t.result],e,n))}var de=e=>({bindings:new Map,parent:e}),ut=e=>e.charCodeAt(0)===95;function Qe(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 je(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)je(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&He(n,r);return}for(let r of Object.keys(t))je(t[r],n);}function pt(e,n){let t=e;je(t.typeAnnotation,n),je(t.returnType,n);}function He(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function ee(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;pt(e,n),Qe(n,t,o,e,r,s||a&&ut(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],c=!!i&&i.type==="RestElement";o.forEach((l,u)=>{let p=c&&u<o.length-1;if(l.type==="RestElement")ee(l.argument,n,t,r,s,false);else {let y=l;y.computed&&v(y.key,n,t),ee(y.value,n,t,r,s||p,!y.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;ee(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":ee(e.left,n,t,r,s,a);return;case "RestElement":ee(e.argument,n,t,r,s,true);return;default:return}}function Me(e,n,t){if(e)switch(e.type){case "AssignmentPattern":v(e.right,n,t),Me(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)Me(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&Me(r,n,t);return;case "RestElement":Me(e.argument,n,t);return;default:return}}function ct(e,n,t,r){for(let s of e.declarations)ee(s.id,n,t,"local",r,false),v(s.init,n,t);}function Bn(e,n,t){let r=e,s=de(n),a=r.params??[];for(let o of a)ee(o,s,t,"parameter",false,true);for(let o of a)Me(o,s,t);v(r.body,s,t);}function v(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(pt(e,n),e.type){case "Identifier":He(n,e.name);return;case "MemberExpression":{let r=e;v(r.object,n,t),r.computed&&v(r.property,n,t);return}case "Property":{let r=e;r.computed&&v(r.key,n,t),v(r.value,n,t);return}case "Program":case "BlockStatement":{let r=de(n);for(let s of e.body??[])v(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":Bn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Qe(n,t,r.name,r,"local",false),Bn(e,n,t);return}case "CatchClause":{let r=e,s=de(n);ee(r.param,s,t,"local",true,false),v(r.body,s,t);return}case "SwitchStatement":{let r=e;v(r.discriminant,n,t);let s=de(n);for(let a of r.cases){v(a.test,s,t);for(let o of a.consequent??[])v(o,s,t);}return}case "ForStatement":{let r=e,s=de(n);v(r.init,s,t),v(r.test,s,t),v(r.update,s,t),v(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;v(r.right,n,t);let s=de(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)ee(o.id,s,t,"local",false,true);else v(a,s,t);v(r.body,s,t);return}case "VariableDeclaration":ct(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Qe(n,t,s.name,s,"import",ut(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")ct(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Qe(n,t,a.name,a,"local",true),Bn(s,n,t);}else v(s,n,t);}else for(let s of r.specifiers)He(n,s.local.name);return}case "TSAsExpression":v(e.expression,n,t);return;case "TSTypeAliasDeclaration":je(e.typeAnnotation,n);return;case "JsonExpression":kn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;dt(r.name,n);for(let s of r.attributes??[])v(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":v(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)v(i,n,t);else v(o,n,t);}return}}}function dt(e,n,t){e&&(e.type==="JSXIdentifier"?He(n,e.name):e.type==="JSXMemberExpression"&&dt(e.object,n));}function kn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)kn(s,n,t);return}let r=e;if(isExprMarker(r)){try{v(fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))kn(r[s],n,t);}function wn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};v(e,de(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(h.unusedName(s.node,s.name));return r}var qr=new Set(["const","import"]),Ie=e=>({binds:new Map,parent:e});function _r(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function fe(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?fe(n.argument):fe(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?fe(n):[]);case "AssignmentPattern":return fe(e.left);case "RestElement":return fe(e.argument);default:return []}}var Ze=(e,n,t)=>{for(let r of fe(n))e.binds.set(r.name,t);};function vn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of fe(e))vn(a,n,t);return}let r=e.name,s=_r(n,r);s&&qr.has(s)&&(t.invalid.add(e),t.out.push(h.assignToConst(e,r,s==="import"?"import":"const")));}function F(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;vn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{vn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ie(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ie(n);for(let a of r.params??[])Ze(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ie(n);Ze(s,r.param,"param"),F(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)Ze(s,o.id,a.kind);else a&&F(a,s,t);F(r.right,n,t),F(r.test,s,t),F(r.update,s,t),F(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)F(s.init,n,t),Ze(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&&F(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":F(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)F(i,n,t);else F(o,n,t);}return}}}function En(e){let n={out:[],invalid:new WeakSet};return F(e,Ie(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var Fe=e=>({decls:new Map,parent:e});function zr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function ve(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ve(n.argument):ve(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ve(n):[]);case "AssignmentPattern":return ve(e.left);case "RestElement":return ve(e.argument);default:return []}}var en=(e,n)=>{for(let t of ve(n))e.decls.set(t.name,t);};function j(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=zr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;j(r.object,n,t),r.computed&&j(r.property,n,t);return}case "Property":{let r=e;r.computed&&j(r.key,n,t),j(r.value,n,t);return}case "Program":case "BlockStatement":{let r=Fe(n);for(let s of e.body??[])j(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=Fe(n);for(let o of r.params??[])en(a,o);j(r.body,a,t);return}case "CatchClause":{let r=e,s=Fe(n);en(s,r.param),j(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Fe(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)en(s,o.id);else a&&j(a,s,t);j(r.right,n,t),j(r.test,s,t),j(r.update,s,t),j(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)en(n,r.id),j(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":j(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)j(i,n,t);else j(o,n,t);}return}}}function Jr(e){let n=new WeakMap;return j(e,Fe(void 0),n),n}var An=e=>e.typeAnnotation,Dn=e=>e.returnType,G=e=>e.type==="Identifier"?e.name:null,ft=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?G(n.id):null}return G(e)},mt=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Ae=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function yt(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function On(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=On(n.object);return t===null?null:`${t}.${n.property.name}`}return null}var Le=e=>{if(e.type!=="TemplateLiteral")return null;let n=e;if(n.expressions.length!==0||n.quasis.length!==1)return null;let{cooked:t,raw:r}=n.quasis[0].value;return t??r},me=e=>e.type==="Literal"||Le(e)!==null;function Ue(e){let n=Le(e);if(n!==null)return {t:"literal",value:n,fresh:true};let t=e;if(t.regex||t.bigint)return s.unknown;let r=t.value;return r===null?s.null:r===void 0?s.undefined:typeof r=="string"||typeof r=="number"||typeof r=="boolean"?{t:"literal",value:r,fresh:true}:s.unknown}var ye=e=>{let n=Le(e);if(n!==null)return s.literal(n);let t=e.value;return t===null?s.null:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?s.literal(t):Ue(e)},Cn=e=>e.type==="ArrowFunctionExpression",ht=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Ve=e=>ht(e)?e.args[0]:e,Ge=e=>ht(e)?e:s.promise(e);function $e(e){return e.t==="tuple"?true:e.t==="array"?$e(e.items):e.t==="union"?e.of.some($e):false}function Ee(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Ee(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Ee(e.bound):false}var W=(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 gt(e){let n=Dn(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:G(r)??`arg${s$1}`,type:An(r)??s.unknown})),returns:e.async?Ge(n):n}:null}var te={then:{},else:{}};function J(e){if(e.type==="Identifier")return e.name;if(e.type!=="MemberExpression")return null;let n=e;if(n.optional)return null;let t=J(n.object);return t===null?null:!n.computed&&n.property.type==="Identifier"?`${t}.${n.property.name}`:n.computed&&n.property.type==="Literal"&&typeof n.property.value=="string"?`${t}.${n.property.value}`:null}var Rn=e=>e.includes(".");function Dt(e,n,t){let r=U(e,n);return r!==void 0?r:Ot(e,n,t)}var re=(e,n,t)=>{let r=Dt(e,n,t);return r===void 0?void 0:apparentType(r,t)};function Ot(e,n,t){let r=n.lastIndexOf(".");if(r<0)return;let s=Dt(e,n.slice(0,r),t);if(s!==void 0)return discover(s,[n.slice(r+1)],t)?.type}function Zr(e,n){let t=n+".",r=new Set;for(let s=e;s;s=s.parent)for(let a of Object.keys(s.vars))(a.startsWith(t)||a===n)&&Rn(a)&&r.add(a);return [...r].sort((s,a)=>s.length-a.length)}function Tn(e,n,t){let r=Zr(e,n);if(!r.length)return e;let s$1={};for(let a of r)s$1[a]=Ot(ie(e,s$1),a,t)??s.unknown;return ie(e,s$1)}var Ct=new Set(["string","number","boolean","undefined","function","object"]),St={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function Rt(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 es=s.literal(true),ns=s.literal(false),Q=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[es,ns]:[e];function bt(e,n){let t=e,r=n;if(e.type==="UnaryExpression"&&t.operator==="typeof"&&n.type==="Literal"&&typeof r.value=="string"){let s=J(t.argument);if(s!==null)return {name:s,tag:r.value}}return null}function ts(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=Q(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function rs(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=Q(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function ss(e,n){if(!Ct.has(n))return null;if(e.t==="unknown"||e.t==="any")return St[n]??e;let t=Q(e).filter(r=>Rt(r,n));return t.length?normalizeUnion(t):St[n]??e}function as(e,n){if(!Ct.has(n)||e.t==="unknown"||e.t==="any")return null;let t=Q(e).filter(r=>!Rt(r,n));return t.length?normalizeUnion(t):null}function Nt(e,n){let t=J(e);if(t!==null&&me(n)){let r=ye(n);if(r.t==="literal"||r.t==="null")return {name:t,lit:r}}return null}function Bt(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.property.type==="Identifier"&&me(n)){let t=J(e.object),r=ye(n);if(t!==null&&(r.t==="literal"||r.t==="null"))return {name:t,prop:e.property.name,lit:r}}return null}function kt(e,n,t,r,s){let a=Q(e),o=c=>c.t==="object"?ownProp(c.props,n)?.type:void 0,i=a.filter(c=>{let l=o(c);return r?!!l&&subtype(t,l,s):!(l&&subtype(l,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function wt(e,n,t){let r=Q(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 os(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function is(e,n,t){let r=Q(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var ls=e=>e.t==="null"||e.t==="undefined",Tt=e=>ls(e)||e.t==="literal"&&!e.value,cs=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=Q(e),t=n.filter(r=>!Tt(r));return t.length&&t.length<n.length?normalizeUnion(t):null},us=e=>{let n=Q(e),t=n.filter(Tt);return t.length&&t.length<n.length?normalizeUnion(t):null},vt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,z=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),ps=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function V(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let m=s.left,b=s.right,B=J(b);if(m.type==="Literal"&&typeof m.value=="string"&&B!==null){let D=re(n,B,t);if(!D)return te;let O=String(m.value);return z(B,wt(D,O,true),wt(D,O,false))}return te}if(!ps(s.operator))return te;let a=s.operator==="!=="||s.operator==="!=",o=s.left,i=s.right,c=bt(o,i)??bt(i,o);if(c){let m=re(n,c.name,t);if(!m)return te;let b=ss(m,c.tag),B=as(m,c.tag);return a?z(c.name,B,b):z(c.name,b,B)}let l=vt(o),u=vt(i),p=l?i:u?o:null,y=p?J(p):null;if((l||u)&&y!==null){let m=y,b=re(n,m,t);if(!b)return te;let D=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],O=Q(b),Be=O.filter(ue=>D.includes(ue.t)),C=O.filter(ue=>!D.includes(ue.t)),I=Be.length?normalizeUnion(Be):null,T=C.length&&C.length<O.length?normalizeUnion(C):null;return a?z(m,T,I):z(m,I,T)}let f=Nt(o,i)??Nt(i,o),N=Bt(o,i)??Bt(i,o);if(f||N){let m=te;if(f){let b=re(n,f.name,t);if(b){let B=os(b,f.lit,t),D=is(b,f.lit,t);m=a?z(f.name,D,B):z(f.name,B,D);}}if(N){let b=re(n,N.name,t);if(b){let B=kt(b,N.prop,N.lit,true,t),D=kt(b,N.prop,N.lit,false,t),O=a?z(N.name,D,B):z(N.name,B,D);m={then:{...m.then,...O.then},else:{...m.else,...O.else}};}}return m}return te}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=V(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=fs(e,n,t);if(s)return s}if(e.type==="LogicalExpression"){let s=e;if(s.operator==="&&"){let a=V(s.left,n,t),o=V(s.right,L(n,a.then),t);return {then:{...a.then,...o.then},else:Et(a.else,{...a.then,...o.else},n,t)}}if(s.operator==="||"){let a=V(s.left,n,t),o=V(s.right,L(n,a.else),t);return {then:Et(a.then,{...a.else,...o.then},n,t),else:{...a.else,...o.else}}}return te}let r=J(e);if(r!==null){let s=re(n,r,t);if(s)return z(r,cs(s),us(s))}return te}function Et(e,n,t,r){let s={};for(let a of Object.keys(e)){let o=e[a],i=n[a]??re(t,a,r);if(!i)continue;let c=normalizeUnion([o,i]),l=re(t,a,r);l&&equals(c,l)||(s[a]=c);}return s}function ds(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 fs(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=U(n,r.name);if(!s)return null;let a=ds(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param],i=o?J(o):null;if(i===null)return null;let c=re(n,i,t);return c?z(i,ts(c,a.type,t),rs(c,a.type,t)):null}var L=(e,n)=>Object.keys(n).length?ie(e,n):e;function x(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>x(t));case "IfStatement":{let n=e;return !!n.alternate&&x(n.consequent)&&x(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&x(n.finalizer))return true;let t=!n.handler||x(n.handler.body);return x(n.block)&&t}default:return false}}var Ms=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function js(e){let n=[];return e.maxDepth!==void 0&&n.push(yn(e.maxDepth)),e.maxNodes!==void 0&&n.push(hn(e.maxNodes)),e.maxArgs!==void 0&&n.push(gn(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(dn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(fn(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(mn(e.memberDepth)),n}function Is(e,n,t){let{min:r,max:s}=schemeArity(e);if(n.length<r||n.length>s)return true;if(!e.bounds)return false;let a=bindScheme(e,n);return e.params.some((o,i)=>{let c=e.bounds?.[o];return c!==void 0&&i<n.length&&!subtype(n[i],substitute(c,a),t)})}function Fs(e,n){let t=e.typeRefs;if(!t?.length)return [];let r=[];for(let s of t){let a={type:"Identifier",name:s.name,loc:s.loc},o=n[s.name];if(!o){r.push(P("unknown-name",a,`Cannot find name '${s.name}'.`));continue}let i=s.args;if(!i)continue;let{min:c,max:l}=schemeArity(o);if(i.length<c||i.length>l){r.push(h.genericTypeArity(a,s.name,c,l));continue}if(!o.bounds)continue;let u=bindScheme(o,i);o.params.forEach((p,y)=>{let f=o.bounds?.[p];if(!f||y>=i.length)return;let N=substitute(f,u);subtype(i[y],N,n)||r.push(h.constraintViolation(a,p,i[y],N));});}return r}function zt(e,n,t={}){let r={...Ms(n.types),...n.schemes,...Ls(e)},s$1=En(e),a={overlay:new WeakMap,sink:le(),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,c=Us(e,a);try{i=S(e,c,a);}catch(p){if(p instanceof TypeEvalLimitError)a.sink.report(P("too-deep",e,p.message));else if(p instanceof UnionTooComplexError)a.sink.report(P("too-complex-union",e,p.message));else throw p;i=s.unknown;}let l=[];o&&l.push(...Ye(o)),t.limits&&l.push(...js(t.limits)),t.resultType&&l.push(Sn(t.resultType,r));let u=[...a.sink.all,...s$1.diagnostics,...Fs(e,r),...t.unused?wn(e,t.unused):[],...l.length?cn(e,l,{overlay:a.overlay,schemes:r}):[]];return {type:i,overlay:a.overlay,diagnostics:u,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function $s(e,n,t={}){let r=zt(e,n,t),s$1={},a=new Map,o,i=l=>{let u=[];if(l.type==="VariableDeclaration")for(let p of l.declarations){let y=G(p.id),f=r.overlay.get(p);y&&f&&(s$1[y]=f.type,u.push(y));}else if(l.type==="FunctionDeclaration"){let p=l.id?.name,y=r.overlay.get(l);p&&y&&(s$1[p]=y.type,u.push(p));}return u};for(let l of e.body??[])if(l.type==="VariableDeclaration"||l.type==="FunctionDeclaration")i(l);else if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration)for(let p of i(u.declaration))a.set(p,p);else for(let p of u.specifiers)a.set(p.exported.name,p.local.name);}else if(l.type==="ExportDefaultDeclaration"){let u=r.overlay.get(l.declaration);o=u?u.type:s.unknown;}let c={};if(a.size||o!==void 0){for(let[l,u]of a)s$1[u]&&(c[l]={type:s$1[u]});o!==void 0&&(c.default={type:o});}else for(let l in s$1)c[l]={type:s$1[l]};return {type:{t:"object",props:c},diagnostics:r.diagnostics}}var Ls=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let r=t;if(!r.id?.name||!r.typeAnnotation)return;let s={},a={};for(let o of r.typeParamNodes??[])o.bound&&(s[o.name]=o.bound),o.default&&(a[o.name]=o.default);n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation,...Object.keys(s).length?{bounds:s}:{},...Object.keys(a).length?{defaults:a}:{}};}}),n};function Us(e,n){let t=n.env.modules,r={};walk(e,{ImportDeclaration(s$1){let a=s$1;if(a.importKind==="type")return;let o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(h.unknownModule(a.source,String(o)));for(let c of a.specifiers)r[c.local.name]=s.unknown;return}for(let c of a.specifiers){if(c.importKind==="type")continue;let l=c.local.name;if(ce(l,c.local,n),l in r){n.sink.report(h.cannotRedeclare(c.local,l));continue}if(c.type==="ImportNamespaceSpecifier"){r[l]=i;continue}let u=c.type==="ImportSpecifier"?c.imported.name:"default",p=discover(i,[u],n.schemes);p?r[l]=p.type:(n.sink.report(h.noSuchMember(c,i,u)),r[l]=s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?ie(n.env.scope,r):n.env.scope}var g=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case Yt:return e.schema;case "JSXElement":case "JSXFragment":return g(t,e,S(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return g(t,e,Ue(e),n);case "Placeholder":return g(t,e,s.any,n);case "Identifier":{let s$1=e.name,a=U(n,s$1);return a===void 0?s$1==="undefined"?g(t,e,s.undefined,n):(t.sink.report(h.unknownName(e,s$1)),g(t,e,s.any,n)):g(t,e,a,n)}case "MemberExpression":return g(t,e,Mt(e,n,t),n);case "CallExpression":return g(t,e,Js(e,n,t,r),n);case "ArrowFunctionExpression":return Kn(e,n,t);case "FunctionDeclaration":return t.sink.report(h.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),g(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(h.unsupported(e,"anonymous function (use an arrow)")),g(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(h.unsupported(e,"'this'")),g(t,e,s.unknown,n);case "BlockStatement":return g(t,e,ar(e,n,t),n);case "ReturnStatement":{let s$1=e.argument;return g(t,e,s$1?S(s$1,n,t):s.unknown,n)}case "IfStatement":return Y(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 Y(e,n,t),t.overlay.get(e)?.type??s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=a.type==="MemberExpression"?g(t,a,Mt(a,n,t,true),n):S(a,n,t);if(a.type==="MemberExpression"){let u=t.overlay.get(a.object)?.type,p=u&&apparentType(u,t.schemes);p&&(p.t==="array"||p.t==="tuple")&&p.readonly&&t.sink.report(h.readonlyWrite(a,p));}let i=a.type==="Identifier"?a.name:null,c=i!==null&&t.evolving.has(i),l=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(c&&i!==null){let p=S(s.right,n,t);return t.assignFlow.set(e,widenLiteral(p)),g(t,e,p,n)}if(l&&i!==null){let p=S(s.right,n,t);return subtype(p,l,t.schemes)||t.sink.report(h.notAssignable(s.right,p,l,t.schemes)),t.assignFlow.set(e,or(l,p,t.schemes)),g(t,e,p,n)}let u=H(s.right,o,n,t);return g(t,e,u,n)}return g(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s$1=e,a=S(s$1.argument,n,t);return Ke(a,t.schemes)||t.sink.report(h.arithmeticOperand(s$1.argument,"operand")),g(t,e,s.number,n)}case "ExpressionStatement":return g(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return tn(e,n,t),g(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let s$1=e.id?.name,a=s$1?t.schemes[s$1]:void 0;return g(t,e,a?Zs(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return g(t,e,Sa(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=s.operator==="??"?{}:s.operator==="&&"?V(s.left,n,t.schemes).then:V(s.left,n,t.schemes).else,i=S(s.right,L(n,o),t);return g(t,e,Na(s.operator,a,i),n)}case "UnaryExpression":return g(t,e,ka(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=V(s.test,n,t.schemes),o=S(s.consequent,L(n,a.then),t),i=S(s.alternate,L(n,a.else),t);return g(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return g(t,e,wa(e,n,t),n);case "ArrayExpression":return g(t,e,pr(e,n,t),n);case "TemplateLiteral":{if(Le(e)!==null)return g(t,e,Ue(e),n);for(let s of e.expressions){let a=S(s,n,t);ur(a,t.schemes)||t.sink.report(h.notTextConvertible(s,a));}return g(t,e,s.string,n)}case "AwaitExpression":{let s$1=e.argument,a=s$1?S(s$1,n,t):s.unknown;return g(t,e,Ve(a),n)}case "Program":{let s$1=nn(e.body,n,t,new Set(t.importNames)).scope;return g(t,e,s.unknown,s$1)}case "JsonExpression":return g(t,e,$n(e.body,n,t,e),n);case "ChainExpression":return g(t,e,normalizeUnion([S(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let s=e,a=S(s.expression,n,t),o=Ce(s.typeAnnotation,n,t,e);return Te(a,o,t.schemes)||t.sink.report(h.castUnsound(e,a,o)),g(t,e,o,n)}default:return t.sink.report(h.unsupported(e,`'${e.type}'`)),g(t,e,s.unknown,n)}}var Vs=new Set(["constructor","prototype","__proto__"]);function Gs(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function Mt(e,n,t,r=false){let s$1=S(e.object,n,t),a=Gs(e);if(a!==null&&Vs.has(a))return t.sink.report(h.forbiddenMember(e,a)),s.unknown;let o=xs(e,s$1,n,t),i=r?null:J(e);if(i!==null&&Rn(i)&&o.t!=="unknown"){let c=U(n,i);if(c!==void 0&&subtype(c,o,t.schemes))return c}return o}function xs(e,n,t,r){if(e.computed){let o=S(e.property,t,r),i=resolveTypeOp(s.index(n,o));return i.t!=="index"?i:(o.t==="literal"&&typeof o.value=="string"&&jt(e,n,o.value,r),s.unknown)}let s$1=e.property.name,a=discover(n,[s$1],r.schemes);return a?a.type:(jt(e,n,s$1,r),s.unknown)}function jt(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(h.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(h.notObject(e,n));}function Ks(e,n,t,r){let s$1=e.arguments[0];if(!s$1){r.sink.report(h.missingArgument(e,"schema",s.unknown));return}if(s$1.type!=="Identifier"){r.sink.report(h.asserterNeedsName(s$1,n));return}let a=s$1.name,o=U(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?h.typeAsValue(s$1,a):h.unknownName(s$1,a));return}if(!i||i.params.length>0){r.sink.report(h.notASchema(s$1,a));return}if(!(Jt(a,r)&&!qs(t,a)))return r.overlay.set(s$1,{type:i.body,scope:t}),i.body}function Jt(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&U(n.env.scope,e)!==void 0}function qs(e,n){for(let t=e;t;t=t.parent)if(Object.prototype.hasOwnProperty.call(t.vars,n))return t.parent===null;return false}function ce(e,n,t){Jt(e,t)&&t.sink.report(h.shadowsSchema(n,e));}function Gn(e,n){let t=W(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function _s(e,n){let t=U(e.scope,n);if(!t)return;let r=Gn(t,e.schemes);return r?W(r,e.schemes):void 0}function Ws(e,n,t,r){let s$1=Gn(S(n[0],t,r),r.schemes),a=n.length>1?S(n[1],t,r):s.undefined;if(s$1){let o=typeDiff(a,s$1,r.schemes);o.length&&r.sink.report(h.propsMismatch(n[1]??e,s$1,formatTypeDiff(o)));}return g(r,e,s.boolean,t)}var Yt="TSLiteSyntheticArg",zs=e=>({type:Yt,schema:e});function Xt(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(c=>c&&c.type!=="SpreadElement")){for(let c of o.elements)r.push(c);continue}let i=W(S(o,n,t),t.schemes);if(i.t==="tuple")for(let c of i.elements)r.push(zs(c));else s={elem:qn(i,o,t),node:a};}return {nodes:r,spread:s}}function Js(e,n,t,r){let s$1=e.arguments,a=On(e.callee);if(a){let p=t.env.accessors?.[a];if(p){let y=yt(s$1);if(y){let f=discover(p,y,t.schemes);return f?f.type:(t.sink.report(h.noSuchMember(e,p,y.join("."))),s.unknown)}return s$1.forEach(f=>S(f,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let p=Ks(e,a,n,t);s$1.length<2&&s$1.length>0&&t.sink.report(h.missingArgument(e,"value",s.unknown));for(let y=1;y<s$1.length;y++){let f=S(s$1[y],n,t);y===1&&p&&freeVars(f).size===0&&!Te(f,p,t.schemes)&&t.sink.report(h.unprovableValue(s$1[y],f,p,e.arguments[0].name));}return p??s.unknown}if(a&&t.env.matchers?.has(a))return Ws(e,s$1,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s$1.forEach(p=>S(p,n,t)),s.any;if(o.t==="overload")return Xs(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(p=>S(p,n,t)),t.sink.report(h.notCallable(e,o)),s.unknown;let i=Xt(s$1,n,t),c=i.nodes.map(p=>Qt(p,n,t)),l=Zt(e),u=!l||er(o,l.length);return u||t.sink.report(h.wrongTypeArgumentCount(e,o.typeParams?.length??0,l.length)),In(e,o,i.nodes,c,n,t,i.spread,r,u?l:void 0)}function Qt(e,n,t){if(Cn(e))return s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=le(),s$1=S(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function In(e,n,t,r,s$1,a,o=null,i,c){let l=m=>{if(!i)return m;let b=substitute(n.returns,m);if(b.t==="fn"&&i.t==="fn"){let B=m,D=Math.min(b.params.length,i.params.length);for(let O=0;O<D;O++)B=unify(b.params[O].type,i.params[O].type,B)??B;return unify(b.returns,i.returns,B)??B}return unify(b,i,m)??m},u=c?na(e,n,c,a):void 0,p=u??l(instantiateLoose(n,r).bindings),y=new Set;t.forEach((m,b)=>{if(Cn(m)){let B=widenType(substitute(n.params[b]?.type??s.any,p));r[b]=Kn(m,s$1,a,B);}else if(m.type==="CallExpression"&&r[b].t==="any")r[b]=S(m,s$1,a,substitute(n.params[b]?.type??s.unknown,p));else if(me(m)){let B=n.params[b]?.type??s.unknown,D=B.t==="var"?B.bound?substitute(B.bound,p):B:substitute(B,p);Ee(D)&&(r[b]=g(a,m,ye(m),s$1));}else if(m.type==="ArrayExpression"||m.type==="ObjectExpression"||m.type==="ConditionalExpression"){let B=n.params[b]?.type??s.unknown,D=substitute(B,p);if(m.type==="ArrayExpression"&&$e(D)){r[b]=_n(m,D,s$1,a);return}let O=B.t==="var"?B.bound?substitute(B.bound,p):void 0:D;O&&dr(O,a.schemes)&&(y.add(b),r[b]=va(m,O,s$1,a,B.t==="var")??r[b]);}});let f=u??l(instantiateLoose(n,r).bindings);u||Ys(e,n,f,a),aa(e,n,r,f,a,t,o),t.forEach((m,b)=>{let B=n.params[b];m.type==="ObjectExpression"&&B&&!B.variadic&&!y.has(b)&&Fn(m,substitute(B.type,f),a);});let N=substitute(n.returns,f);return widenInferred(groundVars(N.t==="union"?normalizeUnion(N.of):N,a.schemes))}var It=new WeakMap;function Ht(e){let n=It.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)$(s.type,t,r);return $(e.returns,t,r),It.set(e,t),t}function $(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":$(e.items,n,t);return;case "union":for(let r of e.of)$(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)$(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)$(r.type,n,t);$(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)$(s.type,n,t);$(r.returns,n,t);}return;case "apply":for(let r of e.args)$(r,n,t);return;case "keyof":$(e.of,n,t);return;case "index":$(e.obj,n,t),$(e.key,n,t);return;case "mapped":$(e.over,n,t),$(e.body,n,t);return;default:return}}function Ys(e,n,t,r){let s=Ht(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let c=substitute(o,t);subtype(i,c,r.schemes)||r.sink.report(h.constraintViolation(e,a,i,c));}}function Xs(e,n,t,r,s){let a=Xt(e.arguments,t,r),o=a.nodes,i=o.map(u=>Qt(u,t,r)),c=Zt(e),l=c?n.signatures.filter(u=>er(u,c.length)):n.signatures;if(c&&!l.length){let u=n.signatures.reduce((p,y)=>Math.max(p,y.typeParams?.length??0),0);return r.sink.report(h.wrongTypeArgumentCount(e,u,c.length)),Ft(e,n.signatures,a,o,i,t,r,s,void 0)}return Ft(e,l,a,o,i,t,r,s,c)}function Ft(e,n,t,r,s$1,a,o,i,c){let l={t:"overload",signatures:n},u=f=>t.spread?ta(f,r.length):ra(f,r.length),p=l.signatures.filter(u);if(p.length>1&&s$1.some(f=>f.t==="any"))for(let f of p){let N=le(),m=In(e,f,r,[...s$1],a,{...o,sink:N},t.spread,i,c);if(!N.hasErrors())return N.all.forEach(b=>o.sink.report(b)),m}let y=l.signatures.find(f=>u(f)&&sa(f,s$1,o));if(!y){let f=l.signatures.filter(u);f.length===1?y=f[0]:l.signatures.length===1&&(y=l.signatures[0]);}return y?In(e,y,r,s$1,a,o,t.spread,i,c):(o.sink.report(h.noMatchingOverload(e,l,s$1)),s.unknown)}function Qs(e,n,t,r){let s$1=U(n,e[0]);if(s$1===void 0)return t.sink.report(h.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(h.noSuchMember(r,s$1,a.join("."))),s.unknown)}function Ce(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let l=false,u=a.map(p=>{let y=s$1(p);return y!==p&&(l=true),y});return l?u:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Qs(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"){Hs(o.name,n,t,r);let l=t.schemes[o.name];if(!l)return s.any;if(Array.isArray(o.args)&&Is(l,o.args,t.schemes))return s.any}let i=false,c={};for(let l of Object.keys(o)){let u=s$1(o[l]);u!==o[l]&&(i=true),c[l]=u;}return i?c:o};return s$1(e)}function Hs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Ce(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Zs(e,n,t,r,s){let a={...t,sink:le(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Ce(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var qe=(e,n,t)=>{let r=An(e);return r===void 0?r:Ce(r,n,t,e)},ea=(e,n,t)=>{let r=Dn(e);return r===void 0?r:Ce(r,n,t,e)},Zt=e=>{let n=e.typeArguments;return n?.length?n:void 0},er=(e,n)=>(e.typeParams?.length??0)===n;function na(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,c)=>a[i]=t[c]);let o=a;for(let[i,c]of Ht(n)){let l=o[i];if(!l)continue;let u=groundVars(substitute(c,o),r.schemes);subtype(l,u,r.schemes)||r.sink.report(h.constraintViolation(e,i,l,u));}return o}function ta(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 ra(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 sa(e,n,t){let{bindings:r}=instantiateLoose(e,n);for(let s$1=0;s$1<e.params.length;s$1++){let a=e.params[s$1];if(a.variadic){let o=substitute(a.type,r),i=o.t==="array"?o.items:s.unknown;for(let c=s$1;c<n.length;c++)if(!subtype(n[c],i,t.schemes))return false;return true}if(s$1>=n.length){if(!a.optional)return false;continue}if(!subtype(n[s$1],substitute(a.type,r),t.schemes))return false}return true}function aa(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=l=>a[l]??e;for(let l=0;l<n.params.length;l++){let u=n.params[l];if(u.variadic){let y=substitute(u.type,r),f=y.t==="array"?y.items:s.unknown;for(let N=l;N<t.length;N++)subtype(t[N],f,s$1.schemes)||s$1.sink.report(h.notAssignable(i(N),t[N],f,s$1.schemes));break}let p=substitute(u.type,r);if(l>=t.length){!u.optional&&!o&&s$1.sink.report(h.missingArgument(e,u.name,p));continue}subtype(t[l],p,s$1.schemes)||s$1.sink.report(h.notAssignable(i(l),t[l],p,s$1.schemes));}let c=n.params.find(l=>l.variadic);if(o){let l=t.length,u=n.params.filter(p=>!p.optional&&!p.variadic).length;if(!(l>=u&&(c||l<n.params.length))){s$1.sink.report(h.spreadArgument(o.node));return}if(c){let p=substitute(c.type,r),y=p.t==="array"?p.items:s.unknown;subtype(o.elem,y,s$1.schemes)||s$1.sink.report(h.notAssignable(o.node,o.elem,y,s$1.schemes));}return}!c&&t.length>n.params.length&&s$1.sink.report(h.excessArgument(i(n.params.length),n.params.length,t.length));}function We(e,n,t){if(e.t==="object"){let r=ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>We(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:resolveTypeOp({t:"intersection",of:r})}if(e.t==="union")return nr(e.of,n,t)}function nr(e,n,t){let r=e.map(s=>We(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length?normalizeUnion(r):void 0}var xn=e=>e.t==="literal"||e.t==="null"||e.t==="undefined"||e.t==="boolean"||e.t==="union"&&e.of.every(xn),$t=new WeakMap;function oa(e,n,t){let r=$t.get(t);if(r)return r;let s=new Set;for(let o of e)if(o.t==="object")for(let i of Object.keys(o.props))s.add(i);let a=new Set;for(let o of s){let c=e.map(u=>We(u,o,n)).filter(u=>u!==void 0);if(!c.some(xn))continue;c.length===e.length&&c.every(u=>equals(u,c[0]))||a.add(o);}return $t.set(t,a),a}var tr=e=>e.type==="Literal"||e.type==="Identifier"||e.type==="TemplateLiteral"||e.type==="MemberExpression"&&!e.computed&&tr(e.object),ia=(e,n)=>e.some(t=>t.t==="object"&&ownProp(t.props,n)?.optional===true);function rr(e,n,t,r,s$1){let a=oa(n,r,s$1),o=new Set;if(!a.size)return {chosen:n,ignored:o};let i=[],c=new Set;for(let p of e.properties){if(p.type!=="Property")continue;let y=p,f=Ae(y);if(f===null||(c.add(f),!a.has(f)||!tr(y.value)))continue;let N=t(y);N&&xn(N)&&i.push([f,N]);}for(let p of a)!c.has(p)&&ia(n,p)&&i.push([p,s.undefined]);let l=n.map(()=>1);for(let[p,y]of i){let f=false;n.forEach((N,m)=>{if(l[m]!==1)return;let b=We(N,p,r);b!==void 0&&(subtype(y,b,r)?f=true:l[m]=2);}),n.forEach((N,m)=>{l[m]===2&&(l[m]=f?0:1);}),f||o.add(p);}let u=n.filter((p,y)=>l[y]===1);return {chosen:u.length?u:n,ignored:o}}function Lt(e,n,t,r,s,a=false){let o={},i={};for(let c of e.properties){let l=c;if(l.type==="SpreadElement"){let N=apparentType(S(l.argument,t,r),r.schemes);if(N.t==="object")for(let[m,b]of Object.entries(N.props))o[m]=b,i[m]=b;continue}let u=l,p=Ae(u),y=p!==null?n(p):void 0,f=y?H(u.value,y,t,r,s):widen(S(u.value,t,r));p!==null&&(o[p]={type:a?f:y??f},i[p]={type:f}),g(r,l,f,t);}return {checked:o,narrowed:i}}function H(e,n,t,r,s$1=false){let a=apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=resolveConditional(a,r.schemes)??a),me(e)?"Literal":e.type){case "Literal":{let i=ye(e);return subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,s$1?Ee(n)?i:widen(Ue(e)):n,t)}case "ArrayExpression":{if($e(a)){let i=_n(e,a,t,r);return subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,i,t)}if(a.t==="array"){let i=[];for(let l of e.elements){if(!l)continue;let u=l;if(u.type==="SpreadElement"){let p=H(u.argument,n,t,r,s$1);p.t==="array"&&i.push(p.items);}else i.push(H(u,a.items,t,r,s$1));}let c=s$1&&i.length>0?s.array(normalizeUnion(i)):n;return g(r,e,c,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let{checked:i,narrowed:c}=Lt(e,p=>We(a,p,r.schemes),t,r,s$1),l=Fn(e,n,r),u={t:"object",props:i};return !l&&!subtype(u,n,r.schemes)&&r.sink.report(h.notAssignable(e,u,n,r.schemes)),g(r,e,s$1?{t:"object",props:c}:n,t)}if(a.t==="union"){let i=a.of.filter(b=>b.t==="object"||b.t==="intersection");if(!i.length)break;let c=e,{chosen:l,ignored:u}=rr(c,i,b=>S(b.value,t,{...r,sink:le()}),r.schemes,n),p=r.sink.all.length,{checked:y,narrowed:f}=Lt(c,b=>nr(u.has(b)?i:l,b,r.schemes),t,r,s$1,true),N=Fn(c,n,r),m={t:"object",props:y};return !N&&r.sink.all.length===p&&!subtype(m,n,r.schemes)&&r.sink.report(h.notAssignable(e,m,n,r.schemes)),g(r,e,s$1?{t:"object",props:f}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Kn(e,t,r,a);return subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let c=V(i.test,t,r.schemes),l=H(i.consequent,n,L(t,c.then),r,s$1),u=H(i.alternate,n,L(t,c.else),r,s$1);return g(r,e,s$1?normalizeUnion([l,u]):n,t)}case "Placeholder":return g(r,e,n,t)}let o=S(e,t,r);return subtype(o,n,r.schemes)||r.sink.report(h.notAssignable(e,o,n,r.schemes)),g(r,e,o,t)}function Kn(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=C=>a?.length?{...C,typeParams:a}:C,i={},c=new Map,l=e.params.map((C,I)=>{let T=C,ue=s$1?.params[I]?.type;if(T.type==="RestElement"){let oe=T.argument,_=qe(oe,n,t)??(s$1?.params[I]?.variadic?ue:void 0)??s.array(s.unknown),X=G(oe);return X?(ce(X,oe,t),i[X]=_):se(oe,_,i,n,t),t.overlay.set(oe,{type:_,scope:n}),t.overlay.set(T,{type:_,scope:n}),{name:X??`arg${I}`,type:_,variadic:true}}if(T.type==="AssignmentPattern"){let oe=T.left,sn=qe(oe,n,t)??ue;se(T,sn??s.unknown,i,n,t);let _=G(oe),X=_?i[_]:void 0,an=sn??X??s.unknown,Qn=an.t==="unknown"?an:normalizeUnion([an,s.undefined]);return _&&X&&(X.t==="union"||X.t==="boolean")&&c.set(_,X),t.overlay.set(T,{type:Qn,scope:n}),{name:_??`arg${I}`,type:Qn,optional:true}}let ke=G(T),Yn=qe(T,n,t),Re=Yn??ue??s.unknown,Xn=T.type==="Identifier"&&(!!T.optional||Yn===void 0&&!!s$1?.params[I]?.optional),we=Xn&&Re.t!=="unknown"?normalizeUnion([Re,s.undefined]):Re;return ke?(ce(ke,T,t),i[ke]=we,(we.t==="union"||we.t==="boolean")&&c.set(ke,we)):T.type!=="Identifier"&&se(T,Re,i,n,t),t.overlay.set(T,{type:we,scope:n}),Xn?{name:ke??`arg${I}`,type:we,optional:true}:{name:ke??`arg${I}`,type:Re}}),u=false;l.forEach((C,I)=>{C.optional?u=true:!C.variadic&&u&&t.sink.report(h.requiredAfterOptional(e.params[I]));});let p=Ne(n,i,t),y=e.body,f=ea(e,n,t),N=e.returnGuard,m=N?{param:N.param,type:Ce(N.type,n,t,e)}:void 0;if(m){let C=l[m.param];C&&!subtype(m.type,C.type,t.schemes)&&t.sink.report(h.notAssignable(e,m.type,C.type,t.schemes));}let b=C=>m?{...C,guard:m}:C;if(y.type!=="BlockStatement"&&f){let C=e.async?Ve(f):f;H(y,C,p,t);let I=e.async?Ge(f):f;return g(t,e,b(o({t:"fn",params:l,returns:I})),n)}let B=f??s$1?.returns,D=B&&e.async?Ve(B):B,O=y.type==="BlockStatement"?g(t,y,ar(y,p,t,new Set(Object.keys(i)),c,D),p):S(y,p,t),Be=e.async?Ge(O):O;if(f){let C=e.async?Ve(f):f,I=e.async?O:Be;subtype(I,C,t.schemes)||t.sink.report(h.notAssignable(y,Be,f,t.schemes));let T=e.async?Ge(f):f;return g(t,e,b(o({t:"fn",params:l,returns:T})),n)}return g(t,e,o({t:"fn",params:l,returns:widenType(Be)}),n)}function De(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?De(n.argument):De(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?De(n.argument):De(n):[]);case "AssignmentPattern":return De(e.left);default:return []}}function sr(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>De(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?sr(e.declaration):[]}function ar(e,n,t,r=new Set,s$1,a){let{returns:o}=nn(e.body,n,t,r,s$1,a),i=!x(e);return o.length===0?i?s.void:s.union([]):normalizeUnion(i?[...o,s.undefined]:o)}var la=[s.literal(true),s.literal(false)];function ca(e){return e.t==="union"?e.of:e.t==="boolean"?la:[e]}function or(e,n,t){let r=ca(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 ir(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 ua(e){if(e.type!=="ExpressionStatement")return null;let n=e.expression;return n.type!=="AssignmentExpression"?null:J(n.left)}function Se(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=Se(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=ir(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=lr(e,n,t);if(r.size===0)return {types:n,exits:x(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:x(e)}}case "TryStatement":{let r=e,s=[],a=Se(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=Se(r.handler.body,n,t);i.exits||s.push(i.types);}let o=pa(n,s);return r.finalizer&&(o=Se(r.finalizer,o,t).types),{types:o,exits:x(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function lr(e,n,t){let r=Se(e.consequent,n,t),s=e.alternate?Se(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let c=[];r.exits||c.push(r.types.get(i)??n.get(i)),s.exits||c.push(s.types.get(i)??n.get(i)),c.length&&o.set(i,normalizeUnion(c));}return o}function cr(e,n){let t=new Map,r=s=>{let a=U(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 pa(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 da(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=cr(n,t),s=Se(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return L(n,a)}function nn(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!fa(e))return Ut(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[c,l]of s)t.declaredMut.set(c,l);try{return Ut(e,n,t,r,a)}finally{t.evolving.clear();for(let c of o)t.evolving.add(c);t.declaredMut.clear();for(let[c,l]of i)t.declaredMut.set(c,l);}}function fa(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 Ut(e,n,t,r,s){let a=n,o=[];for(let i of e){let c=i;for(let l of sr(c))r.has(l.name)?t.sink.report(h.cannotRedeclare(l,l.name)):r.add(l.name);if(c.type==="VariableDeclaration")a=tn(c,a,t);else if(c.type!=="ImportDeclaration")if(c.type==="ExportNamedDeclaration"){let l=c;if(l.declaration?.type==="VariableDeclaration")a=tn(l.declaration,a,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=S(l.declaration,a,t),p=G(l.declaration.id);p&&(a=Ne(a,{[p]:u},t));}else for(let u of l.specifiers)U(a,u.local.name)===void 0&&t.sink.report(h.unknownName(u.local,u.local.name));}else if(c.type==="ExportDefaultDeclaration")S(c.declaration,a,t);else if(c.type==="FunctionDeclaration"){let l=S(c,a,t),u=G(c.id);u&&(a=Ne(a,{[u]:l},t));}else if(c.type==="IfStatement"){let l=c,u=t.evolving.size||t.declaredMut.size?cr(a,t):null;if(o.push(...Y(c,a,t,s)),u&&u.size){let p=lr(l,u,t);p.size&&(a=L(a,Object.fromEntries(p)));}!l.alternate&&x(l.consequent)&&(a=L(a,V(l.test,a,t.schemes).else));}else {o.push(...Y(c,a,t,s));let l=ir(c,t);l&&(a=L(a,{[l.name]:l.type}));let u=ua(c);u!==null?a=Tn(a,u,t.schemes):(c.type==="BlockStatement"||c.type==="TryStatement")&&(a=da(c,a,t));}}return {scope:a,returns:o}}function Y(e,n,t,r){switch(e.type){case "ReturnStatement":{let s$1=e.argument,a=s$1?r?(H(s$1,r,n,t),r):S(s$1,n,t):s.unknown;return g(t,e,a,n),[a]}case "IfStatement":{let s$1=e;S(s$1.test,n,t);let a=V(s$1.test,n,t.schemes),o=Y(s$1.consequent,L(n,a.then),t,r);return s$1.alternate&&o.push(...Y(s$1.alternate,L(n,a.else),t,r)),g(t,e,s.unknown,n),o}case "BlockStatement":{let{returns:s$1}=nn(e.body,n,t,void 0,void 0,r);return g(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,a=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?a=tn(s$1.init,a,t):S(s$1.init,a,t)),s$1.test&&S(s$1.test,a,t),s$1.update&&S(s$1.update,a,t);let o=Y(s$1.body,a,t,r);return g(t,e,s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s$1=e,a=S(s$1.right,n,t),o=e.type==="ForOfStatement"?qn(a,s$1.right,t):s.string,i=ft(s$1.left);i&&ce(i,mt(s$1.left),t);let c=i?Ne(n,{[i]:o},t):n,l=Y(s$1.body,c,t,r);return g(t,e,s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return g(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&S(s$1,n,t),g(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,a=Y(s$1.block,n,t,r);if(s$1.handler){let o=s$1.handler.param,i=o?G(o):null;i&&o&&ce(i,o,t);let c=i?Ne(n,{[i]:s.unknown},t):n;a.push(...Y(s$1.handler.body,c,t,r));}return s$1.finalizer&&a.push(...Y(s$1.finalizer,n,t,r)),g(t,e,s.unknown,n),a}case "SwitchStatement":{let s$1=e;S(s$1.discriminant,n,t);let a=n,o=[];for(let i of s$1.cases){i.test&&S(i.test,a,t);let c=nn(i.consequent,a,t,void 0,void 0,r);a=c.scope,o.push(...c.returns);}return g(t,e,s.unknown,n),o}default:return S(e,n,t),[]}}function ma(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function qn(e,n,t){let r=W(e,t.schemes);switch(r.t){case "array":return r.items;case "tuple":return r.elements.length?normalizeUnion([...r.elements]):s.unknown;case "string":return s.string;case "literal":if(typeof r.value=="string")return s.string;break;case "unknown":case "any":return s.unknown;case "union":return normalizeUnion(r.of.map(s=>qn(s,n,t)));}return t.sink.report(h.notIterable(n,e)),s.any}function ya(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function ha(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 ga(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function se(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=qe(e,r,s$1)??n;ce(e.name,e,s$1),t[e.name]=a,s$1.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=S(a.right,r,s$1);n.t!=="unknown"&&!subtype(o,n,s$1.schemes)&&s$1.sink.report(h.notAssignable(a.right,o,n,s$1.schemes));let i=widenType(o),{type:c}=withoutUndefined(n),l=c.t==="unknown"?i:normalizeUnion([c,i]),u=a.left;if(u.type==="Identifier"){let p=u.name;ce(p,u,s$1),t[p]=l,s$1.overlay.set(u,{type:l,scope:r});}else se(u,l,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){se(o.argument,ha(n,a),t,r,s$1);continue}let i=o,c=Ae(i);c!=null&&a.push(c);let l=c!=null?ma(n,c,s$1):s.unknown;se(i.value,l,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?se(i.argument,ga(n,o),t,r,s$1):se(i,ya(n,o),t,r,s$1);});return}}}function Fn(e,n,t){let r=W(n,t.schemes),s=r.t==="union"?apparentType(r,t.schemes):r,a=s.t==="union"?s.of.map(l=>W(l,t.schemes)):[s],i=(r.t==="union"?rr(e,a.filter(l=>l.t==="object"||l.t==="intersection"),l=>t.overlay.get(l.value)?.type,t.schemes,n).chosen:a).filter(l=>l.t==="object"&&(!l.index||l.index.key==="number"));if(!i.length||i.some(l=>Object.keys(l.props).length===0&&!l.index))return false;let c=false;for(let l of e.properties){if(l.type==="SpreadElement")continue;let u=l;if(u.computed)continue;let p=Ae(u);if(p===null)continue;i.filter(f=>p in f.props||f.index?.key==="number"&&isNumericLiteralName(p)).length||(t.sink.report(h.excessProperty(u.key,p,n)),c=true);}return c}function tn(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=G(a);o&&ce(o,a,t);let i=qe(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,Vt(o,i,t)):(r[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(h.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let c=i??(s$1.init.type==="ArrowFunctionExpression"?gt(s$1.init):null),l=o&&c?Ne(n,{[o]:c},t):n,u,p=null;i?(H(s$1.init,i,l,t),u=i,p=i,(i.t==="union"||i.t==="boolean")&&me(s$1.init)&&(u=or(i,ye(s$1.init),t.schemes))):(u=S(s$1.init,l,t),e.kind!=="const"&&(u=widenLiteral(u)),p=u),g(t,s$1,u,n),o?(r[o]=u,e.kind!=="const"&&p&&Vt(o,p,t)):se(a,u,r,n,t);}return g(t,e,s.unknown,n),Ne(n,r,t)}function Ne(e,n,t){let r=ie(e,n);for(let s of Object.keys(n))r=Tn(r,s,t.schemes);return r}function Vt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Sa(e,n,t){let r=S(e.left,n,t),s$1=S(e.right,n,t),a=e.operator,o=Pe.get(a);if(!o)return s.boolean;if(o.category==="additive"){if(be(r)||be(s$1))return ge(r,t.schemes)||ge(s$1,t.schemes)?s.string:s.number;if(ge(r,t.schemes)&&ge(s$1,t.schemes))return s.string;if(Ke(r,t.schemes)&&Ke(s$1,t.schemes))return s.number;if(ge(r,t.schemes)||ge(s$1,t.schemes)){let c=ge(r,t.schemes)?s$1:r;return t.sink.report(h.implicitCoercion(e,r,s$1,ur(c,t.schemes))),s.string}return t.sink.report(h.operatorNotApplicable(e,"+",r,s$1)),s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ke(r,t.schemes)||t.sink.report(h.arithmeticOperand(e.left,"left")),Ke(s$1,t.schemes)||t.sink.report(h.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!be(r)&&!be(s$1)){let i=apparentType(r,t.schemes),c=apparentType(s$1,t.schemes),l=subtype(i,s.number,t.schemes),u=subtype(c,s.number,t.schemes);l&&u||!l&&!u&&(subtype(i,c,t.schemes)||subtype(c,i,t.schemes))||t.sink.report(h.operatorNotApplicable(e,a,r,s$1));}return Nn(o.result)}var be=e=>e.t==="any"||e.t==="unknown",Ke=(e,n)=>be(e)||subtype(apparentType(e,n),s.number,n),ge=(e,n)=>!be(e)&&subtype(apparentType(e,n),s.string,n),ba=s.union([s.string,s.number,s.boolean,s.null,s.undefined]),ur=(e,n)=>be(e)||subtype(apparentType(e,n),ba,n),Gt={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},Mn=e=>e.t==="null"||e.t==="undefined";function Na(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=>!Mn(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!Mn(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>Mn(a)?[a]:a.t==="literal"?a.value?[]:[a]:Gt[a.t]?[Gt[a.t]]:[]);return normalizeUnion([...s$1,t])}var Ba=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function ka(e,n,t){let r=S(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 Ba;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function wa(e,n,t){let r={},s,a=[],o=[],i=false,c=false;for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){let m=W(S(u.argument,n,t),t.schemes);if(m.t==="object"){for(let b in m.props)r[b]=m.props[b];m.index&&(s={key:m.index.key,type:m.index.value});}continue}let p=u,y=S(p.value,n,t),f=widen(y);if(g(t,u,y,n),p.computed){let m=W(S(p.key,n,t),t.schemes);m.t==="literal"&&typeof m.value=="string"?(r[m.value]={type:f},a.push(f)):m.t==="literal"&&typeof m.value=="number"?(r[String(m.value)]={type:f},a.push(f),o.push(f)):m.t==="string"?(i=true,a.push(f)):m.t==="number"&&(c=true,a.push(f),o.push(f));continue}let N=Ae(p);N!==null&&(r[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}return i?s={key:"string",type:normalizeUnion(a)}:c&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function pr(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=W(S(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(widen(S(a,n,t)));}return s.array(r.length?normalizeUnion(r):s.unknown)}function _n(e,n,t,r){let s$1=W(n,r.schemes),a=e.elements,o=a.every(c=>c&&c.type!=="SpreadElement"),i=(c,l)=>c.type==="ArrayExpression"?_n(c,l,t,r):Ee(l)?S(c,t,r):widen(S(c,t,r));if(s$1.t==="tuple"&&o){let c=s$1.elements.length,l=restIndex(s$1),u=l<0?0:c-l-1,p=f=>{if(l<0||f<l)return s$1.elements[f];let N=a.length-f;return N<=u?s$1.elements[c-N]:s$1.elements[l]},y=a.map((f,N)=>{let m=p(N);return m?i(f,m):widen(S(f,t,r))});return g(r,e,{t:"tuple",elements:y},t)}if(s$1.t==="array"){let c=[];for(let l of a){if(!l)continue;let u=l;if(u.type==="SpreadElement"){S(u.argument,t,r);continue}c.push(i(u,s$1.items));}return g(r,e,s.array(c.length?normalizeUnion(c):s.unknown),t)}return pr(e,t,r)}function $n(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=>$n(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if(isExprMarker(s$1)){let o;try{o=fromJson(s$1);}catch{return t.sink.report(h.unsupported(r,`'${EXPR_MARKER}: ${String(s$1[EXPR_MARKER])}'`)),s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:$n(s$1[o],n,t,r)};return {t:"object",props:a}}function dr(e,n){let t=apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":t.t==="union"?t.of.some(r=>dr(r,n)):false}function va(e,n,t,r,s){let a=le(),o=H(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=c=>r.sink.all.some(l=>l.node===c.node&&l.code===c.code&&l.message===c.message);for(let c of a.all)i(c)||r.sink.report(c);return a.hasErrors()?n:o}var Ea=(e,n)=>({...e,typeAnnotation:n}),Aa=(e,n)=>({...e,returnType:n}),Da=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function zn(e,n){return e.get(n)?.type}function Oa(e,n){return e.get(n)?.scope}function Ca(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function Ra(e,n){let t=e.get(n)?.scope;return t?[...on(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Ta=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Pa(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 rn(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(Ta)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=zn(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=rn(e,n+2,t,r),c=Pa(a);return !i||!c?void 0:discover(i,[c],r)?.type}case "ArrayExpression":{let o=rn(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=Pe.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return s.number;let i=a.left===s$1?a.right:a.left,c=zn(t,i);return c&&c.t!=="any"&&c.t!=="unknown"?c:void 0}case "LogicalExpression":return rn(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function Ma(e,n){return e.filter(t=>t.node===n)}function $a(){let e=new WeakMap;return {stamp:(n,t)=>(e.set(n,t),n),get:n=>e.get(n)}}var La=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function Jn(e,n,t,r){if(isExprMarker(e)){let s=r.island?r.island(e,n):fromExprMarker(e);return t.stamp(s,n)}return Array.isArray(e)?t.stamp(ae.arrayExpression(e.map((s,a)=>Jn(s,r.child(n,a),t,r))),n):La(e)?t.stamp(ae.objectExpression(Object.entries(e).map(([s,a])=>{let o=r.child(n,s),i=t.stamp(ae.literal(s),o);return t.stamp(ae.property(i,Jn(a,o,t,r),false,false),o)})),n):t.stamp(ae.literal(e),n)}function Ua(e){let n=new WeakMap,t=[e];for(;t.length>0;){let r=t.pop();forEachChild(r,s=>{n.set(s,r),t.push(s);});}return n}function Va(e,n,t,r){let s=Ua(e),a=new Map,o=c=>{let l=a.get(c);return l===void 0&&(l=createPositionMap(c),a.set(c,l)),l},i=c=>{let l=c;for(;l!==void 0;){let u=t.get(l);if(u!==void 0)return u;l=s.get(l);}return r.fallback};return n.map(c=>{let l=i(c.node),u=r.textOf?.(l),p=u===void 0?void 0:yr(o(u),c.node.loc);return {diagnostic:c,anchor:l,...p?{span:p}:{}}})}function yr(e,n){if(!n?.start)return;let t=a=>e.offsetAt({line:a.line-1,column:a.column}),r=t(n.start),s=n.end?t(n.end):r;return {from:r,to:s<r?r:s}}function Ga(e,n){return yr(createPositionMap(e),n)}export{Pe as BINARY_OP,bn as BINARY_OPS,rt as FUNCTION_KINDS,$r as LOGICAL_OPS,lt as UNARY_OPS,Va as anchorDiagnostics,Ea as annotate,Aa as annotateReturn,Da as asExpression,Lr as binaryOpsProducing,pn as calleeAllowlist,un as capabilityNodes,zt as check,ie as childScope,Jr as collectBindings,En as collectMutations,wn as collectUnused,_s as componentProps,Gn as componentPropsOf,rn as contextualTypeAt,$a as createAnchors,Br as createEnv,le as createSink,h as diag,Ma as diagnosticsAt,$s as extractModuleType,Ir as fromCapability,cn as guard,Ye as guardsFromCompiled,U as lookup,Jn as lowerValue,P as makeDiagnostic,gn as maxArgs,fn as maxCallNesting,yn as maxDepth,dn as maxFunctionNesting,Je as maxNestingOf,hn as maxNodes,Ca as memberCompletions,mn as memberDepth,Nn as opResultSchema,kr as resolveNamed,wr as resolveScheme,Sn as resultType,Zn as rootScope,Oa as scopeAt,Ra as scopeCompletions,Ga as spanOf,zn as typeAt,Ur as unaryOpsProducing,on as visibleNames};
|
|
1
|
+
import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,freeVars,instantiateLoose,widenType,substitute,widenInferred,groundVars,resolveConditional,widen,withoutUndefined,isNumericLiteralName,restIndex,schemeArity,bindScheme,baseLiteralType,comparable,unify,equals,ownProp,typeFeatures}from'@tslite/types';export*from'@tslite/types';import {rootScope,childScope,lookup,visibleNames,TSLiteError,walk,desugarJSX,isExprMarker,EXPR_MARKER,fromExprMarker,childrenOf,VisitorKeys,forEachChild}from'@tslite/ast';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/json';import*as ae from'@tslite/ast/builders';import {createPositionMap}from'@tslite/language-service';var Zn=(e={})=>rootScope(e),ie=(e,n)=>childScope(e,n),U=(e,n)=>lookup(e,n),on=e=>{let n=visibleNames(e);for(let t of n.keys())t.includes(".")&&n.delete(t);return n},Hn=new Set(["types","schemes","accessors","asserters","matchers","modules"]),Br=(e={},n)=>{let t=n??{},r=Object.keys(t).filter(s=>!Hn.has(s));if(r.length>0)throw new TSLiteError("invalid-env-options",`createEnv: unknown option(s) ${r.map(s=>`'${s}'`).join(", ")} \u2014 expected ${[...Hn].join(", ")}. Named types go under 'types'.`,{unknown:r});return {scope:Zn(e),types:t.types??{},schemes:t.schemes??{},accessors:t.accessors??{},asserters:t.asserters??new Set,matchers:t.matchers??new Set,modules:t.modules??{}}},kr=(e,n)=>e.types[n],wr=(e,n)=>e.schemes[n];var et={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","required-after-optional":"type","not-iterable":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","unprovable-value":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","narrowing-cast-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},k=(e,n,t)=>({code:e,kind:et[e],severity:"error",node:n,message:t}),P=(e,n,t,r="error")=>({code:e,kind:et[e],severity:r,node:n,message:t}),h={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(l=>l.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=k("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),c=s.filter(l=>l.kind==="missing"&&l.path.length===1).map(l=>({name:l.path[0],type:l.expected}));return c.length?{...i,data:{kind:"missing-properties",properties:c}}:i},unknownName:(e,n)=>k("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>k("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>k("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>k("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>k("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>k("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),notASchema:(e,n)=>k("not-a-schema",e,`'${n}' refers to a value, but no type named '${n}' is declared. An asserter needs a schema that is both a value in scope and a declared type.`),typeAsValue:(e,n)=>k("type-as-value",e,`'${n}' only refers to a type, but is being used as a value here. Types are erased at runtime: register '${n}' as a value in scope for the asserter to prove it.`),asserterNeedsName:(e,n)=>k("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>k("shadows-schema",e,`'${n}' shadows the schema of the same name: an asserter would type against the declared schema but prove against this value at runtime. Rename the binding.`),unknownModule:(e,n)=>k("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>k("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>k("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>k("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>k("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>k("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>k("not-iterable",e,`Type '${format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>k("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>k("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>k("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>k("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>k("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),genericTypeArity:(e,n,t,r)=>k("wrong-type-argument-count",e,r===0?`Type '${n}' is not generic.`:t===r?`Generic type '${n}' requires ${r} type argument${r===1?"":"s"}.`:`Generic type '${n}' requires between ${t} and ${r} type arguments.`),forbiddenMember:(e,n)=>k("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>P("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>k("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>k("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>k("cast-unsound",e,`Conversion of type '${format(n)}' to type '${format(t)}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.`),unprovableValue:(e,n,t,r)=>k("unprovable-value",e,`A value of type '${format(n)}' can never satisfy '${r}' (${format(t)}): the types do not overlap, so this proof can only fail at runtime.`),arithmeticOperand:(e,n)=>k("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>k("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...k("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${format(n)}' and '${format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...k("implicit-coercion",e,`Cannot convert '${format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function le(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Te(e,n,t){let r=baseLiteralType(e);return comparable(n,widenType(r),t)||comparable(r,n,t)}function tt(e,n,t){return subtype(e,n,t)}function cn(e,n,t={}){return n.flatMap(r=>r(e,t))}function pe(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var Mr=e=>Array.isArray(e)?e:[e],rt=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function un(e,n="error"){return t=>{let r=[];return pe(t,s=>{let a=nodeViolation(s,e);a&&r.push(P("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function st(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return pe(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let c of [o.typeAnnotation,o.returnType]){if(!c)continue;let l=typeFeatureViolations(typeFeatures(c,i),t);l.length&&s.push(P("type-feature-not-allowed",a,`authoring type feature${l.length>1?"s":""} '${l.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function R(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=>R(t.type,n))||!!e.index&&R(e.index.value,n);case "array":return R(e.items,n);case "tuple":return e.elements.some(t=>R(t,n));case "union":case "intersection":return e.of.some(t=>R(t,n));case "fn":return e.params.some(t=>R(t.type,n))||R(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>R(r.type,n))||R(t.returns,n));case "keyof":return R(e.of,n);case "index":return R(e.obj,n)||R(e.key,n);case "mapped":return R(e.over,n)||R(e.body,n);case "conditional":return R(e.check,n)||R(e.extends,n)||R(e.then,n)||R(e.else,n);case "returnType":case "parameters":return R(e.fn,n);case "apply":return e.args.some(t=>R(t,n));default:return false}}function at(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return pe(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&R(o)){r.push(P("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function ot(e,n="error"){return (t,r)=>{let s=r.overlay;if(!e.typeStrict||!s)return [];let a=r.schemes??{},o=[];return pe(t,i=>{if(i.type!=="TSAsExpression")return;let{expression:c}=i,l=s.get(c)?.type,u=s.get(i)?.type;!l||!u||R(u)||!Te(l,u,a)||tt(l,u,a)||o.push(P("narrowing-cast-not-allowed",i,`A cast may only widen under 'strict': '${format(l)}' is not assignable to '${format(u)}'. Narrow with a type guard, or prove the value with an asserter.`,n));}),o}}function pn(e,n="error"){let t=new Set(e);return r=>{let s=[];return pe(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(P("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(P("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Je(e,n,t={}){let r=new Set(Mr(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],c=(l,u)=>{let p=r.has(l.type),y=p?u+1:u;p&&y>n&&i.push(P("too-deep",l,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let f of childrenOf(l))c(f,y);};return c(o,0),i}}var dn=(e=3,n="error")=>Je(rt,e,{hint:"use a pipe instead of nesting functions",severity:n}),fn=(e,n="error")=>Je("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),mn=(e,n="error")=>Je("MemberExpression",e,{severity:n});function yn(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(P("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 hn(e,n="error"){return t=>{let r=0;return pe(t,()=>{r++;}),r>e?[P("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function gn(e,n="error"){return t=>{let r=[];return pe(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(P("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function Sn(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[P("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function Ye(e){let n=[un(e),st(e),at(e),ot(e)];return e.hostAllow!=="*"&&n.push(pn([...e.hostAllow])),n}function Ir(e){return Ye(compileProfile(e))}var bn=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],Pe=new Map(bn.map(e=>[e.op,e])),it={number:s.number,boolean:s.boolean,string:s.string},Nn=e=>it[e],lt=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],Fr={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},$r=[{op:"&&"},{op:"||"},{op:"??"}];function Lr(e,n={}){return bn.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(it[t.result],e,n))}function Ur(e,n={}){return lt.filter(t=>subtype(Fr[t.result],e,n))}var de=e=>({bindings:new Map,parent:e}),ut=e=>e.charCodeAt(0)===95;function Qe(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 je(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)je(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&He(n,r);return}for(let r of Object.keys(t))je(t[r],n);}function pt(e,n){let t=e;je(t.typeAnnotation,n),je(t.returnType,n);}function He(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function ee(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;pt(e,n),Qe(n,t,o,e,r,s||a&&ut(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],c=!!i&&i.type==="RestElement";o.forEach((l,u)=>{let p=c&&u<o.length-1;if(l.type==="RestElement")ee(l.argument,n,t,r,s,false);else {let y=l;y.computed&&v(y.key,n,t),ee(y.value,n,t,r,s||p,!y.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;ee(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":ee(e.left,n,t,r,s,a);return;case "RestElement":ee(e.argument,n,t,r,s,true);return;default:return}}function Me(e,n,t){if(e)switch(e.type){case "AssignmentPattern":v(e.right,n,t),Me(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)Me(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&Me(r,n,t);return;case "RestElement":Me(e.argument,n,t);return;default:return}}function ct(e,n,t,r){for(let s of e.declarations)ee(s.id,n,t,"local",r,false),v(s.init,n,t);}function Bn(e,n,t){let r=e,s=de(n),a=r.params??[];for(let o of a)ee(o,s,t,"parameter",false,true);for(let o of a)Me(o,s,t);v(r.body,s,t);}function v(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(pt(e,n),e.type){case "Identifier":He(n,e.name);return;case "MemberExpression":{let r=e;v(r.object,n,t),r.computed&&v(r.property,n,t);return}case "Property":{let r=e;r.computed&&v(r.key,n,t),v(r.value,n,t);return}case "Program":case "BlockStatement":{let r=de(n);for(let s of e.body??[])v(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":Bn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Qe(n,t,r.name,r,"local",false),Bn(e,n,t);return}case "CatchClause":{let r=e,s=de(n);ee(r.param,s,t,"local",true,false),v(r.body,s,t);return}case "SwitchStatement":{let r=e;v(r.discriminant,n,t);let s=de(n);for(let a of r.cases){v(a.test,s,t);for(let o of a.consequent??[])v(o,s,t);}return}case "ForStatement":{let r=e,s=de(n);v(r.init,s,t),v(r.test,s,t),v(r.update,s,t),v(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;v(r.right,n,t);let s=de(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)ee(o.id,s,t,"local",false,true);else v(a,s,t);v(r.body,s,t);return}case "VariableDeclaration":ct(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Qe(n,t,s.name,s,"import",ut(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")ct(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Qe(n,t,a.name,a,"local",true),Bn(s,n,t);}else v(s,n,t);}else for(let s of r.specifiers)He(n,s.local.name);return}case "TSAsExpression":v(e.expression,n,t);return;case "TSTypeAliasDeclaration":je(e.typeAnnotation,n);return;case "JsonExpression":kn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;dt(r.name,n);for(let s of r.attributes??[])v(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":v(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)v(i,n,t);else v(o,n,t);}return}}}function dt(e,n,t){e&&(e.type==="JSXIdentifier"?He(n,e.name):e.type==="JSXMemberExpression"&&dt(e.object,n));}function kn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)kn(s,n,t);return}let r=e;if(isExprMarker(r)){try{v(fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))kn(r[s],n,t);}function wn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};v(e,de(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(h.unusedName(s.node,s.name));return r}var qr=new Set(["const","import"]),Ie=e=>({binds:new Map,parent:e});function _r(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function fe(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?fe(n.argument):fe(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?fe(n):[]);case "AssignmentPattern":return fe(e.left);case "RestElement":return fe(e.argument);default:return []}}var Ze=(e,n,t)=>{for(let r of fe(n))e.binds.set(r.name,t);};function vn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of fe(e))vn(a,n,t);return}let r=e.name,s=_r(n,r);s&&qr.has(s)&&(t.invalid.add(e),t.out.push(h.assignToConst(e,r,s==="import"?"import":"const")));}function F(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;vn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{vn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ie(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ie(n);for(let a of r.params??[])Ze(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ie(n);Ze(s,r.param,"param"),F(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)Ze(s,o.id,a.kind);else a&&F(a,s,t);F(r.right,n,t),F(r.test,s,t),F(r.update,s,t),F(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)F(s.init,n,t),Ze(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&&F(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":F(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)F(i,n,t);else F(o,n,t);}return}}}function En(e){let n={out:[],invalid:new WeakSet};return F(e,Ie(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var Fe=e=>({decls:new Map,parent:e});function zr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function ve(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ve(n.argument):ve(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ve(n):[]);case "AssignmentPattern":return ve(e.left);case "RestElement":return ve(e.argument);default:return []}}var en=(e,n)=>{for(let t of ve(n))e.decls.set(t.name,t);};function j(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=zr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;j(r.object,n,t),r.computed&&j(r.property,n,t);return}case "Property":{let r=e;r.computed&&j(r.key,n,t),j(r.value,n,t);return}case "Program":case "BlockStatement":{let r=Fe(n);for(let s of e.body??[])j(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=Fe(n);for(let o of r.params??[])en(a,o);j(r.body,a,t);return}case "CatchClause":{let r=e,s=Fe(n);en(s,r.param),j(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Fe(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)en(s,o.id);else a&&j(a,s,t);j(r.right,n,t),j(r.test,s,t),j(r.update,s,t),j(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)en(n,r.id),j(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":j(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)j(i,n,t);else j(o,n,t);}return}}}function Jr(e){let n=new WeakMap;return j(e,Fe(void 0),n),n}var An=e=>e.typeAnnotation,Dn=e=>e.returnType,G=e=>e.type==="Identifier"?e.name:null,ft=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?G(n.id):null}return G(e)},mt=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Ae=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function yt(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function On(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=On(n.object);return t===null?null:`${t}.${n.property.name}`}return null}var Le=e=>{if(e.type!=="TemplateLiteral")return null;let n=e;if(n.expressions.length!==0||n.quasis.length!==1)return null;let{cooked:t,raw:r}=n.quasis[0].value;return t??r},me=e=>e.type==="Literal"||Le(e)!==null;function Ue(e){let n=Le(e);if(n!==null)return {t:"literal",value:n,fresh:true};let t=e;if(t.regex||t.bigint)return s.unknown;let r=t.value;return r===null?s.null:r===void 0?s.undefined:typeof r=="string"||typeof r=="number"||typeof r=="boolean"?{t:"literal",value:r,fresh:true}:s.unknown}var ye=e=>{let n=Le(e);if(n!==null)return s.literal(n);let t=e.value;return t===null?s.null:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?s.literal(t):Ue(e)},Cn=e=>e.type==="ArrowFunctionExpression",ht=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Ve=e=>ht(e)?e.args[0]:e,Ge=e=>ht(e)?e:s.promise(e);function $e(e){return e.t==="tuple"?true:e.t==="array"?$e(e.items):e.t==="union"?e.of.some($e):false}function Ee(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Ee(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Ee(e.bound):false}var W=(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 gt(e){let n=Dn(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:G(r)??`arg${s$1}`,type:An(r)??s.unknown})),returns:e.async?Ge(n):n}:null}var te={then:{},else:{}};function J(e){if(e.type==="Identifier")return e.name;if(e.type!=="MemberExpression")return null;let n=e;if(n.optional)return null;let t=J(n.object);return t===null?null:!n.computed&&n.property.type==="Identifier"?`${t}.${n.property.name}`:n.computed&&n.property.type==="Literal"&&typeof n.property.value=="string"?`${t}.${n.property.value}`:null}var Rn=e=>e.includes(".");function Dt(e,n,t){let r=U(e,n);return r!==void 0?r:Ot(e,n,t)}var re=(e,n,t)=>{let r=Dt(e,n,t);return r===void 0?void 0:apparentType(r,t)};function Ot(e,n,t){let r=n.lastIndexOf(".");if(r<0)return;let s=Dt(e,n.slice(0,r),t);if(s!==void 0)return discover(s,[n.slice(r+1)],t)?.type}function Zr(e,n){let t=n+".",r=new Set;for(let s=e;s;s=s.parent)for(let a of Object.keys(s.vars))(a.startsWith(t)||a===n)&&Rn(a)&&r.add(a);return [...r].sort((s,a)=>s.length-a.length)}function Tn(e,n,t){let r=Zr(e,n);if(!r.length)return e;let s$1={};for(let a of r)s$1[a]=Ot(ie(e,s$1),a,t)??s.unknown;return ie(e,s$1)}var Ct=new Set(["string","number","boolean","undefined","function","object"]),St={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function Rt(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 es=s.literal(true),ns=s.literal(false),Q=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[es,ns]:[e];function bt(e,n){let t=e,r=n;if(e.type==="UnaryExpression"&&t.operator==="typeof"&&n.type==="Literal"&&typeof r.value=="string"){let s=J(t.argument);if(s!==null)return {name:s,tag:r.value}}return null}function ts(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=Q(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function rs(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=Q(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function ss(e,n){if(!Ct.has(n))return null;if(e.t==="unknown"||e.t==="any")return St[n]??e;let t=Q(e).filter(r=>Rt(r,n));return t.length?normalizeUnion(t):St[n]??e}function as(e,n){if(!Ct.has(n)||e.t==="unknown"||e.t==="any")return null;let t=Q(e).filter(r=>!Rt(r,n));return t.length?normalizeUnion(t):null}function Nt(e,n){let t=J(e);if(t!==null&&me(n)){let r=ye(n);if(r.t==="literal"||r.t==="null")return {name:t,lit:r}}return null}function Bt(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.property.type==="Identifier"&&me(n)){let t=J(e.object),r=ye(n);if(t!==null&&(r.t==="literal"||r.t==="null"))return {name:t,prop:e.property.name,lit:r}}return null}function kt(e,n,t,r,s){let a=Q(e),o=c=>c.t==="object"?ownProp(c.props,n)?.type:void 0,i=a.filter(c=>{let l=o(c);return r?!!l&&subtype(t,l,s):!(l&&subtype(l,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function wt(e,n,t){let r=Q(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 os(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function is(e,n,t){let r=Q(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var ls=e=>e.t==="null"||e.t==="undefined",Tt=e=>ls(e)||e.t==="literal"&&!e.value,cs=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=Q(e),t=n.filter(r=>!Tt(r));return t.length&&t.length<n.length?normalizeUnion(t):null},us=e=>{let n=Q(e),t=n.filter(Tt);return t.length&&t.length<n.length?normalizeUnion(t):null},vt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,z=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),ps=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function V(e,n,t){if(e.type==="BinaryExpression"){let s=e;if(s.operator==="in"){let m=s.left,b=s.right,B=J(b);if(m.type==="Literal"&&typeof m.value=="string"&&B!==null){let D=re(n,B,t);if(!D)return te;let O=String(m.value);return z(B,wt(D,O,true),wt(D,O,false))}return te}if(!ps(s.operator))return te;let a=s.operator==="!=="||s.operator==="!=",o=s.left,i=s.right,c=bt(o,i)??bt(i,o);if(c){let m=re(n,c.name,t);if(!m)return te;let b=ss(m,c.tag),B=as(m,c.tag);return a?z(c.name,B,b):z(c.name,b,B)}let l=vt(o),u=vt(i),p=l?i:u?o:null,y=p?J(p):null;if((l||u)&&y!==null){let m=y,b=re(n,m,t);if(!b)return te;let D=s.operator==="=="||s.operator==="!="?["null","undefined"]:[l??u],O=Q(b),Be=O.filter(ue=>D.includes(ue.t)),C=O.filter(ue=>!D.includes(ue.t)),I=Be.length?normalizeUnion(Be):null,T=C.length&&C.length<O.length?normalizeUnion(C):null;return a?z(m,T,I):z(m,I,T)}let f=Nt(o,i)??Nt(i,o),N=Bt(o,i)??Bt(i,o);if(f||N){let m=te;if(f){let b=re(n,f.name,t);if(b){let B=os(b,f.lit,t),D=is(b,f.lit,t);m=a?z(f.name,D,B):z(f.name,B,D);}}if(N){let b=re(n,N.name,t);if(b){let B=kt(b,N.prop,N.lit,true,t),D=kt(b,N.prop,N.lit,false,t),O=a?z(N.name,D,B):z(N.name,B,D);m={then:{...m.then,...O.then},else:{...m.else,...O.else}};}}return m}return te}if(e.type==="UnaryExpression"&&e.operator==="!"){let s=V(e.argument,n,t);return {then:s.else,else:s.then}}if(e.type==="CallExpression"){let s=fs(e,n,t);if(s)return s}if(e.type==="LogicalExpression"){let s=e;if(s.operator==="&&"){let a=V(s.left,n,t),o=V(s.right,L(n,a.then),t);return {then:{...a.then,...o.then},else:Et(a.else,{...a.then,...o.else},n,t)}}if(s.operator==="||"){let a=V(s.left,n,t),o=V(s.right,L(n,a.else),t);return {then:Et(a.then,{...a.else,...o.then},n,t),else:{...a.else,...o.else}}}return te}let r=J(e);if(r!==null){let s=re(n,r,t);if(s)return z(r,cs(s),us(s))}return te}function Et(e,n,t,r){let s={};for(let a of Object.keys(e)){let o=e[a],i=n[a]??re(t,a,r);if(!i)continue;let c=normalizeUnion([o,i]),l=re(t,a,r);l&&equals(c,l)||(s[a]=c);}return s}function ds(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 fs(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=U(n,r.name);if(!s)return null;let a=ds(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param],i=o?J(o):null;if(i===null)return null;let c=re(n,i,t);return c?z(i,ts(c,a.type,t),rs(c,a.type,t)):null}var L=(e,n)=>Object.keys(n).length?ie(e,n):e;function x(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>x(t));case "IfStatement":{let n=e;return !!n.alternate&&x(n.consequent)&&x(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&x(n.finalizer))return true;let t=!n.handler||x(n.handler.body);return x(n.block)&&t}default:return false}}var Ms=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function js(e){let n=[];return e.maxDepth!==void 0&&n.push(yn(e.maxDepth)),e.maxNodes!==void 0&&n.push(hn(e.maxNodes)),e.maxArgs!==void 0&&n.push(gn(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(dn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(fn(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(mn(e.memberDepth)),n}function Is(e,n,t){let{min:r,max:s}=schemeArity(e);if(n.length<r||n.length>s)return true;if(!e.bounds)return false;let a=bindScheme(e,n);return e.params.some((o,i)=>{let c=e.bounds?.[o];return c!==void 0&&i<n.length&&!subtype(n[i],substitute(c,a),t)})}function Fs(e,n){let t=e.typeRefs;if(!t?.length)return [];let r=[];for(let s of t){let a={type:"Identifier",name:s.name,loc:s.loc},o=n[s.name];if(!o){r.push(P("unknown-name",a,`Cannot find name '${s.name}'.`));continue}let i=s.args;if(!i)continue;let{min:c,max:l}=schemeArity(o);if(i.length<c||i.length>l){r.push(h.genericTypeArity(a,s.name,c,l));continue}if(!o.bounds)continue;let u=bindScheme(o,i);o.params.forEach((p,y)=>{let f=o.bounds?.[p];if(!f||y>=i.length)return;let N=substitute(f,u);subtype(i[y],N,n)||r.push(h.constraintViolation(a,p,i[y],N));});}return r}function zt(e,n,t={}){let r={...Ms(n.types),...n.schemes,...Ls(e)},s$1=En(e),a={overlay:new WeakMap,sink:le(),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,c=Us(e,a);try{i=S(e,c,a);}catch(p){if(p instanceof TypeEvalLimitError)a.sink.report(P("too-deep",e,p.message));else if(p instanceof UnionTooComplexError)a.sink.report(P("too-complex-union",e,p.message));else throw p;i=s.unknown;}let l=[];o&&l.push(...Ye(o)),t.limits&&l.push(...js(t.limits)),t.resultType&&l.push(Sn(t.resultType,r));let u=[...a.sink.all,...s$1.diagnostics,...Fs(e,r),...t.unused?wn(e,t.unused):[],...l.length?cn(e,l,{overlay:a.overlay,schemes:r}):[]];return {type:i,overlay:a.overlay,diagnostics:u,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function $s(e,n,t={}){let r=zt(e,n,t),s$1={},a=new Map,o,i=l=>{let u=[];if(l.type==="VariableDeclaration")for(let p of l.declarations){let y=G(p.id),f=r.overlay.get(p);y&&f&&(s$1[y]=f.type,u.push(y));}else if(l.type==="FunctionDeclaration"){let p=l.id?.name,y=r.overlay.get(l);p&&y&&(s$1[p]=y.type,u.push(p));}return u};for(let l of e.body??[])if(l.type==="VariableDeclaration"||l.type==="FunctionDeclaration")i(l);else if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration)for(let p of i(u.declaration))a.set(p,p);else for(let p of u.specifiers)a.set(p.exported.name,p.local.name);}else if(l.type==="ExportDefaultDeclaration"){let u=r.overlay.get(l.declaration);o=u?u.type:s.unknown;}let c={};if(a.size||o!==void 0){for(let[l,u]of a)s$1[u]&&(c[l]={type:s$1[u]});o!==void 0&&(c.default={type:o});}else for(let l in s$1)c[l]={type:s$1[l]};return {type:{t:"object",props:c},diagnostics:r.diagnostics}}var Ls=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let r=t;if(!r.id?.name||!r.typeAnnotation)return;let s={},a={};for(let o of r.typeParamNodes??[])o.bound&&(s[o.name]=o.bound),o.default&&(a[o.name]=o.default);n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation,...Object.keys(s).length?{bounds:s}:{},...Object.keys(a).length?{defaults:a}:{}};}}),n};function Us(e,n){let t=n.env.modules,r={};walk(e,{ImportDeclaration(s$1){let a=s$1;if(a.importKind==="type")return;let o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(h.unknownModule(a.source,String(o)));for(let c of a.specifiers)r[c.local.name]=s.unknown;return}for(let c of a.specifiers){if(c.importKind==="type")continue;let l=c.local.name;if(ce(l,c.local,n),l in r){n.sink.report(h.cannotRedeclare(c.local,l));continue}if(c.type==="ImportNamespaceSpecifier"){r[l]=i;continue}let u=c.type==="ImportSpecifier"?c.imported.name:"default",p=discover(i,[u],n.schemes);p?r[l]=p.type:(n.sink.report(h.noSuchMember(c,i,u)),r[l]=s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?ie(n.env.scope,r):n.env.scope}var g=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case Yt:return e.schema;case "JSXElement":case "JSXFragment":return g(t,e,S(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return g(t,e,Ue(e),n);case "Placeholder":return g(t,e,s.any,n);case "Identifier":{let s$1=e.name,a=U(n,s$1);return a===void 0?s$1==="undefined"?g(t,e,s.undefined,n):(t.sink.report(h.unknownName(e,s$1)),g(t,e,s.any,n)):g(t,e,a,n)}case "MemberExpression":return g(t,e,Mt(e,n,t),n);case "CallExpression":return g(t,e,Js(e,n,t,r),n);case "ArrowFunctionExpression":return Kn(e,n,t);case "FunctionDeclaration":return t.sink.report(h.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),g(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(h.unsupported(e,"anonymous function (use an arrow)")),g(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(h.unsupported(e,"'this'")),g(t,e,s.unknown,n);case "BlockStatement":return g(t,e,ar(e,n,t),n);case "ReturnStatement":{let s$1=e.argument;return g(t,e,s$1?S(s$1,n,t):s.unknown,n)}case "IfStatement":return Y(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 Y(e,n,t),t.overlay.get(e)?.type??s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=a.type==="MemberExpression"?g(t,a,Mt(a,n,t,true),n):S(a,n,t);if(a.type==="MemberExpression"){let u=t.overlay.get(a.object)?.type,p=u&&apparentType(u,t.schemes);p&&(p.t==="array"||p.t==="tuple")&&p.readonly&&t.sink.report(h.readonlyWrite(a,p));}let i=a.type==="Identifier"?a.name:null,c=i!==null&&t.evolving.has(i),l=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(c&&i!==null){let p=S(s.right,n,t);return t.assignFlow.set(e,widenLiteral(p)),g(t,e,p,n)}if(l&&i!==null){let p=S(s.right,n,t);return subtype(p,l,t.schemes)||t.sink.report(h.notAssignable(s.right,p,l,t.schemes)),t.assignFlow.set(e,or(l,p,t.schemes)),g(t,e,p,n)}let u=H(s.right,o,n,t);return g(t,e,u,n)}return g(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s$1=e,a=S(s$1.argument,n,t);return Ke(a,t.schemes)||t.sink.report(h.arithmeticOperand(s$1.argument,"operand")),g(t,e,s.number,n)}case "ExpressionStatement":return g(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return tn(e,n,t),g(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let s$1=e.id?.name,a=s$1?t.schemes[s$1]:void 0;return g(t,e,a?Zs(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return g(t,e,Sa(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=s.operator==="??"?{}:s.operator==="&&"?V(s.left,n,t.schemes).then:V(s.left,n,t.schemes).else,i=S(s.right,L(n,o),t);return g(t,e,Na(s.operator,a,i),n)}case "UnaryExpression":return g(t,e,ka(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=V(s.test,n,t.schemes),o=S(s.consequent,L(n,a.then),t),i=S(s.alternate,L(n,a.else),t);return g(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return g(t,e,wa(e,n,t),n);case "ArrayExpression":return g(t,e,pr(e,n,t),n);case "TemplateLiteral":{if(Le(e)!==null)return g(t,e,Ue(e),n);for(let s of e.expressions){let a=S(s,n,t);ur(a,t.schemes)||t.sink.report(h.notTextConvertible(s,a));}return g(t,e,s.string,n)}case "AwaitExpression":{let s$1=e.argument,a=s$1?S(s$1,n,t):s.unknown;return g(t,e,Ve(a),n)}case "Program":{let s$1=nn(e.body,n,t,new Set(t.importNames)).scope;return g(t,e,s.unknown,s$1)}case "JsonExpression":return g(t,e,$n(e.body,n,t,e),n);case "ChainExpression":return g(t,e,normalizeUnion([S(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let s=e,a=S(s.expression,n,t),o=Ce(s.typeAnnotation,n,t,e);return Te(a,o,t.schemes)||t.sink.report(h.castUnsound(e,a,o)),g(t,e,o,n)}default:return t.sink.report(h.unsupported(e,`'${e.type}'`)),g(t,e,s.unknown,n)}}var Vs=new Set(["constructor","prototype","__proto__"]);function Gs(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function Mt(e,n,t,r=false){let s$1=S(e.object,n,t),a=Gs(e);if(a!==null&&Vs.has(a))return t.sink.report(h.forbiddenMember(e,a)),s.unknown;let o=xs(e,s$1,n,t),i=r?null:J(e);if(i!==null&&Rn(i)&&o.t!=="unknown"){let c=U(n,i);if(c!==void 0&&subtype(c,o,t.schemes))return c}return o}function xs(e,n,t,r){if(e.computed){let o=S(e.property,t,r),i=resolveTypeOp(s.index(n,o));return i.t!=="index"?i:(o.t==="literal"&&typeof o.value=="string"&&jt(e,n,o.value,r),s.unknown)}let s$1=e.property.name,a=discover(n,[s$1],r.schemes);return a?a.type:(jt(e,n,s$1,r),s.unknown)}function jt(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(h.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(h.notObject(e,n));}function Ks(e,n,t,r){let s$1=e.arguments[0];if(!s$1){r.sink.report(h.missingArgument(e,"schema",s.unknown));return}if(s$1.type!=="Identifier"){r.sink.report(h.asserterNeedsName(s$1,n));return}let a=s$1.name,o=U(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?h.typeAsValue(s$1,a):h.unknownName(s$1,a));return}if(!i||i.params.length>0){r.sink.report(h.notASchema(s$1,a));return}if(!(Jt(a,r)&&!qs(t,a)))return r.overlay.set(s$1,{type:i.body,scope:t}),i.body}function Jt(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&U(n.env.scope,e)!==void 0}function qs(e,n){for(let t=e;t;t=t.parent)if(Object.prototype.hasOwnProperty.call(t.vars,n))return t.parent===null;return false}function ce(e,n,t){Jt(e,t)&&t.sink.report(h.shadowsSchema(n,e));}function Gn(e,n){let t=W(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function _s(e,n){let t=U(e.scope,n);if(!t)return;let r=Gn(t,e.schemes);return r?W(r,e.schemes):void 0}function Ws(e,n,t,r){let s$1=Gn(S(n[0],t,r),r.schemes),a=n.length>1?S(n[1],t,r):s.undefined;if(s$1){let o=typeDiff(a,s$1,r.schemes);o.length&&r.sink.report(h.propsMismatch(n[1]??e,s$1,formatTypeDiff(o)));}return g(r,e,s.boolean,t)}var Yt="TSLiteSyntheticArg",zs=e=>({type:Yt,schema:e});function Xt(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(c=>c&&c.type!=="SpreadElement")){for(let c of o.elements)r.push(c);continue}let i=W(S(o,n,t),t.schemes);if(i.t==="tuple")for(let c of i.elements)r.push(zs(c));else s={elem:qn(i,o,t),node:a};}return {nodes:r,spread:s}}function Js(e,n,t,r){let s$1=e.arguments,a=On(e.callee);if(a){let p=t.env.accessors?.[a];if(p){let y=yt(s$1);if(y){let f=discover(p,y,t.schemes);return f?f.type:(t.sink.report(h.noSuchMember(e,p,y.join("."))),s.unknown)}return s$1.forEach(f=>S(f,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let p=Ks(e,a,n,t);s$1.length<2&&s$1.length>0&&t.sink.report(h.missingArgument(e,"value",s.unknown));for(let y=1;y<s$1.length;y++){let f=S(s$1[y],n,t);y===1&&p&&freeVars(f).size===0&&!Te(f,p,t.schemes)&&t.sink.report(h.unprovableValue(s$1[y],f,p,e.arguments[0].name));}return p??s.unknown}if(a&&t.env.matchers?.has(a))return Ws(e,s$1,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s$1.forEach(p=>S(p,n,t)),s.any;if(o.t==="overload")return Xs(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(p=>S(p,n,t)),t.sink.report(h.notCallable(e,o)),s.unknown;let i=Xt(s$1,n,t),c=i.nodes.map(p=>Qt(p,n,t)),l=Zt(e),u=!l||er(o,l.length);return u||t.sink.report(h.wrongTypeArgumentCount(e,o.typeParams?.length??0,l.length)),In(e,o,i.nodes,c,n,t,i.spread,r,u?l:void 0)}function Qt(e,n,t){if(Cn(e))return s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=le(),s$1=S(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function In(e,n,t,r,s$1,a,o=null,i,c){let l=m=>{if(!i)return m;let b=substitute(n.returns,m);if(b.t==="fn"&&i.t==="fn"){let B=m,D=Math.min(b.params.length,i.params.length);for(let O=0;O<D;O++)B=unify(b.params[O].type,i.params[O].type,B)??B;return unify(b.returns,i.returns,B)??B}return unify(b,i,m)??m},u=c?na(e,n,c,a):void 0,p=u??l(instantiateLoose(n,r).bindings),y=new Set;t.forEach((m,b)=>{if(Cn(m)){let B=widenType(substitute(n.params[b]?.type??s.any,p));r[b]=Kn(m,s$1,a,B);}else if(m.type==="CallExpression"&&r[b].t==="any")r[b]=S(m,s$1,a,substitute(n.params[b]?.type??s.unknown,p));else if(me(m)){let B=n.params[b]?.type??s.unknown,D=B.t==="var"?B.bound?substitute(B.bound,p):B:substitute(B,p);Ee(D)&&(r[b]=g(a,m,ye(m),s$1));}else if(m.type==="ArrayExpression"||m.type==="ObjectExpression"||m.type==="ConditionalExpression"){let B=n.params[b]?.type??s.unknown,D=substitute(B,p);if(m.type==="ArrayExpression"&&$e(D)){r[b]=_n(m,D,s$1,a);return}let O=B.t==="var"?B.bound?substitute(B.bound,p):void 0:D;O&&dr(O,a.schemes)&&(y.add(b),r[b]=va(m,O,s$1,a,B.t==="var")??r[b]);}});let f=u??l(instantiateLoose(n,r).bindings);u||Ys(e,n,f,a),aa(e,n,r,f,a,t,o),t.forEach((m,b)=>{let B=n.params[b];m.type==="ObjectExpression"&&B&&!B.variadic&&!y.has(b)&&Fn(m,substitute(B.type,f),a);});let N=substitute(n.returns,f);return widenInferred(groundVars(N.t==="union"?normalizeUnion(N.of):N,a.schemes))}var It=new WeakMap;function Ht(e){let n=It.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)$(s.type,t,r);return $(e.returns,t,r),It.set(e,t),t}function $(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":$(e.items,n,t);return;case "union":for(let r of e.of)$(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)$(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)$(r.type,n,t);$(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)$(s.type,n,t);$(r.returns,n,t);}return;case "apply":for(let r of e.args)$(r,n,t);return;case "keyof":$(e.of,n,t);return;case "index":$(e.obj,n,t),$(e.key,n,t);return;case "mapped":$(e.over,n,t),$(e.body,n,t);return;default:return}}function Ys(e,n,t,r){let s=Ht(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let c=substitute(o,t);subtype(i,c,r.schemes)||r.sink.report(h.constraintViolation(e,a,i,c));}}function Xs(e,n,t,r,s){let a=Xt(e.arguments,t,r),o=a.nodes,i=o.map(u=>Qt(u,t,r)),c=Zt(e),l=c?n.signatures.filter(u=>er(u,c.length)):n.signatures;if(c&&!l.length){let u=n.signatures.reduce((p,y)=>Math.max(p,y.typeParams?.length??0),0);return r.sink.report(h.wrongTypeArgumentCount(e,u,c.length)),Ft(e,n.signatures,a,o,i,t,r,s,void 0)}return Ft(e,l,a,o,i,t,r,s,c)}function Ft(e,n,t,r,s$1,a,o,i,c){let l={t:"overload",signatures:n},u=f=>t.spread?ta(f,r.length):ra(f,r.length),p=l.signatures.filter(u);if(p.length>1&&s$1.some(f=>f.t==="any"))for(let f of p){let N=le(),m=In(e,f,r,[...s$1],a,{...o,sink:N},t.spread,i,c);if(!N.hasErrors())return N.all.forEach(b=>o.sink.report(b)),m}let y=l.signatures.find(f=>u(f)&&sa(f,s$1,o));if(!y){let f=l.signatures.filter(u);f.length===1?y=f[0]:l.signatures.length===1&&(y=l.signatures[0]);}return y?In(e,y,r,s$1,a,o,t.spread,i,c):(o.sink.report(h.noMatchingOverload(e,l,s$1)),s.unknown)}function Qs(e,n,t,r){let s$1=U(n,e[0]);if(s$1===void 0)return t.sink.report(h.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(h.noSuchMember(r,s$1,a.join("."))),s.unknown)}function Ce(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let l=false,u=a.map(p=>{let y=s$1(p);return y!==p&&(l=true),y});return l?u:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return Qs(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"){Hs(o.name,n,t,r);let l=t.schemes[o.name];if(!l)return s.any;if(Array.isArray(o.args)&&Is(l,o.args,t.schemes))return s.any}let i=false,c={};for(let l of Object.keys(o)){let u=s$1(o[l]);u!==o[l]&&(i=true),c[l]=u;}return i?c:o};return s$1(e)}function Hs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Ce(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Zs(e,n,t,r,s){let a={...t,sink:le(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Ce(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var qe=(e,n,t)=>{let r=An(e);return r===void 0?r:Ce(r,n,t,e)},ea=(e,n,t)=>{let r=Dn(e);return r===void 0?r:Ce(r,n,t,e)},Zt=e=>{let n=e.typeArguments;return n?.length?n:void 0},er=(e,n)=>(e.typeParams?.length??0)===n;function na(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,c)=>a[i]=t[c]);let o=a;for(let[i,c]of Ht(n)){let l=o[i];if(!l)continue;let u=groundVars(substitute(c,o),r.schemes);subtype(l,u,r.schemes)||r.sink.report(h.constraintViolation(e,i,l,u));}return o}function ta(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 ra(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 sa(e,n,t){let{bindings:r}=instantiateLoose(e,n);for(let s$1=0;s$1<e.params.length;s$1++){let a=e.params[s$1];if(a.variadic){let o=substitute(a.type,r),i=o.t==="array"?o.items:s.unknown;for(let c=s$1;c<n.length;c++)if(!subtype(n[c],i,t.schemes))return false;return true}if(s$1>=n.length){if(!a.optional)return false;continue}if(!subtype(n[s$1],substitute(a.type,r),t.schemes))return false}return true}function aa(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=l=>a[l]??e;for(let l=0;l<n.params.length;l++){let u=n.params[l];if(u.variadic){let y=substitute(u.type,r),f=y.t==="array"?y.items:s.unknown;for(let N=l;N<t.length;N++)subtype(t[N],f,s$1.schemes)||s$1.sink.report(h.notAssignable(i(N),t[N],f,s$1.schemes));break}let p=substitute(u.type,r);if(l>=t.length){!u.optional&&!o&&s$1.sink.report(h.missingArgument(e,u.name,p));continue}subtype(t[l],p,s$1.schemes)||s$1.sink.report(h.notAssignable(i(l),t[l],p,s$1.schemes));}let c=n.params.find(l=>l.variadic);if(o){let l=t.length,u=n.params.filter(p=>!p.optional&&!p.variadic).length;if(!(l>=u&&(c||l<n.params.length))){s$1.sink.report(h.spreadArgument(o.node));return}if(c){let p=substitute(c.type,r),y=p.t==="array"?p.items:s.unknown;subtype(o.elem,y,s$1.schemes)||s$1.sink.report(h.notAssignable(o.node,o.elem,y,s$1.schemes));}return}!c&&t.length>n.params.length&&s$1.sink.report(h.excessArgument(i(n.params.length),n.params.length,t.length));}function We(e,n,t){if(e.t==="object"){let r=ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>We(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:resolveTypeOp({t:"intersection",of:r})}if(e.t==="union")return nr(e.of,n,t)}function nr(e,n,t){let r=e.map(s=>We(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length?normalizeUnion(r):void 0}var xn=e=>e.t==="literal"||e.t==="null"||e.t==="undefined"||e.t==="boolean"||e.t==="union"&&e.of.every(xn),$t=new WeakMap;function oa(e,n,t){let r=$t.get(t);if(r)return r;let s=new Set;for(let o of e)if(o.t==="object")for(let i of Object.keys(o.props))s.add(i);let a=new Set;for(let o of s){let c=e.map(u=>We(u,o,n)).filter(u=>u!==void 0);if(!c.some(xn))continue;c.length===e.length&&c.every(u=>equals(u,c[0]))||a.add(o);}return $t.set(t,a),a}var tr=e=>e.type==="Literal"||e.type==="Identifier"||e.type==="TemplateLiteral"||e.type==="MemberExpression"&&!e.computed&&tr(e.object),ia=(e,n)=>e.some(t=>t.t==="object"&&ownProp(t.props,n)?.optional===true);function rr(e,n,t,r,s$1){let a=oa(n,r,s$1),o=new Set;if(!a.size)return {chosen:n,ignored:o};let i=[],c=new Set;for(let p of e.properties){if(p.type!=="Property")continue;let y=p,f=Ae(y);if(f===null||(c.add(f),!a.has(f)||!tr(y.value)))continue;let N=t(y);N&&xn(N)&&i.push([f,N]);}for(let p of a)!c.has(p)&&ia(n,p)&&i.push([p,s.undefined]);let l=n.map(()=>1);for(let[p,y]of i){let f=false;n.forEach((N,m)=>{if(l[m]!==1)return;let b=We(N,p,r);b!==void 0&&(subtype(y,b,r)?f=true:l[m]=2);}),n.forEach((N,m)=>{l[m]===2&&(l[m]=f?0:1);}),f||o.add(p);}let u=n.filter((p,y)=>l[y]===1);return {chosen:u.length?u:n,ignored:o}}function Lt(e,n,t,r,s,a=false){let o={},i={};for(let c of e.properties){let l=c;if(l.type==="SpreadElement"){let N=apparentType(S(l.argument,t,r),r.schemes);if(N.t==="object")for(let[m,b]of Object.entries(N.props))o[m]=b,i[m]=b;continue}let u=l,p=Ae(u),y=p!==null?n(p):void 0,f=y?H(u.value,y,t,r,s):widen(S(u.value,t,r));p!==null&&(o[p]={type:a?f:y??f},i[p]={type:f}),g(r,l,f,t);}return {checked:o,narrowed:i}}function H(e,n,t,r,s$1=false){let a=apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=resolveConditional(a,r.schemes)??a),me(e)?"Literal":e.type){case "Literal":{let i=ye(e);return subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,s$1?Ee(n)?i:widen(Ue(e)):n,t)}case "ArrayExpression":{if($e(a)){let i=_n(e,a,t,r);return subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,i,t)}if(a.t==="array"){let i=[];for(let l of e.elements){if(!l)continue;let u=l;if(u.type==="SpreadElement"){let p=H(u.argument,n,t,r,s$1);p.t==="array"&&i.push(p.items);}else i.push(H(u,a.items,t,r,s$1));}let c=s$1&&i.length>0?s.array(normalizeUnion(i)):n;return g(r,e,c,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let{checked:i,narrowed:c}=Lt(e,p=>We(a,p,r.schemes),t,r,s$1),l=Fn(e,n,r),u={t:"object",props:i};return !l&&!subtype(u,n,r.schemes)&&r.sink.report(h.notAssignable(e,u,n,r.schemes)),g(r,e,s$1?{t:"object",props:c}:n,t)}if(a.t==="union"){let i=a.of.filter(b=>b.t==="object"||b.t==="intersection");if(!i.length)break;let c=e,{chosen:l,ignored:u}=rr(c,i,b=>S(b.value,t,{...r,sink:le()}),r.schemes,n),p=r.sink.all.length,{checked:y,narrowed:f}=Lt(c,b=>nr(u.has(b)?i:l,b,r.schemes),t,r,s$1,true),N=Fn(c,n,r),m={t:"object",props:y};return !N&&r.sink.all.length===p&&!subtype(m,n,r.schemes)&&r.sink.report(h.notAssignable(e,m,n,r.schemes)),g(r,e,s$1?{t:"object",props:f}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Kn(e,t,r,a);return subtype(i,n,r.schemes)||r.sink.report(h.notAssignable(e,i,n,r.schemes)),g(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let c=V(i.test,t,r.schemes),l=H(i.consequent,n,L(t,c.then),r,s$1),u=H(i.alternate,n,L(t,c.else),r,s$1);return g(r,e,s$1?normalizeUnion([l,u]):n,t)}case "Placeholder":return g(r,e,n,t)}let o=S(e,t,r);return subtype(o,n,r.schemes)||r.sink.report(h.notAssignable(e,o,n,r.schemes)),g(r,e,o,t)}function Kn(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=C=>a?.length?{...C,typeParams:a}:C,i={},c=new Map,l=e.params.map((C,I)=>{let T=C,ue=s$1?.params[I]?.type;if(T.type==="RestElement"){let oe=T.argument,_=qe(oe,n,t)??(s$1?.params[I]?.variadic?ue:void 0)??s.array(s.unknown),X=G(oe);return X?(ce(X,oe,t),i[X]=_):se(oe,_,i,n,t),t.overlay.set(oe,{type:_,scope:n}),t.overlay.set(T,{type:_,scope:n}),{name:X??`arg${I}`,type:_,variadic:true}}if(T.type==="AssignmentPattern"){let oe=T.left,sn=qe(oe,n,t)??ue;se(T,sn??s.unknown,i,n,t);let _=G(oe),X=_?i[_]:void 0,an=sn??X??s.unknown,Qn=an.t==="unknown"?an:normalizeUnion([an,s.undefined]);return _&&X&&(X.t==="union"||X.t==="boolean")&&c.set(_,X),t.overlay.set(T,{type:Qn,scope:n}),{name:_??`arg${I}`,type:Qn,optional:true}}let ke=G(T),Yn=qe(T,n,t),Re=Yn??ue??s.unknown,Xn=T.type==="Identifier"&&(!!T.optional||Yn===void 0&&!!s$1?.params[I]?.optional),we=Xn&&Re.t!=="unknown"?normalizeUnion([Re,s.undefined]):Re;return ke?(ce(ke,T,t),i[ke]=we,(we.t==="union"||we.t==="boolean")&&c.set(ke,we)):T.type!=="Identifier"&&se(T,Re,i,n,t),t.overlay.set(T,{type:we,scope:n}),Xn?{name:ke??`arg${I}`,type:we,optional:true}:{name:ke??`arg${I}`,type:Re}}),u=false;l.forEach((C,I)=>{C.optional?u=true:!C.variadic&&u&&t.sink.report(h.requiredAfterOptional(e.params[I]));});let p=Ne(n,i,t),y=e.body,f=ea(e,n,t),N=e.returnGuard,m=N?{param:N.param,type:Ce(N.type,n,t,e)}:void 0;if(m){let C=l[m.param];C&&!subtype(m.type,C.type,t.schemes)&&t.sink.report(h.notAssignable(e,m.type,C.type,t.schemes));}let b=C=>m?{...C,guard:m}:C;if(y.type!=="BlockStatement"&&f){let C=e.async?Ve(f):f;H(y,C,p,t);let I=e.async?Ge(f):f;return g(t,e,b(o({t:"fn",params:l,returns:I})),n)}let B=f??s$1?.returns,D=B&&e.async?Ve(B):B,O=y.type==="BlockStatement"?g(t,y,ar(y,p,t,new Set(Object.keys(i)),c,D),p):S(y,p,t),Be=e.async?Ge(O):O;if(f){let C=e.async?Ve(f):f,I=e.async?O:Be;subtype(I,C,t.schemes)||t.sink.report(h.notAssignable(y,Be,f,t.schemes));let T=e.async?Ge(f):f;return g(t,e,b(o({t:"fn",params:l,returns:T})),n)}return g(t,e,o({t:"fn",params:l,returns:widenType(Be)}),n)}function De(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?De(n.argument):De(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?De(n.argument):De(n):[]);case "AssignmentPattern":return De(e.left);default:return []}}function sr(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>De(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?sr(e.declaration):[]}function ar(e,n,t,r=new Set,s$1,a){let{returns:o}=nn(e.body,n,t,r,s$1,a),i=!x(e);return o.length===0?i?s.void:s.union([]):normalizeUnion(i?[...o,s.undefined]:o)}var la=[s.literal(true),s.literal(false)];function ca(e){return e.t==="union"?e.of:e.t==="boolean"?la:[e]}function or(e,n,t){let r=ca(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 ir(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 ua(e){if(e.type!=="ExpressionStatement")return null;let n=e.expression;return n.type!=="AssignmentExpression"?null:J(n.left)}function Se(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=Se(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=ir(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=lr(e,n,t);if(r.size===0)return {types:n,exits:x(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:x(e)}}case "TryStatement":{let r=e,s=[],a=Se(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=Se(r.handler.body,n,t);i.exits||s.push(i.types);}let o=pa(n,s);return r.finalizer&&(o=Se(r.finalizer,o,t).types),{types:o,exits:x(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function lr(e,n,t){let r=Se(e.consequent,n,t),s=e.alternate?Se(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let c=[];r.exits||c.push(r.types.get(i)??n.get(i)),s.exits||c.push(s.types.get(i)??n.get(i)),c.length&&o.set(i,normalizeUnion(c));}return o}function cr(e,n){let t=new Map,r=s=>{let a=U(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 pa(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 da(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=cr(n,t),s=Se(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return L(n,a)}function nn(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!fa(e))return Ut(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[c,l]of s)t.declaredMut.set(c,l);try{return Ut(e,n,t,r,a)}finally{t.evolving.clear();for(let c of o)t.evolving.add(c);t.declaredMut.clear();for(let[c,l]of i)t.declaredMut.set(c,l);}}function fa(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 Ut(e,n,t,r,s){let a=n,o=[];for(let i of e){let c=i;for(let l of sr(c))r.has(l.name)?t.sink.report(h.cannotRedeclare(l,l.name)):r.add(l.name);if(c.type==="VariableDeclaration")a=tn(c,a,t);else if(c.type!=="ImportDeclaration")if(c.type==="ExportNamedDeclaration"){let l=c;if(l.declaration?.type==="VariableDeclaration")a=tn(l.declaration,a,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=S(l.declaration,a,t),p=G(l.declaration.id);p&&(a=Ne(a,{[p]:u},t));}else for(let u of l.specifiers)U(a,u.local.name)===void 0&&t.sink.report(h.unknownName(u.local,u.local.name));}else if(c.type==="ExportDefaultDeclaration")S(c.declaration,a,t);else if(c.type==="FunctionDeclaration"){let l=S(c,a,t),u=G(c.id);u&&(a=Ne(a,{[u]:l},t));}else if(c.type==="IfStatement"){let l=c,u=t.evolving.size||t.declaredMut.size?cr(a,t):null;if(o.push(...Y(c,a,t,s)),u&&u.size){let p=lr(l,u,t);p.size&&(a=L(a,Object.fromEntries(p)));}!l.alternate&&x(l.consequent)&&(a=L(a,V(l.test,a,t.schemes).else));}else {o.push(...Y(c,a,t,s));let l=ir(c,t);l&&(a=L(a,{[l.name]:l.type}));let u=ua(c);u!==null?a=Tn(a,u,t.schemes):(c.type==="BlockStatement"||c.type==="TryStatement")&&(a=da(c,a,t));}}return {scope:a,returns:o}}function Y(e,n,t,r){switch(e.type){case "ReturnStatement":{let s$1=e.argument,a=s$1?r?(H(s$1,r,n,t),r):S(s$1,n,t):s.unknown;return g(t,e,a,n),[a]}case "IfStatement":{let s$1=e;S(s$1.test,n,t);let a=V(s$1.test,n,t.schemes),o=Y(s$1.consequent,L(n,a.then),t,r);return s$1.alternate&&o.push(...Y(s$1.alternate,L(n,a.else),t,r)),g(t,e,s.unknown,n),o}case "BlockStatement":{let{returns:s$1}=nn(e.body,n,t,void 0,void 0,r);return g(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,a=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?a=tn(s$1.init,a,t):S(s$1.init,a,t)),s$1.test&&S(s$1.test,a,t),s$1.update&&S(s$1.update,a,t);let o=Y(s$1.body,a,t,r);return g(t,e,s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s$1=e,a=S(s$1.right,n,t),o=e.type==="ForOfStatement"?qn(a,s$1.right,t):s.string,i=ft(s$1.left);i&&ce(i,mt(s$1.left),t);let c=i?Ne(n,{[i]:o},t):n,l=Y(s$1.body,c,t,r);return g(t,e,s.unknown,n),l}case "BreakStatement":case "ContinueStatement":return g(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&S(s$1,n,t),g(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,a=Y(s$1.block,n,t,r);if(s$1.handler){let o=s$1.handler.param,i=o?G(o):null;i&&o&&ce(i,o,t);let c=i?Ne(n,{[i]:s.unknown},t):n;a.push(...Y(s$1.handler.body,c,t,r));}return s$1.finalizer&&a.push(...Y(s$1.finalizer,n,t,r)),g(t,e,s.unknown,n),a}case "SwitchStatement":{let s$1=e;S(s$1.discriminant,n,t);let a=n,o=[];for(let i of s$1.cases){i.test&&S(i.test,a,t);let c=nn(i.consequent,a,t,void 0,void 0,r);a=c.scope,o.push(...c.returns);}return g(t,e,s.unknown,n),o}default:return S(e,n,t),[]}}function ma(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function qn(e,n,t){let r=W(e,t.schemes);switch(r.t){case "array":return r.items;case "tuple":return r.elements.length?normalizeUnion([...r.elements]):s.unknown;case "string":return s.string;case "literal":if(typeof r.value=="string")return s.string;break;case "unknown":case "any":return s.unknown;case "union":return normalizeUnion(r.of.map(s=>qn(s,n,t)));}return t.sink.report(h.notIterable(n,e)),s.any}function ya(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function ha(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 ga(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function se(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=qe(e,r,s$1)??n;ce(e.name,e,s$1),t[e.name]=a,s$1.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=S(a.right,r,s$1);n.t!=="unknown"&&!subtype(o,n,s$1.schemes)&&s$1.sink.report(h.notAssignable(a.right,o,n,s$1.schemes));let i=widenType(o),{type:c}=withoutUndefined(n),l=c.t==="unknown"?i:normalizeUnion([c,i]),u=a.left;if(u.type==="Identifier"){let p=u.name;ce(p,u,s$1),t[p]=l,s$1.overlay.set(u,{type:l,scope:r});}else se(u,l,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){se(o.argument,ha(n,a),t,r,s$1);continue}let i=o,c=Ae(i);c!=null&&a.push(c);let l=c!=null?ma(n,c,s$1):s.unknown;se(i.value,l,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?se(i.argument,ga(n,o),t,r,s$1):se(i,ya(n,o),t,r,s$1);});return}}}function Fn(e,n,t){let r=W(n,t.schemes),s=r.t==="union"?apparentType(r,t.schemes):r,a=s.t==="union"?s.of.map(l=>W(l,t.schemes)):[s],i=(r.t==="union"?rr(e,a.filter(l=>l.t==="object"||l.t==="intersection"),l=>t.overlay.get(l.value)?.type,t.schemes,n).chosen:a).filter(l=>l.t==="object"&&(!l.index||l.index.key==="number"));if(!i.length||i.some(l=>Object.keys(l.props).length===0&&!l.index))return false;let c=false;for(let l of e.properties){if(l.type==="SpreadElement")continue;let u=l;if(u.computed)continue;let p=Ae(u);if(p===null)continue;i.filter(f=>p in f.props||f.index?.key==="number"&&isNumericLiteralName(p)).length||(t.sink.report(h.excessProperty(u.key,p,n)),c=true);}return c}function tn(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=G(a);o&&ce(o,a,t);let i=qe(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,Vt(o,i,t)):(r[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(h.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let c=i??(s$1.init.type==="ArrowFunctionExpression"?gt(s$1.init):null),l=o&&c?Ne(n,{[o]:c},t):n,u,p=null;i?(H(s$1.init,i,l,t),u=i,p=i,(i.t==="union"||i.t==="boolean")&&me(s$1.init)&&(u=or(i,ye(s$1.init),t.schemes))):(u=S(s$1.init,l,t),e.kind!=="const"&&(u=widenLiteral(u)),p=u),g(t,s$1,u,n),o?(r[o]=u,e.kind!=="const"&&p&&Vt(o,p,t)):se(a,u,r,n,t);}return g(t,e,s.unknown,n),Ne(n,r,t)}function Ne(e,n,t){let r=ie(e,n);for(let s of Object.keys(n))r=Tn(r,s,t.schemes);return r}function Vt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Sa(e,n,t){let r=S(e.left,n,t),s$1=S(e.right,n,t),a=e.operator,o=Pe.get(a);if(!o)return s.boolean;if(o.category==="additive"){if(be(r)||be(s$1))return ge(r,t.schemes)||ge(s$1,t.schemes)?s.string:s.number;if(ge(r,t.schemes)&&ge(s$1,t.schemes))return s.string;if(Ke(r,t.schemes)&&Ke(s$1,t.schemes))return s.number;if(ge(r,t.schemes)||ge(s$1,t.schemes)){let c=ge(r,t.schemes)?s$1:r;return t.sink.report(h.implicitCoercion(e,r,s$1,ur(c,t.schemes))),s.string}return t.sink.report(h.operatorNotApplicable(e,"+",r,s$1)),s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ke(r,t.schemes)||t.sink.report(h.arithmeticOperand(e.left,"left")),Ke(s$1,t.schemes)||t.sink.report(h.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!be(r)&&!be(s$1)){let i=apparentType(r,t.schemes),c=apparentType(s$1,t.schemes),l=subtype(i,s.number,t.schemes),u=subtype(c,s.number,t.schemes);l&&u||!l&&!u&&(subtype(i,c,t.schemes)||subtype(c,i,t.schemes))||t.sink.report(h.operatorNotApplicable(e,a,r,s$1));}return Nn(o.result)}var be=e=>e.t==="any"||e.t==="unknown",Ke=(e,n)=>be(e)||subtype(apparentType(e,n),s.number,n),ge=(e,n)=>!be(e)&&subtype(apparentType(e,n),s.string,n),ba=s.union([s.string,s.number,s.boolean,s.null,s.undefined]),ur=(e,n)=>be(e)||subtype(apparentType(e,n),ba,n),Gt={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},Mn=e=>e.t==="null"||e.t==="undefined";function Na(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=>!Mn(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!Mn(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>Mn(a)?[a]:a.t==="literal"?a.value?[]:[a]:Gt[a.t]?[Gt[a.t]]:[]);return normalizeUnion([...s$1,t])}var Ba=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function ka(e,n,t){let r=S(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 Ba;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function wa(e,n,t){let r={},s,a=[],o=[],i=false,c=false;for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){let m=W(S(u.argument,n,t),t.schemes);if(m.t==="object"){for(let b in m.props)r[b]=m.props[b];m.index&&(s={key:m.index.key,type:m.index.value});}continue}let p=u,y=S(p.value,n,t),f=widen(y);if(g(t,u,y,n),p.computed){let m=W(S(p.key,n,t),t.schemes);m.t==="literal"&&typeof m.value=="string"?(r[m.value]={type:f},a.push(f)):m.t==="literal"&&typeof m.value=="number"?(r[String(m.value)]={type:f},a.push(f),o.push(f)):m.t==="string"?(i=true,a.push(f)):m.t==="number"&&(c=true,a.push(f),o.push(f));continue}let N=Ae(p);N!==null&&(r[N]={type:f},a.push(f),/^\d+$/.test(N)&&o.push(f));}return i?s={key:"string",type:normalizeUnion(a)}:c&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function pr(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=W(S(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(widen(S(a,n,t)));}return s.array(r.length?normalizeUnion(r):s.unknown)}function _n(e,n,t,r){let s$1=W(n,r.schemes),a=e.elements,o=a.every(c=>c&&c.type!=="SpreadElement"),i=(c,l)=>c.type==="ArrayExpression"?_n(c,l,t,r):Ee(l)?S(c,t,r):widen(S(c,t,r));if(s$1.t==="tuple"&&o){let c=s$1.elements.length,l=restIndex(s$1),u=l<0?0:c-l-1,p=f=>{if(l<0||f<l)return s$1.elements[f];let N=a.length-f;return N<=u?s$1.elements[c-N]:s$1.elements[l]},y=a.map((f,N)=>{let m=p(N);return m?i(f,m):widen(S(f,t,r))});return g(r,e,{t:"tuple",elements:y},t)}if(s$1.t==="array"){let c=[];for(let l of a){if(!l)continue;let u=l;if(u.type==="SpreadElement"){S(u.argument,t,r);continue}c.push(i(u,s$1.items));}return g(r,e,s.array(c.length?normalizeUnion(c):s.unknown),t)}return pr(e,t,r)}function $n(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=>$n(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if(isExprMarker(s$1)){let o;try{o=fromJson(s$1);}catch{return t.sink.report(h.unsupported(r,`'${EXPR_MARKER}: ${String(s$1[EXPR_MARKER])}'`)),s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:$n(s$1[o],n,t,r)};return {t:"object",props:a}}function dr(e,n){let t=apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":t.t==="union"?t.of.some(r=>dr(r,n)):false}function va(e,n,t,r,s){let a=le(),o=H(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=c=>r.sink.all.some(l=>l.node===c.node&&l.code===c.code&&l.message===c.message);for(let c of a.all)i(c)||r.sink.report(c);return a.hasErrors()?n:o}var Ea=(e,n)=>({...e,typeAnnotation:n}),Aa=(e,n)=>({...e,returnType:n}),Da=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function zn(e,n){return e.get(n)?.type}function Oa(e,n){return e.get(n)?.scope}function Ca(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function Ra(e,n){let t=e.get(n)?.scope;return t?[...on(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Ta=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Pa(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 rn(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(Ta)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=zn(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=rn(e,n+2,t,r),c=Pa(a);return !i||!c?void 0:discover(i,[c],r)?.type}case "ArrayExpression":{let o=rn(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=Pe.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return s.number;let i=a.left===s$1?a.right:a.left,c=zn(t,i);return c&&c.t!=="any"&&c.t!=="unknown"?c:void 0}case "LogicalExpression":return rn(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function Ma(e,n){return e.filter(t=>t.node===n)}function $a(){let e=new WeakMap;return {stamp:(n,t)=>(e.set(n,t),n),get:n=>e.get(n)}}var La=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function Jn(e,n,t,r){if(isExprMarker(e)){let s=r.island?r.island(e,n):fromExprMarker(e);return t.stamp(s,n)}return Array.isArray(e)?t.stamp(ae.arrayExpression(e.map((s,a)=>Jn(s,r.child(n,a),t,r))),n):La(e)?t.stamp(ae.objectExpression(Object.entries(e).map(([s,a])=>{let o=r.child(n,s),i=t.stamp(ae.literal(s),o);return t.stamp(ae.property(i,Jn(a,o,t,r),false,false),o)})),n):t.stamp(ae.literal(e),n)}function Ua(e){let n=new WeakMap,t=[e];for(;t.length>0;){let r=t.pop();forEachChild(r,s=>{n.set(s,r),t.push(s);});}return n}function Va(e,n,t,r){let s=Ua(e),a=new Map,o=c=>{let l=a.get(c);return l===void 0&&(l=createPositionMap(c),a.set(c,l)),l},i=c=>{let l=c;for(;l!==void 0;){let u=t.get(l);if(u!==void 0)return u;l=s.get(l);}return r.fallback};return n.map(c=>{let l=i(c.node),u=r.textOf?.(l),p=u===void 0?void 0:yr(o(u),c.node.loc);return {diagnostic:c,anchor:l,...p?{span:p}:{}}})}function yr(e,n){if(!n?.start)return;let t=a=>e.offsetAt({line:a.line-1,column:a.column}),r=t(n.start),s=n.end?t(n.end):r;return {from:r,to:s<r?r:s}}function Ga(e,n){return yr(createPositionMap(e),n)}export{Pe as BINARY_OP,bn as BINARY_OPS,rt as FUNCTION_KINDS,$r as LOGICAL_OPS,lt as UNARY_OPS,Va as anchorDiagnostics,Ea as annotate,Aa as annotateReturn,Da as asExpression,Lr as binaryOpsProducing,pn as calleeAllowlist,un as capabilityNodes,zt as check,ie as childScope,Jr as collectBindings,En as collectMutations,wn as collectUnused,_s as componentProps,Gn as componentPropsOf,rn as contextualTypeAt,$a as createAnchors,Br as createEnv,le as createSink,h as diag,Ma as diagnosticsAt,$s as extractModuleType,Ir as fromCapability,cn as guard,Ye as guardsFromCompiled,U as lookup,Jn as lowerValue,P as makeDiagnostic,gn as maxArgs,fn as maxCallNesting,yn as maxDepth,dn as maxFunctionNesting,Je as maxNestingOf,hn as maxNodes,Ca as memberCompletions,mn as memberDepth,Nn as opResultSchema,kr as resolveNamed,wr as resolveScheme,Sn as resultType,Zn as rootScope,Oa as scopeAt,Ra as scopeCompletions,Ga as spanOf,zn as typeAt,Ur as unaryOpsProducing,on as visibleNames};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tslite/checker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "TSLite type system — a structural type checker over the AST (the 'TypeScript of TSLite')",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -39,14 +39,14 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@tslite/
|
|
43
|
-
"@tslite/
|
|
44
|
-
"@tslite/
|
|
45
|
-
"@tslite/language-service": "0.
|
|
46
|
-
"@tslite/
|
|
42
|
+
"@tslite/capability": "1.0.0",
|
|
43
|
+
"@tslite/json": "1.0.0",
|
|
44
|
+
"@tslite/ast": "1.0.0",
|
|
45
|
+
"@tslite/language-service": "1.0.0",
|
|
46
|
+
"@tslite/types": "1.0.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@tslite/parser": "1.4.
|
|
49
|
+
"@tslite/parser": "1.4.1"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
52
|
"build": "tsup",
|