@tslite/checker 0.9.4 → 0.10.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 +8 -5
- package/dist/index.d.ts +8 -5
- package/dist/index.js +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec');var Ln=(e={})=>core.rootScope(e),U=(e,n)=>core.childScope(e,n),R=(e,n)=>core.lookup(e,n),Qe=e=>core.visibleNames(e),Kt=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:Ln(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),qt=(e,n)=>e.types[n],_t=(e,n)=>e.schemes[n];var Vn={"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","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:Vn[e],severity:"error",node:n,message:t}),O=(e,n,t,r="error")=>({code:e,kind:Vn[e],severity:r,node:n,message:t}),y={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r),a=s.filter(u=>u.path.length>0),o=a.length?` ${typeCore.formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${o}`),l=s.filter(u=>u.kind==="missing"&&u.path.length===1).map(u=>({name:u.path[0],type:u.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),notASchema:(e,n)=>B("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)=>B("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)=>B("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>B("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)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>B("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>B("not-iterable",e,`Type '${typeCore.format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(r=>typeCore.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>B("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(r)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>O("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>O("cast-unsound",e,`Conversion of type '${typeCore.format(n)}' to type '${typeCore.format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...B("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)=>({...B("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 ae(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Ze(e,n,t={}){return n.flatMap(r=>r(e,t))}function ye(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var Qt=e=>Array.isArray(e)?e:[e],Kn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function en(e,n="error"){return t=>{let r=[];return ye(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(O("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function qn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ye(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);u.length&&s.push(O("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function D(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=>D(t.type,n))||!!e.index&&D(e.index.value,n);case "array":return D(e.items,n);case "tuple":return e.elements.some(t=>D(t,n));case "union":case "intersection":return e.of.some(t=>D(t,n));case "fn":return e.params.some(t=>D(t.type,n))||D(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>D(r.type,n))||D(t.returns,n));case "keyof":return D(e.of,n);case "index":return D(e.obj,n)||D(e.key,n);case "mapped":return D(e.over,n)||D(e.body,n);case "conditional":return D(e.check,n)||D(e.extends,n)||D(e.then,n)||D(e.else,n);case "returnType":case "parameters":return D(e.fn,n);case "apply":return e.args.some(t=>D(t,n));default:return false}}function _n(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ye(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&D(o)){r.push(O("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function nn(e,n="error"){let t=new Set(e);return r=>{let s=[];return ye(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(O("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(O("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function $e(e,n,t={}){let r=new Set(Qt(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(u,p)=>{let d=r.has(u.type),f=d?p+1:p;d&&f>n&&i.push(O("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of core.childrenOf(u))l(m,f);};return l(o,0),i}}var tn=(e=3,n="error")=>$e(Kn,e,{hint:"use a pipe instead of nesting functions",severity:n}),rn=(e,n="error")=>$e("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),sn=(e,n="error")=>$e("MemberExpression",e,{severity:n});function an(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(O("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 on(e,n="error"){return t=>{let r=0;return ye(t,()=>{r++;}),r>e?[O("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function ln(e,n="error"){return t=>{let r=[];return ye(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(O("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function un(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[O("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function Ue(e){let n=[en(e),qn(e),_n(e)];return e.hostAllow!=="*"&&n.push(nn([...e.hostAllow])),n}function Zt(e){return Ue(capability.compileProfile(e))}var cn=[{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"}],we=new Map(cn.map(e=>[e.op,e])),zn={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string},pn=e=>zn[e],Wn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],er={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string,undefined:typeCore.s.undefined},nr=[{op:"&&"},{op:"||"},{op:"??"}];function tr(e,n={}){return cn.filter(t=>t.result==="additive"?typeCore.subtype(typeCore.s.string,e,n)||typeCore.subtype(typeCore.s.number,e,n):typeCore.subtype(zn[t.result],e,n))}function rr(e,n={}){return Wn.filter(t=>typeCore.subtype(er[t.result],e,n))}var oe=e=>({bindings:new Map,parent:e}),xn=e=>e.charCodeAt(0)===95;function Ve(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 Ee(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ee(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&Ge(n,r);return}for(let r of Object.keys(t))Ee(t[r],n);}function Yn(e,n){let t=e;Ee(t.typeAnnotation,n),Ee(t.returnType,n);}function Ge(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function X(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Yn(e,n),Ve(n,t,o,e,r,s||a&&xn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")X(u.argument,n,t,r,s,false);else {let f=u;f.computed&&k(f.key,n,t),X(f.value,n,t,r,s||d,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;X(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":X(e.left,n,t,r,s,a);return;case "RestElement":X(e.argument,n,t,r,s,true);return;default:return}}function ve(e,n,t){if(e)switch(e.type){case "AssignmentPattern":k(e.right,n,t),ve(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)ve(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&ve(r,n,t);return;case "RestElement":ve(e.argument,n,t);return;default:return}}function Jn(e,n,t,r){for(let s of e.declarations)X(s.id,n,t,"local",r,false),k(s.init,n,t);}function dn(e,n,t){let r=e,s=oe(n),a=r.params??[];for(let o of a)X(o,s,t,"parameter",false,true);for(let o of a)ve(o,s,t);k(r.body,s,t);}function k(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Yn(e,n),e.type){case "Identifier":Ge(n,e.name);return;case "MemberExpression":{let r=e;k(r.object,n,t),r.computed&&k(r.property,n,t);return}case "Property":{let r=e;r.computed&&k(r.key,n,t),k(r.value,n,t);return}case "Program":case "BlockStatement":{let r=oe(n);for(let s of e.body??[])k(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":dn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Ve(n,t,r.name,r,"local",false),dn(e,n,t);return}case "CatchClause":{let r=e,s=oe(n);X(r.param,s,t,"local",true,false),k(r.body,s,t);return}case "SwitchStatement":{let r=e;k(r.discriminant,n,t);let s=oe(n);for(let a of r.cases){k(a.test,s,t);for(let o of a.consequent??[])k(o,s,t);}return}case "ForStatement":{let r=e,s=oe(n);k(r.init,s,t),k(r.test,s,t),k(r.update,s,t),k(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;k(r.right,n,t);let s=oe(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)X(o.id,s,t,"local",false,true);else k(a,s,t);k(r.body,s,t);return}case "VariableDeclaration":Jn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Ve(n,t,s.name,s,"import",xn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Jn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Ve(n,t,a.name,a,"local",true),dn(s,n,t);}else k(s,n,t);}else for(let s of r.specifiers)Ge(n,s.local.name);return}case "TSAsExpression":k(e.expression,n,t);return;case "TSTypeAliasDeclaration":Ee(e.typeAnnotation,n);return;case "JsonExpression":mn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;Xn(r.name,n);for(let s of r.attributes??[])k(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":k(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)k(i,n,t);else k(o,n,t);}return}}}function Xn(e,n,t){e&&(e.type==="JSXIdentifier"?Ge(n,e.name):e.type==="JSXMemberExpression"&&Xn(e.object,n));}function mn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)mn(s,n,t);return}let r=e;if("#expr"in r){try{k(codec.fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))mn(r[s],n,t);}function fn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};k(e,oe(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(y.unusedName(s.node,s.name));return r}var ir=new Set(["const","import"]),Ae=e=>({binds:new Map,parent:e});function lr(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ie(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ie(n.argument):ie(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ie(n):[]);case "AssignmentPattern":return ie(e.left);case "RestElement":return ie(e.argument);default:return []}}var Ke=(e,n,t)=>{for(let r of ie(n))e.binds.set(r.name,t);};function yn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ie(e))yn(a,n,t);return}let r=e.name,s=lr(n,r);s&&ir.has(s)&&(t.invalid.add(e),t.out.push(y.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;yn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{yn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ae(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ae(n);for(let a of r.params??[])Ke(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ae(n);Ke(s,r.param,"param"),F(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Ae(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ke(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),Ke(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 hn(e){let n={out:[],invalid:new WeakSet};return F(e,Ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var De=e=>({decls:new Map,parent:e});function cr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function he(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?he(n.argument):he(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?he(n):[]);case "AssignmentPattern":return he(e.left);case "RestElement":return he(e.argument);default:return []}}var qe=(e,n)=>{for(let t of he(n))e.decls.set(t.name,t);};function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=cr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;M(r.object,n,t),r.computed&&M(r.property,n,t);return}case "Property":{let r=e;r.computed&&M(r.key,n,t),M(r.value,n,t);return}case "Program":case "BlockStatement":{let r=De(n);for(let s of e.body??[])M(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=De(n);for(let o of r.params??[])qe(a,o);M(r.body,a,t);return}case "CatchClause":{let r=e,s=De(n);qe(s,r.param),M(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=De(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)qe(s,o.id);else a&&M(a,s,t);M(r.right,n,t),M(r.test,s,t),M(r.update,s,t),M(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)qe(n,r.id),M(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":M(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)M(i,n,t);else M(o,n,t);}return}}}function pr(e){let n=new WeakMap;return M(e,De(void 0),n),n}var gn=e=>e.typeAnnotation,Sn=e=>e.returnType,L=e=>e.type==="Identifier"?e.name:null,Qn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?L(n.id):null}return L(e)},Hn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Re=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function Zn(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 bn(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=bn(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function _e(e){let n=e;if(n.regex||n.bigint)return typeCore.s.unknown;let t=n.value;return t===null?typeCore.s.null:t===void 0?typeCore.s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:typeCore.s.unknown}var le=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):_e(e)},Nn=e=>e.type==="ArrowFunctionExpression",et=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Oe=e=>et(e)?e.args[0]:e,Te=e=>et(e)?e:typeCore.s.promise(e);function Ce(e){return e.t==="tuple"?true:e.t==="array"?Ce(e.items):e.t==="union"?e.of.some(Ce):false}function ge(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ge(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ge(e.bound):false}var K=(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 nt(e){let n=Sn(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:L(r)??`arg${s}`,type:gn(r)??typeCore.s.unknown})),returns:e.async?Te(n):n}:null}var Q={then:{},else:{}},ut=new Set(["string","number","boolean","undefined","function","object"]),tt={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function ct(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 yr=typeCore.s.literal(true),hr=typeCore.s.literal(false),J=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[yr,hr]:[e];function rt(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function gr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=J(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function Sr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=J(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function br(e,n){if(!ut.has(n))return null;if(e.t==="unknown"||e.t==="any")return tt[n]??e;let t=J(e).filter(r=>ct(r,n));return t.length?typeCore.normalizeUnion(t):tt[n]??e}function Nr(e,n){if(!ut.has(n)||e.t==="unknown"||e.t==="any")return null;let t=J(e).filter(r=>!ct(r,n));return t.length?typeCore.normalizeUnion(t):null}function st(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=le(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function at(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=le(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function ot(e,n,t,r,s){let a=J(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return r?!!u&&typeCore.subtype(t,u,s):!(u&&typeCore.subtype(u,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function it(e,n,t){let r=J(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 Br(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function kr(e,n,t){let r=J(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var wr=e=>e.t==="null"||e.t==="undefined",pt=e=>wr(e)||e.t==="literal"&&!e.value,vr=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=J(e),t=n.filter(r=>!pt(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Er=e=>{let n=J(e),t=n.filter(pt);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},lt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,q=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Ar=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function Me(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,h=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&h.type==="Identifier"){let g=h.name,N=R(n,g);if(!N)return Q;let C=String(m.value);return q(g,it(N,C,true),it(N,C,false))}return Q}if(!Ar(r.operator))return Q;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=rt(a,o)??rt(o,a);if(i){let m=R(n,i.name);if(!m)return Q;let h=br(m,i.tag),g=Nr(m,i.tag);return s?q(i.name,g,h):q(i.name,h,g)}let l=lt(a),u=lt(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let m=p.name,h=R(n,m);if(!h)return Q;let N=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??u],C=J(h),$=C.filter(T=>N.includes(T.t)),se=C.filter(T=>!N.includes(T.t)),de=$.length?typeCore.normalizeUnion($):null,E=se.length&&se.length<C.length?typeCore.normalizeUnion(se):null;return s?q(m,E,de):q(m,de,E)}let d=st(a,o)??st(o,a);if(d){let m=R(n,d.name);if(!m)return Q;let h=Br(m,d.lit,t),g=kr(m,d.lit,t);return s?q(d.name,g,h):q(d.name,h,g)}let f=at(a,o)??at(o,a);if(f){let m=R(n,f.name);if(!m)return Q;let h=ot(m,f.prop,f.lit,true,t),g=ot(m,f.prop,f.lit,false,t);return s?q(f.name,g,h):q(f.name,h,g)}return Q}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=Me(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Cr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=R(n,r);if(s)return q(r,vr(s),Er(s))}return Q}function Dr(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 Cr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=R(n,r.name);if(!s)return null;let a=Dr(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?q(i,gr(l,a.type,t),Sr(l,a.type,t)):null}var H=(e,n)=>Object.keys(n).length?U(e,n):e;function V(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>V(t));case "IfStatement":{let n=e;return !!n.alternate&&V(n.consequent)&&V(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&V(n.finalizer))return true;let t=!n.handler||V(n.handler.body);return V(n.block)&&t}default:return false}}var Wr=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function Jr(e){let n=[];return e.maxDepth!==void 0&&n.push(an(e.maxDepth)),e.maxNodes!==void 0&&n.push(on(e.maxNodes)),e.maxArgs!==void 0&&n.push(ln(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(tn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(rn(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(sn(e.memberDepth)),n}function xr(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>O("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function Nt(e,n,t={}){let r={...Wr(n.types),...n.schemes,...Xr(e)},s=hn(e),a={overlay:new WeakMap,sink:ae(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?capability.compileProfile(t.profile):void 0;o&&typeCore.configureTypeLimits(o.typeLimits);try{let i,l=Qr(e,a);try{i=S(e,l,a);}catch(d){if(d instanceof typeCore.TypeEvalLimitError)a.sink.report(O("too-deep",e,d.message));else if(d instanceof typeCore.UnionTooComplexError)a.sink.report(O("too-complex-union",e,d.message));else throw d;i=typeCore.s.unknown;}let u=[];o&&u.push(...Ue(o)),t.limits&&u.push(...Jr(t.limits)),t.resultType&&u.push(un(t.resultType,r));let p=[...a.sink.all,...s.diagnostics,...xr(e,r),...t.unused?fn(e,t.unused):[],...u.length?Ze(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function Yr(e,n,t={}){let r=Nt(e,n,t),s={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let f=L(d.id),m=r.overlay.get(d);f&&m&&(s[f]=m.type,p.push(f));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,f=r.overlay.get(u);d&&f&&(s[d]=f.type,p.push(d));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=r.overlay.get(u.declaration);o=p?p.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)s[p]&&(l[u]={type:s[p]});o!==void 0&&(l.default={type:o});}else for(let u in s)l[u]={type:s[u]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Xr=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function Qr(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(y.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=typeCore.s.unknown;return}for(let l of a.specifiers){if(l.importKind==="type")continue;let u=l.local.name;if(re(u,l.local,n),u in r){n.sink.report(y.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){r[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",d=typeCore.discover(i,[p],n.schemes);d?r[u]=d.type:(n.sink.report(y.noSuchMember(l,i,p)),r[u]=typeCore.s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?U(n.env.scope,r):n.env.scope}var b=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case kt:return e.schema;case "JSXElement":case "JSXFragment":return b(t,e,S(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return b(t,e,_e(e),n);case "Placeholder":return b(t,e,typeCore.s.any,n);case "Identifier":{let s=e.name,a=R(n,s);return a===void 0?s==="undefined"?b(t,e,typeCore.s.undefined,n):(t.sink.report(y.unknownName(e,s)),b(t,e,typeCore.s.unknown,n)):b(t,e,a,n)}case "MemberExpression":return b(t,e,es(e,n,t),n);case "CallExpression":return b(t,e,os(e,n,t,r),n);case "ArrowFunctionExpression":return On(e,n,t);case "FunctionDeclaration":return t.sink.report(y.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),b(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(y.unsupported(e,"anonymous function (use an arrow)")),b(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(y.unsupported(e,"'this'")),b(t,e,typeCore.s.unknown,n);case "BlockStatement":return b(t,e,Ot(e,n,t),n);case "ReturnStatement":{let s=e.argument;return b(t,e,s?S(s,n,t):typeCore.s.unknown,n)}case "IfStatement":return z(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 z(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=S(a,n,t);if(a.type==="MemberExpression"){let p=t.overlay.get(a.object)?.type,d=p&&typeCore.apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(y.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=S(s.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(d)),b(t,e,d,n)}if(u&&i!==null){let d=S(s.right,n,t);return typeCore.subtype(d,u,t.schemes)||t.sink.report(y.notAssignable(s.right,d,u,t.schemes)),t.assignFlow.set(e,Tt(u,d,t.schemes)),b(t,e,d,n)}let p=x(s.right,o,n,t);return b(t,e,p,n)}return b(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=S(s.argument,n,t);return Ie(a,t.schemes)||t.sink.report(y.arithmeticOperand(s.argument,"operand")),b(t,e,typeCore.s.number,n)}case "ExpressionStatement":return b(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return We(e,n,t),b(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":{let s=e.id?.name,a=s?t.schemes[s]:void 0;return b(t,e,a?ps(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return b(t,e,Ds(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=S(s.right,n,t);return b(t,e,Rs(s.operator,a,o),n)}case "UnaryExpression":return b(t,e,Ts(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=S(s.consequent,H(n,a.then),t),i=S(s.alternate,H(n,a.else),t);return b(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return b(t,e,Ps(e,n,t),n);case "ArrayExpression":return b(t,e,jt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=S(s,n,t);Ft(a,t.schemes)||t.sink.report(y.notTextConvertible(s,a));}return b(t,e,typeCore.s.string,n)}case "AwaitExpression":{let s=e.argument,a=s?S(s,n,t):typeCore.s.unknown;return b(t,e,Oe(a),n)}case "Program":{let s=ze(e.body,n,t,new Set(t.importNames)).scope;return b(t,e,typeCore.s.unknown,s)}case "JsonExpression":return b(t,e,En(e.body,n,t,e),n);case "ChainExpression":return b(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=Be(s.typeAnnotation,n,t,e);return !typeCore.subtype(a,o,t.schemes)&&!typeCore.subtype(o,a,t.schemes)&&t.sink.report(y.castUnsound(e,a,o)),b(t,e,o,n)}default:return t.sink.report(y.unsupported(e,`'${e.type}'`)),b(t,e,typeCore.s.unknown,n)}}var Hr=new Set(["constructor","prototype","__proto__"]);function Zr(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 es(e,n,t){let r=S(e.object,n,t),s=Zr(e);if(s!==null&&Hr.has(s))return t.sink.report(y.forbiddenMember(e,s)),typeCore.s.unknown;if(e.computed){let i=S(e.property,n,t),l=typeCore.resolveTypeOp(typeCore.s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&dt(e,r,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(r,[a],t.schemes);return o?o.type:(dt(e,r,a,t),typeCore.s.unknown)}function dt(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(y.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(y.notObject(e,n));}function ns(e,n,t,r){let s=e.arguments[0];if(!s){r.sink.report(y.missingArgument(e,"schema",typeCore.s.unknown));return}if(s.type!=="Identifier"){r.sink.report(y.asserterNeedsName(s,n));return}let a=s.name,o=R(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?y.typeAsValue(s,a):y.unknownName(s,a));return}if(!i||i.params.length>0){r.sink.report(y.notASchema(s,a));return}if(!(Bt(a,r)&&!ts(t,a)))return r.overlay.set(s,{type:i.body,scope:t}),i.body}function Bt(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&R(n.env.scope,e)!==void 0}function ts(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 re(e,n,t){Bt(e,t)&&t.sink.report(y.shadowsSchema(n,e));}function Rn(e,n){let t=K(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function rs(e,n){let t=R(e.scope,n);if(!t)return;let r=Rn(t,e.schemes);return r?K(r,e.schemes):void 0}function ss(e,n,t,r){let s=Rn(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(y.propsMismatch(n[1]??e,s,typeCore.formatTypeDiff(o)));}return b(r,e,typeCore.s.boolean,t)}var kt="TSLiteSyntheticArg",as=e=>({type:kt,schema:e});function wt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=K(S(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(as(l));else s={elem:Tn(i,o,t),node:a};}return {nodes:r,spread:s}}function os(e,n,t,r){let s=e.arguments,a=bn(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=Zn(s);if(f){let m=typeCore.discover(d,f,t.schemes);return m?m.type:(t.sink.report(y.noSuchMember(e,d,f.join("."))),typeCore.s.unknown)}return s.forEach(m=>S(m,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let d=ns(e,a,n,t);s.length<2&&s.length>0&&t.sink.report(y.missingArgument(e,"value",typeCore.s.unknown));for(let f=1;f<s.length;f++)S(s[f],n,t);return d??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return ss(e,s,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s.forEach(d=>S(d,n,t)),typeCore.s.any;if(o.t==="overload")return ls(e,o,n,t,r);if(o.t!=="fn")return s.forEach(d=>S(d,n,t)),t.sink.report(y.notCallable(e,o)),typeCore.s.unknown;let i=wt(s,n,t),l=i.nodes.map(d=>vt(d,n,t)),u=At(e),p=!u||Dt(o,u.length);return p||t.sink.report(y.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),vn(e,o,i.nodes,l,n,t,i.spread,r,p?u:void 0)}function vt(e,n,t){if(Nn(e))return typeCore.s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=ae(),s=S(e,n,{...t,sink:r});return r.hasErrors()?typeCore.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function vn(e,n,t,r,s,a,o=null,i,l){let u=h=>{if(!i)return h;let g=typeCore.substitute(n.returns,h);if(g.t==="fn"&&i.t==="fn"){let N=h,C=Math.min(g.params.length,i.params.length);for(let $=0;$<C;$++)N=typeCore.unify(g.params[$].type,i.params[$].type,N)??N;return typeCore.unify(g.returns,i.returns,N)??N}return typeCore.unify(g,i,h)??h},p=l?ms(e,n,l,a):void 0,d=p??u(typeCore.instantiateLoose(n,r).bindings);t.forEach((h,g)=>{if(Nn(h)){let N=typeCore.widenType(typeCore.substitute(n.params[g]?.type??typeCore.s.any,d));r[g]=On(h,s,a,N);}else if(h.type==="CallExpression"&&r[g].t==="any")r[g]=S(h,s,a,typeCore.substitute(n.params[g]?.type??typeCore.s.unknown,d));else if(h.type==="Literal"){let N=n.params[g]?.type??typeCore.s.unknown,C=N.t==="var"?N.bound?typeCore.substitute(N.bound,d):N:typeCore.substitute(N,d);ge(C)&&(r[g]=b(a,h,le(h),s));}else if(h.type==="ArrayExpression"||h.type==="ObjectExpression"||h.type==="ConditionalExpression"){let N=n.params[g]?.type??typeCore.s.unknown,C=typeCore.substitute(N,d);if(h.type==="ArrayExpression"&&Ce(C)){r[g]=Mn(h,C,s,a);return}let $=N.t==="var"?N.bound?typeCore.substitute(N.bound,d):void 0:C;$&&Ms($,a.schemes)&&(r[g]=Is(h,$,s,a,N.t==="var")??r[g]);}});let f=p??u(typeCore.instantiateLoose(n,r).bindings);p||is(e,n,f,a),gs(e,n,r,f,a,t,o),t.forEach((h,g)=>{let N=n.params[g];h.type==="ObjectExpression"&&N&&!N.variadic&&Pn(h,typeCore.substitute(N.type,f),a);});let m=typeCore.substitute(n.returns,f);return typeCore.widenInferred(typeCore.groundVars(m.t==="union"?typeCore.normalizeUnion(m.of):m,a.schemes))}var mt=new WeakMap;function Et(e){let n=mt.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)j(s.type,t,r);return j(e.returns,t,r),mt.set(e,t),t}function j(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":j(e.items,n,t);return;case "union":for(let r of e.of)j(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)j(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)j(r.type,n,t);j(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)j(s.type,n,t);j(r.returns,n,t);}return;case "apply":for(let r of e.args)j(r,n,t);return;case "keyof":j(e.of,n,t);return;case "index":j(e.obj,n,t),j(e.key,n,t);return;case "mapped":j(e.over,n,t),j(e.body,n,t);return;default:return}}function is(e,n,t,r){let s=Et(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=typeCore.substitute(o,t);typeCore.subtype(i,l,r.schemes)||r.sink.report(y.constraintViolation(e,a,i,l));}}function ls(e,n,t,r,s){let a=wt(e.arguments,t,r),o=a.nodes,i=o.map(p=>vt(p,t,r)),l=At(e),u=l?n.signatures.filter(p=>Dt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(y.wrongTypeArgumentCount(e,p,l.length)),ft(e,n.signatures,a,o,i,t,r,s,void 0)}return ft(e,u,a,o,i,t,r,s,l)}function ft(e,n,t,r,s,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?fs(m,r.length):ys(m,r.length),d=u.signatures.filter(p);if(d.length>1&&s.some(m=>m.t==="any"))for(let m of d){let h=ae(),g=vn(e,m,r,s,a,{...o,sink:h},t.spread,i,l);if(!h.hasErrors())return h.all.forEach(N=>o.sink.report(N)),g}let f=u.signatures.find(m=>p(m)&&hs(m,s,o));if(!f){let m=u.signatures.filter(p);m.length===1?f=m[0]:u.signatures.length===1&&(f=u.signatures[0]);}return f?vn(e,f,r,s,a,o,t.spread,i,l):(o.sink.report(y.noMatchingOverload(e,u,s)),typeCore.s.unknown)}function us(e,n,t,r){let s=R(n,e[0]);if(s===void 0)return t.sink.report(y.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(y.noSuchMember(r,s,a.join("."))),typeCore.s.unknown)}function Be(e,n,t,r){let s=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let f=s(d);return f!==d&&(u=true),f});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return us(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(cs(o.name,n,t,r),!(o.name in t.schemes)))return typeCore.s.any;let i=false,l={};for(let u of Object.keys(o)){let p=s(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return s(e)}function cs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Be(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function ps(e,n,t,r,s){let a={...t,sink:ae(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Be(e,n,a,r);return a.sink.hasErrors()?e:s?o:typeCore.groundVars(o,t.schemes)}var Fe=(e,n,t)=>{let r=gn(e);return r===void 0?r:Be(r,n,t,e)},ds=(e,n,t)=>{let r=Sn(e);return r===void 0?r:Be(r,n,t,e)},At=e=>{let n=e.typeArguments;return n?.length?n:void 0},Dt=(e,n)=>(e.typeParams?.length??0)===n;function ms(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Et(n)){let u=o[i];if(!u)continue;let p=typeCore.groundVars(typeCore.substitute(l,o),r.schemes);typeCore.subtype(u,p,r.schemes)||r.sink.report(y.constraintViolation(e,i,u,p));}return o}function fs(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 ys(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 hs(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 l=s;l<n.length;l++)if(!typeCore.subtype(n[l],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 gs(e,n,t,r,s,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic){let f=typeCore.substitute(p.type,r),m=f.t==="array"?f.items:typeCore.s.unknown;for(let h=u;h<t.length;h++)typeCore.subtype(t[h],m,s.schemes)||s.sink.report(y.notAssignable(i(h),t[h],m,s.schemes));break}let d=typeCore.substitute(p.type,r);if(u>=t.length){!p.optional&&!o&&s.sink.report(y.missingArgument(e,p.name,d));continue}typeCore.subtype(t[u],d,s.schemes)||s.sink.report(y.notAssignable(i(u),t[u],d,s.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){s.sink.report(y.spreadArgument(o.node));return}if(l){let d=typeCore.substitute(l.type,r),f=d.t==="array"?d.items:typeCore.s.unknown;typeCore.subtype(o.elem,f,s.schemes)||s.sink.report(y.notAssignable(o.node,o.elem,f,s.schemes));}return}!l&&t.length>n.params.length&&s.sink.report(y.excessArgument(i(n.params.length),n.params.length,t.length));}function Ct(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=>Ct(typeCore.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:typeCore.resolveTypeOp({t:"intersection",of:r})}}function x(e,n,t,r,s=false){let a=typeCore.apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=typeCore.resolveConditional(a,r.schemes)??a),e.type){case "Literal":{let i=le(e);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,s?ge(n)?i:typeCore.widen(_e(e)):n,t)}case "ArrayExpression":{if(Ce(a)){let i=Mn(e,a,t,r);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,i,t)}if(a.t==="array"){let i=[];for(let u of e.elements){if(!u)continue;let p=u;if(p.type==="SpreadElement"){let d=x(p.argument,n,t,r,s);d.t==="array"&&i.push(d.items);}else i.push(x(p,a.items,t,r,s));}let l=s&&i.length>0?typeCore.s.array(typeCore.normalizeUnion(i)):n;return b(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let p of e.properties){let d=p;if(d.type==="SpreadElement"){S(d.argument,t,r);continue}let f=d,m=Re(f),h=m!==null?Ct(a,m,r.schemes):void 0,g=h?x(f.value,h,t,r,s):typeCore.widen(S(f.value,t,r));m!==null&&(i[m]={type:h??g},l[m]={type:g}),b(r,d,g,t);}let u={t:"object",props:i};return typeCore.subtype(u,n,r.schemes)||r.sink.report(y.notAssignable(e,u,n,r.schemes)),b(r,e,s?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=On(e,t,r,a);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let l=x(i.consequent,n,t,r,s),u=x(i.alternate,n,t,r,s);return b(r,e,s?typeCore.normalizeUnion([l,u]):n,t)}case "Placeholder":return b(r,e,n,t)}let o=S(e,t,r);return typeCore.subtype(o,n,r.schemes)||r.sink.report(y.notAssignable(e,o,n,r.schemes)),b(r,e,o,t)}function On(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=E=>a?.length?{...E,typeParams:a}:E,i={},l=new Map,u=e.params.map((E,T)=>{let P=E,xe=s?.params[T]?.type;if(P.type==="RestElement"){let ne=P.argument,G=Fe(ne,n,t)??(s?.params[T]?.variadic?xe:void 0)??typeCore.s.array(typeCore.s.unknown),W=L(ne);return W?(re(W,ne,t),i[W]=G):Z(ne,G,i,n,t),t.overlay.set(ne,{type:G,scope:n}),t.overlay.set(P,{type:G,scope:n}),{name:W??`arg${T}`,type:G,variadic:true}}if(P.type==="AssignmentPattern"){let ne=P.left,Ye=Fe(ne,n,t)??xe;Z(P,Ye??typeCore.s.unknown,i,n,t);let G=L(ne),W=G?i[G]:void 0,Xe=Ye??W??typeCore.s.unknown,Un=Xe.t==="unknown"?Xe:typeCore.normalizeUnion([Xe,typeCore.s.undefined]);return G&&W&&(W.t==="union"||W.t==="boolean")&&l.set(G,W),t.overlay.set(P,{type:Un,scope:n}),{name:G??`arg${T}`,type:Un,optional:true}}let me=L(P),jn=Fe(P,n,t),ke=jn??xe??typeCore.s.unknown,$n=P.type==="Identifier"&&(!!P.optional||jn===void 0&&!!s?.params[T]?.optional),fe=$n&&ke.t!=="unknown"?typeCore.normalizeUnion([ke,typeCore.s.undefined]):ke;return me?(re(me,P,t),i[me]=fe,(fe.t==="union"||fe.t==="boolean")&&l.set(me,fe)):P.type!=="Identifier"&&Z(P,ke,i,n,t),t.overlay.set(P,{type:fe,scope:n}),$n?{name:me??`arg${T}`,type:fe,optional:true}:{name:me??`arg${T}`,type:ke}}),p=false;u.forEach((E,T)=>{E.optional?p=true:!E.variadic&&p&&t.sink.report(y.requiredAfterOptional(e.params[T]));});let d=U(n,i),f=e.body,m=ds(e,n,t),h=e.returnGuard,g=h?{param:h.param,type:Be(h.type,n,t,e)}:void 0;if(g){let E=u[g.param];E&&!typeCore.subtype(g.type,E.type,t.schemes)&&t.sink.report(y.notAssignable(e,g.type,E.type,t.schemes));}let N=E=>g?{...E,guard:g}:E;if(f.type!=="BlockStatement"&&m){let E=e.async?Oe(m):m;x(f,E,d,t);let T=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:T})),n)}let C=m??s?.returns,$=C&&e.async?Oe(C):C,se=f.type==="BlockStatement"?b(t,f,Ot(f,d,t,new Set(Object.keys(i)),l,$),d):S(f,d,t),de=e.async?Te(se):se;if(m){let E=e.async?Oe(m):m,T=e.async?se:de;typeCore.subtype(T,E,t.schemes)||t.sink.report(y.notAssignable(f,de,m,t.schemes));let P=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:P})),n)}return b(t,e,o({t:"fn",params:u,returns:typeCore.widenType(de)}),n)}function be(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?be(n.argument):be(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?be(n.argument):be(n):[]);case "AssignmentPattern":return be(e.left);default:return []}}function Rt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>be(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Rt(e.declaration):[]}function Ot(e,n,t,r=new Set,s,a){let{returns:o}=ze(e.body,n,t,r,s,a),i=!V(e);return o.length===0?i?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(i?[...o,typeCore.s.undefined]:o)}var Ss=[typeCore.s.literal(true),typeCore.s.literal(false)];function bs(e){return e.t==="union"?e.of:e.t==="boolean"?Ss:[e]}function Tt(e,n,t){let r=bs(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 Pt(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 ce(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=ce(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=Pt(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=Mt(e,n,t);if(r.size===0)return {types:n,exits:V(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:V(e)}}case "TryStatement":{let r=e,s=[],a=ce(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=ce(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Ns(n,s);return r.finalizer&&(o=ce(r.finalizer,o,t).types),{types:o,exits:V(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function Mt(e,n,t){let r=ce(e.consequent,n,t),s=e.alternate?ce(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,typeCore.normalizeUnion(l));}return o}function It(e,n){let t=new Map,r=s=>{let a=R(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function Ns(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 Bs(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=It(n,t),s=ce(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 H(n,a)}function ze(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!ks(e))return yt(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,u]of s)t.declaredMut.set(l,u);try{return yt(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,u]of i)t.declaredMut.set(l,u);}}function ks(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 yt(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let u of Rt(l))r.has(u.name)?t.sink.report(y.cannotRedeclare(u,u.name)):r.add(u.name);if(l.type==="VariableDeclaration")a=We(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration?.type==="VariableDeclaration")a=We(u.declaration,a,t);else if(u.declaration?.type==="FunctionDeclaration"){let p=S(u.declaration,a,t),d=L(u.declaration.id);d&&(a=U(a,{[d]:p}));}else for(let p of u.specifiers)R(a,p.local.name)===void 0&&t.sink.report(y.unknownName(p.local,p.local.name));}else if(l.type==="ExportDefaultDeclaration")S(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let u=S(l,a,t),p=L(l.id);p&&(a=U(a,{[p]:u}));}else if(l.type==="IfStatement"){let u=l,p=t.evolving.size||t.declaredMut.size?It(a,t):null;if(o.push(...z(l,a,t,s)),p&&p.size){let d=Mt(u,p,t);d.size&&(a=H(a,Object.fromEntries(d)));}!u.alternate&&V(u.consequent)&&(a=H(a,Me(u.test,a,t.schemes).else));}else {o.push(...z(l,a,t,s));let u=Pt(l,t);u?a=H(a,{[u.name]:u.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=Bs(l,a,t));}}return {scope:a,returns:o}}function z(e,n,t,r){switch(e.type){case "ReturnStatement":{let s=e.argument,a=s?r?(x(s,r,n,t),r):S(s,n,t):typeCore.s.unknown;return b(t,e,a,n),[a]}case "IfStatement":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=z(s.consequent,H(n,a.then),t,r);return s.alternate&&o.push(...z(s.alternate,H(n,a.else),t,r)),b(t,e,typeCore.s.unknown,n),o}case "BlockStatement":{let{returns:s}=ze(e.body,n,t,void 0,void 0,r);return b(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=We(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=z(s.body,a,t,r);return b(t,e,typeCore.s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s=e,a=S(s.right,n,t),o=e.type==="ForOfStatement"?Tn(a,s.right,t):typeCore.s.string,i=Qn(s.left);i&&re(i,Hn(s.left),t);let l=i?U(n,{[i]:o}):n,u=z(s.body,l,t,r);return b(t,e,typeCore.s.unknown,n),u}case "BreakStatement":case "ContinueStatement":return b(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&S(s,n,t),b(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let s=e,a=z(s.block,n,t,r);if(s.handler){let o=s.handler.param,i=o?L(o):null;i&&o&&re(i,o,t);let l=i?U(n,{[i]:typeCore.s.unknown}):n;a.push(...z(s.handler.body,l,t,r));}return s.finalizer&&a.push(...z(s.finalizer,n,t,r)),b(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 l=ze(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return b(t,e,typeCore.s.unknown,n),o}default:return S(e,n,t),[]}}function ws(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function Tn(e,n,t){let r=K(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=>Tn(s,n,t)));}return t.sink.report(y.notIterable(n,e)),typeCore.s.any}function vs(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function Es(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return typeCore.s.object(t,e.index)}function As(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function Z(e,n,t,r,s){switch(e.type){case "Identifier":{let a=Fe(e,r,s)??n;re(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(y.notAssignable(a.right,o,n,s.schemes));let i=typeCore.widenType(o),{type:l}=typeCore.withoutUndefined(n),u=l.t==="unknown"?i:typeCore.normalizeUnion([l,i]),p=a.left;if(p.type==="Identifier"){let d=p.name;re(d,p,s),t[d]=u,s.overlay.set(p,{type:u,scope:r});}else Z(p,u,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Z(o.argument,Es(n,a),t,r,s);continue}let i=o,l=Re(i);l!=null&&a.push(l);let u=l!=null?ws(n,l,s):typeCore.s.unknown;Z(i.value,u,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Z(i.argument,As(n,o),t,r,s):Z(i,vs(n,o),t,r,s);});return}}}function Pn(e,n,t){let r=K(n,t.schemes),a=(r.t==="union"?r.of.map(o=>K(o,t.schemes)):[r]).filter(o=>o.t==="object"&&(!o.index||o.index.key==="number"));if(a.length&&!a.some(o=>Object.keys(o.props).length===0&&!o.index))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=Re(i);if(l===null)continue;let u=a.filter(p=>l in p.props||p.index?.key==="number"&&typeCore.isNumericLiteralName(l));if(!u.length){t.sink.report(y.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&Pn(i.value,u[0].props[l].type,t);}}function We(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=L(a);o&&re(o,a,t);let i=Fe(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,ht(o,i,t)):(r[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(y.constNeedsInit(s)),o&&(r[o]=i??typeCore.s.unknown);continue}let l=i??(s.init.type==="ArrowFunctionExpression"?nt(s.init):null),u=o&&l?U(n,{[o]:l}):n,p,d=null;i?(x(s.init,i,u,t),s.init.type==="ObjectExpression"&&Pn(s.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&s.init.type==="Literal"&&(p=Tt(i,le(s.init),t.schemes))):(p=S(s.init,u,t),e.kind!=="const"&&(p=typeCore.widenLiteral(p)),d=p),b(t,s,p,n),o?(r[o]=p,e.kind!=="const"&&d&&ht(o,d,t)):Z(a,p,r,n,t);}return b(t,e,typeCore.s.unknown,n),U(n,r)}function ht(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Ds(e,n,t){let r=S(e.left,n,t),s=S(e.right,n,t),a=e.operator,o=we.get(a);if(!o)return typeCore.s.boolean;if(o.category==="additive"){if(pe(r)||pe(s))return ue(r,t.schemes)||ue(s,t.schemes)?typeCore.s.string:typeCore.s.number;if(ue(r,t.schemes)&&ue(s,t.schemes))return typeCore.s.string;if(Ie(r,t.schemes)&&Ie(s,t.schemes))return typeCore.s.number;if(ue(r,t.schemes)||ue(s,t.schemes)){let l=ue(r,t.schemes)?s:r;return t.sink.report(y.implicitCoercion(e,r,s,Ft(l,t.schemes))),typeCore.s.string}return t.sink.report(y.operatorNotApplicable(e,"+",r,s)),typeCore.s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ie(r,t.schemes)||t.sink.report(y.arithmeticOperand(e.left,"left")),Ie(s,t.schemes)||t.sink.report(y.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!pe(r)&&!pe(s)){let i=typeCore.apparentType(r,t.schemes),l=typeCore.apparentType(s,t.schemes),u=typeCore.subtype(i,typeCore.s.number,t.schemes),p=typeCore.subtype(l,typeCore.s.number,t.schemes);u&&p||!u&&!p&&(typeCore.subtype(i,l,t.schemes)||typeCore.subtype(l,i,t.schemes))||t.sink.report(y.operatorNotApplicable(e,a,r,s));}return pn(o.result)}var pe=e=>e.t==="any"||e.t==="unknown",Ie=(e,n)=>pe(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),ue=(e,n)=>!pe(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),Cs=typeCore.s.union([typeCore.s.string,typeCore.s.number,typeCore.s.boolean,typeCore.s.null,typeCore.s.undefined]),Ft=(e,n)=>pe(e)||typeCore.subtype(typeCore.apparentType(e,n),Cs,n),gt={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},kn=e=>e.t==="null"||e.t==="undefined";function Rs(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=>!kn(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!kn(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>kn(a)?[a]:a.t==="literal"?a.value?[]:[a]:gt[a.t]?[gt[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var Os=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function Ts(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 Os;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function Ps(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=K(S(p.argument,n,t),t.schemes);if(g.t==="object"){for(let N in g.props)r[N]=g.props[N];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let d=p,f=S(d.value,n,t),m=typeCore.widen(f);if(b(t,p,f,n),d.computed){let g=K(S(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let h=Re(d);h!==null&&(r[h]={type:m},a.push(m),/^\d+$/.test(h)&&o.push(m));}return i?s={key:"string",type:typeCore.normalizeUnion(a)}:l&&(s={key:"number",type:typeCore.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function jt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=K(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 Mn(e,n,t,r){let s=K(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?Mn(l,u,t,r):ge(u)?S(l,t,r):typeCore.widen(S(l,t,r));if(s.t==="tuple"&&o){let l=s.elements.length,u=typeCore.restIndex(s),p=u<0?0:l-u-1,d=m=>{if(u<0||m<u)return s.elements[m];let h=a.length-m;return h<=p?s.elements[l-h]:s.elements[u]},f=a.map((m,h)=>{let g=d(h);return g?i(m,g):typeCore.widen(S(m,t,r))});return b(r,e,{t:"tuple",elements:f},t)}if(s.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){S(p.argument,t,r);continue}l.push(i(p,s.items));}return b(r,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return jt(e,t,r)}function En(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=>En(i,n,t,r));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let s=e;if("#expr"in s){let o;try{o=codec.fromJson(s);}catch{return t.sink.report(y.unsupported(r,`'#expr: ${String(s["#expr"])}'`)),typeCore.s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:En(s[o],n,t,r)};return {t:"object",props:a}}function Ms(e,n){let t=typeCore.apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function Is(e,n,t,r,s){let a=ae(),o=x(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(u=>u.node===l.node&&u.code===l.code&&u.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var Fs=(e,n)=>({...e,typeAnnotation:n}),js=(e,n)=>({...e,returnType:n}),$s=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Fn(e,n){return e.get(n)?.type}function Us(e,n){return e.get(n)?.scope}function Ls(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function Vs(e,n){let t=e.get(n)?.scope;return t?[...Qe(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Gs=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Ks(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 Je(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(Gs)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=Fn(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=Je(e,n+2,t,r),l=Ks(a);return !i||!l?void 0:typeCore.discover(i,[l],r)?.type}case "ArrayExpression":{let o=Je(e,n+1,t,r);return o?typeCore.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=we.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return typeCore.s.number;let i=a.left===s?a.right:a.left,l=Fn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Je(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?typeCore.s.number:void 0}default:return}}function qs(e,n){return e.filter(t=>t.node===n)}exports.BINARY_OP=we;exports.BINARY_OPS=cn;exports.FUNCTION_KINDS=Kn;exports.LOGICAL_OPS=nr;exports.UNARY_OPS=Wn;exports.annotate=Fs;exports.annotateReturn=js;exports.asExpression=$s;exports.binaryOpsProducing=tr;exports.calleeAllowlist=nn;exports.capabilityNodes=en;exports.check=Nt;exports.childScope=U;exports.collectBindings=pr;exports.collectMutations=hn;exports.collectUnused=fn;exports.componentProps=rs;exports.componentPropsOf=Rn;exports.contextualTypeAt=Je;exports.createEnv=Kt;exports.createSink=ae;exports.diag=y;exports.diagnosticsAt=qs;exports.extractModuleType=Yr;exports.fromCapability=Zt;exports.guard=Ze;exports.guardsFromCompiled=Ue;exports.lookup=R;exports.makeDiagnostic=O;exports.maxArgs=ln;exports.maxCallNesting=rn;exports.maxDepth=an;exports.maxFunctionNesting=tn;exports.maxNestingOf=$e;exports.maxNodes=on;exports.memberCompletions=Ls;exports.memberDepth=sn;exports.opResultSchema=pn;exports.resolveNamed=qt;exports.resolveScheme=_t;exports.resultType=un;exports.rootScope=Ln;exports.scopeAt=Us;exports.scopeCompletions=Vs;exports.typeAt=Fn;exports.unaryOpsProducing=rr;exports.visibleNames=Qe;Object.keys(typeCore).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return typeCore[k]}})});
|
|
1
|
+
'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec');var Gn=(e={})=>core.rootScope(e),L=(e,n)=>core.childScope(e,n),R=(e,n)=>core.lookup(e,n),Ze=e=>core.visibleNames(e),zt=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:Gn(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),Wt=(e,n)=>e.types[n],Jt=(e,n)=>e.schemes[n];var Kn={"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","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"},B=(e,n,t)=>({code:e,kind:Kn[e],severity:"error",node:n,message:t}),O=(e,n,t,r="error")=>({code:e,kind:Kn[e],severity:r,node:n,message:t}),y={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r),a=s.filter(u=>u.path.length>0),o=a.length?` ${typeCore.formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${o}`),l=s.filter(u=>u.kind==="missing"&&u.path.length===1).map(u=>({name:u.path[0],type:u.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),notASchema:(e,n)=>B("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)=>B("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)=>B("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>B("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)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>B("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>B("not-iterable",e,`Type '${typeCore.format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(r=>typeCore.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>B("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(r)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>O("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>B("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.`),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...B("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)=>({...B("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 ae(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function $e(e,n,t){let r=typeCore.baseLiteralType(e);return typeCore.comparable(n,typeCore.widenType(r),t)||typeCore.comparable(r,n,t)}function _n(e,n,t){return typeCore.subtype(e,n,t)}function nn(e,n,t={}){return n.flatMap(r=>r(e,t))}function oe(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var sr=e=>Array.isArray(e)?e:[e],xn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function tn(e,n="error"){return t=>{let r=[];return oe(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(O("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function zn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return oe(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);u.length&&s.push(O("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function E(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>E(t.type,n))||!!e.index&&E(e.index.value,n);case "array":return E(e.items,n);case "tuple":return e.elements.some(t=>E(t,n));case "union":case "intersection":return e.of.some(t=>E(t,n));case "fn":return e.params.some(t=>E(t.type,n))||E(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>E(r.type,n))||E(t.returns,n));case "keyof":return E(e.of,n);case "index":return E(e.obj,n)||E(e.key,n);case "mapped":return E(e.over,n)||E(e.body,n);case "conditional":return E(e.check,n)||E(e.extends,n)||E(e.then,n)||E(e.else,n);case "returnType":case "parameters":return E(e.fn,n);case "apply":return e.args.some(t=>E(t,n));default:return false}}function Wn(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return oe(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&E(o)){r.push(O("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function Jn(e,n="error"){return (t,r)=>{let s=r.overlay;if(!e.typeStrict||!s)return [];let a=r.schemes??{},o=[];return oe(t,i=>{if(i.type!=="TSAsExpression")return;let{expression:l}=i,u=s.get(l)?.type,p=s.get(i)?.type;!u||!p||E(p)||!$e(u,p,a)||_n(u,p,a)||o.push(O("narrowing-cast-not-allowed",i,`A cast may only widen under 'strict': '${typeCore.format(u)}' is not assignable to '${typeCore.format(p)}'. Narrow with a type guard, or prove the value with an asserter.`,n));}),o}}function rn(e,n="error"){let t=new Set(e);return r=>{let s=[];return oe(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(O("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(O("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Ue(e,n,t={}){let r=new Set(sr(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(u,p)=>{let d=r.has(u.type),f=d?p+1:p;d&&f>n&&i.push(O("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of core.childrenOf(u))l(m,f);};return l(o,0),i}}var sn=(e=3,n="error")=>Ue(xn,e,{hint:"use a pipe instead of nesting functions",severity:n}),an=(e,n="error")=>Ue("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),on=(e,n="error")=>Ue("MemberExpression",e,{severity:n});function ln(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(O("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 un(e,n="error"){return t=>{let r=0;return oe(t,()=>{r++;}),r>e?[O("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function cn(e,n="error"){return t=>{let r=[];return oe(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(O("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function pn(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[O("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function Ve(e){let n=[tn(e),zn(e),Wn(e),Jn(e)];return e.hostAllow!=="*"&&n.push(rn([...e.hostAllow])),n}function or(e){return Ve(capability.compileProfile(e))}var dn=[{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"}],we=new Map(dn.map(e=>[e.op,e])),Yn={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string},mn=e=>Yn[e],Xn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],ir={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string,undefined:typeCore.s.undefined},lr=[{op:"&&"},{op:"||"},{op:"??"}];function ur(e,n={}){return dn.filter(t=>t.result==="additive"?typeCore.subtype(typeCore.s.string,e,n)||typeCore.subtype(typeCore.s.number,e,n):typeCore.subtype(Yn[t.result],e,n))}function cr(e,n={}){return Xn.filter(t=>typeCore.subtype(ir[t.result],e,n))}var ie=e=>({bindings:new Map,parent:e}),Hn=e=>e.charCodeAt(0)===95;function Ke(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 Ee(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ee(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&qe(n,r);return}for(let r of Object.keys(t))Ee(t[r],n);}function Zn(e,n){let t=e;Ee(t.typeAnnotation,n),Ee(t.returnType,n);}function qe(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function X(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Zn(e,n),Ke(n,t,o,e,r,s||a&&Hn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")X(u.argument,n,t,r,s,false);else {let f=u;f.computed&&k(f.key,n,t),X(f.value,n,t,r,s||d,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;X(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":X(e.left,n,t,r,s,a);return;case "RestElement":X(e.argument,n,t,r,s,true);return;default:return}}function ve(e,n,t){if(e)switch(e.type){case "AssignmentPattern":k(e.right,n,t),ve(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)ve(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&ve(r,n,t);return;case "RestElement":ve(e.argument,n,t);return;default:return}}function Qn(e,n,t,r){for(let s of e.declarations)X(s.id,n,t,"local",r,false),k(s.init,n,t);}function fn(e,n,t){let r=e,s=ie(n),a=r.params??[];for(let o of a)X(o,s,t,"parameter",false,true);for(let o of a)ve(o,s,t);k(r.body,s,t);}function k(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Zn(e,n),e.type){case "Identifier":qe(n,e.name);return;case "MemberExpression":{let r=e;k(r.object,n,t),r.computed&&k(r.property,n,t);return}case "Property":{let r=e;r.computed&&k(r.key,n,t),k(r.value,n,t);return}case "Program":case "BlockStatement":{let r=ie(n);for(let s of e.body??[])k(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":fn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Ke(n,t,r.name,r,"local",false),fn(e,n,t);return}case "CatchClause":{let r=e,s=ie(n);X(r.param,s,t,"local",true,false),k(r.body,s,t);return}case "SwitchStatement":{let r=e;k(r.discriminant,n,t);let s=ie(n);for(let a of r.cases){k(a.test,s,t);for(let o of a.consequent??[])k(o,s,t);}return}case "ForStatement":{let r=e,s=ie(n);k(r.init,s,t),k(r.test,s,t),k(r.update,s,t),k(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;k(r.right,n,t);let s=ie(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)X(o.id,s,t,"local",false,true);else k(a,s,t);k(r.body,s,t);return}case "VariableDeclaration":Qn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Ke(n,t,s.name,s,"import",Hn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Qn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Ke(n,t,a.name,a,"local",true),fn(s,n,t);}else k(s,n,t);}else for(let s of r.specifiers)qe(n,s.local.name);return}case "TSAsExpression":k(e.expression,n,t);return;case "TSTypeAliasDeclaration":Ee(e.typeAnnotation,n);return;case "JsonExpression":yn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;et(r.name,n);for(let s of r.attributes??[])k(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":k(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)k(i,n,t);else k(o,n,t);}return}}}function et(e,n,t){e&&(e.type==="JSXIdentifier"?qe(n,e.name):e.type==="JSXMemberExpression"&&et(e.object,n));}function yn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)yn(s,n,t);return}let r=e;if("#expr"in r){try{k(codec.fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))yn(r[s],n,t);}function hn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};k(e,ie(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(y.unusedName(s.node,s.name));return r}var fr=new Set(["const","import"]),Ae=e=>({binds:new Map,parent:e});function yr(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function le(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?le(n.argument):le(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?le(n):[]);case "AssignmentPattern":return le(e.left);case "RestElement":return le(e.argument);default:return []}}var _e=(e,n,t)=>{for(let r of le(n))e.binds.set(r.name,t);};function gn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of le(e))gn(a,n,t);return}let r=e.name,s=yr(n,r);s&&fr.has(s)&&(t.invalid.add(e),t.out.push(y.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;gn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{gn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ae(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ae(n);for(let a of r.params??[])_e(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ae(n);_e(s,r.param,"param"),F(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Ae(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)_e(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),_e(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 Sn(e){let n={out:[],invalid:new WeakSet};return F(e,Ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var De=e=>({decls:new Map,parent:e});function gr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function he(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?he(n.argument):he(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?he(n):[]);case "AssignmentPattern":return he(e.left);case "RestElement":return he(e.argument);default:return []}}var xe=(e,n)=>{for(let t of he(n))e.decls.set(t.name,t);};function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=gr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;M(r.object,n,t),r.computed&&M(r.property,n,t);return}case "Property":{let r=e;r.computed&&M(r.key,n,t),M(r.value,n,t);return}case "Program":case "BlockStatement":{let r=De(n);for(let s of e.body??[])M(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=De(n);for(let o of r.params??[])xe(a,o);M(r.body,a,t);return}case "CatchClause":{let r=e,s=De(n);xe(s,r.param),M(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=De(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)xe(s,o.id);else a&&M(a,s,t);M(r.right,n,t),M(r.test,s,t),M(r.update,s,t),M(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)xe(n,r.id),M(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":M(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)M(i,n,t);else M(o,n,t);}return}}}function Sr(e){let n=new WeakMap;return M(e,De(void 0),n),n}var bn=e=>e.typeAnnotation,Nn=e=>e.returnType,U=e=>e.type==="Identifier"?e.name:null,nt=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?U(n.id):null}return U(e)},tt=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Re=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function rt(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 Bn(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=Bn(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function ze(e){let n=e;if(n.regex||n.bigint)return typeCore.s.unknown;let t=n.value;return t===null?typeCore.s.null:t===void 0?typeCore.s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:typeCore.s.unknown}var ue=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):ze(e)},kn=e=>e.type==="ArrowFunctionExpression",st=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Oe=e=>st(e)?e.args[0]:e,Te=e=>st(e)?e:typeCore.s.promise(e);function Ce(e){return e.t==="tuple"?true:e.t==="array"?Ce(e.items):e.t==="union"?e.of.some(Ce):false}function ge(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ge(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ge(e.bound):false}var K=(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 at(e){let n=Nn(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:U(r)??`arg${s}`,type:bn(r)??typeCore.s.unknown})),returns:e.async?Te(n):n}:null}var Q={then:{},else:{}},mt=new Set(["string","number","boolean","undefined","function","object"]),ot={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function ft(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 kr=typeCore.s.literal(true),wr=typeCore.s.literal(false),W=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[kr,wr]:[e];function it(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function vr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=W(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function Er(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=W(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function Ar(e,n){if(!mt.has(n))return null;if(e.t==="unknown"||e.t==="any")return ot[n]??e;let t=W(e).filter(r=>ft(r,n));return t.length?typeCore.normalizeUnion(t):ot[n]??e}function Dr(e,n){if(!mt.has(n)||e.t==="unknown"||e.t==="any")return null;let t=W(e).filter(r=>!ft(r,n));return t.length?typeCore.normalizeUnion(t):null}function lt(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=ue(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function ut(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=ue(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function ct(e,n,t,r,s){let a=W(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return r?!!u&&typeCore.subtype(t,u,s):!(u&&typeCore.subtype(u,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function pt(e,n,t){let r=W(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 Cr(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function Rr(e,n,t){let r=W(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var Or=e=>e.t==="null"||e.t==="undefined",yt=e=>Or(e)||e.t==="literal"&&!e.value,Tr=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=W(e),t=n.filter(r=>!yt(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Pr=e=>{let n=W(e),t=n.filter(yt);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},dt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,q=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Mr=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function Me(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,h=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&h.type==="Identifier"){let g=h.name,N=R(n,g);if(!N)return Q;let C=String(m.value);return q(g,pt(N,C,true),pt(N,C,false))}return Q}if(!Mr(r.operator))return Q;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=it(a,o)??it(o,a);if(i){let m=R(n,i.name);if(!m)return Q;let h=Ar(m,i.tag),g=Dr(m,i.tag);return s?q(i.name,g,h):q(i.name,h,g)}let l=dt(a),u=dt(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let m=p.name,h=R(n,m);if(!h)return Q;let N=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??u],C=W(h),$=C.filter(T=>N.includes(T.t)),se=C.filter(T=>!N.includes(T.t)),me=$.length?typeCore.normalizeUnion($):null,A=se.length&&se.length<C.length?typeCore.normalizeUnion(se):null;return s?q(m,A,me):q(m,me,A)}let d=lt(a,o)??lt(o,a);if(d){let m=R(n,d.name);if(!m)return Q;let h=Cr(m,d.lit,t),g=Rr(m,d.lit,t);return s?q(d.name,g,h):q(d.name,h,g)}let f=ut(a,o)??ut(o,a);if(f){let m=R(n,f.name);if(!m)return Q;let h=ct(m,f.prop,f.lit,true,t),g=ct(m,f.prop,f.lit,false,t);return s?q(f.name,g,h):q(f.name,h,g)}return Q}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=Me(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Fr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=R(n,r);if(s)return q(r,Tr(s),Pr(s))}return Q}function Ir(e,n){if(e.t==="fn")return e.guard??null;if(e.t==="overload"){for(let t of e.signatures)if(t.guard&&t.params.length===n)return t.guard}return null}function Fr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=R(n,r.name);if(!s)return null;let a=Ir(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?q(i,vr(l,a.type,t),Er(l,a.type,t)):null}var H=(e,n)=>Object.keys(n).length?L(e,n):e;function V(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>V(t));case "IfStatement":{let n=e;return !!n.alternate&&V(n.consequent)&&V(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&V(n.finalizer))return true;let t=!n.handler||V(n.handler.body);return V(n.block)&&t}default:return false}}var Zr=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function es(e){let n=[];return e.maxDepth!==void 0&&n.push(ln(e.maxDepth)),e.maxNodes!==void 0&&n.push(un(e.maxNodes)),e.maxArgs!==void 0&&n.push(cn(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(sn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(an(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(on(e.memberDepth)),n}function ns(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>O("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function vt(e,n,t={}){let r={...Zr(n.types),...n.schemes,...rs(e)},s=Sn(e),a={overlay:new WeakMap,sink:ae(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?capability.compileProfile(t.profile):void 0;o&&typeCore.configureTypeLimits(o.typeLimits);try{let i,l=ss(e,a);try{i=S(e,l,a);}catch(d){if(d instanceof typeCore.TypeEvalLimitError)a.sink.report(O("too-deep",e,d.message));else if(d instanceof typeCore.UnionTooComplexError)a.sink.report(O("too-complex-union",e,d.message));else throw d;i=typeCore.s.unknown;}let u=[];o&&u.push(...Ve(o)),t.limits&&u.push(...es(t.limits)),t.resultType&&u.push(pn(t.resultType,r));let p=[...a.sink.all,...s.diagnostics,...ns(e,r),...t.unused?hn(e,t.unused):[],...u.length?nn(e,u,{overlay:a.overlay,schemes:r}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function ts(e,n,t={}){let r=vt(e,n,t),s={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let f=U(d.id),m=r.overlay.get(d);f&&m&&(s[f]=m.type,p.push(f));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,f=r.overlay.get(u);d&&f&&(s[d]=f.type,p.push(d));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=r.overlay.get(u.declaration);o=p?p.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)s[p]&&(l[u]={type:s[p]});o!==void 0&&(l.default={type:o});}else for(let u in s)l[u]={type:s[u]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var rs=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function ss(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(y.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=typeCore.s.unknown;return}for(let l of a.specifiers){if(l.importKind==="type")continue;let u=l.local.name;if(re(u,l.local,n),u in r){n.sink.report(y.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){r[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",d=typeCore.discover(i,[p],n.schemes);d?r[u]=d.type:(n.sink.report(y.noSuchMember(l,i,p)),r[u]=typeCore.s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?L(n.env.scope,r):n.env.scope}var b=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case At:return e.schema;case "JSXElement":case "JSXFragment":return b(t,e,S(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return b(t,e,ze(e),n);case "Placeholder":return b(t,e,typeCore.s.any,n);case "Identifier":{let s=e.name,a=R(n,s);return a===void 0?s==="undefined"?b(t,e,typeCore.s.undefined,n):(t.sink.report(y.unknownName(e,s)),b(t,e,typeCore.s.unknown,n)):b(t,e,a,n)}case "MemberExpression":return b(t,e,is(e,n,t),n);case "CallExpression":return b(t,e,ms(e,n,t,r),n);case "ArrowFunctionExpression":return Pn(e,n,t);case "FunctionDeclaration":return t.sink.report(y.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),b(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(y.unsupported(e,"anonymous function (use an arrow)")),b(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(y.unsupported(e,"'this'")),b(t,e,typeCore.s.unknown,n);case "BlockStatement":return b(t,e,It(e,n,t),n);case "ReturnStatement":{let s=e.argument;return b(t,e,s?S(s,n,t):typeCore.s.unknown,n)}case "IfStatement":return x(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 x(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=S(a,n,t);if(a.type==="MemberExpression"){let p=t.overlay.get(a.object)?.type,d=p&&typeCore.apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(y.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=S(s.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(d)),b(t,e,d,n)}if(u&&i!==null){let d=S(s.right,n,t);return typeCore.subtype(d,u,t.schemes)||t.sink.report(y.notAssignable(s.right,d,u,t.schemes)),t.assignFlow.set(e,Ft(u,d,t.schemes)),b(t,e,d,n)}let p=J(s.right,o,n,t);return b(t,e,p,n)}return b(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=S(s.argument,n,t);return Ie(a,t.schemes)||t.sink.report(y.arithmeticOperand(s.argument,"operand")),b(t,e,typeCore.s.number,n)}case "ExpressionStatement":return b(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return Je(e,n,t),b(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":{let s=e.id?.name,a=s?t.schemes[s]:void 0;return b(t,e,a?Ss(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return b(t,e,Is(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=S(s.right,n,t);return b(t,e,js(s.operator,a,o),n)}case "UnaryExpression":return b(t,e,Ls(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=S(s.consequent,H(n,a.then),t),i=S(s.alternate,H(n,a.else),t);return b(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return b(t,e,Us(e,n,t),n);case "ArrayExpression":return b(t,e,Vt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=S(s,n,t);Ut(a,t.schemes)||t.sink.report(y.notTextConvertible(s,a));}return b(t,e,typeCore.s.string,n)}case "AwaitExpression":{let s=e.argument,a=s?S(s,n,t):typeCore.s.unknown;return b(t,e,Oe(a),n)}case "Program":{let s=We(e.body,n,t,new Set(t.importNames)).scope;return b(t,e,typeCore.s.unknown,s)}case "JsonExpression":return b(t,e,Dn(e.body,n,t,e),n);case "ChainExpression":return b(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=Be(s.typeAnnotation,n,t,e);return $e(a,o,t.schemes)||t.sink.report(y.castUnsound(e,a,o)),b(t,e,o,n)}default:return t.sink.report(y.unsupported(e,`'${e.type}'`)),b(t,e,typeCore.s.unknown,n)}}var as=new Set(["constructor","prototype","__proto__"]);function os(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function is(e,n,t){let r=S(e.object,n,t),s=os(e);if(s!==null&&as.has(s))return t.sink.report(y.forbiddenMember(e,s)),typeCore.s.unknown;if(e.computed){let i=S(e.property,n,t),l=typeCore.resolveTypeOp(typeCore.s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&ht(e,r,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(r,[a],t.schemes);return o?o.type:(ht(e,r,a,t),typeCore.s.unknown)}function ht(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(y.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(y.notObject(e,n));}function ls(e,n,t,r){let s=e.arguments[0];if(!s){r.sink.report(y.missingArgument(e,"schema",typeCore.s.unknown));return}if(s.type!=="Identifier"){r.sink.report(y.asserterNeedsName(s,n));return}let a=s.name,o=R(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?y.typeAsValue(s,a):y.unknownName(s,a));return}if(!i||i.params.length>0){r.sink.report(y.notASchema(s,a));return}if(!(Et(a,r)&&!us(t,a)))return r.overlay.set(s,{type:i.body,scope:t}),i.body}function Et(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&R(n.env.scope,e)!==void 0}function us(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 re(e,n,t){Et(e,t)&&t.sink.report(y.shadowsSchema(n,e));}function Tn(e,n){let t=K(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function cs(e,n){let t=R(e.scope,n);if(!t)return;let r=Tn(t,e.schemes);return r?K(r,e.schemes):void 0}function ps(e,n,t,r){let s=Tn(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(y.propsMismatch(n[1]??e,s,typeCore.formatTypeDiff(o)));}return b(r,e,typeCore.s.boolean,t)}var At="TSLiteSyntheticArg",ds=e=>({type:At,schema:e});function Dt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=K(S(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(ds(l));else s={elem:Mn(i,o,t),node:a};}return {nodes:r,spread:s}}function ms(e,n,t,r){let s=e.arguments,a=Bn(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=rt(s);if(f){let m=typeCore.discover(d,f,t.schemes);return m?m.type:(t.sink.report(y.noSuchMember(e,d,f.join("."))),typeCore.s.unknown)}return s.forEach(m=>S(m,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let d=ls(e,a,n,t);s.length<2&&s.length>0&&t.sink.report(y.missingArgument(e,"value",typeCore.s.unknown));for(let f=1;f<s.length;f++)S(s[f],n,t);return d??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return ps(e,s,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s.forEach(d=>S(d,n,t)),typeCore.s.any;if(o.t==="overload")return ys(e,o,n,t,r);if(o.t!=="fn")return s.forEach(d=>S(d,n,t)),t.sink.report(y.notCallable(e,o)),typeCore.s.unknown;let i=Dt(s,n,t),l=i.nodes.map(d=>Ct(d,n,t)),u=Ot(e),p=!u||Tt(o,u.length);return p||t.sink.report(y.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),An(e,o,i.nodes,l,n,t,i.spread,r,p?u:void 0)}function Ct(e,n,t){if(kn(e))return typeCore.s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=ae(),s=S(e,n,{...t,sink:r});return r.hasErrors()?typeCore.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function An(e,n,t,r,s,a,o=null,i,l){let u=h=>{if(!i)return h;let g=typeCore.substitute(n.returns,h);if(g.t==="fn"&&i.t==="fn"){let N=h,C=Math.min(g.params.length,i.params.length);for(let $=0;$<C;$++)N=typeCore.unify(g.params[$].type,i.params[$].type,N)??N;return typeCore.unify(g.returns,i.returns,N)??N}return typeCore.unify(g,i,h)??h},p=l?Ns(e,n,l,a):void 0,d=p??u(typeCore.instantiateLoose(n,r).bindings);t.forEach((h,g)=>{if(kn(h)){let N=typeCore.widenType(typeCore.substitute(n.params[g]?.type??typeCore.s.any,d));r[g]=Pn(h,s,a,N);}else if(h.type==="CallExpression"&&r[g].t==="any")r[g]=S(h,s,a,typeCore.substitute(n.params[g]?.type??typeCore.s.unknown,d));else if(h.type==="Literal"){let N=n.params[g]?.type??typeCore.s.unknown,C=N.t==="var"?N.bound?typeCore.substitute(N.bound,d):N:typeCore.substitute(N,d);ge(C)&&(r[g]=b(a,h,ue(h),s));}else if(h.type==="ArrayExpression"||h.type==="ObjectExpression"||h.type==="ConditionalExpression"){let N=n.params[g]?.type??typeCore.s.unknown,C=typeCore.substitute(N,d);if(h.type==="ArrayExpression"&&Ce(C)){r[g]=Fn(h,C,s,a);return}let $=N.t==="var"?N.bound?typeCore.substitute(N.bound,d):void 0:C;$&&Vs($,a.schemes)&&(r[g]=Gs(h,$,s,a,N.t==="var")??r[g]);}});let f=p??u(typeCore.instantiateLoose(n,r).bindings);p||fs(e,n,f,a),vs(e,n,r,f,a,t,o),t.forEach((h,g)=>{let N=n.params[g];h.type==="ObjectExpression"&&N&&!N.variadic&&In(h,typeCore.substitute(N.type,f),a);});let m=typeCore.substitute(n.returns,f);return typeCore.widenInferred(typeCore.groundVars(m.t==="union"?typeCore.normalizeUnion(m.of):m,a.schemes))}var gt=new WeakMap;function Rt(e){let n=gt.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)j(s.type,t,r);return j(e.returns,t,r),gt.set(e,t),t}function j(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":j(e.items,n,t);return;case "union":for(let r of e.of)j(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)j(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)j(r.type,n,t);j(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)j(s.type,n,t);j(r.returns,n,t);}return;case "apply":for(let r of e.args)j(r,n,t);return;case "keyof":j(e.of,n,t);return;case "index":j(e.obj,n,t),j(e.key,n,t);return;case "mapped":j(e.over,n,t),j(e.body,n,t);return;default:return}}function fs(e,n,t,r){let s=Rt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=typeCore.substitute(o,t);typeCore.subtype(i,l,r.schemes)||r.sink.report(y.constraintViolation(e,a,i,l));}}function ys(e,n,t,r,s){let a=Dt(e.arguments,t,r),o=a.nodes,i=o.map(p=>Ct(p,t,r)),l=Ot(e),u=l?n.signatures.filter(p=>Tt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(y.wrongTypeArgumentCount(e,p,l.length)),St(e,n.signatures,a,o,i,t,r,s,void 0)}return St(e,u,a,o,i,t,r,s,l)}function St(e,n,t,r,s,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?Bs(m,r.length):ks(m,r.length),d=u.signatures.filter(p);if(d.length>1&&s.some(m=>m.t==="any"))for(let m of d){let h=ae(),g=An(e,m,r,s,a,{...o,sink:h},t.spread,i,l);if(!h.hasErrors())return h.all.forEach(N=>o.sink.report(N)),g}let f=u.signatures.find(m=>p(m)&&ws(m,s,o));if(!f){let m=u.signatures.filter(p);m.length===1?f=m[0]:u.signatures.length===1&&(f=u.signatures[0]);}return f?An(e,f,r,s,a,o,t.spread,i,l):(o.sink.report(y.noMatchingOverload(e,u,s)),typeCore.s.unknown)}function hs(e,n,t,r){let s=R(n,e[0]);if(s===void 0)return t.sink.report(y.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(y.noSuchMember(r,s,a.join("."))),typeCore.s.unknown)}function Be(e,n,t,r){let s=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let f=s(d);return f!==d&&(u=true),f});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return hs(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(gs(o.name,n,t,r),!(o.name in t.schemes)))return typeCore.s.any;let i=false,l={};for(let u of Object.keys(o)){let p=s(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return s(e)}function gs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Be(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Ss(e,n,t,r,s){let a={...t,sink:ae(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Be(e,n,a,r);return a.sink.hasErrors()?e:s?o:typeCore.groundVars(o,t.schemes)}var Fe=(e,n,t)=>{let r=bn(e);return r===void 0?r:Be(r,n,t,e)},bs=(e,n,t)=>{let r=Nn(e);return r===void 0?r:Be(r,n,t,e)},Ot=e=>{let n=e.typeArguments;return n?.length?n:void 0},Tt=(e,n)=>(e.typeParams?.length??0)===n;function Ns(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Rt(n)){let u=o[i];if(!u)continue;let p=typeCore.groundVars(typeCore.substitute(l,o),r.schemes);typeCore.subtype(u,p,r.schemes)||r.sink.report(y.constraintViolation(e,i,u,p));}return o}function Bs(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 ks(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 ws(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 l=s;l<n.length;l++)if(!typeCore.subtype(n[l],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 vs(e,n,t,r,s,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic){let f=typeCore.substitute(p.type,r),m=f.t==="array"?f.items:typeCore.s.unknown;for(let h=u;h<t.length;h++)typeCore.subtype(t[h],m,s.schemes)||s.sink.report(y.notAssignable(i(h),t[h],m,s.schemes));break}let d=typeCore.substitute(p.type,r);if(u>=t.length){!p.optional&&!o&&s.sink.report(y.missingArgument(e,p.name,d));continue}typeCore.subtype(t[u],d,s.schemes)||s.sink.report(y.notAssignable(i(u),t[u],d,s.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){s.sink.report(y.spreadArgument(o.node));return}if(l){let d=typeCore.substitute(l.type,r),f=d.t==="array"?d.items:typeCore.s.unknown;typeCore.subtype(o.elem,f,s.schemes)||s.sink.report(y.notAssignable(o.node,o.elem,f,s.schemes));}return}!l&&t.length>n.params.length&&s.sink.report(y.excessArgument(i(n.params.length),n.params.length,t.length));}function Pt(e,n,t){if(e.t==="object"){let r=typeCore.ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>Pt(typeCore.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:typeCore.resolveTypeOp({t:"intersection",of:r})}}function J(e,n,t,r,s=false){let a=typeCore.apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=typeCore.resolveConditional(a,r.schemes)??a),e.type){case "Literal":{let i=ue(e);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,s?ge(n)?i:typeCore.widen(ze(e)):n,t)}case "ArrayExpression":{if(Ce(a)){let i=Fn(e,a,t,r);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,i,t)}if(a.t==="array"){let i=[];for(let u of e.elements){if(!u)continue;let p=u;if(p.type==="SpreadElement"){let d=J(p.argument,n,t,r,s);d.t==="array"&&i.push(d.items);}else i.push(J(p,a.items,t,r,s));}let l=s&&i.length>0?typeCore.s.array(typeCore.normalizeUnion(i)):n;return b(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let p of e.properties){let d=p;if(d.type==="SpreadElement"){S(d.argument,t,r);continue}let f=d,m=Re(f),h=m!==null?Pt(a,m,r.schemes):void 0,g=h?J(f.value,h,t,r,s):typeCore.widen(S(f.value,t,r));m!==null&&(i[m]={type:h??g},l[m]={type:g}),b(r,d,g,t);}let u={t:"object",props:i};return typeCore.subtype(u,n,r.schemes)||r.sink.report(y.notAssignable(e,u,n,r.schemes)),b(r,e,s?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Pn(e,t,r,a);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let l=J(i.consequent,n,t,r,s),u=J(i.alternate,n,t,r,s);return b(r,e,s?typeCore.normalizeUnion([l,u]):n,t)}case "Placeholder":return b(r,e,n,t)}let o=S(e,t,r);return typeCore.subtype(o,n,r.schemes)||r.sink.report(y.notAssignable(e,o,n,r.schemes)),b(r,e,o,t)}function Pn(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=A=>a?.length?{...A,typeParams:a}:A,i={},l=new Map,u=e.params.map((A,T)=>{let P=A,Xe=s?.params[T]?.type;if(P.type==="RestElement"){let ne=P.argument,G=Fe(ne,n,t)??(s?.params[T]?.variadic?Xe:void 0)??typeCore.s.array(typeCore.s.unknown),z=U(ne);return z?(re(z,ne,t),i[z]=G):Z(ne,G,i,n,t),t.overlay.set(ne,{type:G,scope:n}),t.overlay.set(P,{type:G,scope:n}),{name:z??`arg${T}`,type:G,variadic:true}}if(P.type==="AssignmentPattern"){let ne=P.left,Qe=Fe(ne,n,t)??Xe;Z(P,Qe??typeCore.s.unknown,i,n,t);let G=U(ne),z=G?i[G]:void 0,He=Qe??z??typeCore.s.unknown,Vn=He.t==="unknown"?He:typeCore.normalizeUnion([He,typeCore.s.undefined]);return G&&z&&(z.t==="union"||z.t==="boolean")&&l.set(G,z),t.overlay.set(P,{type:Vn,scope:n}),{name:G??`arg${T}`,type:Vn,optional:true}}let fe=U(P),Ln=Fe(P,n,t),ke=Ln??Xe??typeCore.s.unknown,Un=P.type==="Identifier"&&(!!P.optional||Ln===void 0&&!!s?.params[T]?.optional),ye=Un&&ke.t!=="unknown"?typeCore.normalizeUnion([ke,typeCore.s.undefined]):ke;return fe?(re(fe,P,t),i[fe]=ye,(ye.t==="union"||ye.t==="boolean")&&l.set(fe,ye)):P.type!=="Identifier"&&Z(P,ke,i,n,t),t.overlay.set(P,{type:ye,scope:n}),Un?{name:fe??`arg${T}`,type:ye,optional:true}:{name:fe??`arg${T}`,type:ke}}),p=false;u.forEach((A,T)=>{A.optional?p=true:!A.variadic&&p&&t.sink.report(y.requiredAfterOptional(e.params[T]));});let d=L(n,i),f=e.body,m=bs(e,n,t),h=e.returnGuard,g=h?{param:h.param,type:Be(h.type,n,t,e)}:void 0;if(g){let A=u[g.param];A&&!typeCore.subtype(g.type,A.type,t.schemes)&&t.sink.report(y.notAssignable(e,g.type,A.type,t.schemes));}let N=A=>g?{...A,guard:g}:A;if(f.type!=="BlockStatement"&&m){let A=e.async?Oe(m):m;J(f,A,d,t);let T=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:T})),n)}let C=m??s?.returns,$=C&&e.async?Oe(C):C,se=f.type==="BlockStatement"?b(t,f,It(f,d,t,new Set(Object.keys(i)),l,$),d):S(f,d,t),me=e.async?Te(se):se;if(m){let A=e.async?Oe(m):m,T=e.async?se:me;typeCore.subtype(T,A,t.schemes)||t.sink.report(y.notAssignable(f,me,m,t.schemes));let P=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:P})),n)}return b(t,e,o({t:"fn",params:u,returns:typeCore.widenType(me)}),n)}function be(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?be(n.argument):be(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?be(n.argument):be(n):[]);case "AssignmentPattern":return be(e.left);default:return []}}function Mt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>be(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Mt(e.declaration):[]}function It(e,n,t,r=new Set,s,a){let{returns:o}=We(e.body,n,t,r,s,a),i=!V(e);return o.length===0?i?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(i?[...o,typeCore.s.undefined]:o)}var Es=[typeCore.s.literal(true),typeCore.s.literal(false)];function As(e){return e.t==="union"?e.of:e.t==="boolean"?Es:[e]}function Ft(e,n,t){let r=As(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 jt(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 pe(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=pe(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=jt(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=$t(e,n,t);if(r.size===0)return {types:n,exits:V(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:V(e)}}case "TryStatement":{let r=e,s=[],a=pe(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=pe(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Ds(n,s);return r.finalizer&&(o=pe(r.finalizer,o,t).types),{types:o,exits:V(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function $t(e,n,t){let r=pe(e.consequent,n,t),s=e.alternate?pe(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,typeCore.normalizeUnion(l));}return o}function Lt(e,n){let t=new Map,r=s=>{let a=R(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function Ds(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 Cs(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=Lt(n,t),s=pe(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 H(n,a)}function We(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!Rs(e))return bt(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,u]of s)t.declaredMut.set(l,u);try{return bt(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,u]of i)t.declaredMut.set(l,u);}}function Rs(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 bt(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let u of Mt(l))r.has(u.name)?t.sink.report(y.cannotRedeclare(u,u.name)):r.add(u.name);if(l.type==="VariableDeclaration")a=Je(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration?.type==="VariableDeclaration")a=Je(u.declaration,a,t);else if(u.declaration?.type==="FunctionDeclaration"){let p=S(u.declaration,a,t),d=U(u.declaration.id);d&&(a=L(a,{[d]:p}));}else for(let p of u.specifiers)R(a,p.local.name)===void 0&&t.sink.report(y.unknownName(p.local,p.local.name));}else if(l.type==="ExportDefaultDeclaration")S(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let u=S(l,a,t),p=U(l.id);p&&(a=L(a,{[p]:u}));}else if(l.type==="IfStatement"){let u=l,p=t.evolving.size||t.declaredMut.size?Lt(a,t):null;if(o.push(...x(l,a,t,s)),p&&p.size){let d=$t(u,p,t);d.size&&(a=H(a,Object.fromEntries(d)));}!u.alternate&&V(u.consequent)&&(a=H(a,Me(u.test,a,t.schemes).else));}else {o.push(...x(l,a,t,s));let u=jt(l,t);u?a=H(a,{[u.name]:u.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=Cs(l,a,t));}}return {scope:a,returns:o}}function x(e,n,t,r){switch(e.type){case "ReturnStatement":{let s=e.argument,a=s?r?(J(s,r,n,t),r):S(s,n,t):typeCore.s.unknown;return b(t,e,a,n),[a]}case "IfStatement":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=x(s.consequent,H(n,a.then),t,r);return s.alternate&&o.push(...x(s.alternate,H(n,a.else),t,r)),b(t,e,typeCore.s.unknown,n),o}case "BlockStatement":{let{returns:s}=We(e.body,n,t,void 0,void 0,r);return b(t,e,s.length?typeCore.normalizeUnion(s):typeCore.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,a=n;s.init&&(s.init.type==="VariableDeclaration"?a=Je(s.init,a,t):S(s.init,a,t)),s.test&&S(s.test,a,t),s.update&&S(s.update,a,t);let o=x(s.body,a,t,r);return b(t,e,typeCore.s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s=e,a=S(s.right,n,t),o=e.type==="ForOfStatement"?Mn(a,s.right,t):typeCore.s.string,i=nt(s.left);i&&re(i,tt(s.left),t);let l=i?L(n,{[i]:o}):n,u=x(s.body,l,t,r);return b(t,e,typeCore.s.unknown,n),u}case "BreakStatement":case "ContinueStatement":return b(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&S(s,n,t),b(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let s=e,a=x(s.block,n,t,r);if(s.handler){let o=s.handler.param,i=o?U(o):null;i&&o&&re(i,o,t);let l=i?L(n,{[i]:typeCore.s.unknown}):n;a.push(...x(s.handler.body,l,t,r));}return s.finalizer&&a.push(...x(s.finalizer,n,t,r)),b(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 l=We(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return b(t,e,typeCore.s.unknown,n),o}default:return S(e,n,t),[]}}function Os(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function Mn(e,n,t){let r=K(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=>Mn(s,n,t)));}return t.sink.report(y.notIterable(n,e)),typeCore.s.any}function Ts(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function Ps(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 Ms(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function Z(e,n,t,r,s){switch(e.type){case "Identifier":{let a=Fe(e,r,s)??n;re(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(y.notAssignable(a.right,o,n,s.schemes));let i=typeCore.widenType(o),{type:l}=typeCore.withoutUndefined(n),u=l.t==="unknown"?i:typeCore.normalizeUnion([l,i]),p=a.left;if(p.type==="Identifier"){let d=p.name;re(d,p,s),t[d]=u,s.overlay.set(p,{type:u,scope:r});}else Z(p,u,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Z(o.argument,Ps(n,a),t,r,s);continue}let i=o,l=Re(i);l!=null&&a.push(l);let u=l!=null?Os(n,l,s):typeCore.s.unknown;Z(i.value,u,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Z(i.argument,Ms(n,o),t,r,s):Z(i,Ts(n,o),t,r,s);});return}}}function In(e,n,t){let r=K(n,t.schemes),a=(r.t==="union"?r.of.map(o=>K(o,t.schemes)):[r]).filter(o=>o.t==="object"&&(!o.index||o.index.key==="number"));if(a.length&&!a.some(o=>Object.keys(o.props).length===0&&!o.index))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=Re(i);if(l===null)continue;let u=a.filter(p=>l in p.props||p.index?.key==="number"&&typeCore.isNumericLiteralName(l));if(!u.length){t.sink.report(y.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&In(i.value,u[0].props[l].type,t);}}function Je(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=U(a);o&&re(o,a,t);let i=Fe(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,Nt(o,i,t)):(r[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(y.constNeedsInit(s)),o&&(r[o]=i??typeCore.s.unknown);continue}let l=i??(s.init.type==="ArrowFunctionExpression"?at(s.init):null),u=o&&l?L(n,{[o]:l}):n,p,d=null;i?(J(s.init,i,u,t),s.init.type==="ObjectExpression"&&In(s.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&s.init.type==="Literal"&&(p=Ft(i,ue(s.init),t.schemes))):(p=S(s.init,u,t),e.kind!=="const"&&(p=typeCore.widenLiteral(p)),d=p),b(t,s,p,n),o?(r[o]=p,e.kind!=="const"&&d&&Nt(o,d,t)):Z(a,p,r,n,t);}return b(t,e,typeCore.s.unknown,n),L(n,r)}function Nt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Is(e,n,t){let r=S(e.left,n,t),s=S(e.right,n,t),a=e.operator,o=we.get(a);if(!o)return typeCore.s.boolean;if(o.category==="additive"){if(de(r)||de(s))return ce(r,t.schemes)||ce(s,t.schemes)?typeCore.s.string:typeCore.s.number;if(ce(r,t.schemes)&&ce(s,t.schemes))return typeCore.s.string;if(Ie(r,t.schemes)&&Ie(s,t.schemes))return typeCore.s.number;if(ce(r,t.schemes)||ce(s,t.schemes)){let l=ce(r,t.schemes)?s:r;return t.sink.report(y.implicitCoercion(e,r,s,Ut(l,t.schemes))),typeCore.s.string}return t.sink.report(y.operatorNotApplicable(e,"+",r,s)),typeCore.s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ie(r,t.schemes)||t.sink.report(y.arithmeticOperand(e.left,"left")),Ie(s,t.schemes)||t.sink.report(y.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!de(r)&&!de(s)){let i=typeCore.apparentType(r,t.schemes),l=typeCore.apparentType(s,t.schemes),u=typeCore.subtype(i,typeCore.s.number,t.schemes),p=typeCore.subtype(l,typeCore.s.number,t.schemes);u&&p||!u&&!p&&(typeCore.subtype(i,l,t.schemes)||typeCore.subtype(l,i,t.schemes))||t.sink.report(y.operatorNotApplicable(e,a,r,s));}return mn(o.result)}var de=e=>e.t==="any"||e.t==="unknown",Ie=(e,n)=>de(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),ce=(e,n)=>!de(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),Fs=typeCore.s.union([typeCore.s.string,typeCore.s.number,typeCore.s.boolean,typeCore.s.null,typeCore.s.undefined]),Ut=(e,n)=>de(e)||typeCore.subtype(typeCore.apparentType(e,n),Fs,n),Bt={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},vn=e=>e.t==="null"||e.t==="undefined";function js(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=>!vn(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!vn(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>vn(a)?[a]:a.t==="literal"?a.value?[]:[a]:Bt[a.t]?[Bt[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var $s=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function Ls(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 $s;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function Us(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=K(S(p.argument,n,t),t.schemes);if(g.t==="object"){for(let N in g.props)r[N]=g.props[N];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let d=p,f=S(d.value,n,t),m=typeCore.widen(f);if(b(t,p,f,n),d.computed){let g=K(S(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let h=Re(d);h!==null&&(r[h]={type:m},a.push(m),/^\d+$/.test(h)&&o.push(m));}return i?s={key:"string",type:typeCore.normalizeUnion(a)}:l&&(s={key:"number",type:typeCore.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function Vt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=K(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 Fn(e,n,t,r){let s=K(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?Fn(l,u,t,r):ge(u)?S(l,t,r):typeCore.widen(S(l,t,r));if(s.t==="tuple"&&o){let l=s.elements.length,u=typeCore.restIndex(s),p=u<0?0:l-u-1,d=m=>{if(u<0||m<u)return s.elements[m];let h=a.length-m;return h<=p?s.elements[l-h]:s.elements[u]},f=a.map((m,h)=>{let g=d(h);return g?i(m,g):typeCore.widen(S(m,t,r))});return b(r,e,{t:"tuple",elements:f},t)}if(s.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){S(p.argument,t,r);continue}l.push(i(p,s.items));}return b(r,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return Vt(e,t,r)}function Dn(e,n,t,r){if(e===null)return typeCore.s.null;switch(typeof e){case "string":return typeCore.s.string;case "number":return typeCore.s.number;case "boolean":return typeCore.s.boolean;case "object":break;default:return typeCore.s.unknown}if(Array.isArray(e)){let o=e.map(i=>Dn(i,n,t,r));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let s=e;if("#expr"in s){let o;try{o=codec.fromJson(s);}catch{return t.sink.report(y.unsupported(r,`'#expr: ${String(s["#expr"])}'`)),typeCore.s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:Dn(s[o],n,t,r)};return {t:"object",props:a}}function Vs(e,n){let t=typeCore.apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function Gs(e,n,t,r,s){let a=ae(),o=J(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(u=>u.node===l.node&&u.code===l.code&&u.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var Ks=(e,n)=>({...e,typeAnnotation:n}),qs=(e,n)=>({...e,returnType:n}),_s=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function $n(e,n){return e.get(n)?.type}function xs(e,n){return e.get(n)?.scope}function zs(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function Ws(e,n){let t=e.get(n)?.scope;return t?[...Ze(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Js=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Ys(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 Ye(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(Js)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=$n(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=Ye(e,n+2,t,r),l=Ys(a);return !i||!l?void 0:typeCore.discover(i,[l],r)?.type}case "ArrayExpression":{let o=Ye(e,n+1,t,r);return o?typeCore.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=we.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return typeCore.s.number;let i=a.left===s?a.right:a.left,l=$n(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Ye(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?typeCore.s.number:void 0}default:return}}function Xs(e,n){return e.filter(t=>t.node===n)}exports.BINARY_OP=we;exports.BINARY_OPS=dn;exports.FUNCTION_KINDS=xn;exports.LOGICAL_OPS=lr;exports.UNARY_OPS=Xn;exports.annotate=Ks;exports.annotateReturn=qs;exports.asExpression=_s;exports.binaryOpsProducing=ur;exports.calleeAllowlist=rn;exports.capabilityNodes=tn;exports.check=vt;exports.childScope=L;exports.collectBindings=Sr;exports.collectMutations=Sn;exports.collectUnused=hn;exports.componentProps=cs;exports.componentPropsOf=Tn;exports.contextualTypeAt=Ye;exports.createEnv=zt;exports.createSink=ae;exports.diag=y;exports.diagnosticsAt=Xs;exports.extractModuleType=ts;exports.fromCapability=or;exports.guard=nn;exports.guardsFromCompiled=Ve;exports.lookup=R;exports.makeDiagnostic=O;exports.maxArgs=cn;exports.maxCallNesting=an;exports.maxDepth=ln;exports.maxFunctionNesting=sn;exports.maxNestingOf=Ue;exports.maxNodes=un;exports.memberCompletions=zs;exports.memberDepth=on;exports.opResultSchema=mn;exports.resolveNamed=Wt;exports.resolveScheme=Jt;exports.resultType=pn;exports.rootScope=Gn;exports.scopeAt=xs;exports.scopeCompletions=Ws;exports.typeAt=$n;exports.unaryOpsProducing=cr;exports.visibleNames=Ze;Object.keys(typeCore).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return typeCore[k]}})});
|
package/dist/index.d.cts
CHANGED
|
@@ -80,7 +80,7 @@ declare const resolveNamed: (env: Env, name: string) => Schema | undefined;
|
|
|
80
80
|
declare const resolveScheme: (env: Env, name: string) => TypeScheme | undefined;
|
|
81
81
|
|
|
82
82
|
type Severity = "error" | "warning";
|
|
83
|
-
type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "const-needs-init" | "cannot-redeclare" | "unknown-module" | "not-a-schema" | "type-as-value" | "asserter-needs-name" | "shadows-schema" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "required-after-optional" | "not-iterable" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "wrong-type-argument-count" | "unsupported" | "forbidden-member" | "unused-name" | "assign-to-const" | "readonly-write" | "cast-unsound" | "not-arithmetic-operand" | "operator-not-applicable" | "implicit-coercion" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
|
|
83
|
+
type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "const-needs-init" | "cannot-redeclare" | "unknown-module" | "not-a-schema" | "type-as-value" | "asserter-needs-name" | "shadows-schema" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "required-after-optional" | "not-iterable" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "wrong-type-argument-count" | "unsupported" | "forbidden-member" | "unused-name" | "assign-to-const" | "readonly-write" | "cast-unsound" | "not-arithmetic-operand" | "operator-not-applicable" | "implicit-coercion" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "narrowing-cast-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
|
|
84
84
|
/**
|
|
85
85
|
* A **classe** do diagnóstico — espelha a divisão de passes do `tsc` (que nós
|
|
86
86
|
* fundimos num walk só): `semantic` é o que o **binder** do tsc pega (validade do
|
|
@@ -200,9 +200,10 @@ declare const diag: {
|
|
|
200
200
|
*/
|
|
201
201
|
readonlyWrite: (node: BaseNode, target: Schema) => Diagnostic;
|
|
202
202
|
/**
|
|
203
|
-
* Cast (`x as T`) entre tipos que não se sobrepõem
|
|
204
|
-
*
|
|
205
|
-
*
|
|
203
|
+
* Cast (`x as T`) entre tipos que não se sobrepõem na régua do tsc (`castOverlaps`:
|
|
204
|
+
* literal da origem alargado + comparabilidade). Erro, como o TS2352 — o texto é o
|
|
205
|
+
* dele. Se o cast pode estreitar é outra pergunta, de política: o
|
|
206
|
+
* `narrowing-cast-not-allowed` do `strict`.
|
|
206
207
|
*/
|
|
207
208
|
castUnsound: (node: BaseNode, from: Schema, to: Schema) => Diagnostic;
|
|
208
209
|
/**
|
|
@@ -380,9 +381,11 @@ declare function componentPropsOf(componentType: Schema, schemes: Schemes): Sche
|
|
|
380
381
|
*/
|
|
381
382
|
declare function componentProps(env: Env, name: string): Schema | undefined;
|
|
382
383
|
|
|
383
|
-
/** Contexto opcional de um guard
|
|
384
|
+
/** Contexto opcional de um guard — o que as regras type-aware leem do `check`. */
|
|
384
385
|
interface GuardContext {
|
|
385
386
|
readonly overlay?: TypeOverlay;
|
|
387
|
+
/** Os tipos nomeados do programa: sem eles, uma relação sobre `apply` não expande. */
|
|
388
|
+
readonly schemes?: Schemes;
|
|
386
389
|
}
|
|
387
390
|
/** Um guard: percorre `root` e devolve os diagnósticos que encontrar. */
|
|
388
391
|
type Guard = (root: BaseNode, ctx: GuardContext) => Diagnostic[];
|
package/dist/index.d.ts
CHANGED
|
@@ -80,7 +80,7 @@ declare const resolveNamed: (env: Env, name: string) => Schema | undefined;
|
|
|
80
80
|
declare const resolveScheme: (env: Env, name: string) => TypeScheme | undefined;
|
|
81
81
|
|
|
82
82
|
type Severity = "error" | "warning";
|
|
83
|
-
type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "const-needs-init" | "cannot-redeclare" | "unknown-module" | "not-a-schema" | "type-as-value" | "asserter-needs-name" | "shadows-schema" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "required-after-optional" | "not-iterable" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "wrong-type-argument-count" | "unsupported" | "forbidden-member" | "unused-name" | "assign-to-const" | "readonly-write" | "cast-unsound" | "not-arithmetic-operand" | "operator-not-applicable" | "implicit-coercion" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
|
|
83
|
+
type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "const-needs-init" | "cannot-redeclare" | "unknown-module" | "not-a-schema" | "type-as-value" | "asserter-needs-name" | "shadows-schema" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "required-after-optional" | "not-iterable" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "wrong-type-argument-count" | "unsupported" | "forbidden-member" | "unused-name" | "assign-to-const" | "readonly-write" | "cast-unsound" | "not-arithmetic-operand" | "operator-not-applicable" | "implicit-coercion" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "narrowing-cast-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
|
|
84
84
|
/**
|
|
85
85
|
* A **classe** do diagnóstico — espelha a divisão de passes do `tsc` (que nós
|
|
86
86
|
* fundimos num walk só): `semantic` é o que o **binder** do tsc pega (validade do
|
|
@@ -200,9 +200,10 @@ declare const diag: {
|
|
|
200
200
|
*/
|
|
201
201
|
readonlyWrite: (node: BaseNode, target: Schema) => Diagnostic;
|
|
202
202
|
/**
|
|
203
|
-
* Cast (`x as T`) entre tipos que não se sobrepõem
|
|
204
|
-
*
|
|
205
|
-
*
|
|
203
|
+
* Cast (`x as T`) entre tipos que não se sobrepõem na régua do tsc (`castOverlaps`:
|
|
204
|
+
* literal da origem alargado + comparabilidade). Erro, como o TS2352 — o texto é o
|
|
205
|
+
* dele. Se o cast pode estreitar é outra pergunta, de política: o
|
|
206
|
+
* `narrowing-cast-not-allowed` do `strict`.
|
|
206
207
|
*/
|
|
207
208
|
castUnsound: (node: BaseNode, from: Schema, to: Schema) => Diagnostic;
|
|
208
209
|
/**
|
|
@@ -380,9 +381,11 @@ declare function componentPropsOf(componentType: Schema, schemes: Schemes): Sche
|
|
|
380
381
|
*/
|
|
381
382
|
declare function componentProps(env: Env, name: string): Schema | undefined;
|
|
382
383
|
|
|
383
|
-
/** Contexto opcional de um guard
|
|
384
|
+
/** Contexto opcional de um guard — o que as regras type-aware leem do `check`. */
|
|
384
385
|
interface GuardContext {
|
|
385
386
|
readonly overlay?: TypeOverlay;
|
|
387
|
+
/** Os tipos nomeados do programa: sem eles, uma relação sobre `apply` não expande. */
|
|
388
|
+
readonly schemes?: Schemes;
|
|
386
389
|
}
|
|
387
390
|
/** Um guard: percorre `root` e devolve os diagnósticos que encontrar. */
|
|
388
391
|
type Guard = (root: BaseNode, ctx: GuardContext) => Diagnostic[];
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,resolveConditional,widen,withoutUndefined,isNumericLiteralName,restIndex,unify,ownProp,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,childrenOf,VisitorKeys}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var Ln=(e={})=>rootScope(e),U=(e,n)=>childScope(e,n),R=(e,n)=>lookup(e,n),Qe=e=>visibleNames(e),Kt=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:Ln(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),qt=(e,n)=>e.types[n],_t=(e,n)=>e.schemes[n];var Vn={"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","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:Vn[e],severity:"error",node:n,message:t}),O=(e,n,t,r="error")=>({code:e,kind:Vn[e],severity:r,node:n,message:t}),y={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(u=>u.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),l=s.filter(u=>u.kind==="missing"&&u.path.length===1).map(u=>({name:u.path[0],type:u.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),notASchema:(e,n)=>B("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)=>B("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)=>B("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>B("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)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>B("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>B("not-iterable",e,`Type '${format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>B("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>O("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>O("cast-unsound",e,`Conversion of type '${format(n)}' to type '${format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...B("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)=>({...B("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 ae(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Ze(e,n,t={}){return n.flatMap(r=>r(e,t))}function ye(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var Qt=e=>Array.isArray(e)?e:[e],Kn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function en(e,n="error"){return t=>{let r=[];return ye(t,s=>{let a=nodeViolation(s,e);a&&r.push(O("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function qn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ye(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=typeFeatureViolations(typeFeatures(l,i),t);u.length&&s.push(O("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function D(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=>D(t.type,n))||!!e.index&&D(e.index.value,n);case "array":return D(e.items,n);case "tuple":return e.elements.some(t=>D(t,n));case "union":case "intersection":return e.of.some(t=>D(t,n));case "fn":return e.params.some(t=>D(t.type,n))||D(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>D(r.type,n))||D(t.returns,n));case "keyof":return D(e.of,n);case "index":return D(e.obj,n)||D(e.key,n);case "mapped":return D(e.over,n)||D(e.body,n);case "conditional":return D(e.check,n)||D(e.extends,n)||D(e.then,n)||D(e.else,n);case "returnType":case "parameters":return D(e.fn,n);case "apply":return e.args.some(t=>D(t,n));default:return false}}function _n(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ye(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&D(o)){r.push(O("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function nn(e,n="error"){let t=new Set(e);return r=>{let s=[];return ye(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(O("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(O("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function $e(e,n,t={}){let r=new Set(Qt(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(u,p)=>{let d=r.has(u.type),f=d?p+1:p;d&&f>n&&i.push(O("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of childrenOf(u))l(m,f);};return l(o,0),i}}var tn=(e=3,n="error")=>$e(Kn,e,{hint:"use a pipe instead of nesting functions",severity:n}),rn=(e,n="error")=>$e("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),sn=(e,n="error")=>$e("MemberExpression",e,{severity:n});function an(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(O("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 on(e,n="error"){return t=>{let r=0;return ye(t,()=>{r++;}),r>e?[O("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function ln(e,n="error"){return t=>{let r=[];return ye(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(O("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function un(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[O("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function Ue(e){let n=[en(e),qn(e),_n(e)];return e.hostAllow!=="*"&&n.push(nn([...e.hostAllow])),n}function Zt(e){return Ue(compileProfile(e))}var cn=[{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"}],we=new Map(cn.map(e=>[e.op,e])),zn={number:s.number,boolean:s.boolean,string:s.string},pn=e=>zn[e],Wn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],er={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},nr=[{op:"&&"},{op:"||"},{op:"??"}];function tr(e,n={}){return cn.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(zn[t.result],e,n))}function rr(e,n={}){return Wn.filter(t=>subtype(er[t.result],e,n))}var oe=e=>({bindings:new Map,parent:e}),xn=e=>e.charCodeAt(0)===95;function Ve(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 Ee(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ee(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&Ge(n,r);return}for(let r of Object.keys(t))Ee(t[r],n);}function Yn(e,n){let t=e;Ee(t.typeAnnotation,n),Ee(t.returnType,n);}function Ge(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function X(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Yn(e,n),Ve(n,t,o,e,r,s||a&&xn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")X(u.argument,n,t,r,s,false);else {let f=u;f.computed&&k(f.key,n,t),X(f.value,n,t,r,s||d,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;X(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":X(e.left,n,t,r,s,a);return;case "RestElement":X(e.argument,n,t,r,s,true);return;default:return}}function ve(e,n,t){if(e)switch(e.type){case "AssignmentPattern":k(e.right,n,t),ve(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)ve(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&ve(r,n,t);return;case "RestElement":ve(e.argument,n,t);return;default:return}}function Jn(e,n,t,r){for(let s of e.declarations)X(s.id,n,t,"local",r,false),k(s.init,n,t);}function dn(e,n,t){let r=e,s=oe(n),a=r.params??[];for(let o of a)X(o,s,t,"parameter",false,true);for(let o of a)ve(o,s,t);k(r.body,s,t);}function k(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Yn(e,n),e.type){case "Identifier":Ge(n,e.name);return;case "MemberExpression":{let r=e;k(r.object,n,t),r.computed&&k(r.property,n,t);return}case "Property":{let r=e;r.computed&&k(r.key,n,t),k(r.value,n,t);return}case "Program":case "BlockStatement":{let r=oe(n);for(let s of e.body??[])k(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":dn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Ve(n,t,r.name,r,"local",false),dn(e,n,t);return}case "CatchClause":{let r=e,s=oe(n);X(r.param,s,t,"local",true,false),k(r.body,s,t);return}case "SwitchStatement":{let r=e;k(r.discriminant,n,t);let s=oe(n);for(let a of r.cases){k(a.test,s,t);for(let o of a.consequent??[])k(o,s,t);}return}case "ForStatement":{let r=e,s=oe(n);k(r.init,s,t),k(r.test,s,t),k(r.update,s,t),k(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;k(r.right,n,t);let s=oe(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)X(o.id,s,t,"local",false,true);else k(a,s,t);k(r.body,s,t);return}case "VariableDeclaration":Jn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Ve(n,t,s.name,s,"import",xn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Jn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Ve(n,t,a.name,a,"local",true),dn(s,n,t);}else k(s,n,t);}else for(let s of r.specifiers)Ge(n,s.local.name);return}case "TSAsExpression":k(e.expression,n,t);return;case "TSTypeAliasDeclaration":Ee(e.typeAnnotation,n);return;case "JsonExpression":mn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;Xn(r.name,n);for(let s of r.attributes??[])k(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":k(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)k(i,n,t);else k(o,n,t);}return}}}function Xn(e,n,t){e&&(e.type==="JSXIdentifier"?Ge(n,e.name):e.type==="JSXMemberExpression"&&Xn(e.object,n));}function mn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)mn(s,n,t);return}let r=e;if("#expr"in r){try{k(fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))mn(r[s],n,t);}function fn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};k(e,oe(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(y.unusedName(s.node,s.name));return r}var ir=new Set(["const","import"]),Ae=e=>({binds:new Map,parent:e});function lr(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ie(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ie(n.argument):ie(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ie(n):[]);case "AssignmentPattern":return ie(e.left);case "RestElement":return ie(e.argument);default:return []}}var Ke=(e,n,t)=>{for(let r of ie(n))e.binds.set(r.name,t);};function yn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ie(e))yn(a,n,t);return}let r=e.name,s=lr(n,r);s&&ir.has(s)&&(t.invalid.add(e),t.out.push(y.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;yn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{yn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ae(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ae(n);for(let a of r.params??[])Ke(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ae(n);Ke(s,r.param,"param"),F(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Ae(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ke(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),Ke(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 hn(e){let n={out:[],invalid:new WeakSet};return F(e,Ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var De=e=>({decls:new Map,parent:e});function cr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function he(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?he(n.argument):he(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?he(n):[]);case "AssignmentPattern":return he(e.left);case "RestElement":return he(e.argument);default:return []}}var qe=(e,n)=>{for(let t of he(n))e.decls.set(t.name,t);};function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=cr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;M(r.object,n,t),r.computed&&M(r.property,n,t);return}case "Property":{let r=e;r.computed&&M(r.key,n,t),M(r.value,n,t);return}case "Program":case "BlockStatement":{let r=De(n);for(let s of e.body??[])M(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=De(n);for(let o of r.params??[])qe(a,o);M(r.body,a,t);return}case "CatchClause":{let r=e,s=De(n);qe(s,r.param),M(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=De(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)qe(s,o.id);else a&&M(a,s,t);M(r.right,n,t),M(r.test,s,t),M(r.update,s,t),M(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)qe(n,r.id),M(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":M(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)M(i,n,t);else M(o,n,t);}return}}}function pr(e){let n=new WeakMap;return M(e,De(void 0),n),n}var gn=e=>e.typeAnnotation,Sn=e=>e.returnType,L=e=>e.type==="Identifier"?e.name:null,Qn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?L(n.id):null}return L(e)},Hn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Re=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function Zn(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 bn(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=bn(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function _e(e){let n=e;if(n.regex||n.bigint)return s.unknown;let t=n.value;return t===null?s.null:t===void 0?s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:s.unknown}var le=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):_e(e)},Nn=e=>e.type==="ArrowFunctionExpression",et=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Oe=e=>et(e)?e.args[0]:e,Te=e=>et(e)?e:s.promise(e);function Ce(e){return e.t==="tuple"?true:e.t==="array"?Ce(e.items):e.t==="union"?e.of.some(Ce):false}function ge(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ge(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ge(e.bound):false}var K=(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 nt(e){let n=Sn(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:L(r)??`arg${s$1}`,type:gn(r)??s.unknown})),returns:e.async?Te(n):n}:null}var Q={then:{},else:{}},ut=new Set(["string","number","boolean","undefined","function","object"]),tt={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function ct(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 yr=s.literal(true),hr=s.literal(false),J=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[yr,hr]:[e];function rt(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function gr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=J(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function Sr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=J(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function br(e,n){if(!ut.has(n))return null;if(e.t==="unknown"||e.t==="any")return tt[n]??e;let t=J(e).filter(r=>ct(r,n));return t.length?normalizeUnion(t):tt[n]??e}function Nr(e,n){if(!ut.has(n)||e.t==="unknown"||e.t==="any")return null;let t=J(e).filter(r=>!ct(r,n));return t.length?normalizeUnion(t):null}function st(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=le(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function at(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=le(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function ot(e,n,t,r,s){let a=J(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return r?!!u&&subtype(t,u,s):!(u&&subtype(u,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function it(e,n,t){let r=J(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 Br(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function kr(e,n,t){let r=J(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var wr=e=>e.t==="null"||e.t==="undefined",pt=e=>wr(e)||e.t==="literal"&&!e.value,vr=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=J(e),t=n.filter(r=>!pt(r));return t.length&&t.length<n.length?normalizeUnion(t):null},Er=e=>{let n=J(e),t=n.filter(pt);return t.length&&t.length<n.length?normalizeUnion(t):null},lt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,q=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Ar=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function Me(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,h=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&h.type==="Identifier"){let g=h.name,N=R(n,g);if(!N)return Q;let C=String(m.value);return q(g,it(N,C,true),it(N,C,false))}return Q}if(!Ar(r.operator))return Q;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=rt(a,o)??rt(o,a);if(i){let m=R(n,i.name);if(!m)return Q;let h=br(m,i.tag),g=Nr(m,i.tag);return s?q(i.name,g,h):q(i.name,h,g)}let l=lt(a),u=lt(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let m=p.name,h=R(n,m);if(!h)return Q;let N=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??u],C=J(h),$=C.filter(T=>N.includes(T.t)),se=C.filter(T=>!N.includes(T.t)),de=$.length?normalizeUnion($):null,E=se.length&&se.length<C.length?normalizeUnion(se):null;return s?q(m,E,de):q(m,de,E)}let d=st(a,o)??st(o,a);if(d){let m=R(n,d.name);if(!m)return Q;let h=Br(m,d.lit,t),g=kr(m,d.lit,t);return s?q(d.name,g,h):q(d.name,h,g)}let f=at(a,o)??at(o,a);if(f){let m=R(n,f.name);if(!m)return Q;let h=ot(m,f.prop,f.lit,true,t),g=ot(m,f.prop,f.lit,false,t);return s?q(f.name,g,h):q(f.name,h,g)}return Q}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=Me(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Cr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=R(n,r);if(s)return q(r,vr(s),Er(s))}return Q}function Dr(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 Cr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=R(n,r.name);if(!s)return null;let a=Dr(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?q(i,gr(l,a.type,t),Sr(l,a.type,t)):null}var H=(e,n)=>Object.keys(n).length?U(e,n):e;function V(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>V(t));case "IfStatement":{let n=e;return !!n.alternate&&V(n.consequent)&&V(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&V(n.finalizer))return true;let t=!n.handler||V(n.handler.body);return V(n.block)&&t}default:return false}}var Wr=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function Jr(e){let n=[];return e.maxDepth!==void 0&&n.push(an(e.maxDepth)),e.maxNodes!==void 0&&n.push(on(e.maxNodes)),e.maxArgs!==void 0&&n.push(ln(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(tn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(rn(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(sn(e.memberDepth)),n}function xr(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>O("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function Nt(e,n,t={}){let r={...Wr(n.types),...n.schemes,...Xr(e)},s$1=hn(e),a={overlay:new WeakMap,sink:ae(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s$1.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?compileProfile(t.profile):void 0;o&&configureTypeLimits(o.typeLimits);try{let i,l=Qr(e,a);try{i=S(e,l,a);}catch(d){if(d instanceof TypeEvalLimitError)a.sink.report(O("too-deep",e,d.message));else if(d instanceof UnionTooComplexError)a.sink.report(O("too-complex-union",e,d.message));else throw d;i=s.unknown;}let u=[];o&&u.push(...Ue(o)),t.limits&&u.push(...Jr(t.limits)),t.resultType&&u.push(un(t.resultType,r));let p=[...a.sink.all,...s$1.diagnostics,...xr(e,r),...t.unused?fn(e,t.unused):[],...u.length?Ze(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function Yr(e,n,t={}){let r=Nt(e,n,t),s$1={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let f=L(d.id),m=r.overlay.get(d);f&&m&&(s$1[f]=m.type,p.push(f));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,f=r.overlay.get(u);d&&f&&(s$1[d]=f.type,p.push(d));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=r.overlay.get(u.declaration);o=p?p.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)s$1[p]&&(l[u]={type:s$1[p]});o!==void 0&&(l.default={type:o});}else for(let u in s$1)l[u]={type:s$1[u]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Xr=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function Qr(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(y.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=s.unknown;return}for(let l of a.specifiers){if(l.importKind==="type")continue;let u=l.local.name;if(re(u,l.local,n),u in r){n.sink.report(y.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){r[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",d=discover(i,[p],n.schemes);d?r[u]=d.type:(n.sink.report(y.noSuchMember(l,i,p)),r[u]=s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?U(n.env.scope,r):n.env.scope}var b=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case kt:return e.schema;case "JSXElement":case "JSXFragment":return b(t,e,S(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return b(t,e,_e(e),n);case "Placeholder":return b(t,e,s.any,n);case "Identifier":{let s$1=e.name,a=R(n,s$1);return a===void 0?s$1==="undefined"?b(t,e,s.undefined,n):(t.sink.report(y.unknownName(e,s$1)),b(t,e,s.unknown,n)):b(t,e,a,n)}case "MemberExpression":return b(t,e,es(e,n,t),n);case "CallExpression":return b(t,e,os(e,n,t,r),n);case "ArrowFunctionExpression":return On(e,n,t);case "FunctionDeclaration":return t.sink.report(y.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),b(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(y.unsupported(e,"anonymous function (use an arrow)")),b(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(y.unsupported(e,"'this'")),b(t,e,s.unknown,n);case "BlockStatement":return b(t,e,Ot(e,n,t),n);case "ReturnStatement":{let s$1=e.argument;return b(t,e,s$1?S(s$1,n,t):s.unknown,n)}case "IfStatement":return z(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 z(e,n,t),t.overlay.get(e)?.type??s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=S(a,n,t);if(a.type==="MemberExpression"){let p=t.overlay.get(a.object)?.type,d=p&&apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(y.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=S(s.right,n,t);return t.assignFlow.set(e,widenLiteral(d)),b(t,e,d,n)}if(u&&i!==null){let d=S(s.right,n,t);return subtype(d,u,t.schemes)||t.sink.report(y.notAssignable(s.right,d,u,t.schemes)),t.assignFlow.set(e,Tt(u,d,t.schemes)),b(t,e,d,n)}let p=x(s.right,o,n,t);return b(t,e,p,n)}return b(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s$1=e,a=S(s$1.argument,n,t);return Ie(a,t.schemes)||t.sink.report(y.arithmeticOperand(s$1.argument,"operand")),b(t,e,s.number,n)}case "ExpressionStatement":return b(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return We(e,n,t),b(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let s$1=e.id?.name,a=s$1?t.schemes[s$1]:void 0;return b(t,e,a?ps(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return b(t,e,Ds(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=S(s.right,n,t);return b(t,e,Rs(s.operator,a,o),n)}case "UnaryExpression":return b(t,e,Ts(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=S(s.consequent,H(n,a.then),t),i=S(s.alternate,H(n,a.else),t);return b(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return b(t,e,Ps(e,n,t),n);case "ArrayExpression":return b(t,e,jt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=S(s,n,t);Ft(a,t.schemes)||t.sink.report(y.notTextConvertible(s,a));}return b(t,e,s.string,n)}case "AwaitExpression":{let s$1=e.argument,a=s$1?S(s$1,n,t):s.unknown;return b(t,e,Oe(a),n)}case "Program":{let s$1=ze(e.body,n,t,new Set(t.importNames)).scope;return b(t,e,s.unknown,s$1)}case "JsonExpression":return b(t,e,En(e.body,n,t,e),n);case "ChainExpression":return b(t,e,normalizeUnion([S(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let s=e,a=S(s.expression,n,t),o=Be(s.typeAnnotation,n,t,e);return !subtype(a,o,t.schemes)&&!subtype(o,a,t.schemes)&&t.sink.report(y.castUnsound(e,a,o)),b(t,e,o,n)}default:return t.sink.report(y.unsupported(e,`'${e.type}'`)),b(t,e,s.unknown,n)}}var Hr=new Set(["constructor","prototype","__proto__"]);function Zr(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 es(e,n,t){let r=S(e.object,n,t),s$1=Zr(e);if(s$1!==null&&Hr.has(s$1))return t.sink.report(y.forbiddenMember(e,s$1)),s.unknown;if(e.computed){let i=S(e.property,n,t),l=resolveTypeOp(s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&dt(e,r,i.value,t),s.unknown)}let a=e.property.name,o=discover(r,[a],t.schemes);return o?o.type:(dt(e,r,a,t),s.unknown)}function dt(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(y.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(y.notObject(e,n));}function ns(e,n,t,r){let s$1=e.arguments[0];if(!s$1){r.sink.report(y.missingArgument(e,"schema",s.unknown));return}if(s$1.type!=="Identifier"){r.sink.report(y.asserterNeedsName(s$1,n));return}let a=s$1.name,o=R(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?y.typeAsValue(s$1,a):y.unknownName(s$1,a));return}if(!i||i.params.length>0){r.sink.report(y.notASchema(s$1,a));return}if(!(Bt(a,r)&&!ts(t,a)))return r.overlay.set(s$1,{type:i.body,scope:t}),i.body}function Bt(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&R(n.env.scope,e)!==void 0}function ts(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 re(e,n,t){Bt(e,t)&&t.sink.report(y.shadowsSchema(n,e));}function Rn(e,n){let t=K(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function rs(e,n){let t=R(e.scope,n);if(!t)return;let r=Rn(t,e.schemes);return r?K(r,e.schemes):void 0}function ss(e,n,t,r){let s$1=Rn(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(y.propsMismatch(n[1]??e,s$1,formatTypeDiff(o)));}return b(r,e,s.boolean,t)}var kt="TSLiteSyntheticArg",as=e=>({type:kt,schema:e});function wt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=K(S(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(as(l));else s={elem:Tn(i,o,t),node:a};}return {nodes:r,spread:s}}function os(e,n,t,r){let s$1=e.arguments,a=bn(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=Zn(s$1);if(f){let m=discover(d,f,t.schemes);return m?m.type:(t.sink.report(y.noSuchMember(e,d,f.join("."))),s.unknown)}return s$1.forEach(m=>S(m,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let d=ns(e,a,n,t);s$1.length<2&&s$1.length>0&&t.sink.report(y.missingArgument(e,"value",s.unknown));for(let f=1;f<s$1.length;f++)S(s$1[f],n,t);return d??s.unknown}if(a&&t.env.matchers?.has(a))return ss(e,s$1,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s$1.forEach(d=>S(d,n,t)),s.any;if(o.t==="overload")return ls(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(d=>S(d,n,t)),t.sink.report(y.notCallable(e,o)),s.unknown;let i=wt(s$1,n,t),l=i.nodes.map(d=>vt(d,n,t)),u=At(e),p=!u||Dt(o,u.length);return p||t.sink.report(y.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),vn(e,o,i.nodes,l,n,t,i.spread,r,p?u:void 0)}function vt(e,n,t){if(Nn(e))return s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=ae(),s$1=S(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function vn(e,n,t,r,s$1,a,o=null,i,l){let u=h=>{if(!i)return h;let g=substitute(n.returns,h);if(g.t==="fn"&&i.t==="fn"){let N=h,C=Math.min(g.params.length,i.params.length);for(let $=0;$<C;$++)N=unify(g.params[$].type,i.params[$].type,N)??N;return unify(g.returns,i.returns,N)??N}return unify(g,i,h)??h},p=l?ms(e,n,l,a):void 0,d=p??u(instantiateLoose(n,r).bindings);t.forEach((h,g)=>{if(Nn(h)){let N=widenType(substitute(n.params[g]?.type??s.any,d));r[g]=On(h,s$1,a,N);}else if(h.type==="CallExpression"&&r[g].t==="any")r[g]=S(h,s$1,a,substitute(n.params[g]?.type??s.unknown,d));else if(h.type==="Literal"){let N=n.params[g]?.type??s.unknown,C=N.t==="var"?N.bound?substitute(N.bound,d):N:substitute(N,d);ge(C)&&(r[g]=b(a,h,le(h),s$1));}else if(h.type==="ArrayExpression"||h.type==="ObjectExpression"||h.type==="ConditionalExpression"){let N=n.params[g]?.type??s.unknown,C=substitute(N,d);if(h.type==="ArrayExpression"&&Ce(C)){r[g]=Mn(h,C,s$1,a);return}let $=N.t==="var"?N.bound?substitute(N.bound,d):void 0:C;$&&Ms($,a.schemes)&&(r[g]=Is(h,$,s$1,a,N.t==="var")??r[g]);}});let f=p??u(instantiateLoose(n,r).bindings);p||is(e,n,f,a),gs(e,n,r,f,a,t,o),t.forEach((h,g)=>{let N=n.params[g];h.type==="ObjectExpression"&&N&&!N.variadic&&Pn(h,substitute(N.type,f),a);});let m=substitute(n.returns,f);return widenInferred(groundVars(m.t==="union"?normalizeUnion(m.of):m,a.schemes))}var mt=new WeakMap;function Et(e){let n=mt.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)j(s.type,t,r);return j(e.returns,t,r),mt.set(e,t),t}function j(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":j(e.items,n,t);return;case "union":for(let r of e.of)j(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)j(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)j(r.type,n,t);j(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)j(s.type,n,t);j(r.returns,n,t);}return;case "apply":for(let r of e.args)j(r,n,t);return;case "keyof":j(e.of,n,t);return;case "index":j(e.obj,n,t),j(e.key,n,t);return;case "mapped":j(e.over,n,t),j(e.body,n,t);return;default:return}}function is(e,n,t,r){let s=Et(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=substitute(o,t);subtype(i,l,r.schemes)||r.sink.report(y.constraintViolation(e,a,i,l));}}function ls(e,n,t,r,s){let a=wt(e.arguments,t,r),o=a.nodes,i=o.map(p=>vt(p,t,r)),l=At(e),u=l?n.signatures.filter(p=>Dt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(y.wrongTypeArgumentCount(e,p,l.length)),ft(e,n.signatures,a,o,i,t,r,s,void 0)}return ft(e,u,a,o,i,t,r,s,l)}function ft(e,n,t,r,s$1,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?fs(m,r.length):ys(m,r.length),d=u.signatures.filter(p);if(d.length>1&&s$1.some(m=>m.t==="any"))for(let m of d){let h=ae(),g=vn(e,m,r,s$1,a,{...o,sink:h},t.spread,i,l);if(!h.hasErrors())return h.all.forEach(N=>o.sink.report(N)),g}let f=u.signatures.find(m=>p(m)&&hs(m,s$1,o));if(!f){let m=u.signatures.filter(p);m.length===1?f=m[0]:u.signatures.length===1&&(f=u.signatures[0]);}return f?vn(e,f,r,s$1,a,o,t.spread,i,l):(o.sink.report(y.noMatchingOverload(e,u,s$1)),s.unknown)}function us(e,n,t,r){let s$1=R(n,e[0]);if(s$1===void 0)return t.sink.report(y.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(y.noSuchMember(r,s$1,a.join("."))),s.unknown)}function Be(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let f=s$1(d);return f!==d&&(u=true),f});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return us(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(cs(o.name,n,t,r),!(o.name in t.schemes)))return s.any;let i=false,l={};for(let u of Object.keys(o)){let p=s$1(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return s$1(e)}function cs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Be(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function ps(e,n,t,r,s){let a={...t,sink:ae(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Be(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var Fe=(e,n,t)=>{let r=gn(e);return r===void 0?r:Be(r,n,t,e)},ds=(e,n,t)=>{let r=Sn(e);return r===void 0?r:Be(r,n,t,e)},At=e=>{let n=e.typeArguments;return n?.length?n:void 0},Dt=(e,n)=>(e.typeParams?.length??0)===n;function ms(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Et(n)){let u=o[i];if(!u)continue;let p=groundVars(substitute(l,o),r.schemes);subtype(u,p,r.schemes)||r.sink.report(y.constraintViolation(e,i,u,p));}return o}function fs(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 ys(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 hs(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 l=s$1;l<n.length;l++)if(!subtype(n[l],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 gs(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic){let f=substitute(p.type,r),m=f.t==="array"?f.items:s.unknown;for(let h=u;h<t.length;h++)subtype(t[h],m,s$1.schemes)||s$1.sink.report(y.notAssignable(i(h),t[h],m,s$1.schemes));break}let d=substitute(p.type,r);if(u>=t.length){!p.optional&&!o&&s$1.sink.report(y.missingArgument(e,p.name,d));continue}subtype(t[u],d,s$1.schemes)||s$1.sink.report(y.notAssignable(i(u),t[u],d,s$1.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){s$1.sink.report(y.spreadArgument(o.node));return}if(l){let d=substitute(l.type,r),f=d.t==="array"?d.items:s.unknown;subtype(o.elem,f,s$1.schemes)||s$1.sink.report(y.notAssignable(o.node,o.elem,f,s$1.schemes));}return}!l&&t.length>n.params.length&&s$1.sink.report(y.excessArgument(i(n.params.length),n.params.length,t.length));}function Ct(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=>Ct(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:resolveTypeOp({t:"intersection",of:r})}}function x(e,n,t,r,s$1=false){let a=apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=resolveConditional(a,r.schemes)??a),e.type){case "Literal":{let i=le(e);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,s$1?ge(n)?i:widen(_e(e)):n,t)}case "ArrayExpression":{if(Ce(a)){let i=Mn(e,a,t,r);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,i,t)}if(a.t==="array"){let i=[];for(let u of e.elements){if(!u)continue;let p=u;if(p.type==="SpreadElement"){let d=x(p.argument,n,t,r,s$1);d.t==="array"&&i.push(d.items);}else i.push(x(p,a.items,t,r,s$1));}let l=s$1&&i.length>0?s.array(normalizeUnion(i)):n;return b(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let p of e.properties){let d=p;if(d.type==="SpreadElement"){S(d.argument,t,r);continue}let f=d,m=Re(f),h=m!==null?Ct(a,m,r.schemes):void 0,g=h?x(f.value,h,t,r,s$1):widen(S(f.value,t,r));m!==null&&(i[m]={type:h??g},l[m]={type:g}),b(r,d,g,t);}let u={t:"object",props:i};return subtype(u,n,r.schemes)||r.sink.report(y.notAssignable(e,u,n,r.schemes)),b(r,e,s$1?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=On(e,t,r,a);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let l=x(i.consequent,n,t,r,s$1),u=x(i.alternate,n,t,r,s$1);return b(r,e,s$1?normalizeUnion([l,u]):n,t)}case "Placeholder":return b(r,e,n,t)}let o=S(e,t,r);return subtype(o,n,r.schemes)||r.sink.report(y.notAssignable(e,o,n,r.schemes)),b(r,e,o,t)}function On(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=E=>a?.length?{...E,typeParams:a}:E,i={},l=new Map,u=e.params.map((E,T)=>{let P=E,xe=s$1?.params[T]?.type;if(P.type==="RestElement"){let ne=P.argument,G=Fe(ne,n,t)??(s$1?.params[T]?.variadic?xe:void 0)??s.array(s.unknown),W=L(ne);return W?(re(W,ne,t),i[W]=G):Z(ne,G,i,n,t),t.overlay.set(ne,{type:G,scope:n}),t.overlay.set(P,{type:G,scope:n}),{name:W??`arg${T}`,type:G,variadic:true}}if(P.type==="AssignmentPattern"){let ne=P.left,Ye=Fe(ne,n,t)??xe;Z(P,Ye??s.unknown,i,n,t);let G=L(ne),W=G?i[G]:void 0,Xe=Ye??W??s.unknown,Un=Xe.t==="unknown"?Xe:normalizeUnion([Xe,s.undefined]);return G&&W&&(W.t==="union"||W.t==="boolean")&&l.set(G,W),t.overlay.set(P,{type:Un,scope:n}),{name:G??`arg${T}`,type:Un,optional:true}}let me=L(P),jn=Fe(P,n,t),ke=jn??xe??s.unknown,$n=P.type==="Identifier"&&(!!P.optional||jn===void 0&&!!s$1?.params[T]?.optional),fe=$n&&ke.t!=="unknown"?normalizeUnion([ke,s.undefined]):ke;return me?(re(me,P,t),i[me]=fe,(fe.t==="union"||fe.t==="boolean")&&l.set(me,fe)):P.type!=="Identifier"&&Z(P,ke,i,n,t),t.overlay.set(P,{type:fe,scope:n}),$n?{name:me??`arg${T}`,type:fe,optional:true}:{name:me??`arg${T}`,type:ke}}),p=false;u.forEach((E,T)=>{E.optional?p=true:!E.variadic&&p&&t.sink.report(y.requiredAfterOptional(e.params[T]));});let d=U(n,i),f=e.body,m=ds(e,n,t),h=e.returnGuard,g=h?{param:h.param,type:Be(h.type,n,t,e)}:void 0;if(g){let E=u[g.param];E&&!subtype(g.type,E.type,t.schemes)&&t.sink.report(y.notAssignable(e,g.type,E.type,t.schemes));}let N=E=>g?{...E,guard:g}:E;if(f.type!=="BlockStatement"&&m){let E=e.async?Oe(m):m;x(f,E,d,t);let T=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:T})),n)}let C=m??s$1?.returns,$=C&&e.async?Oe(C):C,se=f.type==="BlockStatement"?b(t,f,Ot(f,d,t,new Set(Object.keys(i)),l,$),d):S(f,d,t),de=e.async?Te(se):se;if(m){let E=e.async?Oe(m):m,T=e.async?se:de;subtype(T,E,t.schemes)||t.sink.report(y.notAssignable(f,de,m,t.schemes));let P=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:P})),n)}return b(t,e,o({t:"fn",params:u,returns:widenType(de)}),n)}function be(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?be(n.argument):be(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?be(n.argument):be(n):[]);case "AssignmentPattern":return be(e.left);default:return []}}function Rt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>be(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Rt(e.declaration):[]}function Ot(e,n,t,r=new Set,s$1,a){let{returns:o}=ze(e.body,n,t,r,s$1,a),i=!V(e);return o.length===0?i?s.void:s.union([]):normalizeUnion(i?[...o,s.undefined]:o)}var Ss=[s.literal(true),s.literal(false)];function bs(e){return e.t==="union"?e.of:e.t==="boolean"?Ss:[e]}function Tt(e,n,t){let r=bs(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 Pt(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 ce(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=ce(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=Pt(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=Mt(e,n,t);if(r.size===0)return {types:n,exits:V(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:V(e)}}case "TryStatement":{let r=e,s=[],a=ce(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=ce(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Ns(n,s);return r.finalizer&&(o=ce(r.finalizer,o,t).types),{types:o,exits:V(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function Mt(e,n,t){let r=ce(e.consequent,n,t),s=e.alternate?ce(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,normalizeUnion(l));}return o}function It(e,n){let t=new Map,r=s=>{let a=R(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function Ns(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 Bs(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=It(n,t),s=ce(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 H(n,a)}function ze(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!ks(e))return yt(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,u]of s)t.declaredMut.set(l,u);try{return yt(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,u]of i)t.declaredMut.set(l,u);}}function ks(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 yt(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let u of Rt(l))r.has(u.name)?t.sink.report(y.cannotRedeclare(u,u.name)):r.add(u.name);if(l.type==="VariableDeclaration")a=We(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration?.type==="VariableDeclaration")a=We(u.declaration,a,t);else if(u.declaration?.type==="FunctionDeclaration"){let p=S(u.declaration,a,t),d=L(u.declaration.id);d&&(a=U(a,{[d]:p}));}else for(let p of u.specifiers)R(a,p.local.name)===void 0&&t.sink.report(y.unknownName(p.local,p.local.name));}else if(l.type==="ExportDefaultDeclaration")S(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let u=S(l,a,t),p=L(l.id);p&&(a=U(a,{[p]:u}));}else if(l.type==="IfStatement"){let u=l,p=t.evolving.size||t.declaredMut.size?It(a,t):null;if(o.push(...z(l,a,t,s)),p&&p.size){let d=Mt(u,p,t);d.size&&(a=H(a,Object.fromEntries(d)));}!u.alternate&&V(u.consequent)&&(a=H(a,Me(u.test,a,t.schemes).else));}else {o.push(...z(l,a,t,s));let u=Pt(l,t);u?a=H(a,{[u.name]:u.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=Bs(l,a,t));}}return {scope:a,returns:o}}function z(e,n,t,r){switch(e.type){case "ReturnStatement":{let s$1=e.argument,a=s$1?r?(x(s$1,r,n,t),r):S(s$1,n,t):s.unknown;return b(t,e,a,n),[a]}case "IfStatement":{let s$1=e;S(s$1.test,n,t);let a=Me(s$1.test,n,t.schemes),o=z(s$1.consequent,H(n,a.then),t,r);return s$1.alternate&&o.push(...z(s$1.alternate,H(n,a.else),t,r)),b(t,e,s.unknown,n),o}case "BlockStatement":{let{returns:s$1}=ze(e.body,n,t,void 0,void 0,r);return b(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=We(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=z(s$1.body,a,t,r);return b(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"?Tn(a,s$1.right,t):s.string,i=Qn(s$1.left);i&&re(i,Hn(s$1.left),t);let l=i?U(n,{[i]:o}):n,u=z(s$1.body,l,t,r);return b(t,e,s.unknown,n),u}case "BreakStatement":case "ContinueStatement":return b(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&S(s$1,n,t),b(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,a=z(s$1.block,n,t,r);if(s$1.handler){let o=s$1.handler.param,i=o?L(o):null;i&&o&&re(i,o,t);let l=i?U(n,{[i]:s.unknown}):n;a.push(...z(s$1.handler.body,l,t,r));}return s$1.finalizer&&a.push(...z(s$1.finalizer,n,t,r)),b(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 l=ze(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return b(t,e,s.unknown,n),o}default:return S(e,n,t),[]}}function ws(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function Tn(e,n,t){let r=K(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=>Tn(s,n,t)));}return t.sink.report(y.notIterable(n,e)),s.any}function vs(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function Es(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return s.object(t,e.index)}function As(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function Z(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=Fe(e,r,s$1)??n;re(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(y.notAssignable(a.right,o,n,s$1.schemes));let i=widenType(o),{type:l}=withoutUndefined(n),u=l.t==="unknown"?i:normalizeUnion([l,i]),p=a.left;if(p.type==="Identifier"){let d=p.name;re(d,p,s$1),t[d]=u,s$1.overlay.set(p,{type:u,scope:r});}else Z(p,u,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Z(o.argument,Es(n,a),t,r,s$1);continue}let i=o,l=Re(i);l!=null&&a.push(l);let u=l!=null?ws(n,l,s$1):s.unknown;Z(i.value,u,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Z(i.argument,As(n,o),t,r,s$1):Z(i,vs(n,o),t,r,s$1);});return}}}function Pn(e,n,t){let r=K(n,t.schemes),a=(r.t==="union"?r.of.map(o=>K(o,t.schemes)):[r]).filter(o=>o.t==="object"&&(!o.index||o.index.key==="number"));if(a.length&&!a.some(o=>Object.keys(o.props).length===0&&!o.index))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=Re(i);if(l===null)continue;let u=a.filter(p=>l in p.props||p.index?.key==="number"&&isNumericLiteralName(l));if(!u.length){t.sink.report(y.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&Pn(i.value,u[0].props[l].type,t);}}function We(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=L(a);o&&re(o,a,t);let i=Fe(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,ht(o,i,t)):(r[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(y.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let l=i??(s$1.init.type==="ArrowFunctionExpression"?nt(s$1.init):null),u=o&&l?U(n,{[o]:l}):n,p,d=null;i?(x(s$1.init,i,u,t),s$1.init.type==="ObjectExpression"&&Pn(s$1.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&s$1.init.type==="Literal"&&(p=Tt(i,le(s$1.init),t.schemes))):(p=S(s$1.init,u,t),e.kind!=="const"&&(p=widenLiteral(p)),d=p),b(t,s$1,p,n),o?(r[o]=p,e.kind!=="const"&&d&&ht(o,d,t)):Z(a,p,r,n,t);}return b(t,e,s.unknown,n),U(n,r)}function ht(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Ds(e,n,t){let r=S(e.left,n,t),s$1=S(e.right,n,t),a=e.operator,o=we.get(a);if(!o)return s.boolean;if(o.category==="additive"){if(pe(r)||pe(s$1))return ue(r,t.schemes)||ue(s$1,t.schemes)?s.string:s.number;if(ue(r,t.schemes)&&ue(s$1,t.schemes))return s.string;if(Ie(r,t.schemes)&&Ie(s$1,t.schemes))return s.number;if(ue(r,t.schemes)||ue(s$1,t.schemes)){let l=ue(r,t.schemes)?s$1:r;return t.sink.report(y.implicitCoercion(e,r,s$1,Ft(l,t.schemes))),s.string}return t.sink.report(y.operatorNotApplicable(e,"+",r,s$1)),s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ie(r,t.schemes)||t.sink.report(y.arithmeticOperand(e.left,"left")),Ie(s$1,t.schemes)||t.sink.report(y.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!pe(r)&&!pe(s$1)){let i=apparentType(r,t.schemes),l=apparentType(s$1,t.schemes),u=subtype(i,s.number,t.schemes),p=subtype(l,s.number,t.schemes);u&&p||!u&&!p&&(subtype(i,l,t.schemes)||subtype(l,i,t.schemes))||t.sink.report(y.operatorNotApplicable(e,a,r,s$1));}return pn(o.result)}var pe=e=>e.t==="any"||e.t==="unknown",Ie=(e,n)=>pe(e)||subtype(apparentType(e,n),s.number,n),ue=(e,n)=>!pe(e)&&subtype(apparentType(e,n),s.string,n),Cs=s.union([s.string,s.number,s.boolean,s.null,s.undefined]),Ft=(e,n)=>pe(e)||subtype(apparentType(e,n),Cs,n),gt={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},kn=e=>e.t==="null"||e.t==="undefined";function Rs(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=>!kn(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!kn(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>kn(a)?[a]:a.t==="literal"?a.value?[]:[a]:gt[a.t]?[gt[a.t]]:[]);return normalizeUnion([...s$1,t])}var Os=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function Ts(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 Os;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function Ps(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=K(S(p.argument,n,t),t.schemes);if(g.t==="object"){for(let N in g.props)r[N]=g.props[N];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let d=p,f=S(d.value,n,t),m=widen(f);if(b(t,p,f,n),d.computed){let g=K(S(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let h=Re(d);h!==null&&(r[h]={type:m},a.push(m),/^\d+$/.test(h)&&o.push(m));}return i?s={key:"string",type:normalizeUnion(a)}:l&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function jt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=K(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 Mn(e,n,t,r){let s$1=K(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?Mn(l,u,t,r):ge(u)?S(l,t,r):widen(S(l,t,r));if(s$1.t==="tuple"&&o){let l=s$1.elements.length,u=restIndex(s$1),p=u<0?0:l-u-1,d=m=>{if(u<0||m<u)return s$1.elements[m];let h=a.length-m;return h<=p?s$1.elements[l-h]:s$1.elements[u]},f=a.map((m,h)=>{let g=d(h);return g?i(m,g):widen(S(m,t,r))});return b(r,e,{t:"tuple",elements:f},t)}if(s$1.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){S(p.argument,t,r);continue}l.push(i(p,s$1.items));}return b(r,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return jt(e,t,r)}function En(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=>En(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if("#expr"in s$1){let o;try{o=fromJson(s$1);}catch{return t.sink.report(y.unsupported(r,`'#expr: ${String(s$1["#expr"])}'`)),s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:En(s$1[o],n,t,r)};return {t:"object",props:a}}function Ms(e,n){let t=apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function Is(e,n,t,r,s){let a=ae(),o=x(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(u=>u.node===l.node&&u.code===l.code&&u.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var Fs=(e,n)=>({...e,typeAnnotation:n}),js=(e,n)=>({...e,returnType:n}),$s=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Fn(e,n){return e.get(n)?.type}function Us(e,n){return e.get(n)?.scope}function Ls(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function Vs(e,n){let t=e.get(n)?.scope;return t?[...Qe(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Gs=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Ks(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 Je(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(Gs)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=Fn(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=Je(e,n+2,t,r),l=Ks(a);return !i||!l?void 0:discover(i,[l],r)?.type}case "ArrayExpression":{let o=Je(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=we.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return s.number;let i=a.left===s$1?a.right:a.left,l=Fn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Je(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function qs(e,n){return e.filter(t=>t.node===n)}export{we as BINARY_OP,cn as BINARY_OPS,Kn as FUNCTION_KINDS,nr as LOGICAL_OPS,Wn as UNARY_OPS,Fs as annotate,js as annotateReturn,$s as asExpression,tr as binaryOpsProducing,nn as calleeAllowlist,en as capabilityNodes,Nt as check,U as childScope,pr as collectBindings,hn as collectMutations,fn as collectUnused,rs as componentProps,Rn as componentPropsOf,Je as contextualTypeAt,Kt as createEnv,ae as createSink,y as diag,qs as diagnosticsAt,Yr as extractModuleType,Zt as fromCapability,Ze as guard,Ue as guardsFromCompiled,R as lookup,O as makeDiagnostic,ln as maxArgs,rn as maxCallNesting,an as maxDepth,tn as maxFunctionNesting,$e as maxNestingOf,on as maxNodes,Ls as memberCompletions,sn as memberDepth,pn as opResultSchema,qt as resolveNamed,_t as resolveScheme,un as resultType,Ln as rootScope,Us as scopeAt,Vs as scopeCompletions,Fn as typeAt,rr as unaryOpsProducing,Qe as visibleNames};
|
|
1
|
+
import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,resolveConditional,widen,withoutUndefined,isNumericLiteralName,restIndex,baseLiteralType,comparable,unify,ownProp,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,childrenOf,VisitorKeys}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var Gn=(e={})=>rootScope(e),L=(e,n)=>childScope(e,n),R=(e,n)=>lookup(e,n),Ze=e=>visibleNames(e),zt=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:Gn(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),Wt=(e,n)=>e.types[n],Jt=(e,n)=>e.schemes[n];var Kn={"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","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"},B=(e,n,t)=>({code:e,kind:Kn[e],severity:"error",node:n,message:t}),O=(e,n,t,r="error")=>({code:e,kind:Kn[e],severity:r,node:n,message:t}),y={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(u=>u.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),l=s.filter(u=>u.kind==="missing"&&u.path.length===1).map(u=>({name:u.path[0],type:u.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),notASchema:(e,n)=>B("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)=>B("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)=>B("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>B("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)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>B("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>B("not-iterable",e,`Type '${format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>B("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>O("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>B("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.`),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...B("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)=>({...B("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 ae(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function $e(e,n,t){let r=baseLiteralType(e);return comparable(n,widenType(r),t)||comparable(r,n,t)}function _n(e,n,t){return subtype(e,n,t)}function nn(e,n,t={}){return n.flatMap(r=>r(e,t))}function oe(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var sr=e=>Array.isArray(e)?e:[e],xn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function tn(e,n="error"){return t=>{let r=[];return oe(t,s=>{let a=nodeViolation(s,e);a&&r.push(O("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function zn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return oe(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=typeFeatureViolations(typeFeatures(l,i),t);u.length&&s.push(O("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function E(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>E(t.type,n))||!!e.index&&E(e.index.value,n);case "array":return E(e.items,n);case "tuple":return e.elements.some(t=>E(t,n));case "union":case "intersection":return e.of.some(t=>E(t,n));case "fn":return e.params.some(t=>E(t.type,n))||E(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>E(r.type,n))||E(t.returns,n));case "keyof":return E(e.of,n);case "index":return E(e.obj,n)||E(e.key,n);case "mapped":return E(e.over,n)||E(e.body,n);case "conditional":return E(e.check,n)||E(e.extends,n)||E(e.then,n)||E(e.else,n);case "returnType":case "parameters":return E(e.fn,n);case "apply":return e.args.some(t=>E(t,n));default:return false}}function Wn(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return oe(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&E(o)){r.push(O("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function Jn(e,n="error"){return (t,r)=>{let s=r.overlay;if(!e.typeStrict||!s)return [];let a=r.schemes??{},o=[];return oe(t,i=>{if(i.type!=="TSAsExpression")return;let{expression:l}=i,u=s.get(l)?.type,p=s.get(i)?.type;!u||!p||E(p)||!$e(u,p,a)||_n(u,p,a)||o.push(O("narrowing-cast-not-allowed",i,`A cast may only widen under 'strict': '${format(u)}' is not assignable to '${format(p)}'. Narrow with a type guard, or prove the value with an asserter.`,n));}),o}}function rn(e,n="error"){let t=new Set(e);return r=>{let s=[];return oe(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(O("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(O("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Ue(e,n,t={}){let r=new Set(sr(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(u,p)=>{let d=r.has(u.type),f=d?p+1:p;d&&f>n&&i.push(O("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of childrenOf(u))l(m,f);};return l(o,0),i}}var sn=(e=3,n="error")=>Ue(xn,e,{hint:"use a pipe instead of nesting functions",severity:n}),an=(e,n="error")=>Ue("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),on=(e,n="error")=>Ue("MemberExpression",e,{severity:n});function ln(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(O("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 un(e,n="error"){return t=>{let r=0;return oe(t,()=>{r++;}),r>e?[O("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function cn(e,n="error"){return t=>{let r=[];return oe(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(O("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function pn(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[O("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function Ve(e){let n=[tn(e),zn(e),Wn(e),Jn(e)];return e.hostAllow!=="*"&&n.push(rn([...e.hostAllow])),n}function or(e){return Ve(compileProfile(e))}var dn=[{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"}],we=new Map(dn.map(e=>[e.op,e])),Yn={number:s.number,boolean:s.boolean,string:s.string},mn=e=>Yn[e],Xn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],ir={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},lr=[{op:"&&"},{op:"||"},{op:"??"}];function ur(e,n={}){return dn.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(Yn[t.result],e,n))}function cr(e,n={}){return Xn.filter(t=>subtype(ir[t.result],e,n))}var ie=e=>({bindings:new Map,parent:e}),Hn=e=>e.charCodeAt(0)===95;function Ke(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 Ee(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ee(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&qe(n,r);return}for(let r of Object.keys(t))Ee(t[r],n);}function Zn(e,n){let t=e;Ee(t.typeAnnotation,n),Ee(t.returnType,n);}function qe(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function X(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Zn(e,n),Ke(n,t,o,e,r,s||a&&Hn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")X(u.argument,n,t,r,s,false);else {let f=u;f.computed&&k(f.key,n,t),X(f.value,n,t,r,s||d,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;X(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":X(e.left,n,t,r,s,a);return;case "RestElement":X(e.argument,n,t,r,s,true);return;default:return}}function ve(e,n,t){if(e)switch(e.type){case "AssignmentPattern":k(e.right,n,t),ve(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)ve(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&ve(r,n,t);return;case "RestElement":ve(e.argument,n,t);return;default:return}}function Qn(e,n,t,r){for(let s of e.declarations)X(s.id,n,t,"local",r,false),k(s.init,n,t);}function fn(e,n,t){let r=e,s=ie(n),a=r.params??[];for(let o of a)X(o,s,t,"parameter",false,true);for(let o of a)ve(o,s,t);k(r.body,s,t);}function k(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Zn(e,n),e.type){case "Identifier":qe(n,e.name);return;case "MemberExpression":{let r=e;k(r.object,n,t),r.computed&&k(r.property,n,t);return}case "Property":{let r=e;r.computed&&k(r.key,n,t),k(r.value,n,t);return}case "Program":case "BlockStatement":{let r=ie(n);for(let s of e.body??[])k(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":fn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Ke(n,t,r.name,r,"local",false),fn(e,n,t);return}case "CatchClause":{let r=e,s=ie(n);X(r.param,s,t,"local",true,false),k(r.body,s,t);return}case "SwitchStatement":{let r=e;k(r.discriminant,n,t);let s=ie(n);for(let a of r.cases){k(a.test,s,t);for(let o of a.consequent??[])k(o,s,t);}return}case "ForStatement":{let r=e,s=ie(n);k(r.init,s,t),k(r.test,s,t),k(r.update,s,t),k(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;k(r.right,n,t);let s=ie(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)X(o.id,s,t,"local",false,true);else k(a,s,t);k(r.body,s,t);return}case "VariableDeclaration":Qn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Ke(n,t,s.name,s,"import",Hn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Qn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Ke(n,t,a.name,a,"local",true),fn(s,n,t);}else k(s,n,t);}else for(let s of r.specifiers)qe(n,s.local.name);return}case "TSAsExpression":k(e.expression,n,t);return;case "TSTypeAliasDeclaration":Ee(e.typeAnnotation,n);return;case "JsonExpression":yn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;et(r.name,n);for(let s of r.attributes??[])k(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":k(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)k(i,n,t);else k(o,n,t);}return}}}function et(e,n,t){e&&(e.type==="JSXIdentifier"?qe(n,e.name):e.type==="JSXMemberExpression"&&et(e.object,n));}function yn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)yn(s,n,t);return}let r=e;if("#expr"in r){try{k(fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))yn(r[s],n,t);}function hn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};k(e,ie(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(y.unusedName(s.node,s.name));return r}var fr=new Set(["const","import"]),Ae=e=>({binds:new Map,parent:e});function yr(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function le(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?le(n.argument):le(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?le(n):[]);case "AssignmentPattern":return le(e.left);case "RestElement":return le(e.argument);default:return []}}var _e=(e,n,t)=>{for(let r of le(n))e.binds.set(r.name,t);};function gn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of le(e))gn(a,n,t);return}let r=e.name,s=yr(n,r);s&&fr.has(s)&&(t.invalid.add(e),t.out.push(y.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;gn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{gn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ae(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ae(n);for(let a of r.params??[])_e(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ae(n);_e(s,r.param,"param"),F(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Ae(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)_e(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),_e(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 Sn(e){let n={out:[],invalid:new WeakSet};return F(e,Ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var De=e=>({decls:new Map,parent:e});function gr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function he(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?he(n.argument):he(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?he(n):[]);case "AssignmentPattern":return he(e.left);case "RestElement":return he(e.argument);default:return []}}var xe=(e,n)=>{for(let t of he(n))e.decls.set(t.name,t);};function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=gr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;M(r.object,n,t),r.computed&&M(r.property,n,t);return}case "Property":{let r=e;r.computed&&M(r.key,n,t),M(r.value,n,t);return}case "Program":case "BlockStatement":{let r=De(n);for(let s of e.body??[])M(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=De(n);for(let o of r.params??[])xe(a,o);M(r.body,a,t);return}case "CatchClause":{let r=e,s=De(n);xe(s,r.param),M(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=De(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)xe(s,o.id);else a&&M(a,s,t);M(r.right,n,t),M(r.test,s,t),M(r.update,s,t),M(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)xe(n,r.id),M(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":M(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)M(i,n,t);else M(o,n,t);}return}}}function Sr(e){let n=new WeakMap;return M(e,De(void 0),n),n}var bn=e=>e.typeAnnotation,Nn=e=>e.returnType,U=e=>e.type==="Identifier"?e.name:null,nt=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?U(n.id):null}return U(e)},tt=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Re=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function rt(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 Bn(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=Bn(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function ze(e){let n=e;if(n.regex||n.bigint)return s.unknown;let t=n.value;return t===null?s.null:t===void 0?s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:s.unknown}var ue=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):ze(e)},kn=e=>e.type==="ArrowFunctionExpression",st=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Oe=e=>st(e)?e.args[0]:e,Te=e=>st(e)?e:s.promise(e);function Ce(e){return e.t==="tuple"?true:e.t==="array"?Ce(e.items):e.t==="union"?e.of.some(Ce):false}function ge(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ge(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ge(e.bound):false}var K=(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 at(e){let n=Nn(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:U(r)??`arg${s$1}`,type:bn(r)??s.unknown})),returns:e.async?Te(n):n}:null}var Q={then:{},else:{}},mt=new Set(["string","number","boolean","undefined","function","object"]),ot={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function ft(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 kr=s.literal(true),wr=s.literal(false),W=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[kr,wr]:[e];function it(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function vr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=W(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function Er(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=W(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function Ar(e,n){if(!mt.has(n))return null;if(e.t==="unknown"||e.t==="any")return ot[n]??e;let t=W(e).filter(r=>ft(r,n));return t.length?normalizeUnion(t):ot[n]??e}function Dr(e,n){if(!mt.has(n)||e.t==="unknown"||e.t==="any")return null;let t=W(e).filter(r=>!ft(r,n));return t.length?normalizeUnion(t):null}function lt(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=ue(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function ut(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=ue(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function ct(e,n,t,r,s){let a=W(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return r?!!u&&subtype(t,u,s):!(u&&subtype(u,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function pt(e,n,t){let r=W(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 Cr(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function Rr(e,n,t){let r=W(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var Or=e=>e.t==="null"||e.t==="undefined",yt=e=>Or(e)||e.t==="literal"&&!e.value,Tr=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=W(e),t=n.filter(r=>!yt(r));return t.length&&t.length<n.length?normalizeUnion(t):null},Pr=e=>{let n=W(e),t=n.filter(yt);return t.length&&t.length<n.length?normalizeUnion(t):null},dt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,q=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Mr=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function Me(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,h=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&h.type==="Identifier"){let g=h.name,N=R(n,g);if(!N)return Q;let C=String(m.value);return q(g,pt(N,C,true),pt(N,C,false))}return Q}if(!Mr(r.operator))return Q;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=it(a,o)??it(o,a);if(i){let m=R(n,i.name);if(!m)return Q;let h=Ar(m,i.tag),g=Dr(m,i.tag);return s?q(i.name,g,h):q(i.name,h,g)}let l=dt(a),u=dt(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let m=p.name,h=R(n,m);if(!h)return Q;let N=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??u],C=W(h),$=C.filter(T=>N.includes(T.t)),se=C.filter(T=>!N.includes(T.t)),me=$.length?normalizeUnion($):null,A=se.length&&se.length<C.length?normalizeUnion(se):null;return s?q(m,A,me):q(m,me,A)}let d=lt(a,o)??lt(o,a);if(d){let m=R(n,d.name);if(!m)return Q;let h=Cr(m,d.lit,t),g=Rr(m,d.lit,t);return s?q(d.name,g,h):q(d.name,h,g)}let f=ut(a,o)??ut(o,a);if(f){let m=R(n,f.name);if(!m)return Q;let h=ct(m,f.prop,f.lit,true,t),g=ct(m,f.prop,f.lit,false,t);return s?q(f.name,g,h):q(f.name,h,g)}return Q}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=Me(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Fr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=R(n,r);if(s)return q(r,Tr(s),Pr(s))}return Q}function Ir(e,n){if(e.t==="fn")return e.guard??null;if(e.t==="overload"){for(let t of e.signatures)if(t.guard&&t.params.length===n)return t.guard}return null}function Fr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=R(n,r.name);if(!s)return null;let a=Ir(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?q(i,vr(l,a.type,t),Er(l,a.type,t)):null}var H=(e,n)=>Object.keys(n).length?L(e,n):e;function V(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>V(t));case "IfStatement":{let n=e;return !!n.alternate&&V(n.consequent)&&V(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&V(n.finalizer))return true;let t=!n.handler||V(n.handler.body);return V(n.block)&&t}default:return false}}var Zr=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function es(e){let n=[];return e.maxDepth!==void 0&&n.push(ln(e.maxDepth)),e.maxNodes!==void 0&&n.push(un(e.maxNodes)),e.maxArgs!==void 0&&n.push(cn(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(sn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(an(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(on(e.memberDepth)),n}function ns(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>O("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function vt(e,n,t={}){let r={...Zr(n.types),...n.schemes,...rs(e)},s$1=Sn(e),a={overlay:new WeakMap,sink:ae(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s$1.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?compileProfile(t.profile):void 0;o&&configureTypeLimits(o.typeLimits);try{let i,l=ss(e,a);try{i=S(e,l,a);}catch(d){if(d instanceof TypeEvalLimitError)a.sink.report(O("too-deep",e,d.message));else if(d instanceof UnionTooComplexError)a.sink.report(O("too-complex-union",e,d.message));else throw d;i=s.unknown;}let u=[];o&&u.push(...Ve(o)),t.limits&&u.push(...es(t.limits)),t.resultType&&u.push(pn(t.resultType,r));let p=[...a.sink.all,...s$1.diagnostics,...ns(e,r),...t.unused?hn(e,t.unused):[],...u.length?nn(e,u,{overlay:a.overlay,schemes:r}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function ts(e,n,t={}){let r=vt(e,n,t),s$1={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let f=U(d.id),m=r.overlay.get(d);f&&m&&(s$1[f]=m.type,p.push(f));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,f=r.overlay.get(u);d&&f&&(s$1[d]=f.type,p.push(d));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=r.overlay.get(u.declaration);o=p?p.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)s$1[p]&&(l[u]={type:s$1[p]});o!==void 0&&(l.default={type:o});}else for(let u in s$1)l[u]={type:s$1[u]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var rs=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function ss(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(y.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=s.unknown;return}for(let l of a.specifiers){if(l.importKind==="type")continue;let u=l.local.name;if(re(u,l.local,n),u in r){n.sink.report(y.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){r[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",d=discover(i,[p],n.schemes);d?r[u]=d.type:(n.sink.report(y.noSuchMember(l,i,p)),r[u]=s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?L(n.env.scope,r):n.env.scope}var b=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case At:return e.schema;case "JSXElement":case "JSXFragment":return b(t,e,S(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return b(t,e,ze(e),n);case "Placeholder":return b(t,e,s.any,n);case "Identifier":{let s$1=e.name,a=R(n,s$1);return a===void 0?s$1==="undefined"?b(t,e,s.undefined,n):(t.sink.report(y.unknownName(e,s$1)),b(t,e,s.unknown,n)):b(t,e,a,n)}case "MemberExpression":return b(t,e,is(e,n,t),n);case "CallExpression":return b(t,e,ms(e,n,t,r),n);case "ArrowFunctionExpression":return Pn(e,n,t);case "FunctionDeclaration":return t.sink.report(y.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),b(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(y.unsupported(e,"anonymous function (use an arrow)")),b(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(y.unsupported(e,"'this'")),b(t,e,s.unknown,n);case "BlockStatement":return b(t,e,It(e,n,t),n);case "ReturnStatement":{let s$1=e.argument;return b(t,e,s$1?S(s$1,n,t):s.unknown,n)}case "IfStatement":return x(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 x(e,n,t),t.overlay.get(e)?.type??s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=S(a,n,t);if(a.type==="MemberExpression"){let p=t.overlay.get(a.object)?.type,d=p&&apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(y.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=S(s.right,n,t);return t.assignFlow.set(e,widenLiteral(d)),b(t,e,d,n)}if(u&&i!==null){let d=S(s.right,n,t);return subtype(d,u,t.schemes)||t.sink.report(y.notAssignable(s.right,d,u,t.schemes)),t.assignFlow.set(e,Ft(u,d,t.schemes)),b(t,e,d,n)}let p=J(s.right,o,n,t);return b(t,e,p,n)}return b(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s$1=e,a=S(s$1.argument,n,t);return Ie(a,t.schemes)||t.sink.report(y.arithmeticOperand(s$1.argument,"operand")),b(t,e,s.number,n)}case "ExpressionStatement":return b(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return Je(e,n,t),b(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let s$1=e.id?.name,a=s$1?t.schemes[s$1]:void 0;return b(t,e,a?Ss(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return b(t,e,Is(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=S(s.right,n,t);return b(t,e,js(s.operator,a,o),n)}case "UnaryExpression":return b(t,e,Ls(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=S(s.consequent,H(n,a.then),t),i=S(s.alternate,H(n,a.else),t);return b(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return b(t,e,Us(e,n,t),n);case "ArrayExpression":return b(t,e,Vt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=S(s,n,t);Ut(a,t.schemes)||t.sink.report(y.notTextConvertible(s,a));}return b(t,e,s.string,n)}case "AwaitExpression":{let s$1=e.argument,a=s$1?S(s$1,n,t):s.unknown;return b(t,e,Oe(a),n)}case "Program":{let s$1=We(e.body,n,t,new Set(t.importNames)).scope;return b(t,e,s.unknown,s$1)}case "JsonExpression":return b(t,e,Dn(e.body,n,t,e),n);case "ChainExpression":return b(t,e,normalizeUnion([S(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let s=e,a=S(s.expression,n,t),o=Be(s.typeAnnotation,n,t,e);return $e(a,o,t.schemes)||t.sink.report(y.castUnsound(e,a,o)),b(t,e,o,n)}default:return t.sink.report(y.unsupported(e,`'${e.type}'`)),b(t,e,s.unknown,n)}}var as=new Set(["constructor","prototype","__proto__"]);function os(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function is(e,n,t){let r=S(e.object,n,t),s$1=os(e);if(s$1!==null&&as.has(s$1))return t.sink.report(y.forbiddenMember(e,s$1)),s.unknown;if(e.computed){let i=S(e.property,n,t),l=resolveTypeOp(s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&ht(e,r,i.value,t),s.unknown)}let a=e.property.name,o=discover(r,[a],t.schemes);return o?o.type:(ht(e,r,a,t),s.unknown)}function ht(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(y.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(y.notObject(e,n));}function ls(e,n,t,r){let s$1=e.arguments[0];if(!s$1){r.sink.report(y.missingArgument(e,"schema",s.unknown));return}if(s$1.type!=="Identifier"){r.sink.report(y.asserterNeedsName(s$1,n));return}let a=s$1.name,o=R(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?y.typeAsValue(s$1,a):y.unknownName(s$1,a));return}if(!i||i.params.length>0){r.sink.report(y.notASchema(s$1,a));return}if(!(Et(a,r)&&!us(t,a)))return r.overlay.set(s$1,{type:i.body,scope:t}),i.body}function Et(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&R(n.env.scope,e)!==void 0}function us(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 re(e,n,t){Et(e,t)&&t.sink.report(y.shadowsSchema(n,e));}function Tn(e,n){let t=K(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function cs(e,n){let t=R(e.scope,n);if(!t)return;let r=Tn(t,e.schemes);return r?K(r,e.schemes):void 0}function ps(e,n,t,r){let s$1=Tn(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(y.propsMismatch(n[1]??e,s$1,formatTypeDiff(o)));}return b(r,e,s.boolean,t)}var At="TSLiteSyntheticArg",ds=e=>({type:At,schema:e});function Dt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=K(S(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(ds(l));else s={elem:Mn(i,o,t),node:a};}return {nodes:r,spread:s}}function ms(e,n,t,r){let s$1=e.arguments,a=Bn(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=rt(s$1);if(f){let m=discover(d,f,t.schemes);return m?m.type:(t.sink.report(y.noSuchMember(e,d,f.join("."))),s.unknown)}return s$1.forEach(m=>S(m,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let d=ls(e,a,n,t);s$1.length<2&&s$1.length>0&&t.sink.report(y.missingArgument(e,"value",s.unknown));for(let f=1;f<s$1.length;f++)S(s$1[f],n,t);return d??s.unknown}if(a&&t.env.matchers?.has(a))return ps(e,s$1,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s$1.forEach(d=>S(d,n,t)),s.any;if(o.t==="overload")return ys(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(d=>S(d,n,t)),t.sink.report(y.notCallable(e,o)),s.unknown;let i=Dt(s$1,n,t),l=i.nodes.map(d=>Ct(d,n,t)),u=Ot(e),p=!u||Tt(o,u.length);return p||t.sink.report(y.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),An(e,o,i.nodes,l,n,t,i.spread,r,p?u:void 0)}function Ct(e,n,t){if(kn(e))return s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=ae(),s$1=S(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function An(e,n,t,r,s$1,a,o=null,i,l){let u=h=>{if(!i)return h;let g=substitute(n.returns,h);if(g.t==="fn"&&i.t==="fn"){let N=h,C=Math.min(g.params.length,i.params.length);for(let $=0;$<C;$++)N=unify(g.params[$].type,i.params[$].type,N)??N;return unify(g.returns,i.returns,N)??N}return unify(g,i,h)??h},p=l?Ns(e,n,l,a):void 0,d=p??u(instantiateLoose(n,r).bindings);t.forEach((h,g)=>{if(kn(h)){let N=widenType(substitute(n.params[g]?.type??s.any,d));r[g]=Pn(h,s$1,a,N);}else if(h.type==="CallExpression"&&r[g].t==="any")r[g]=S(h,s$1,a,substitute(n.params[g]?.type??s.unknown,d));else if(h.type==="Literal"){let N=n.params[g]?.type??s.unknown,C=N.t==="var"?N.bound?substitute(N.bound,d):N:substitute(N,d);ge(C)&&(r[g]=b(a,h,ue(h),s$1));}else if(h.type==="ArrayExpression"||h.type==="ObjectExpression"||h.type==="ConditionalExpression"){let N=n.params[g]?.type??s.unknown,C=substitute(N,d);if(h.type==="ArrayExpression"&&Ce(C)){r[g]=Fn(h,C,s$1,a);return}let $=N.t==="var"?N.bound?substitute(N.bound,d):void 0:C;$&&Vs($,a.schemes)&&(r[g]=Gs(h,$,s$1,a,N.t==="var")??r[g]);}});let f=p??u(instantiateLoose(n,r).bindings);p||fs(e,n,f,a),vs(e,n,r,f,a,t,o),t.forEach((h,g)=>{let N=n.params[g];h.type==="ObjectExpression"&&N&&!N.variadic&&In(h,substitute(N.type,f),a);});let m=substitute(n.returns,f);return widenInferred(groundVars(m.t==="union"?normalizeUnion(m.of):m,a.schemes))}var gt=new WeakMap;function Rt(e){let n=gt.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)j(s.type,t,r);return j(e.returns,t,r),gt.set(e,t),t}function j(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":j(e.items,n,t);return;case "union":for(let r of e.of)j(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)j(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)j(r.type,n,t);j(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)j(s.type,n,t);j(r.returns,n,t);}return;case "apply":for(let r of e.args)j(r,n,t);return;case "keyof":j(e.of,n,t);return;case "index":j(e.obj,n,t),j(e.key,n,t);return;case "mapped":j(e.over,n,t),j(e.body,n,t);return;default:return}}function fs(e,n,t,r){let s=Rt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=substitute(o,t);subtype(i,l,r.schemes)||r.sink.report(y.constraintViolation(e,a,i,l));}}function ys(e,n,t,r,s){let a=Dt(e.arguments,t,r),o=a.nodes,i=o.map(p=>Ct(p,t,r)),l=Ot(e),u=l?n.signatures.filter(p=>Tt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(y.wrongTypeArgumentCount(e,p,l.length)),St(e,n.signatures,a,o,i,t,r,s,void 0)}return St(e,u,a,o,i,t,r,s,l)}function St(e,n,t,r,s$1,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?Bs(m,r.length):ks(m,r.length),d=u.signatures.filter(p);if(d.length>1&&s$1.some(m=>m.t==="any"))for(let m of d){let h=ae(),g=An(e,m,r,s$1,a,{...o,sink:h},t.spread,i,l);if(!h.hasErrors())return h.all.forEach(N=>o.sink.report(N)),g}let f=u.signatures.find(m=>p(m)&&ws(m,s$1,o));if(!f){let m=u.signatures.filter(p);m.length===1?f=m[0]:u.signatures.length===1&&(f=u.signatures[0]);}return f?An(e,f,r,s$1,a,o,t.spread,i,l):(o.sink.report(y.noMatchingOverload(e,u,s$1)),s.unknown)}function hs(e,n,t,r){let s$1=R(n,e[0]);if(s$1===void 0)return t.sink.report(y.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(y.noSuchMember(r,s$1,a.join("."))),s.unknown)}function Be(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let f=s$1(d);return f!==d&&(u=true),f});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return hs(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(gs(o.name,n,t,r),!(o.name in t.schemes)))return s.any;let i=false,l={};for(let u of Object.keys(o)){let p=s$1(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return s$1(e)}function gs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Be(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Ss(e,n,t,r,s){let a={...t,sink:ae(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Be(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var Fe=(e,n,t)=>{let r=bn(e);return r===void 0?r:Be(r,n,t,e)},bs=(e,n,t)=>{let r=Nn(e);return r===void 0?r:Be(r,n,t,e)},Ot=e=>{let n=e.typeArguments;return n?.length?n:void 0},Tt=(e,n)=>(e.typeParams?.length??0)===n;function Ns(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Rt(n)){let u=o[i];if(!u)continue;let p=groundVars(substitute(l,o),r.schemes);subtype(u,p,r.schemes)||r.sink.report(y.constraintViolation(e,i,u,p));}return o}function Bs(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 ks(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 ws(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 l=s$1;l<n.length;l++)if(!subtype(n[l],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 vs(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic){let f=substitute(p.type,r),m=f.t==="array"?f.items:s.unknown;for(let h=u;h<t.length;h++)subtype(t[h],m,s$1.schemes)||s$1.sink.report(y.notAssignable(i(h),t[h],m,s$1.schemes));break}let d=substitute(p.type,r);if(u>=t.length){!p.optional&&!o&&s$1.sink.report(y.missingArgument(e,p.name,d));continue}subtype(t[u],d,s$1.schemes)||s$1.sink.report(y.notAssignable(i(u),t[u],d,s$1.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){s$1.sink.report(y.spreadArgument(o.node));return}if(l){let d=substitute(l.type,r),f=d.t==="array"?d.items:s.unknown;subtype(o.elem,f,s$1.schemes)||s$1.sink.report(y.notAssignable(o.node,o.elem,f,s$1.schemes));}return}!l&&t.length>n.params.length&&s$1.sink.report(y.excessArgument(i(n.params.length),n.params.length,t.length));}function Pt(e,n,t){if(e.t==="object"){let r=ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>Pt(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:resolveTypeOp({t:"intersection",of:r})}}function J(e,n,t,r,s$1=false){let a=apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=resolveConditional(a,r.schemes)??a),e.type){case "Literal":{let i=ue(e);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,s$1?ge(n)?i:widen(ze(e)):n,t)}case "ArrayExpression":{if(Ce(a)){let i=Fn(e,a,t,r);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,i,t)}if(a.t==="array"){let i=[];for(let u of e.elements){if(!u)continue;let p=u;if(p.type==="SpreadElement"){let d=J(p.argument,n,t,r,s$1);d.t==="array"&&i.push(d.items);}else i.push(J(p,a.items,t,r,s$1));}let l=s$1&&i.length>0?s.array(normalizeUnion(i)):n;return b(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let p of e.properties){let d=p;if(d.type==="SpreadElement"){S(d.argument,t,r);continue}let f=d,m=Re(f),h=m!==null?Pt(a,m,r.schemes):void 0,g=h?J(f.value,h,t,r,s$1):widen(S(f.value,t,r));m!==null&&(i[m]={type:h??g},l[m]={type:g}),b(r,d,g,t);}let u={t:"object",props:i};return subtype(u,n,r.schemes)||r.sink.report(y.notAssignable(e,u,n,r.schemes)),b(r,e,s$1?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Pn(e,t,r,a);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let l=J(i.consequent,n,t,r,s$1),u=J(i.alternate,n,t,r,s$1);return b(r,e,s$1?normalizeUnion([l,u]):n,t)}case "Placeholder":return b(r,e,n,t)}let o=S(e,t,r);return subtype(o,n,r.schemes)||r.sink.report(y.notAssignable(e,o,n,r.schemes)),b(r,e,o,t)}function Pn(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=A=>a?.length?{...A,typeParams:a}:A,i={},l=new Map,u=e.params.map((A,T)=>{let P=A,Xe=s$1?.params[T]?.type;if(P.type==="RestElement"){let ne=P.argument,G=Fe(ne,n,t)??(s$1?.params[T]?.variadic?Xe:void 0)??s.array(s.unknown),z=U(ne);return z?(re(z,ne,t),i[z]=G):Z(ne,G,i,n,t),t.overlay.set(ne,{type:G,scope:n}),t.overlay.set(P,{type:G,scope:n}),{name:z??`arg${T}`,type:G,variadic:true}}if(P.type==="AssignmentPattern"){let ne=P.left,Qe=Fe(ne,n,t)??Xe;Z(P,Qe??s.unknown,i,n,t);let G=U(ne),z=G?i[G]:void 0,He=Qe??z??s.unknown,Vn=He.t==="unknown"?He:normalizeUnion([He,s.undefined]);return G&&z&&(z.t==="union"||z.t==="boolean")&&l.set(G,z),t.overlay.set(P,{type:Vn,scope:n}),{name:G??`arg${T}`,type:Vn,optional:true}}let fe=U(P),Ln=Fe(P,n,t),ke=Ln??Xe??s.unknown,Un=P.type==="Identifier"&&(!!P.optional||Ln===void 0&&!!s$1?.params[T]?.optional),ye=Un&&ke.t!=="unknown"?normalizeUnion([ke,s.undefined]):ke;return fe?(re(fe,P,t),i[fe]=ye,(ye.t==="union"||ye.t==="boolean")&&l.set(fe,ye)):P.type!=="Identifier"&&Z(P,ke,i,n,t),t.overlay.set(P,{type:ye,scope:n}),Un?{name:fe??`arg${T}`,type:ye,optional:true}:{name:fe??`arg${T}`,type:ke}}),p=false;u.forEach((A,T)=>{A.optional?p=true:!A.variadic&&p&&t.sink.report(y.requiredAfterOptional(e.params[T]));});let d=L(n,i),f=e.body,m=bs(e,n,t),h=e.returnGuard,g=h?{param:h.param,type:Be(h.type,n,t,e)}:void 0;if(g){let A=u[g.param];A&&!subtype(g.type,A.type,t.schemes)&&t.sink.report(y.notAssignable(e,g.type,A.type,t.schemes));}let N=A=>g?{...A,guard:g}:A;if(f.type!=="BlockStatement"&&m){let A=e.async?Oe(m):m;J(f,A,d,t);let T=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:T})),n)}let C=m??s$1?.returns,$=C&&e.async?Oe(C):C,se=f.type==="BlockStatement"?b(t,f,It(f,d,t,new Set(Object.keys(i)),l,$),d):S(f,d,t),me=e.async?Te(se):se;if(m){let A=e.async?Oe(m):m,T=e.async?se:me;subtype(T,A,t.schemes)||t.sink.report(y.notAssignable(f,me,m,t.schemes));let P=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:P})),n)}return b(t,e,o({t:"fn",params:u,returns:widenType(me)}),n)}function be(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?be(n.argument):be(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?be(n.argument):be(n):[]);case "AssignmentPattern":return be(e.left);default:return []}}function Mt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>be(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Mt(e.declaration):[]}function It(e,n,t,r=new Set,s$1,a){let{returns:o}=We(e.body,n,t,r,s$1,a),i=!V(e);return o.length===0?i?s.void:s.union([]):normalizeUnion(i?[...o,s.undefined]:o)}var Es=[s.literal(true),s.literal(false)];function As(e){return e.t==="union"?e.of:e.t==="boolean"?Es:[e]}function Ft(e,n,t){let r=As(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 jt(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 pe(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=pe(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=jt(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=$t(e,n,t);if(r.size===0)return {types:n,exits:V(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:V(e)}}case "TryStatement":{let r=e,s=[],a=pe(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=pe(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Ds(n,s);return r.finalizer&&(o=pe(r.finalizer,o,t).types),{types:o,exits:V(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function $t(e,n,t){let r=pe(e.consequent,n,t),s=e.alternate?pe(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,normalizeUnion(l));}return o}function Lt(e,n){let t=new Map,r=s=>{let a=R(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function Ds(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 Cs(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=Lt(n,t),s=pe(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 H(n,a)}function We(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!Rs(e))return bt(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,u]of s)t.declaredMut.set(l,u);try{return bt(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,u]of i)t.declaredMut.set(l,u);}}function Rs(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 bt(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let u of Mt(l))r.has(u.name)?t.sink.report(y.cannotRedeclare(u,u.name)):r.add(u.name);if(l.type==="VariableDeclaration")a=Je(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration?.type==="VariableDeclaration")a=Je(u.declaration,a,t);else if(u.declaration?.type==="FunctionDeclaration"){let p=S(u.declaration,a,t),d=U(u.declaration.id);d&&(a=L(a,{[d]:p}));}else for(let p of u.specifiers)R(a,p.local.name)===void 0&&t.sink.report(y.unknownName(p.local,p.local.name));}else if(l.type==="ExportDefaultDeclaration")S(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let u=S(l,a,t),p=U(l.id);p&&(a=L(a,{[p]:u}));}else if(l.type==="IfStatement"){let u=l,p=t.evolving.size||t.declaredMut.size?Lt(a,t):null;if(o.push(...x(l,a,t,s)),p&&p.size){let d=$t(u,p,t);d.size&&(a=H(a,Object.fromEntries(d)));}!u.alternate&&V(u.consequent)&&(a=H(a,Me(u.test,a,t.schemes).else));}else {o.push(...x(l,a,t,s));let u=jt(l,t);u?a=H(a,{[u.name]:u.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=Cs(l,a,t));}}return {scope:a,returns:o}}function x(e,n,t,r){switch(e.type){case "ReturnStatement":{let s$1=e.argument,a=s$1?r?(J(s$1,r,n,t),r):S(s$1,n,t):s.unknown;return b(t,e,a,n),[a]}case "IfStatement":{let s$1=e;S(s$1.test,n,t);let a=Me(s$1.test,n,t.schemes),o=x(s$1.consequent,H(n,a.then),t,r);return s$1.alternate&&o.push(...x(s$1.alternate,H(n,a.else),t,r)),b(t,e,s.unknown,n),o}case "BlockStatement":{let{returns:s$1}=We(e.body,n,t,void 0,void 0,r);return b(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,a=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?a=Je(s$1.init,a,t):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=x(s$1.body,a,t,r);return b(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"?Mn(a,s$1.right,t):s.string,i=nt(s$1.left);i&&re(i,tt(s$1.left),t);let l=i?L(n,{[i]:o}):n,u=x(s$1.body,l,t,r);return b(t,e,s.unknown,n),u}case "BreakStatement":case "ContinueStatement":return b(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&S(s$1,n,t),b(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,a=x(s$1.block,n,t,r);if(s$1.handler){let o=s$1.handler.param,i=o?U(o):null;i&&o&&re(i,o,t);let l=i?L(n,{[i]:s.unknown}):n;a.push(...x(s$1.handler.body,l,t,r));}return s$1.finalizer&&a.push(...x(s$1.finalizer,n,t,r)),b(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 l=We(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return b(t,e,s.unknown,n),o}default:return S(e,n,t),[]}}function Os(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function Mn(e,n,t){let r=K(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=>Mn(s,n,t)));}return t.sink.report(y.notIterable(n,e)),s.any}function Ts(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function Ps(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 Ms(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function Z(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=Fe(e,r,s$1)??n;re(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(y.notAssignable(a.right,o,n,s$1.schemes));let i=widenType(o),{type:l}=withoutUndefined(n),u=l.t==="unknown"?i:normalizeUnion([l,i]),p=a.left;if(p.type==="Identifier"){let d=p.name;re(d,p,s$1),t[d]=u,s$1.overlay.set(p,{type:u,scope:r});}else Z(p,u,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Z(o.argument,Ps(n,a),t,r,s$1);continue}let i=o,l=Re(i);l!=null&&a.push(l);let u=l!=null?Os(n,l,s$1):s.unknown;Z(i.value,u,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Z(i.argument,Ms(n,o),t,r,s$1):Z(i,Ts(n,o),t,r,s$1);});return}}}function In(e,n,t){let r=K(n,t.schemes),a=(r.t==="union"?r.of.map(o=>K(o,t.schemes)):[r]).filter(o=>o.t==="object"&&(!o.index||o.index.key==="number"));if(a.length&&!a.some(o=>Object.keys(o.props).length===0&&!o.index))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=Re(i);if(l===null)continue;let u=a.filter(p=>l in p.props||p.index?.key==="number"&&isNumericLiteralName(l));if(!u.length){t.sink.report(y.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&In(i.value,u[0].props[l].type,t);}}function Je(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=U(a);o&&re(o,a,t);let i=Fe(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,Nt(o,i,t)):(r[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(y.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let l=i??(s$1.init.type==="ArrowFunctionExpression"?at(s$1.init):null),u=o&&l?L(n,{[o]:l}):n,p,d=null;i?(J(s$1.init,i,u,t),s$1.init.type==="ObjectExpression"&&In(s$1.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&s$1.init.type==="Literal"&&(p=Ft(i,ue(s$1.init),t.schemes))):(p=S(s$1.init,u,t),e.kind!=="const"&&(p=widenLiteral(p)),d=p),b(t,s$1,p,n),o?(r[o]=p,e.kind!=="const"&&d&&Nt(o,d,t)):Z(a,p,r,n,t);}return b(t,e,s.unknown,n),L(n,r)}function Nt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Is(e,n,t){let r=S(e.left,n,t),s$1=S(e.right,n,t),a=e.operator,o=we.get(a);if(!o)return s.boolean;if(o.category==="additive"){if(de(r)||de(s$1))return ce(r,t.schemes)||ce(s$1,t.schemes)?s.string:s.number;if(ce(r,t.schemes)&&ce(s$1,t.schemes))return s.string;if(Ie(r,t.schemes)&&Ie(s$1,t.schemes))return s.number;if(ce(r,t.schemes)||ce(s$1,t.schemes)){let l=ce(r,t.schemes)?s$1:r;return t.sink.report(y.implicitCoercion(e,r,s$1,Ut(l,t.schemes))),s.string}return t.sink.report(y.operatorNotApplicable(e,"+",r,s$1)),s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ie(r,t.schemes)||t.sink.report(y.arithmeticOperand(e.left,"left")),Ie(s$1,t.schemes)||t.sink.report(y.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!de(r)&&!de(s$1)){let i=apparentType(r,t.schemes),l=apparentType(s$1,t.schemes),u=subtype(i,s.number,t.schemes),p=subtype(l,s.number,t.schemes);u&&p||!u&&!p&&(subtype(i,l,t.schemes)||subtype(l,i,t.schemes))||t.sink.report(y.operatorNotApplicable(e,a,r,s$1));}return mn(o.result)}var de=e=>e.t==="any"||e.t==="unknown",Ie=(e,n)=>de(e)||subtype(apparentType(e,n),s.number,n),ce=(e,n)=>!de(e)&&subtype(apparentType(e,n),s.string,n),Fs=s.union([s.string,s.number,s.boolean,s.null,s.undefined]),Ut=(e,n)=>de(e)||subtype(apparentType(e,n),Fs,n),Bt={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},vn=e=>e.t==="null"||e.t==="undefined";function js(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=>!vn(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!vn(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>vn(a)?[a]:a.t==="literal"?a.value?[]:[a]:Bt[a.t]?[Bt[a.t]]:[]);return normalizeUnion([...s$1,t])}var $s=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function Ls(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 $s;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function Us(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=K(S(p.argument,n,t),t.schemes);if(g.t==="object"){for(let N in g.props)r[N]=g.props[N];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let d=p,f=S(d.value,n,t),m=widen(f);if(b(t,p,f,n),d.computed){let g=K(S(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let h=Re(d);h!==null&&(r[h]={type:m},a.push(m),/^\d+$/.test(h)&&o.push(m));}return i?s={key:"string",type:normalizeUnion(a)}:l&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function Vt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=K(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 Fn(e,n,t,r){let s$1=K(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?Fn(l,u,t,r):ge(u)?S(l,t,r):widen(S(l,t,r));if(s$1.t==="tuple"&&o){let l=s$1.elements.length,u=restIndex(s$1),p=u<0?0:l-u-1,d=m=>{if(u<0||m<u)return s$1.elements[m];let h=a.length-m;return h<=p?s$1.elements[l-h]:s$1.elements[u]},f=a.map((m,h)=>{let g=d(h);return g?i(m,g):widen(S(m,t,r))});return b(r,e,{t:"tuple",elements:f},t)}if(s$1.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){S(p.argument,t,r);continue}l.push(i(p,s$1.items));}return b(r,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return Vt(e,t,r)}function Dn(e,n,t,r){if(e===null)return s.null;switch(typeof e){case "string":return s.string;case "number":return s.number;case "boolean":return s.boolean;case "object":break;default:return s.unknown}if(Array.isArray(e)){let o=e.map(i=>Dn(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if("#expr"in s$1){let o;try{o=fromJson(s$1);}catch{return t.sink.report(y.unsupported(r,`'#expr: ${String(s$1["#expr"])}'`)),s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:Dn(s$1[o],n,t,r)};return {t:"object",props:a}}function Vs(e,n){let t=apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function Gs(e,n,t,r,s){let a=ae(),o=J(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(u=>u.node===l.node&&u.code===l.code&&u.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var Ks=(e,n)=>({...e,typeAnnotation:n}),qs=(e,n)=>({...e,returnType:n}),_s=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function $n(e,n){return e.get(n)?.type}function xs(e,n){return e.get(n)?.scope}function zs(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function Ws(e,n){let t=e.get(n)?.scope;return t?[...Ze(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Js=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Ys(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 Ye(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(Js)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=$n(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=Ye(e,n+2,t,r),l=Ys(a);return !i||!l?void 0:discover(i,[l],r)?.type}case "ArrayExpression":{let o=Ye(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=we.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return s.number;let i=a.left===s$1?a.right:a.left,l=$n(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Ye(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function Xs(e,n){return e.filter(t=>t.node===n)}export{we as BINARY_OP,dn as BINARY_OPS,xn as FUNCTION_KINDS,lr as LOGICAL_OPS,Xn as UNARY_OPS,Ks as annotate,qs as annotateReturn,_s as asExpression,ur as binaryOpsProducing,rn as calleeAllowlist,tn as capabilityNodes,vt as check,L as childScope,Sr as collectBindings,Sn as collectMutations,hn as collectUnused,cs as componentProps,Tn as componentPropsOf,Ye as contextualTypeAt,zt as createEnv,ae as createSink,y as diag,Xs as diagnosticsAt,ts as extractModuleType,or as fromCapability,nn as guard,Ve as guardsFromCompiled,R as lookup,O as makeDiagnostic,cn as maxArgs,an as maxCallNesting,ln as maxDepth,sn as maxFunctionNesting,Ue as maxNestingOf,un as maxNodes,zs as memberCompletions,on as memberDepth,mn as opResultSchema,Wt as resolveNamed,Jt as resolveScheme,pn as resultType,Gn as rootScope,xs as scopeAt,Ws as scopeCompletions,$n as typeAt,cr as unaryOpsProducing,Ze as visibleNames};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tslite/checker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.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,10 +39,10 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@tslite/capability": "0.
|
|
42
|
+
"@tslite/capability": "0.5.0",
|
|
43
43
|
"@tslite/codec": "0.6.1",
|
|
44
|
-
"@tslite/
|
|
45
|
-
"@tslite/core": "0.
|
|
44
|
+
"@tslite/core": "0.8.2",
|
|
45
|
+
"@tslite/type-core": "0.4.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@tslite/parser": "1.3.0"
|