@tslite/checker 0.10.0 → 0.11.1
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 +119 -6
- package/dist/index.d.ts +119 -6
- package/dist/index.js +1 -1
- package/package.json +7 -6
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 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]}})});
|
|
1
|
+
'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec'),ne=require('@tslite/core/builders'),languageService=require('@tslite/language-service');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var ne__namespace=/*#__PURE__*/_interopNamespace(ne);var _n=(e={})=>core.rootScope(e),L=(e,n)=>core.childScope(e,n),O=(e,n)=>core.lookup(e,n),en=e=>core.visibleNames(e),Kn=new Set(["types","schemes","accessors","asserters","matchers","modules"]),Zt=(e={},n)=>{let t=n??{},r=Object.keys(t).filter(s=>!Kn.has(s));if(r.length>0)throw new core.TSLiteError("invalid-env-options",`createEnv: unknown option(s) ${r.map(s=>`'${s}'`).join(", ")} \u2014 expected ${[...Kn].join(", ")}. Named types go under 'types'.`,{unknown:r});return {scope:_n(e),types:t.types??{},schemes:t.schemes??{},accessors:t.accessors??{},asserters:t.asserters??new Set,matchers:t.matchers??new Set,modules:t.modules??{}}},er=(e,n)=>e.types[n],nr=(e,n)=>e.schemes[n];var qn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","required-after-optional":"type","not-iterable":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","unprovable-value":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","narrowing-cast-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:qn[e],severity:"error",node:n,message:t}),R=(e,n,t,r="error")=>({code:e,kind:qn[e],severity:r,node:n,message:t}),y={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r),a=s.filter(l=>l.path.length>0),o=a.length?` ${typeCore.formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${o}`),c=s.filter(l=>l.kind==="missing"&&l.path.length===1).map(l=>({name:l.path[0],type:l.expected}));return c.length?{...i,data:{kind:"missing-properties",properties:c}}:i},unknownName:(e,n)=>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)=>R("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.`),unprovableValue:(e,n,t,r)=>B("unprovable-value",e,`A value of type '${typeCore.format(n)}' can never satisfy '${r}' (${typeCore.format(t)}): the types do not overlap, so this proof can only fail at runtime.`),arithmeticOperand:(e,n)=>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 oe(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function ve(e,n,t){let r=typeCore.baseLiteralType(e);return typeCore.comparable(n,typeCore.widenType(r),t)||typeCore.comparable(r,n,t)}function zn(e,n,t){return typeCore.subtype(e,n,t)}function tn(e,n,t={}){return n.flatMap(r=>r(e,t))}function ie(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var pr=e=>Array.isArray(e)?e:[e],Jn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function rn(e,n="error"){return t=>{let r=[];return ie(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(R("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function Yn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ie(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let c of [o.typeAnnotation,o.returnType]){if(!c)continue;let l=capability.typeFeatureViolations(typeCore.typeFeatures(c,i),t);l.length&&s.push(R("type-feature-not-allowed",a,`authoring type feature${l.length>1?"s":""} '${l.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function A(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=>A(t.type,n))||!!e.index&&A(e.index.value,n);case "array":return A(e.items,n);case "tuple":return e.elements.some(t=>A(t,n));case "union":case "intersection":return e.of.some(t=>A(t,n));case "fn":return e.params.some(t=>A(t.type,n))||A(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>A(r.type,n))||A(t.returns,n));case "keyof":return A(e.of,n);case "index":return A(e.obj,n)||A(e.key,n);case "mapped":return A(e.over,n)||A(e.body,n);case "conditional":return A(e.check,n)||A(e.extends,n)||A(e.then,n)||A(e.else,n);case "returnType":case "parameters":return A(e.fn,n);case "apply":return e.args.some(t=>A(t,n));default:return false}}function Xn(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ie(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&A(o)){r.push(R("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function Qn(e,n="error"){return (t,r)=>{let s=r.overlay;if(!e.typeStrict||!s)return [];let a=r.schemes??{},o=[];return ie(t,i=>{if(i.type!=="TSAsExpression")return;let{expression:c}=i,l=s.get(c)?.type,u=s.get(i)?.type;!l||!u||A(u)||!ve(l,u,a)||zn(l,u,a)||o.push(R("narrowing-cast-not-allowed",i,`A cast may only widen under 'strict': '${typeCore.format(l)}' is not assignable to '${typeCore.format(u)}'. Narrow with a type guard, or prove the value with an asserter.`,n));}),o}}function sn(e,n="error"){let t=new Set(e);return r=>{let s=[];return ie(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(R("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(R("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Ve(e,n,t={}){let r=new Set(pr(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],c=(l,u)=>{let d=r.has(l.type),f=d?u+1:u;d&&f>n&&i.push(R("too-deep",l,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of core.childrenOf(l))c(m,f);};return c(o,0),i}}var an=(e=3,n="error")=>Ve(Jn,e,{hint:"use a pipe instead of nesting functions",severity:n}),on=(e,n="error")=>Ve("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),ln=(e,n="error")=>Ve("MemberExpression",e,{severity:n});function cn(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(R("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of core.childrenOf(a))s(i,o+1);};return s(t,0),r}}function un(e,n="error"){return t=>{let r=0;return ie(t,()=>{r++;}),r>e?[R("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function pn(e,n="error"){return t=>{let r=[];return ie(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(R("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function dn(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[R("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function xe(e){let n=[rn(e),Yn(e),Xn(e),Qn(e)];return e.hostAllow!=="*"&&n.push(sn([...e.hostAllow])),n}function mr(e){return xe(capability.compileProfile(e))}var mn=[{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"}],Ee=new Map(mn.map(e=>[e.op,e])),Hn={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string},fn=e=>Hn[e],Zn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],fr={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string,undefined:typeCore.s.undefined},yr=[{op:"&&"},{op:"||"},{op:"??"}];function hr(e,n={}){return mn.filter(t=>t.result==="additive"?typeCore.subtype(typeCore.s.string,e,n)||typeCore.subtype(typeCore.s.number,e,n):typeCore.subtype(Hn[t.result],e,n))}function gr(e,n={}){return Zn.filter(t=>typeCore.subtype(fr[t.result],e,n))}var le=e=>({bindings:new Map,parent:e}),nt=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 De(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)De(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&_e(n,r);return}for(let r of Object.keys(t))De(t[r],n);}function tt(e,n){let t=e;De(t.typeAnnotation,n),De(t.returnType,n);}function _e(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;tt(e,n),Ke(n,t,o,e,r,s||a&&nt(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],c=!!i&&i.type==="RestElement";o.forEach((l,u)=>{let d=c&&u<o.length-1;if(l.type==="RestElement")X(l.argument,n,t,r,s,false);else {let f=l;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 Ae(e,n,t){if(e)switch(e.type){case "AssignmentPattern":k(e.right,n,t),Ae(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)Ae(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&Ae(r,n,t);return;case "RestElement":Ae(e.argument,n,t);return;default:return}}function et(e,n,t,r){for(let s of e.declarations)X(s.id,n,t,"local",r,false),k(s.init,n,t);}function yn(e,n,t){let r=e,s=le(n),a=r.params??[];for(let o of a)X(o,s,t,"parameter",false,true);for(let o of a)Ae(o,s,t);k(r.body,s,t);}function k(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(tt(e,n),e.type){case "Identifier":_e(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=le(n);for(let s of e.body??[])k(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":yn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Ke(n,t,r.name,r,"local",false),yn(e,n,t);return}case "CatchClause":{let r=e,s=le(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=le(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=le(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=le(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":et(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",nt(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")et(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Ke(n,t,a.name,a,"local",true),yn(s,n,t);}else k(s,n,t);}else for(let s of r.specifiers)_e(n,s.local.name);return}case "TSAsExpression":k(e.expression,n,t);return;case "TSTypeAliasDeclaration":De(e.typeAnnotation,n);return;case "JsonExpression":hn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;rt(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 rt(e,n,t){e&&(e.type==="JSXIdentifier"?_e(n,e.name):e.type==="JSXMemberExpression"&&rt(e.object,n));}function hn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)hn(s,n,t);return}let r=e;if(core.isExprMarker(r)){try{k(codec.fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))hn(r[s],n,t);}function gn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};k(e,le(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 kr=new Set(["const","import"]),Ce=e=>({binds:new Map,parent:e});function wr(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ce(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ce(n.argument):ce(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ce(n):[]);case "AssignmentPattern":return ce(e.left);case "RestElement":return ce(e.argument);default:return []}}var qe=(e,n,t)=>{for(let r of ce(n))e.binds.set(r.name,t);};function Sn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ce(e))Sn(a,n,t);return}let r=e.name,s=wr(n,r);s&&kr.has(s)&&(t.invalid.add(e),t.out.push(y.assignToConst(e,r,s==="import"?"import":"const")));}function j(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;Sn(r.left,n,t),j(r.right,n,t);return}case "UpdateExpression":{Sn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ce(n);for(let s of e.body??[])j(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ce(n);for(let a of r.params??[])qe(s,a,"param");j(r.body,s,t);return}case "CatchClause":{let r=e,s=Ce(n);qe(s,r.param,"param"),j(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Ce(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)qe(s,o.id,a.kind);else a&&j(a,s,t);j(r.right,n,t),j(r.test,s,t),j(r.update,s,t),j(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)j(s.init,n,t),qe(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&&j(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":j(e.expression,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)j(i,n,t);else j(o,n,t);}return}}}function bn(e){let n={out:[],invalid:new WeakSet};return j(e,Ce(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var Oe=e=>({decls:new Map,parent:e});function Er(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function ge(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ge(n.argument):ge(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ge(n):[]);case "AssignmentPattern":return ge(e.left);case "RestElement":return ge(e.argument);default:return []}}var We=(e,n)=>{for(let t of ge(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=Er(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=Oe(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=Oe(n);for(let o of r.params??[])We(a,o);M(r.body,a,t);return}case "CatchClause":{let r=e,s=Oe(n);We(s,r.param),M(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Oe(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)We(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)We(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 Ar(e){let n=new WeakMap;return M(e,Oe(void 0),n),n}var Nn=e=>e.typeAnnotation,Bn=e=>e.returnType,U=e=>e.type==="Identifier"?e.name:null,st=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?U(n.id):null}return U(e)},at=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Te=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function ot(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 kn(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=kn(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)},wn=e=>e.type==="ArrowFunctionExpression",it=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Pe=e=>it(e)?e.args[0]:e,Me=e=>it(e)?e:typeCore.s.promise(e);function Re(e){return e.t==="tuple"?true:e.t==="array"?Re(e.items):e.t==="union"?e.of.some(Re):false}function Se(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Se(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Se(e.bound):false}var G=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=typeCore.expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function lt(e){let n=Bn(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:U(r)??`arg${s}`,type:Nn(r)??typeCore.s.unknown})),returns:e.async?Me(n):n}:null}var Q={then:{},else:{}},ht=new Set(["string","number","boolean","undefined","function","object"]),ct={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function gt(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 Rr=typeCore.s.literal(true),Tr=typeCore.s.literal(false),z=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Rr,Tr]:[e];function ut(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 Pr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=z(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function Mr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=z(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function Ir(e,n){if(!ht.has(n))return null;if(e.t==="unknown"||e.t==="any")return ct[n]??e;let t=z(e).filter(r=>gt(r,n));return t.length?typeCore.normalizeUnion(t):ct[n]??e}function jr(e,n){if(!ht.has(n)||e.t==="unknown"||e.t==="any")return null;let t=z(e).filter(r=>!gt(r,n));return t.length?typeCore.normalizeUnion(t):null}function pt(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 dt(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 mt(e,n,t,r,s){let a=z(e),o=c=>c.t==="object"?typeCore.ownProp(c.props,n)?.type:void 0,i=a.filter(c=>{let l=o(c);return r?!!l&&typeCore.subtype(t,l,s):!(l&&typeCore.subtype(l,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function ft(e,n,t){let r=z(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 Fr(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function $r(e,n,t){let r=z(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var Lr=e=>e.t==="null"||e.t==="undefined",St=e=>Lr(e)||e.t==="literal"&&!e.value,Ur=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=z(e),t=n.filter(r=>!St(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Vr=e=>{let n=z(e),t=n.filter(St);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},yt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,K=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),xr=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function je(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=O(n,g);if(!N)return Q;let C=String(m.value);return K(g,ft(N,C,true),ft(N,C,false))}return Q}if(!xr(r.operator))return Q;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=ut(a,o)??ut(o,a);if(i){let m=O(n,i.name);if(!m)return Q;let h=Ir(m,i.tag),g=jr(m,i.tag);return s?K(i.name,g,h):K(i.name,h,g)}let c=yt(a),l=yt(o),u=c?o:l?a:null;if((c||l)&&u?.type==="Identifier"){let m=u.name,h=O(n,m);if(!h)return Q;let N=r.operator==="=="||r.operator==="!="?["null","undefined"]:[c??l],C=z(h),$=C.filter(T=>N.includes(T.t)),ae=C.filter(T=>!N.includes(T.t)),fe=$.length?typeCore.normalizeUnion($):null,D=ae.length&&ae.length<C.length?typeCore.normalizeUnion(ae):null;return s?K(m,D,fe):K(m,fe,D)}let d=pt(a,o)??pt(o,a);if(d){let m=O(n,d.name);if(!m)return Q;let h=Fr(m,d.lit,t),g=$r(m,d.lit,t);return s?K(d.name,g,h):K(d.name,h,g)}let f=dt(a,o)??dt(o,a);if(f){let m=O(n,f.name);if(!m)return Q;let h=mt(m,f.prop,f.lit,true,t),g=mt(m,f.prop,f.lit,false,t);return s?K(f.name,g,h):K(f.name,h,g)}return Q}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=je(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Kr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=O(n,r);if(s)return K(r,Ur(s),Vr(s))}return Q}function Gr(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 Kr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=O(n,r.name);if(!s)return null;let a=Gr(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,c=O(n,i);return c?K(i,Pr(c,a.type,t),Mr(c,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 cs=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function us(e){let n=[];return e.maxDepth!==void 0&&n.push(cn(e.maxDepth)),e.maxNodes!==void 0&&n.push(un(e.maxNodes)),e.maxArgs!==void 0&&n.push(pn(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(an(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(on(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(ln(e.memberDepth)),n}function ps(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>R("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function Ct(e,n,t={}){let r={...cs(n.types),...n.schemes,...ms(e)},s=bn(e),a={overlay:new WeakMap,sink:oe(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?capability.compileProfile(t.profile):void 0;o&&typeCore.configureTypeLimits(o.typeLimits);try{let i,c=fs(e,a);try{i=S(e,c,a);}catch(d){if(d instanceof typeCore.TypeEvalLimitError)a.sink.report(R("too-deep",e,d.message));else if(d instanceof typeCore.UnionTooComplexError)a.sink.report(R("too-complex-union",e,d.message));else throw d;i=typeCore.s.unknown;}let l=[];o&&l.push(...xe(o)),t.limits&&l.push(...us(t.limits)),t.resultType&&l.push(dn(t.resultType,r));let u=[...a.sink.all,...s.diagnostics,...ps(e,r),...t.unused?gn(e,t.unused):[],...l.length?tn(e,l,{overlay:a.overlay,schemes:r}):[]];return {type:i,overlay:a.overlay,diagnostics:u,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function ds(e,n,t={}){let r=Ct(e,n,t),s={},a=new Map,o,i=l=>{let u=[];if(l.type==="VariableDeclaration")for(let d of l.declarations){let f=U(d.id),m=r.overlay.get(d);f&&m&&(s[f]=m.type,u.push(f));}else if(l.type==="FunctionDeclaration"){let d=l.id?.name,f=r.overlay.get(l);d&&f&&(s[d]=f.type,u.push(d));}return u};for(let l of e.body??[])if(l.type==="VariableDeclaration"||l.type==="FunctionDeclaration")i(l);else if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration)for(let d of i(u.declaration))a.set(d,d);else for(let d of u.specifiers)a.set(d.exported.name,d.local.name);}else if(l.type==="ExportDefaultDeclaration"){let u=r.overlay.get(l.declaration);o=u?u.type:typeCore.s.unknown;}let c={};if(a.size||o!==void 0){for(let[l,u]of a)s[u]&&(c[l]={type:s[u]});o!==void 0&&(c.default={type:o});}else for(let l in s)c[l]={type:s[l]};return {type:{t:"object",props:c},diagnostics:r.diagnostics}}var ms=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 fs(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 c of a.specifiers)r[c.local.name]=typeCore.s.unknown;return}for(let c of a.specifiers){if(c.importKind==="type")continue;let l=c.local.name;if(se(l,c.local,n),l in r){n.sink.report(y.cannotRedeclare(c.local,l));continue}if(c.type==="ImportNamespaceSpecifier"){r[l]=i;continue}let u=c.type==="ImportSpecifier"?c.imported.name:"default",d=typeCore.discover(i,[u],n.schemes);d?r[l]=d.type:(n.sink.report(y.noSuchMember(c,i,u)),r[l]=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 Rt: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=O(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,gs(e,n,t),n);case "CallExpression":return b(t,e,ws(e,n,t,r),n);case "ArrowFunctionExpression":return Mn(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,Lt(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 q(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 q(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 u=t.overlay.get(a.object)?.type,d=u&&typeCore.apparentType(u,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,c=i!==null&&t.evolving.has(i),l=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(c&&i!==null){let d=S(s.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(d)),b(t,e,d,n)}if(l&&i!==null){let d=S(s.right,n,t);return typeCore.subtype(d,l,t.schemes)||t.sink.report(y.notAssignable(s.right,d,l,t.schemes)),t.assignFlow.set(e,Ut(l,d,t.schemes)),b(t,e,d,n)}let u=J(s.right,o,n,t);return b(t,e,u,n)}return b(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=S(s.argument,n,t);return Fe(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 Ye(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?Cs(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return b(t,e,_s(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,Ws(s.operator,a,o),n)}case "UnaryExpression":return b(t,e,Js(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=je(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,Ys(e,n,t),n);case "ArrayExpression":return b(t,e,_t(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=S(s,n,t);Kt(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,Pe(a),n)}case "Program":{let s=Je(e.body,n,t,new Set(t.importNames)).scope;return b(t,e,typeCore.s.unknown,s)}case "JsonExpression":return b(t,e,Cn(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=ke(s.typeAnnotation,n,t,e);return ve(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 ys=new Set(["constructor","prototype","__proto__"]);function hs(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 gs(e,n,t){let r=S(e.object,n,t),s=hs(e);if(s!==null&&ys.has(s))return t.sink.report(y.forbiddenMember(e,s)),typeCore.s.unknown;if(e.computed){let i=S(e.property,n,t),c=typeCore.resolveTypeOp(typeCore.s.index(r,i));return c.t!=="index"?c:(i.t==="literal"&&typeof i.value=="string"&&Nt(e,r,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(r,[a],t.schemes);return o?o.type:(Nt(e,r,a,t),typeCore.s.unknown)}function Nt(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 Ss(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=O(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(!(Ot(a,r)&&!bs(t,a)))return r.overlay.set(s,{type:i.body,scope:t}),i.body}function Ot(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&O(n.env.scope,e)!==void 0}function bs(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 se(e,n,t){Ot(e,t)&&t.sink.report(y.shadowsSchema(n,e));}function Pn(e,n){let t=G(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function Ns(e,n){let t=O(e.scope,n);if(!t)return;let r=Pn(t,e.schemes);return r?G(r,e.schemes):void 0}function Bs(e,n,t,r){let s=Pn(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 Rt="TSLiteSyntheticArg",ks=e=>({type:Rt,schema:e});function Tt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(c=>c&&c.type!=="SpreadElement")){for(let c of o.elements)r.push(c);continue}let i=G(S(o,n,t),t.schemes);if(i.t==="tuple")for(let c of i.elements)r.push(ks(c));else s={elem:In(i,o,t),node:a};}return {nodes:r,spread:s}}function ws(e,n,t,r){let s=e.arguments,a=kn(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=ot(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=Ss(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++){let m=S(s[f],n,t);f===1&&d&&typeCore.freeVars(m).size===0&&!ve(m,d,t.schemes)&&t.sink.report(y.unprovableValue(s[f],m,d,e.arguments[0].name));}return d??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return Bs(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 Es(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=Tt(s,n,t),c=i.nodes.map(d=>Pt(d,n,t)),l=It(e),u=!l||jt(o,l.length);return u||t.sink.report(y.wrongTypeArgumentCount(e,o.typeParams?.length??0,l.length)),Dn(e,o,i.nodes,c,n,t,i.spread,r,u?l:void 0)}function Pt(e,n,t){if(wn(e))return typeCore.s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=oe(),s=S(e,n,{...t,sink:r});return r.hasErrors()?typeCore.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function Dn(e,n,t,r,s,a,o=null,i,c){let l=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},u=c?Rs(e,n,c,a):void 0,d=u??l(typeCore.instantiateLoose(n,r).bindings);t.forEach((h,g)=>{if(wn(h)){let N=typeCore.widenType(typeCore.substitute(n.params[g]?.type??typeCore.s.any,d));r[g]=Mn(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);Se(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"&&Re(C)){r[g]=Fn(h,C,s,a);return}let $=N.t==="var"?N.bound?typeCore.substitute(N.bound,d):void 0:C;$&&Xs($,a.schemes)&&(r[g]=Qs(h,$,s,a,N.t==="var")??r[g]);}});let f=u??l(typeCore.instantiateLoose(n,r).bindings);u||vs(e,n,f,a),Is(e,n,r,f,a,t,o),t.forEach((h,g)=>{let N=n.params[g];h.type==="ObjectExpression"&&N&&!N.variadic&&jn(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 Bt=new WeakMap;function Mt(e){let n=Bt.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)F(s.type,t,r);return F(e.returns,t,r),Bt.set(e,t),t}function F(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":F(e.items,n,t);return;case "union":for(let r of e.of)F(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)F(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)F(r.type,n,t);F(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)F(s.type,n,t);F(r.returns,n,t);}return;case "apply":for(let r of e.args)F(r,n,t);return;case "keyof":F(e.of,n,t);return;case "index":F(e.obj,n,t),F(e.key,n,t);return;case "mapped":F(e.over,n,t),F(e.body,n,t);return;default:return}}function vs(e,n,t,r){let s=Mt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let c=typeCore.substitute(o,t);typeCore.subtype(i,c,r.schemes)||r.sink.report(y.constraintViolation(e,a,i,c));}}function Es(e,n,t,r,s){let a=Tt(e.arguments,t,r),o=a.nodes,i=o.map(u=>Pt(u,t,r)),c=It(e),l=c?n.signatures.filter(u=>jt(u,c.length)):n.signatures;if(c&&!l.length){let u=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(y.wrongTypeArgumentCount(e,u,c.length)),kt(e,n.signatures,a,o,i,t,r,s,void 0)}return kt(e,l,a,o,i,t,r,s,c)}function kt(e,n,t,r,s,a,o,i,c){let l={t:"overload",signatures:n},u=m=>t.spread?Ts(m,r.length):Ps(m,r.length),d=l.signatures.filter(u);if(d.length>1&&s.some(m=>m.t==="any"))for(let m of d){let h=oe(),g=Dn(e,m,r,s,a,{...o,sink:h},t.spread,i,c);if(!h.hasErrors())return h.all.forEach(N=>o.sink.report(N)),g}let f=l.signatures.find(m=>u(m)&&Ms(m,s,o));if(!f){let m=l.signatures.filter(u);m.length===1?f=m[0]:l.signatures.length===1&&(f=l.signatures[0]);}return f?Dn(e,f,r,s,a,o,t.spread,i,c):(o.sink.report(y.noMatchingOverload(e,l,s)),typeCore.s.unknown)}function As(e,n,t,r){let s=O(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 ke(e,n,t,r){let s=a=>{if(Array.isArray(a)){let l=false,u=a.map(d=>{let f=s(d);return f!==d&&(l=true),f});return l?u:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return As(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(Ds(o.name,n,t,r),!(o.name in t.schemes)))return typeCore.s.any;let i=false,c={};for(let l of Object.keys(o)){let u=s(o[l]);u!==o[l]&&(i=true),c[l]=u;}return i?c:o};return s(e)}function Ds(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=ke(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Cs(e,n,t,r,s){let a={...t,sink:oe(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=ke(e,n,a,r);return a.sink.hasErrors()?e:s?o:typeCore.groundVars(o,t.schemes)}var $e=(e,n,t)=>{let r=Nn(e);return r===void 0?r:ke(r,n,t,e)},Os=(e,n,t)=>{let r=Bn(e);return r===void 0?r:ke(r,n,t,e)},It=e=>{let n=e.typeArguments;return n?.length?n:void 0},jt=(e,n)=>(e.typeParams?.length??0)===n;function Rs(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,c)=>a[i]=t[c]);let o=a;for(let[i,c]of Mt(n)){let l=o[i];if(!l)continue;let u=typeCore.groundVars(typeCore.substitute(c,o),r.schemes);typeCore.subtype(l,u,r.schemes)||r.sink.report(y.constraintViolation(e,i,l,u));}return o}function Ts(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 Ps(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 Ms(e,n,t){let{bindings:r}=typeCore.instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic){let o=typeCore.substitute(a.type,r),i=o.t==="array"?o.items:typeCore.s.unknown;for(let c=s;c<n.length;c++)if(!typeCore.subtype(n[c],i,t.schemes))return false;return true}if(s>=n.length){if(!a.optional)return false;continue}if(!typeCore.subtype(n[s],typeCore.substitute(a.type,r),t.schemes))return false}return true}function Is(e,n,t,r,s,a=e.arguments??[],o=null){let i=l=>a[l]??e;for(let l=0;l<n.params.length;l++){let u=n.params[l];if(u.variadic){let f=typeCore.substitute(u.type,r),m=f.t==="array"?f.items:typeCore.s.unknown;for(let h=l;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(u.type,r);if(l>=t.length){!u.optional&&!o&&s.sink.report(y.missingArgument(e,u.name,d));continue}typeCore.subtype(t[l],d,s.schemes)||s.sink.report(y.notAssignable(i(l),t[l],d,s.schemes));}let c=n.params.find(l=>l.variadic);if(o){let l=t.length,u=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(l>=u&&(c||l<n.params.length))){s.sink.report(y.spreadArgument(o.node));return}if(c){let d=typeCore.substitute(c.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}!c&&t.length>n.params.length&&s.sink.report(y.excessArgument(i(n.params.length),n.params.length,t.length));}function Ft(e,n,t){if(e.t==="object"){let r=typeCore.ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>Ft(typeCore.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:typeCore.resolveTypeOp({t:"intersection",of:r})}}function 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?Se(n)?i:typeCore.widen(ze(e)):n,t)}case "ArrayExpression":{if(Re(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 l of e.elements){if(!l)continue;let u=l;if(u.type==="SpreadElement"){let d=J(u.argument,n,t,r,s);d.t==="array"&&i.push(d.items);}else i.push(J(u,a.items,t,r,s));}let c=s&&i.length>0?typeCore.s.array(typeCore.normalizeUnion(i)):n;return b(r,e,c,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},c={};for(let u of e.properties){let d=u;if(d.type==="SpreadElement"){S(d.argument,t,r);continue}let f=d,m=Te(f),h=m!==null?Ft(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},c[m]={type:g}),b(r,d,g,t);}let l={t:"object",props:i};return typeCore.subtype(l,n,r.schemes)||r.sink.report(y.notAssignable(e,l,n,r.schemes)),b(r,e,s?{t:"object",props:c}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Mn(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 c=J(i.consequent,n,t,r,s),l=J(i.alternate,n,t,r,s);return b(r,e,s?typeCore.normalizeUnion([c,l]):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 Mn(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=D=>a?.length?{...D,typeParams:a}:D,i={},c=new Map,l=e.params.map((D,T)=>{let P=D,Qe=s?.params[T]?.type;if(P.type==="RestElement"){let te=P.argument,x=$e(te,n,t)??(s?.params[T]?.variadic?Qe:void 0)??typeCore.s.array(typeCore.s.unknown),W=U(te);return W?(se(W,te,t),i[W]=x):Z(te,x,i,n,t),t.overlay.set(te,{type:x,scope:n}),t.overlay.set(P,{type:x,scope:n}),{name:W??`arg${T}`,type:x,variadic:true}}if(P.type==="AssignmentPattern"){let te=P.left,He=$e(te,n,t)??Qe;Z(P,He??typeCore.s.unknown,i,n,t);let x=U(te),W=x?i[x]:void 0,Ze=He??W??typeCore.s.unknown,Gn=Ze.t==="unknown"?Ze:typeCore.normalizeUnion([Ze,typeCore.s.undefined]);return x&&W&&(W.t==="union"||W.t==="boolean")&&c.set(x,W),t.overlay.set(P,{type:Gn,scope:n}),{name:x??`arg${T}`,type:Gn,optional:true}}let ye=U(P),Vn=$e(P,n,t),we=Vn??Qe??typeCore.s.unknown,xn=P.type==="Identifier"&&(!!P.optional||Vn===void 0&&!!s?.params[T]?.optional),he=xn&&we.t!=="unknown"?typeCore.normalizeUnion([we,typeCore.s.undefined]):we;return ye?(se(ye,P,t),i[ye]=he,(he.t==="union"||he.t==="boolean")&&c.set(ye,he)):P.type!=="Identifier"&&Z(P,we,i,n,t),t.overlay.set(P,{type:he,scope:n}),xn?{name:ye??`arg${T}`,type:he,optional:true}:{name:ye??`arg${T}`,type:we}}),u=false;l.forEach((D,T)=>{D.optional?u=true:!D.variadic&&u&&t.sink.report(y.requiredAfterOptional(e.params[T]));});let d=L(n,i),f=e.body,m=Os(e,n,t),h=e.returnGuard,g=h?{param:h.param,type:ke(h.type,n,t,e)}:void 0;if(g){let D=l[g.param];D&&!typeCore.subtype(g.type,D.type,t.schemes)&&t.sink.report(y.notAssignable(e,g.type,D.type,t.schemes));}let N=D=>g?{...D,guard:g}:D;if(f.type!=="BlockStatement"&&m){let D=e.async?Pe(m):m;J(f,D,d,t);let T=e.async?Me(m):m;return b(t,e,N(o({t:"fn",params:l,returns:T})),n)}let C=m??s?.returns,$=C&&e.async?Pe(C):C,ae=f.type==="BlockStatement"?b(t,f,Lt(f,d,t,new Set(Object.keys(i)),c,$),d):S(f,d,t),fe=e.async?Me(ae):ae;if(m){let D=e.async?Pe(m):m,T=e.async?ae:fe;typeCore.subtype(T,D,t.schemes)||t.sink.report(y.notAssignable(f,fe,m,t.schemes));let P=e.async?Me(m):m;return b(t,e,N(o({t:"fn",params:l,returns:P})),n)}return b(t,e,o({t:"fn",params:l,returns:typeCore.widenType(fe)}),n)}function Ne(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?Ne(n.argument):Ne(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?Ne(n.argument):Ne(n):[]);case "AssignmentPattern":return Ne(e.left);default:return []}}function $t(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>Ne(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?$t(e.declaration):[]}function Lt(e,n,t,r=new Set,s,a){let{returns:o}=Je(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 js=[typeCore.s.literal(true),typeCore.s.literal(false)];function Fs(e){return e.t==="union"?e.of:e.t==="boolean"?js:[e]}function Ut(e,n,t){let r=Fs(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 Vt(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 de(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=de(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=Vt(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=xt(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=de(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=de(r.handler.body,n,t);i.exits||s.push(i.types);}let o=$s(n,s);return r.finalizer&&(o=de(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 xt(e,n,t){let r=de(e.consequent,n,t),s=e.alternate?de(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let c=[];r.exits||c.push(r.types.get(i)??n.get(i)),s.exits||c.push(s.types.get(i)??n.get(i)),c.length&&o.set(i,typeCore.normalizeUnion(c));}return o}function Gt(e,n){let t=new Map,r=s=>{let a=O(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 $s(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 Ls(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=Gt(n,t),s=de(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 Je(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!Us(e))return wt(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[c,l]of s)t.declaredMut.set(c,l);try{return wt(e,n,t,r,a)}finally{t.evolving.clear();for(let c of o)t.evolving.add(c);t.declaredMut.clear();for(let[c,l]of i)t.declaredMut.set(c,l);}}function Us(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 wt(e,n,t,r,s){let a=n,o=[];for(let i of e){let c=i;for(let l of $t(c))r.has(l.name)?t.sink.report(y.cannotRedeclare(l,l.name)):r.add(l.name);if(c.type==="VariableDeclaration")a=Ye(c,a,t);else if(c.type!=="ImportDeclaration")if(c.type==="ExportNamedDeclaration"){let l=c;if(l.declaration?.type==="VariableDeclaration")a=Ye(l.declaration,a,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=S(l.declaration,a,t),d=U(l.declaration.id);d&&(a=L(a,{[d]:u}));}else for(let u of l.specifiers)O(a,u.local.name)===void 0&&t.sink.report(y.unknownName(u.local,u.local.name));}else if(c.type==="ExportDefaultDeclaration")S(c.declaration,a,t);else if(c.type==="FunctionDeclaration"){let l=S(c,a,t),u=U(c.id);u&&(a=L(a,{[u]:l}));}else if(c.type==="IfStatement"){let l=c,u=t.evolving.size||t.declaredMut.size?Gt(a,t):null;if(o.push(...q(c,a,t,s)),u&&u.size){let d=xt(l,u,t);d.size&&(a=H(a,Object.fromEntries(d)));}!l.alternate&&V(l.consequent)&&(a=H(a,je(l.test,a,t.schemes).else));}else {o.push(...q(c,a,t,s));let l=Vt(c,t);l?a=H(a,{[l.name]:l.type}):(c.type==="BlockStatement"||c.type==="TryStatement")&&(a=Ls(c,a,t));}}return {scope:a,returns:o}}function q(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=je(s.test,n,t.schemes),o=q(s.consequent,H(n,a.then),t,r);return s.alternate&&o.push(...q(s.alternate,H(n,a.else),t,r)),b(t,e,typeCore.s.unknown,n),o}case "BlockStatement":{let{returns:s}=Je(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=Ye(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=q(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"?In(a,s.right,t):typeCore.s.string,i=st(s.left);i&&se(i,at(s.left),t);let c=i?L(n,{[i]:o}):n,l=q(s.body,c,t,r);return b(t,e,typeCore.s.unknown,n),l}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=q(s.block,n,t,r);if(s.handler){let o=s.handler.param,i=o?U(o):null;i&&o&&se(i,o,t);let c=i?L(n,{[i]:typeCore.s.unknown}):n;a.push(...q(s.handler.body,c,t,r));}return s.finalizer&&a.push(...q(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 c=Je(i.consequent,a,t,void 0,void 0,r);a=c.scope,o.push(...c.returns);}return b(t,e,typeCore.s.unknown,n),o}default:return S(e,n,t),[]}}function Vs(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function In(e,n,t){let r=G(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=>In(s,n,t)));}return t.sink.report(y.notIterable(n,e)),typeCore.s.any}function xs(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function Gs(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return typeCore.s.object(t,e.index)}function Ks(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function Z(e,n,t,r,s){switch(e.type){case "Identifier":{let a=$e(e,r,s)??n;se(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:c}=typeCore.withoutUndefined(n),l=c.t==="unknown"?i:typeCore.normalizeUnion([c,i]),u=a.left;if(u.type==="Identifier"){let d=u.name;se(d,u,s),t[d]=l,s.overlay.set(u,{type:l,scope:r});}else Z(u,l,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Z(o.argument,Gs(n,a),t,r,s);continue}let i=o,c=Te(i);c!=null&&a.push(c);let l=c!=null?Vs(n,c,s):typeCore.s.unknown;Z(i.value,l,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Z(i.argument,Ks(n,o),t,r,s):Z(i,xs(n,o),t,r,s);});return}}}function jn(e,n,t){let r=G(n,t.schemes),a=(r.t==="union"?r.of.map(o=>G(o,t.schemes)):[r]).filter(o=>o.t==="object"&&(!o.index||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 c=Te(i);if(c===null)continue;let l=a.filter(u=>c in u.props||u.index?.key==="number"&&typeCore.isNumericLiteralName(c));if(!l.length){t.sink.report(y.excessProperty(i.key,c,n));continue}i.value.type==="ObjectExpression"&&jn(i.value,l[0].props[c].type,t);}}function Ye(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=U(a);o&&se(o,a,t);let i=$e(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,vt(o,i,t)):(r[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(y.constNeedsInit(s)),o&&(r[o]=i??typeCore.s.unknown);continue}let c=i??(s.init.type==="ArrowFunctionExpression"?lt(s.init):null),l=o&&c?L(n,{[o]:c}):n,u,d=null;i?(J(s.init,i,l,t),s.init.type==="ObjectExpression"&&jn(s.init,i,t),u=i,d=i,(i.t==="union"||i.t==="boolean")&&s.init.type==="Literal"&&(u=Ut(i,ue(s.init),t.schemes))):(u=S(s.init,l,t),e.kind!=="const"&&(u=typeCore.widenLiteral(u)),d=u),b(t,s,u,n),o?(r[o]=u,e.kind!=="const"&&d&&vt(o,d,t)):Z(a,u,r,n,t);}return b(t,e,typeCore.s.unknown,n),L(n,r)}function vt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function _s(e,n,t){let r=S(e.left,n,t),s=S(e.right,n,t),a=e.operator,o=Ee.get(a);if(!o)return typeCore.s.boolean;if(o.category==="additive"){if(me(r)||me(s))return pe(r,t.schemes)||pe(s,t.schemes)?typeCore.s.string:typeCore.s.number;if(pe(r,t.schemes)&&pe(s,t.schemes))return typeCore.s.string;if(Fe(r,t.schemes)&&Fe(s,t.schemes))return typeCore.s.number;if(pe(r,t.schemes)||pe(s,t.schemes)){let c=pe(r,t.schemes)?s:r;return t.sink.report(y.implicitCoercion(e,r,s,Kt(c,t.schemes))),typeCore.s.string}return t.sink.report(y.operatorNotApplicable(e,"+",r,s)),typeCore.s.number}if(o.category==="arithmetic"||o.category==="bitwise")Fe(r,t.schemes)||t.sink.report(y.arithmeticOperand(e.left,"left")),Fe(s,t.schemes)||t.sink.report(y.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!me(r)&&!me(s)){let i=typeCore.apparentType(r,t.schemes),c=typeCore.apparentType(s,t.schemes),l=typeCore.subtype(i,typeCore.s.number,t.schemes),u=typeCore.subtype(c,typeCore.s.number,t.schemes);l&&u||!l&&!u&&(typeCore.subtype(i,c,t.schemes)||typeCore.subtype(c,i,t.schemes))||t.sink.report(y.operatorNotApplicable(e,a,r,s));}return fn(o.result)}var me=e=>e.t==="any"||e.t==="unknown",Fe=(e,n)=>me(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),pe=(e,n)=>!me(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),qs=typeCore.s.union([typeCore.s.string,typeCore.s.number,typeCore.s.boolean,typeCore.s.null,typeCore.s.undefined]),Kt=(e,n)=>me(e)||typeCore.subtype(typeCore.apparentType(e,n),qs,n),Et={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},En=e=>e.t==="null"||e.t==="undefined";function Ws(e,n,t){if(n.t==="any"||n.t==="unknown")return typeCore.normalizeUnion([n,t]);let 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=>!En(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!En(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>En(a)?[a]:a.t==="literal"?a.value?[]:[a]:Et[a.t]?[Et[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var zs=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function Js(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 zs;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function Ys(e,n,t){let r={},s,a=[],o=[],i=false,c=false;for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){let g=G(S(u.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=u,f=S(d.value,n,t),m=typeCore.widen(f);if(b(t,u,f,n),d.computed){let g=G(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"&&(c=true,a.push(m),o.push(m));continue}let h=Te(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)}:c&&(s={key:"number",type:typeCore.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function _t(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=G(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=G(n,r.schemes),a=e.elements,o=a.every(c=>c&&c.type!=="SpreadElement"),i=(c,l)=>c.type==="ArrayExpression"?Fn(c,l,t,r):Se(l)?S(c,t,r):typeCore.widen(S(c,t,r));if(s.t==="tuple"&&o){let c=s.elements.length,l=typeCore.restIndex(s),u=l<0?0:c-l-1,d=m=>{if(l<0||m<l)return s.elements[m];let h=a.length-m;return h<=u?s.elements[c-h]:s.elements[l]},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 c=[];for(let l of a){if(!l)continue;let u=l;if(u.type==="SpreadElement"){S(u.argument,t,r);continue}c.push(i(u,s.items));}return b(r,e,typeCore.s.array(c.length?typeCore.normalizeUnion(c):typeCore.s.unknown),t)}return _t(e,t,r)}function Cn(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=>Cn(i,n,t,r));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let s=e;if(core.isExprMarker(s)){let o;try{o=codec.fromJson(s);}catch{return t.sink.report(y.unsupported(r,`'${core.EXPR_MARKER}: ${String(s[core.EXPR_MARKER])}'`)),typeCore.s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:Cn(s[o],n,t,r)};return {t:"object",props:a}}function Xs(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 Qs(e,n,t,r,s){let a=oe(),o=J(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=c=>r.sink.all.some(l=>l.node===c.node&&l.code===c.code&&l.message===c.message);for(let c of a.all)i(c)||r.sink.report(c);return a.hasErrors()?n:o}var Hs=(e,n)=>({...e,typeAnnotation:n}),Zs=(e,n)=>({...e,returnType:n}),ea=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Ln(e,n){return e.get(n)?.type}function na(e,n){return e.get(n)?.scope}function ta(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function ra(e,n){let t=e.get(n)?.scope;return t?[...en(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var sa=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function aa(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 Xe(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(sa)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=Ln(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=Xe(e,n+2,t,r),c=aa(a);return !i||!c?void 0:typeCore.discover(i,[c],r)?.type}case "ArrayExpression":{let o=Xe(e,n+1,t,r);return o?typeCore.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=Ee.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return typeCore.s.number;let i=a.left===s?a.right:a.left,c=Ln(t,i);return c&&c.t!=="any"&&c.t!=="unknown"?c:void 0}case "LogicalExpression":return Xe(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?typeCore.s.number:void 0}default:return}}function oa(e,n){return e.filter(t=>t.node===n)}function ua(){let e=new WeakMap;return {stamp:(n,t)=>(e.set(n,t),n),get:n=>e.get(n)}}var pa=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function Un(e,n,t,r){if(core.isExprMarker(e)){let s=r.island?r.island(e,n):core.fromExprMarker(e);return t.stamp(s,n)}return Array.isArray(e)?t.stamp(ne__namespace.arrayExpression(e.map((s,a)=>Un(s,r.child(n,a),t,r))),n):pa(e)?t.stamp(ne__namespace.objectExpression(Object.entries(e).map(([s,a])=>{let o=r.child(n,s),i=t.stamp(ne__namespace.literal(s),o);return t.stamp(ne__namespace.property(i,Un(a,o,t,r),false,false),o)})),n):t.stamp(ne__namespace.literal(e),n)}function da(e){let n=new WeakMap,t=[e];for(;t.length>0;){let r=t.pop();core.forEachChild(r,s=>{n.set(s,r),t.push(s);});}return n}function ma(e,n,t,r){let s=da(e),a=new Map,o=c=>{let l=a.get(c);return l===void 0&&(l=languageService.createPositionMap(c),a.set(c,l)),l},i=c=>{let l=c;for(;l!==void 0;){let u=t.get(l);if(u!==void 0)return u;l=s.get(l);}return r.fallback};return n.map(c=>{let l=i(c.node),u=r.textOf?.(l),d=u===void 0?void 0:zt(o(u),c.node.loc);return {diagnostic:c,anchor:l,...d?{span:d}:{}}})}function zt(e,n){if(!n?.start)return;let t=a=>e.offsetAt({line:a.line-1,column:a.column}),r=t(n.start),s=n.end?t(n.end):r;return {from:r,to:s<r?r:s}}function fa(e,n){return zt(languageService.createPositionMap(e),n)}exports.BINARY_OP=Ee;exports.BINARY_OPS=mn;exports.FUNCTION_KINDS=Jn;exports.LOGICAL_OPS=yr;exports.UNARY_OPS=Zn;exports.anchorDiagnostics=ma;exports.annotate=Hs;exports.annotateReturn=Zs;exports.asExpression=ea;exports.binaryOpsProducing=hr;exports.calleeAllowlist=sn;exports.capabilityNodes=rn;exports.check=Ct;exports.childScope=L;exports.collectBindings=Ar;exports.collectMutations=bn;exports.collectUnused=gn;exports.componentProps=Ns;exports.componentPropsOf=Pn;exports.contextualTypeAt=Xe;exports.createAnchors=ua;exports.createEnv=Zt;exports.createSink=oe;exports.diag=y;exports.diagnosticsAt=oa;exports.extractModuleType=ds;exports.fromCapability=mr;exports.guard=tn;exports.guardsFromCompiled=xe;exports.lookup=O;exports.lowerValue=Un;exports.makeDiagnostic=R;exports.maxArgs=pn;exports.maxCallNesting=on;exports.maxDepth=cn;exports.maxFunctionNesting=an;exports.maxNestingOf=Ve;exports.maxNodes=un;exports.memberCompletions=ta;exports.memberDepth=ln;exports.opResultSchema=fn;exports.resolveNamed=er;exports.resolveScheme=nr;exports.resultType=dn;exports.rootScope=_n;exports.scopeAt=na;exports.scopeCompletions=ra;exports.spanOf=fa;exports.typeAt=Ln;exports.unaryOpsProducing=gr;exports.visibleNames=en;Object.keys(typeCore).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return typeCore[k]}})});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Schema, Schemes, TypeScheme, ObjectSchema, Completion } from '@tslite/type-core';
|
|
2
2
|
export * from '@tslite/type-core';
|
|
3
|
-
import { Scope as Scope$1, BaseNode, Node, types } from '@tslite/core';
|
|
3
|
+
import { Scope as Scope$1, BaseNode, Node, types, Expression, SourceLocation } from '@tslite/core';
|
|
4
4
|
import { CapabilityProfile, CompiledProfile } from '@tslite/capability';
|
|
5
|
+
import { Span } from '@tslite/language-service';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Um nível de escopo léxico (nome → `Schema`), sobre o `Scope<T>` genérico do
|
|
@@ -70,17 +71,46 @@ interface Env {
|
|
|
70
71
|
readonly modules?: Readonly<Record<string, Schema>>;
|
|
71
72
|
}
|
|
72
73
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
74
|
+
* O que um `Env` tem além das variáveis. Cada campo espelha o de {@link Env}, e
|
|
75
|
+
* todos são opcionais.
|
|
75
76
|
*/
|
|
76
|
-
|
|
77
|
+
interface EnvOptions {
|
|
78
|
+
readonly types?: Readonly<Record<string, Schema>>;
|
|
79
|
+
readonly schemes?: Readonly<Record<string, TypeScheme>>;
|
|
80
|
+
readonly accessors?: Readonly<Record<string, Schema>>;
|
|
81
|
+
readonly asserters?: ReadonlySet<string>;
|
|
82
|
+
readonly matchers?: ReadonlySet<string>;
|
|
83
|
+
readonly modules?: Readonly<Record<string, Schema>>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Um catálogo (`Record<string, Schema>`) passado no lugar das opções é o erro que a
|
|
87
|
+
* forma antiga convida (`createEnv(vars, types)`), e o TypeScript o aceitaria em
|
|
88
|
+
* silêncio: um tipo com índice de string cabe num objeto de opções todas
|
|
89
|
+
* opcionais. Este tipo o recusa na compilação — `keyof` de um catálogo é `string`.
|
|
90
|
+
*/
|
|
91
|
+
type NoCatalog<O> = string extends keyof O ? never : unknown;
|
|
92
|
+
/**
|
|
93
|
+
* Cria um `Env`: as variáveis injetadas (a raiz da DI) e, por nome, o resto —
|
|
94
|
+
* tipos nomeados, type schemes, acessores, asserters, matchers, módulos.
|
|
95
|
+
* Capability é separada (passe um `profile` ao `check`).
|
|
96
|
+
*
|
|
97
|
+
* As opções são NOMEADAS porque a forma posicional já custou um defeito: uma
|
|
98
|
+
* chamada que parava no quarto argumento compilava, e o asserter (o quinto) ficava
|
|
99
|
+
* fora do ambiente — `parseAs` virava `unknown-name` só naquele lugar. Uma chave
|
|
100
|
+
* fora do vocabulário (um catálogo no lugar das opções, um `type` no lugar de
|
|
101
|
+
* `types`) é `invalid-env-options`, na montagem: o `Env` não nasce com uma metade
|
|
102
|
+
* calada.
|
|
103
|
+
*/
|
|
104
|
+
declare const createEnv: <O extends EnvOptions = EnvOptions>(vars?: Readonly<Record<string, Schema>>, options?: O & NoCatalog<O>) => Env;
|
|
105
|
+
/** Os erros que a MONTAGEM do ambiente lança (o `check` em si nunca lança — D2). */
|
|
106
|
+
type CheckerErrorCode = "invalid-env-options";
|
|
77
107
|
/** Resolve um tipo nomeado (`type User = …`) declarado no ambiente. */
|
|
78
108
|
declare const resolveNamed: (env: Env, name: string) => Schema | undefined;
|
|
79
109
|
/** Resolve um type scheme (`type Pair<A, B> = …`) declarado no ambiente. */
|
|
80
110
|
declare const resolveScheme: (env: Env, name: string) => TypeScheme | undefined;
|
|
81
111
|
|
|
82
112
|
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" | "narrowing-cast-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
|
|
113
|
+
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" | "unprovable-value" | "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
114
|
/**
|
|
85
115
|
* A **classe** do diagnóstico — espelha a divisão de passes do `tsc` (que nós
|
|
86
116
|
* fundimos num walk só): `semantic` é o que o **binder** do tsc pega (validade do
|
|
@@ -206,6 +236,15 @@ declare const diag: {
|
|
|
206
236
|
* `narrowing-cast-not-allowed` do `strict`.
|
|
207
237
|
*/
|
|
208
238
|
castUnsound: (node: BaseNode, from: Schema, to: Schema) => Diagnostic;
|
|
239
|
+
/**
|
|
240
|
+
* `parseAs(T, v)` em que o tipo de `v` não se sobrepõe a `T` na régua do `as`
|
|
241
|
+
* (`castOverlaps`). O asserter não confere o valor em build — a prova é de
|
|
242
|
+
* runtime —, mas aqui o build já sabe a resposta: a prova não é incerta, é
|
|
243
|
+
* impossível, e falhar é a única coisa que ela pode fazer. Erro, com a mesma
|
|
244
|
+
* severidade do `cast-unsound` (TS2352). Ancorado no VALOR: o tipo escolhido
|
|
245
|
+
* pode estar certo, e o valor errado é o caso comum.
|
|
246
|
+
*/
|
|
247
|
+
unprovableValue: (node: BaseNode, value: Schema, target: Schema, name: string) => Diagnostic;
|
|
209
248
|
/**
|
|
210
249
|
* Operando de operação aritmética (`*` `-` `/` `%` `**`, bitwise) ou de `++`/`--`
|
|
211
250
|
* que não é numérico. Espelha TS2362 (esquerdo) / TS2363 (direito) / TS2356 (`++`/`--`).
|
|
@@ -563,4 +602,78 @@ declare function contextualTypeAt(ancestors: readonly BaseNode[], i: number, ove
|
|
|
563
602
|
/** Os diagnósticos que apontam para `node`. */
|
|
564
603
|
declare function diagnosticsAt(diagnostics: readonly Diagnostic[], node: BaseNode): readonly Diagnostic[];
|
|
565
604
|
|
|
566
|
-
|
|
605
|
+
/** Nó → âncora do domínio. Identidade por referência; `A` é opaca. */
|
|
606
|
+
interface Anchors<A> {
|
|
607
|
+
/** Carimba o nó e o devolve — para carimbar na própria construção. */
|
|
608
|
+
stamp<T extends object>(node: T, anchor: A): T;
|
|
609
|
+
get(node: object): A | undefined;
|
|
610
|
+
}
|
|
611
|
+
declare function createAnchors<A>(): Anchors<A>;
|
|
612
|
+
interface LowerValueOptions<A> {
|
|
613
|
+
/** A âncora de um filho: chave de objeto ou índice de lista. */
|
|
614
|
+
readonly child: (anchor: A, key: string | number) => A;
|
|
615
|
+
/**
|
|
616
|
+
* O nó de uma ilha. Padrão: `fromExprMarker`, carimbado com a âncora da
|
|
617
|
+
* posição. Quem tem os nós em memória (com `loc` no texto do campo — os
|
|
618
|
+
* `islands[].node` do `parseValue` do `@tslite/template`) os entrega aqui, e
|
|
619
|
+
* o span de um erro dentro da ilha passa a existir.
|
|
620
|
+
*/
|
|
621
|
+
readonly island?: (marker: object, anchor: A) => Expression;
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Um valor JSON com ilhas → uma expressão de nós PRÓPRIOS, carimbados.
|
|
625
|
+
*
|
|
626
|
+
* Por que não entregar o `JsonExpression` ao checker: ele decodifica cada ilha
|
|
627
|
+
* em nós novos para tipá-la, e um erro dentro da ilha aponta um nó que não é do
|
|
628
|
+
* consumidor — o mapa não o conhece, e o diagnóstico cai no fallback. Baixando
|
|
629
|
+
* aqui, o nó é seu, carimbável, e a subida pelos pais alcança.
|
|
630
|
+
*
|
|
631
|
+
* - objeto → `ObjectExpression`; a raiz leva `anchor`; cada chave (um
|
|
632
|
+
* `Literal`, para representar qualquer chave JSON) e cada `Property` levam
|
|
633
|
+
* `child(anchor, key)`, e o valor é baixado com a mesma âncora filha. Um
|
|
634
|
+
* `not-assignable` do objeto inteiro pousa no objeto; um `excess-property`
|
|
635
|
+
* pousa na chave;
|
|
636
|
+
* - array → `ArrayExpression`, com `child(anchor, i)` por elemento;
|
|
637
|
+
* - ilha → `island(marker, anchor)`;
|
|
638
|
+
* - primitivo → `Literal`.
|
|
639
|
+
*/
|
|
640
|
+
declare function lowerValue<A>(value: unknown, anchor: A, anchors: Anchors<A>, opts: LowerValueOptions<A>): Expression;
|
|
641
|
+
interface AnchoredDiagnostic<A> {
|
|
642
|
+
/** O diagnóstico do checker, com `node` e `data` — intacto. */
|
|
643
|
+
readonly diagnostic: Diagnostic;
|
|
644
|
+
readonly anchor: A;
|
|
645
|
+
/** Offsets no texto da âncora, quando há texto e o nó tem `loc`. */
|
|
646
|
+
readonly span?: Span;
|
|
647
|
+
}
|
|
648
|
+
interface AnchorDiagnosticsOptions<A> {
|
|
649
|
+
/** A âncora de quem nada responde. Um diagnóstico sem âncora some. */
|
|
650
|
+
readonly fallback: A;
|
|
651
|
+
/** O texto em que a âncora mora — o do campo. Sem ele, não há span. */
|
|
652
|
+
readonly textOf?: (anchor: A) => string | undefined;
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Cada diagnóstico, levado à âncora do nó acusado ou do primeiro pai carimbado.
|
|
656
|
+
*
|
|
657
|
+
* A subida existe por correção, não por economia: o checker ancora um erro no nó
|
|
658
|
+
* mais preciso que tem — o literal de uma chave, o argumento de uma chamada —, e
|
|
659
|
+
* nem todo nó precisa ter sido carimbado (um sub-nó que um builder gerou, um
|
|
660
|
+
* nó sintético). Sem nenhum carimbo no caminho, vale o `fallback`.
|
|
661
|
+
*
|
|
662
|
+
* O `data` do diagnóstico atravessa intacto: é dele que o quick-fix de
|
|
663
|
+
* propriedade faltante vive. O span sai do `loc` do nó acusado, convertido no
|
|
664
|
+
* texto da âncora (`textOf`); sem texto ou sem `loc`, não há span — inventar um
|
|
665
|
+
* seria pior que não ter.
|
|
666
|
+
*/
|
|
667
|
+
declare function anchorDiagnostics<A>(root: object, diagnostics: readonly Diagnostic[], anchors: Anchors<A>, opts: AnchorDiagnosticsOptions<A>): AnchoredDiagnostic<A>[];
|
|
668
|
+
/**
|
|
669
|
+
* `loc` do AST → offsets num texto.
|
|
670
|
+
*
|
|
671
|
+
* `loc` ausente → sem span (um nó construído por builder não tem posição, e
|
|
672
|
+
* inventar uma seria pior que não ter); `end` ausente → span de tamanho zero no
|
|
673
|
+
* início; posição fora do texto é presa ao tamanho do texto, e o fim nunca fica
|
|
674
|
+
* antes do início. Para converter muitos `loc` sobre o mesmo texto, use
|
|
675
|
+
* `anchorDiagnostics`, que constrói o mapa de posições uma vez por texto.
|
|
676
|
+
*/
|
|
677
|
+
declare function spanOf(text: string, loc: SourceLocation | null | undefined): Span | undefined;
|
|
678
|
+
|
|
679
|
+
export { type AnchorDiagnosticsOptions, type AnchoredDiagnostic, type Anchors, BINARY_OP, BINARY_OPS, type BinaryOpCategory, type BinaryOpSpec, type BindingMap, type CheckOptions, type CheckResult, type CheckerErrorCode, type Diagnostic, type DiagnosticCode, type DiagnosticData, type DiagnosticKind, type DiagnosticSink, type Env, type EnvOptions, FUNCTION_KINDS, type Guard, type GuardContext, LOGICAL_OPS, type LogicalOpSpec, type LowerValueOptions, type MissingProperty, type OpResult, type Profile, type Scope, type Severity, type TypeOverlay, UNARY_OPS, type UnaryOpSpec, type UnusedOptions, anchorDiagnostics, annotate, annotateReturn, asExpression, binaryOpsProducing, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, componentProps, componentPropsOf, contextualTypeAt, createAnchors, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, lowerValue, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, opResultSchema, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, spanOf, typeAt, unaryOpsProducing, visibleNames };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Schema, Schemes, TypeScheme, ObjectSchema, Completion } from '@tslite/type-core';
|
|
2
2
|
export * from '@tslite/type-core';
|
|
3
|
-
import { Scope as Scope$1, BaseNode, Node, types } from '@tslite/core';
|
|
3
|
+
import { Scope as Scope$1, BaseNode, Node, types, Expression, SourceLocation } from '@tslite/core';
|
|
4
4
|
import { CapabilityProfile, CompiledProfile } from '@tslite/capability';
|
|
5
|
+
import { Span } from '@tslite/language-service';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Um nível de escopo léxico (nome → `Schema`), sobre o `Scope<T>` genérico do
|
|
@@ -70,17 +71,46 @@ interface Env {
|
|
|
70
71
|
readonly modules?: Readonly<Record<string, Schema>>;
|
|
71
72
|
}
|
|
72
73
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
74
|
+
* O que um `Env` tem além das variáveis. Cada campo espelha o de {@link Env}, e
|
|
75
|
+
* todos são opcionais.
|
|
75
76
|
*/
|
|
76
|
-
|
|
77
|
+
interface EnvOptions {
|
|
78
|
+
readonly types?: Readonly<Record<string, Schema>>;
|
|
79
|
+
readonly schemes?: Readonly<Record<string, TypeScheme>>;
|
|
80
|
+
readonly accessors?: Readonly<Record<string, Schema>>;
|
|
81
|
+
readonly asserters?: ReadonlySet<string>;
|
|
82
|
+
readonly matchers?: ReadonlySet<string>;
|
|
83
|
+
readonly modules?: Readonly<Record<string, Schema>>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Um catálogo (`Record<string, Schema>`) passado no lugar das opções é o erro que a
|
|
87
|
+
* forma antiga convida (`createEnv(vars, types)`), e o TypeScript o aceitaria em
|
|
88
|
+
* silêncio: um tipo com índice de string cabe num objeto de opções todas
|
|
89
|
+
* opcionais. Este tipo o recusa na compilação — `keyof` de um catálogo é `string`.
|
|
90
|
+
*/
|
|
91
|
+
type NoCatalog<O> = string extends keyof O ? never : unknown;
|
|
92
|
+
/**
|
|
93
|
+
* Cria um `Env`: as variáveis injetadas (a raiz da DI) e, por nome, o resto —
|
|
94
|
+
* tipos nomeados, type schemes, acessores, asserters, matchers, módulos.
|
|
95
|
+
* Capability é separada (passe um `profile` ao `check`).
|
|
96
|
+
*
|
|
97
|
+
* As opções são NOMEADAS porque a forma posicional já custou um defeito: uma
|
|
98
|
+
* chamada que parava no quarto argumento compilava, e o asserter (o quinto) ficava
|
|
99
|
+
* fora do ambiente — `parseAs` virava `unknown-name` só naquele lugar. Uma chave
|
|
100
|
+
* fora do vocabulário (um catálogo no lugar das opções, um `type` no lugar de
|
|
101
|
+
* `types`) é `invalid-env-options`, na montagem: o `Env` não nasce com uma metade
|
|
102
|
+
* calada.
|
|
103
|
+
*/
|
|
104
|
+
declare const createEnv: <O extends EnvOptions = EnvOptions>(vars?: Readonly<Record<string, Schema>>, options?: O & NoCatalog<O>) => Env;
|
|
105
|
+
/** Os erros que a MONTAGEM do ambiente lança (o `check` em si nunca lança — D2). */
|
|
106
|
+
type CheckerErrorCode = "invalid-env-options";
|
|
77
107
|
/** Resolve um tipo nomeado (`type User = …`) declarado no ambiente. */
|
|
78
108
|
declare const resolveNamed: (env: Env, name: string) => Schema | undefined;
|
|
79
109
|
/** Resolve um type scheme (`type Pair<A, B> = …`) declarado no ambiente. */
|
|
80
110
|
declare const resolveScheme: (env: Env, name: string) => TypeScheme | undefined;
|
|
81
111
|
|
|
82
112
|
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" | "narrowing-cast-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
|
|
113
|
+
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" | "unprovable-value" | "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
114
|
/**
|
|
85
115
|
* A **classe** do diagnóstico — espelha a divisão de passes do `tsc` (que nós
|
|
86
116
|
* fundimos num walk só): `semantic` é o que o **binder** do tsc pega (validade do
|
|
@@ -206,6 +236,15 @@ declare const diag: {
|
|
|
206
236
|
* `narrowing-cast-not-allowed` do `strict`.
|
|
207
237
|
*/
|
|
208
238
|
castUnsound: (node: BaseNode, from: Schema, to: Schema) => Diagnostic;
|
|
239
|
+
/**
|
|
240
|
+
* `parseAs(T, v)` em que o tipo de `v` não se sobrepõe a `T` na régua do `as`
|
|
241
|
+
* (`castOverlaps`). O asserter não confere o valor em build — a prova é de
|
|
242
|
+
* runtime —, mas aqui o build já sabe a resposta: a prova não é incerta, é
|
|
243
|
+
* impossível, e falhar é a única coisa que ela pode fazer. Erro, com a mesma
|
|
244
|
+
* severidade do `cast-unsound` (TS2352). Ancorado no VALOR: o tipo escolhido
|
|
245
|
+
* pode estar certo, e o valor errado é o caso comum.
|
|
246
|
+
*/
|
|
247
|
+
unprovableValue: (node: BaseNode, value: Schema, target: Schema, name: string) => Diagnostic;
|
|
209
248
|
/**
|
|
210
249
|
* Operando de operação aritmética (`*` `-` `/` `%` `**`, bitwise) ou de `++`/`--`
|
|
211
250
|
* que não é numérico. Espelha TS2362 (esquerdo) / TS2363 (direito) / TS2356 (`++`/`--`).
|
|
@@ -563,4 +602,78 @@ declare function contextualTypeAt(ancestors: readonly BaseNode[], i: number, ove
|
|
|
563
602
|
/** Os diagnósticos que apontam para `node`. */
|
|
564
603
|
declare function diagnosticsAt(diagnostics: readonly Diagnostic[], node: BaseNode): readonly Diagnostic[];
|
|
565
604
|
|
|
566
|
-
|
|
605
|
+
/** Nó → âncora do domínio. Identidade por referência; `A` é opaca. */
|
|
606
|
+
interface Anchors<A> {
|
|
607
|
+
/** Carimba o nó e o devolve — para carimbar na própria construção. */
|
|
608
|
+
stamp<T extends object>(node: T, anchor: A): T;
|
|
609
|
+
get(node: object): A | undefined;
|
|
610
|
+
}
|
|
611
|
+
declare function createAnchors<A>(): Anchors<A>;
|
|
612
|
+
interface LowerValueOptions<A> {
|
|
613
|
+
/** A âncora de um filho: chave de objeto ou índice de lista. */
|
|
614
|
+
readonly child: (anchor: A, key: string | number) => A;
|
|
615
|
+
/**
|
|
616
|
+
* O nó de uma ilha. Padrão: `fromExprMarker`, carimbado com a âncora da
|
|
617
|
+
* posição. Quem tem os nós em memória (com `loc` no texto do campo — os
|
|
618
|
+
* `islands[].node` do `parseValue` do `@tslite/template`) os entrega aqui, e
|
|
619
|
+
* o span de um erro dentro da ilha passa a existir.
|
|
620
|
+
*/
|
|
621
|
+
readonly island?: (marker: object, anchor: A) => Expression;
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Um valor JSON com ilhas → uma expressão de nós PRÓPRIOS, carimbados.
|
|
625
|
+
*
|
|
626
|
+
* Por que não entregar o `JsonExpression` ao checker: ele decodifica cada ilha
|
|
627
|
+
* em nós novos para tipá-la, e um erro dentro da ilha aponta um nó que não é do
|
|
628
|
+
* consumidor — o mapa não o conhece, e o diagnóstico cai no fallback. Baixando
|
|
629
|
+
* aqui, o nó é seu, carimbável, e a subida pelos pais alcança.
|
|
630
|
+
*
|
|
631
|
+
* - objeto → `ObjectExpression`; a raiz leva `anchor`; cada chave (um
|
|
632
|
+
* `Literal`, para representar qualquer chave JSON) e cada `Property` levam
|
|
633
|
+
* `child(anchor, key)`, e o valor é baixado com a mesma âncora filha. Um
|
|
634
|
+
* `not-assignable` do objeto inteiro pousa no objeto; um `excess-property`
|
|
635
|
+
* pousa na chave;
|
|
636
|
+
* - array → `ArrayExpression`, com `child(anchor, i)` por elemento;
|
|
637
|
+
* - ilha → `island(marker, anchor)`;
|
|
638
|
+
* - primitivo → `Literal`.
|
|
639
|
+
*/
|
|
640
|
+
declare function lowerValue<A>(value: unknown, anchor: A, anchors: Anchors<A>, opts: LowerValueOptions<A>): Expression;
|
|
641
|
+
interface AnchoredDiagnostic<A> {
|
|
642
|
+
/** O diagnóstico do checker, com `node` e `data` — intacto. */
|
|
643
|
+
readonly diagnostic: Diagnostic;
|
|
644
|
+
readonly anchor: A;
|
|
645
|
+
/** Offsets no texto da âncora, quando há texto e o nó tem `loc`. */
|
|
646
|
+
readonly span?: Span;
|
|
647
|
+
}
|
|
648
|
+
interface AnchorDiagnosticsOptions<A> {
|
|
649
|
+
/** A âncora de quem nada responde. Um diagnóstico sem âncora some. */
|
|
650
|
+
readonly fallback: A;
|
|
651
|
+
/** O texto em que a âncora mora — o do campo. Sem ele, não há span. */
|
|
652
|
+
readonly textOf?: (anchor: A) => string | undefined;
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Cada diagnóstico, levado à âncora do nó acusado ou do primeiro pai carimbado.
|
|
656
|
+
*
|
|
657
|
+
* A subida existe por correção, não por economia: o checker ancora um erro no nó
|
|
658
|
+
* mais preciso que tem — o literal de uma chave, o argumento de uma chamada —, e
|
|
659
|
+
* nem todo nó precisa ter sido carimbado (um sub-nó que um builder gerou, um
|
|
660
|
+
* nó sintético). Sem nenhum carimbo no caminho, vale o `fallback`.
|
|
661
|
+
*
|
|
662
|
+
* O `data` do diagnóstico atravessa intacto: é dele que o quick-fix de
|
|
663
|
+
* propriedade faltante vive. O span sai do `loc` do nó acusado, convertido no
|
|
664
|
+
* texto da âncora (`textOf`); sem texto ou sem `loc`, não há span — inventar um
|
|
665
|
+
* seria pior que não ter.
|
|
666
|
+
*/
|
|
667
|
+
declare function anchorDiagnostics<A>(root: object, diagnostics: readonly Diagnostic[], anchors: Anchors<A>, opts: AnchorDiagnosticsOptions<A>): AnchoredDiagnostic<A>[];
|
|
668
|
+
/**
|
|
669
|
+
* `loc` do AST → offsets num texto.
|
|
670
|
+
*
|
|
671
|
+
* `loc` ausente → sem span (um nó construído por builder não tem posição, e
|
|
672
|
+
* inventar uma seria pior que não ter); `end` ausente → span de tamanho zero no
|
|
673
|
+
* início; posição fora do texto é presa ao tamanho do texto, e o fim nunca fica
|
|
674
|
+
* antes do início. Para converter muitos `loc` sobre o mesmo texto, use
|
|
675
|
+
* `anchorDiagnostics`, que constrói o mapa de posições uma vez por texto.
|
|
676
|
+
*/
|
|
677
|
+
declare function spanOf(text: string, loc: SourceLocation | null | undefined): Span | undefined;
|
|
678
|
+
|
|
679
|
+
export { type AnchorDiagnosticsOptions, type AnchoredDiagnostic, type Anchors, BINARY_OP, BINARY_OPS, type BinaryOpCategory, type BinaryOpSpec, type BindingMap, type CheckOptions, type CheckResult, type CheckerErrorCode, type Diagnostic, type DiagnosticCode, type DiagnosticData, type DiagnosticKind, type DiagnosticSink, type Env, type EnvOptions, FUNCTION_KINDS, type Guard, type GuardContext, LOGICAL_OPS, type LogicalOpSpec, type LowerValueOptions, type MissingProperty, type OpResult, type Profile, type Scope, type Severity, type TypeOverlay, UNARY_OPS, type UnaryOpSpec, type UnusedOptions, anchorDiagnostics, annotate, annotateReturn, asExpression, binaryOpsProducing, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, componentProps, componentPropsOf, contextualTypeAt, createAnchors, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, lowerValue, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, opResultSchema, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, spanOf, typeAt, unaryOpsProducing, visibleNames };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,instantiateLoose,widenType,substitute,widenInferred,groundVars,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};
|
|
1
|
+
import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,freeVars,instantiateLoose,widenType,substitute,widenInferred,groundVars,resolveConditional,widen,withoutUndefined,isNumericLiteralName,restIndex,baseLiteralType,comparable,unify,ownProp,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,TSLiteError,walk,desugarJSX,isExprMarker,EXPR_MARKER,fromExprMarker,childrenOf,VisitorKeys,forEachChild}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';import*as ne from'@tslite/core/builders';import {createPositionMap}from'@tslite/language-service';var _n=(e={})=>rootScope(e),L=(e,n)=>childScope(e,n),O=(e,n)=>lookup(e,n),en=e=>visibleNames(e),Kn=new Set(["types","schemes","accessors","asserters","matchers","modules"]),Zt=(e={},n)=>{let t=n??{},r=Object.keys(t).filter(s=>!Kn.has(s));if(r.length>0)throw new TSLiteError("invalid-env-options",`createEnv: unknown option(s) ${r.map(s=>`'${s}'`).join(", ")} \u2014 expected ${[...Kn].join(", ")}. Named types go under 'types'.`,{unknown:r});return {scope:_n(e),types:t.types??{},schemes:t.schemes??{},accessors:t.accessors??{},asserters:t.asserters??new Set,matchers:t.matchers??new Set,modules:t.modules??{}}},er=(e,n)=>e.types[n],nr=(e,n)=>e.schemes[n];var qn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","required-after-optional":"type","not-iterable":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","unprovable-value":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","narrowing-cast-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:qn[e],severity:"error",node:n,message:t}),R=(e,n,t,r="error")=>({code:e,kind:qn[e],severity:r,node:n,message:t}),y={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(l=>l.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),c=s.filter(l=>l.kind==="missing"&&l.path.length===1).map(l=>({name:l.path[0],type:l.expected}));return c.length?{...i,data:{kind:"missing-properties",properties:c}}:i},unknownName:(e,n)=>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)=>R("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.`),unprovableValue:(e,n,t,r)=>B("unprovable-value",e,`A value of type '${format(n)}' can never satisfy '${r}' (${format(t)}): the types do not overlap, so this proof can only fail at runtime.`),arithmeticOperand:(e,n)=>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 oe(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function ve(e,n,t){let r=baseLiteralType(e);return comparable(n,widenType(r),t)||comparable(r,n,t)}function zn(e,n,t){return subtype(e,n,t)}function tn(e,n,t={}){return n.flatMap(r=>r(e,t))}function ie(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var pr=e=>Array.isArray(e)?e:[e],Jn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function rn(e,n="error"){return t=>{let r=[];return ie(t,s=>{let a=nodeViolation(s,e);a&&r.push(R("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function Yn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ie(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let c of [o.typeAnnotation,o.returnType]){if(!c)continue;let l=typeFeatureViolations(typeFeatures(c,i),t);l.length&&s.push(R("type-feature-not-allowed",a,`authoring type feature${l.length>1?"s":""} '${l.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function A(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=>A(t.type,n))||!!e.index&&A(e.index.value,n);case "array":return A(e.items,n);case "tuple":return e.elements.some(t=>A(t,n));case "union":case "intersection":return e.of.some(t=>A(t,n));case "fn":return e.params.some(t=>A(t.type,n))||A(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>A(r.type,n))||A(t.returns,n));case "keyof":return A(e.of,n);case "index":return A(e.obj,n)||A(e.key,n);case "mapped":return A(e.over,n)||A(e.body,n);case "conditional":return A(e.check,n)||A(e.extends,n)||A(e.then,n)||A(e.else,n);case "returnType":case "parameters":return A(e.fn,n);case "apply":return e.args.some(t=>A(t,n));default:return false}}function Xn(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ie(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&A(o)){r.push(R("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function Qn(e,n="error"){return (t,r)=>{let s=r.overlay;if(!e.typeStrict||!s)return [];let a=r.schemes??{},o=[];return ie(t,i=>{if(i.type!=="TSAsExpression")return;let{expression:c}=i,l=s.get(c)?.type,u=s.get(i)?.type;!l||!u||A(u)||!ve(l,u,a)||zn(l,u,a)||o.push(R("narrowing-cast-not-allowed",i,`A cast may only widen under 'strict': '${format(l)}' is not assignable to '${format(u)}'. Narrow with a type guard, or prove the value with an asserter.`,n));}),o}}function sn(e,n="error"){let t=new Set(e);return r=>{let s=[];return ie(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(R("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(R("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function Ve(e,n,t={}){let r=new Set(pr(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],c=(l,u)=>{let d=r.has(l.type),f=d?u+1:u;d&&f>n&&i.push(R("too-deep",l,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of childrenOf(l))c(m,f);};return c(o,0),i}}var an=(e=3,n="error")=>Ve(Jn,e,{hint:"use a pipe instead of nesting functions",severity:n}),on=(e,n="error")=>Ve("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),ln=(e,n="error")=>Ve("MemberExpression",e,{severity:n});function cn(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(R("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of childrenOf(a))s(i,o+1);};return s(t,0),r}}function un(e,n="error"){return t=>{let r=0;return ie(t,()=>{r++;}),r>e?[R("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function pn(e,n="error"){return t=>{let r=[];return ie(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(R("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function dn(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[R("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function xe(e){let n=[rn(e),Yn(e),Xn(e),Qn(e)];return e.hostAllow!=="*"&&n.push(sn([...e.hostAllow])),n}function mr(e){return xe(compileProfile(e))}var mn=[{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"}],Ee=new Map(mn.map(e=>[e.op,e])),Hn={number:s.number,boolean:s.boolean,string:s.string},fn=e=>Hn[e],Zn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],fr={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},yr=[{op:"&&"},{op:"||"},{op:"??"}];function hr(e,n={}){return mn.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(Hn[t.result],e,n))}function gr(e,n={}){return Zn.filter(t=>subtype(fr[t.result],e,n))}var le=e=>({bindings:new Map,parent:e}),nt=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 De(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)De(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&_e(n,r);return}for(let r of Object.keys(t))De(t[r],n);}function tt(e,n){let t=e;De(t.typeAnnotation,n),De(t.returnType,n);}function _e(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;tt(e,n),Ke(n,t,o,e,r,s||a&&nt(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],c=!!i&&i.type==="RestElement";o.forEach((l,u)=>{let d=c&&u<o.length-1;if(l.type==="RestElement")X(l.argument,n,t,r,s,false);else {let f=l;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 Ae(e,n,t){if(e)switch(e.type){case "AssignmentPattern":k(e.right,n,t),Ae(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)Ae(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&Ae(r,n,t);return;case "RestElement":Ae(e.argument,n,t);return;default:return}}function et(e,n,t,r){for(let s of e.declarations)X(s.id,n,t,"local",r,false),k(s.init,n,t);}function yn(e,n,t){let r=e,s=le(n),a=r.params??[];for(let o of a)X(o,s,t,"parameter",false,true);for(let o of a)Ae(o,s,t);k(r.body,s,t);}function k(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(tt(e,n),e.type){case "Identifier":_e(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=le(n);for(let s of e.body??[])k(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":yn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Ke(n,t,r.name,r,"local",false),yn(e,n,t);return}case "CatchClause":{let r=e,s=le(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=le(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=le(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=le(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":et(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",nt(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")et(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Ke(n,t,a.name,a,"local",true),yn(s,n,t);}else k(s,n,t);}else for(let s of r.specifiers)_e(n,s.local.name);return}case "TSAsExpression":k(e.expression,n,t);return;case "TSTypeAliasDeclaration":De(e.typeAnnotation,n);return;case "JsonExpression":hn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;rt(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 rt(e,n,t){e&&(e.type==="JSXIdentifier"?_e(n,e.name):e.type==="JSXMemberExpression"&&rt(e.object,n));}function hn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)hn(s,n,t);return}let r=e;if(isExprMarker(r)){try{k(fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))hn(r[s],n,t);}function gn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};k(e,le(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 kr=new Set(["const","import"]),Ce=e=>({binds:new Map,parent:e});function wr(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ce(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ce(n.argument):ce(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ce(n):[]);case "AssignmentPattern":return ce(e.left);case "RestElement":return ce(e.argument);default:return []}}var qe=(e,n,t)=>{for(let r of ce(n))e.binds.set(r.name,t);};function Sn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ce(e))Sn(a,n,t);return}let r=e.name,s=wr(n,r);s&&kr.has(s)&&(t.invalid.add(e),t.out.push(y.assignToConst(e,r,s==="import"?"import":"const")));}function j(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;Sn(r.left,n,t),j(r.right,n,t);return}case "UpdateExpression":{Sn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ce(n);for(let s of e.body??[])j(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ce(n);for(let a of r.params??[])qe(s,a,"param");j(r.body,s,t);return}case "CatchClause":{let r=e,s=Ce(n);qe(s,r.param,"param"),j(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Ce(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)qe(s,o.id,a.kind);else a&&j(a,s,t);j(r.right,n,t),j(r.test,s,t),j(r.update,s,t),j(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)j(s.init,n,t),qe(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&&j(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":j(e.expression,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)j(i,n,t);else j(o,n,t);}return}}}function bn(e){let n={out:[],invalid:new WeakSet};return j(e,Ce(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var Oe=e=>({decls:new Map,parent:e});function Er(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function ge(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ge(n.argument):ge(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ge(n):[]);case "AssignmentPattern":return ge(e.left);case "RestElement":return ge(e.argument);default:return []}}var We=(e,n)=>{for(let t of ge(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=Er(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=Oe(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=Oe(n);for(let o of r.params??[])We(a,o);M(r.body,a,t);return}case "CatchClause":{let r=e,s=Oe(n);We(s,r.param),M(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Oe(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)We(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)We(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 Ar(e){let n=new WeakMap;return M(e,Oe(void 0),n),n}var Nn=e=>e.typeAnnotation,Bn=e=>e.returnType,U=e=>e.type==="Identifier"?e.name:null,st=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?U(n.id):null}return U(e)},at=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Te=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function ot(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 kn(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=kn(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)},wn=e=>e.type==="ArrowFunctionExpression",it=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Pe=e=>it(e)?e.args[0]:e,Me=e=>it(e)?e:s.promise(e);function Re(e){return e.t==="tuple"?true:e.t==="array"?Re(e.items):e.t==="union"?e.of.some(Re):false}function Se(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>Se(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&Se(e.bound):false}var G=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function lt(e){let n=Bn(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:U(r)??`arg${s$1}`,type:Nn(r)??s.unknown})),returns:e.async?Me(n):n}:null}var Q={then:{},else:{}},ht=new Set(["string","number","boolean","undefined","function","object"]),ct={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function gt(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 Rr=s.literal(true),Tr=s.literal(false),z=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[Rr,Tr]:[e];function ut(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 Pr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=z(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function Mr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=z(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function Ir(e,n){if(!ht.has(n))return null;if(e.t==="unknown"||e.t==="any")return ct[n]??e;let t=z(e).filter(r=>gt(r,n));return t.length?normalizeUnion(t):ct[n]??e}function jr(e,n){if(!ht.has(n)||e.t==="unknown"||e.t==="any")return null;let t=z(e).filter(r=>!gt(r,n));return t.length?normalizeUnion(t):null}function pt(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 dt(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 mt(e,n,t,r,s){let a=z(e),o=c=>c.t==="object"?ownProp(c.props,n)?.type:void 0,i=a.filter(c=>{let l=o(c);return r?!!l&&subtype(t,l,s):!(l&&subtype(l,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function ft(e,n,t){let r=z(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 Fr(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function $r(e,n,t){let r=z(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var Lr=e=>e.t==="null"||e.t==="undefined",St=e=>Lr(e)||e.t==="literal"&&!e.value,Ur=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=z(e),t=n.filter(r=>!St(r));return t.length&&t.length<n.length?normalizeUnion(t):null},Vr=e=>{let n=z(e),t=n.filter(St);return t.length&&t.length<n.length?normalizeUnion(t):null},yt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,K=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),xr=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function je(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=O(n,g);if(!N)return Q;let C=String(m.value);return K(g,ft(N,C,true),ft(N,C,false))}return Q}if(!xr(r.operator))return Q;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=ut(a,o)??ut(o,a);if(i){let m=O(n,i.name);if(!m)return Q;let h=Ir(m,i.tag),g=jr(m,i.tag);return s?K(i.name,g,h):K(i.name,h,g)}let c=yt(a),l=yt(o),u=c?o:l?a:null;if((c||l)&&u?.type==="Identifier"){let m=u.name,h=O(n,m);if(!h)return Q;let N=r.operator==="=="||r.operator==="!="?["null","undefined"]:[c??l],C=z(h),$=C.filter(T=>N.includes(T.t)),ae=C.filter(T=>!N.includes(T.t)),fe=$.length?normalizeUnion($):null,D=ae.length&&ae.length<C.length?normalizeUnion(ae):null;return s?K(m,D,fe):K(m,fe,D)}let d=pt(a,o)??pt(o,a);if(d){let m=O(n,d.name);if(!m)return Q;let h=Fr(m,d.lit,t),g=$r(m,d.lit,t);return s?K(d.name,g,h):K(d.name,h,g)}let f=dt(a,o)??dt(o,a);if(f){let m=O(n,f.name);if(!m)return Q;let h=mt(m,f.prop,f.lit,true,t),g=mt(m,f.prop,f.lit,false,t);return s?K(f.name,g,h):K(f.name,h,g)}return Q}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=je(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Kr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=O(n,r);if(s)return K(r,Ur(s),Vr(s))}return Q}function Gr(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 Kr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=O(n,r.name);if(!s)return null;let a=Gr(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,c=O(n,i);return c?K(i,Pr(c,a.type,t),Mr(c,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 cs=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function us(e){let n=[];return e.maxDepth!==void 0&&n.push(cn(e.maxDepth)),e.maxNodes!==void 0&&n.push(un(e.maxNodes)),e.maxArgs!==void 0&&n.push(pn(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(an(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(on(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(ln(e.memberDepth)),n}function ps(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>R("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function Ct(e,n,t={}){let r={...cs(n.types),...n.schemes,...ms(e)},s$1=bn(e),a={overlay:new WeakMap,sink:oe(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s$1.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?compileProfile(t.profile):void 0;o&&configureTypeLimits(o.typeLimits);try{let i,c=fs(e,a);try{i=S(e,c,a);}catch(d){if(d instanceof TypeEvalLimitError)a.sink.report(R("too-deep",e,d.message));else if(d instanceof UnionTooComplexError)a.sink.report(R("too-complex-union",e,d.message));else throw d;i=s.unknown;}let l=[];o&&l.push(...xe(o)),t.limits&&l.push(...us(t.limits)),t.resultType&&l.push(dn(t.resultType,r));let u=[...a.sink.all,...s$1.diagnostics,...ps(e,r),...t.unused?gn(e,t.unused):[],...l.length?tn(e,l,{overlay:a.overlay,schemes:r}):[]];return {type:i,overlay:a.overlay,diagnostics:u,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function ds(e,n,t={}){let r=Ct(e,n,t),s$1={},a=new Map,o,i=l=>{let u=[];if(l.type==="VariableDeclaration")for(let d of l.declarations){let f=U(d.id),m=r.overlay.get(d);f&&m&&(s$1[f]=m.type,u.push(f));}else if(l.type==="FunctionDeclaration"){let d=l.id?.name,f=r.overlay.get(l);d&&f&&(s$1[d]=f.type,u.push(d));}return u};for(let l of e.body??[])if(l.type==="VariableDeclaration"||l.type==="FunctionDeclaration")i(l);else if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration)for(let d of i(u.declaration))a.set(d,d);else for(let d of u.specifiers)a.set(d.exported.name,d.local.name);}else if(l.type==="ExportDefaultDeclaration"){let u=r.overlay.get(l.declaration);o=u?u.type:s.unknown;}let c={};if(a.size||o!==void 0){for(let[l,u]of a)s$1[u]&&(c[l]={type:s$1[u]});o!==void 0&&(c.default={type:o});}else for(let l in s$1)c[l]={type:s$1[l]};return {type:{t:"object",props:c},diagnostics:r.diagnostics}}var ms=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 fs(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 c of a.specifiers)r[c.local.name]=s.unknown;return}for(let c of a.specifiers){if(c.importKind==="type")continue;let l=c.local.name;if(se(l,c.local,n),l in r){n.sink.report(y.cannotRedeclare(c.local,l));continue}if(c.type==="ImportNamespaceSpecifier"){r[l]=i;continue}let u=c.type==="ImportSpecifier"?c.imported.name:"default",d=discover(i,[u],n.schemes);d?r[l]=d.type:(n.sink.report(y.noSuchMember(c,i,u)),r[l]=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 Rt: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=O(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,gs(e,n,t),n);case "CallExpression":return b(t,e,ws(e,n,t,r),n);case "ArrowFunctionExpression":return Mn(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,Lt(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 q(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 q(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 u=t.overlay.get(a.object)?.type,d=u&&apparentType(u,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,c=i!==null&&t.evolving.has(i),l=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(c&&i!==null){let d=S(s.right,n,t);return t.assignFlow.set(e,widenLiteral(d)),b(t,e,d,n)}if(l&&i!==null){let d=S(s.right,n,t);return subtype(d,l,t.schemes)||t.sink.report(y.notAssignable(s.right,d,l,t.schemes)),t.assignFlow.set(e,Ut(l,d,t.schemes)),b(t,e,d,n)}let u=J(s.right,o,n,t);return b(t,e,u,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 Fe(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 Ye(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?Cs(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return b(t,e,_s(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,Ws(s.operator,a,o),n)}case "UnaryExpression":return b(t,e,Js(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=je(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,Ys(e,n,t),n);case "ArrayExpression":return b(t,e,_t(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=S(s,n,t);Kt(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,Pe(a),n)}case "Program":{let s$1=Je(e.body,n,t,new Set(t.importNames)).scope;return b(t,e,s.unknown,s$1)}case "JsonExpression":return b(t,e,Cn(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=ke(s.typeAnnotation,n,t,e);return ve(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 ys=new Set(["constructor","prototype","__proto__"]);function hs(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 gs(e,n,t){let r=S(e.object,n,t),s$1=hs(e);if(s$1!==null&&ys.has(s$1))return t.sink.report(y.forbiddenMember(e,s$1)),s.unknown;if(e.computed){let i=S(e.property,n,t),c=resolveTypeOp(s.index(r,i));return c.t!=="index"?c:(i.t==="literal"&&typeof i.value=="string"&&Nt(e,r,i.value,t),s.unknown)}let a=e.property.name,o=discover(r,[a],t.schemes);return o?o.type:(Nt(e,r,a,t),s.unknown)}function Nt(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 Ss(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=O(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(!(Ot(a,r)&&!bs(t,a)))return r.overlay.set(s$1,{type:i.body,scope:t}),i.body}function Ot(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&O(n.env.scope,e)!==void 0}function bs(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 se(e,n,t){Ot(e,t)&&t.sink.report(y.shadowsSchema(n,e));}function Pn(e,n){let t=G(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function Ns(e,n){let t=O(e.scope,n);if(!t)return;let r=Pn(t,e.schemes);return r?G(r,e.schemes):void 0}function Bs(e,n,t,r){let s$1=Pn(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 Rt="TSLiteSyntheticArg",ks=e=>({type:Rt,schema:e});function Tt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(c=>c&&c.type!=="SpreadElement")){for(let c of o.elements)r.push(c);continue}let i=G(S(o,n,t),t.schemes);if(i.t==="tuple")for(let c of i.elements)r.push(ks(c));else s={elem:In(i,o,t),node:a};}return {nodes:r,spread:s}}function ws(e,n,t,r){let s$1=e.arguments,a=kn(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=ot(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=Ss(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++){let m=S(s$1[f],n,t);f===1&&d&&freeVars(m).size===0&&!ve(m,d,t.schemes)&&t.sink.report(y.unprovableValue(s$1[f],m,d,e.arguments[0].name));}return d??s.unknown}if(a&&t.env.matchers?.has(a))return Bs(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 Es(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=Tt(s$1,n,t),c=i.nodes.map(d=>Pt(d,n,t)),l=It(e),u=!l||jt(o,l.length);return u||t.sink.report(y.wrongTypeArgumentCount(e,o.typeParams?.length??0,l.length)),Dn(e,o,i.nodes,c,n,t,i.spread,r,u?l:void 0)}function Pt(e,n,t){if(wn(e))return s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=oe(),s$1=S(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function Dn(e,n,t,r,s$1,a,o=null,i,c){let l=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},u=c?Rs(e,n,c,a):void 0,d=u??l(instantiateLoose(n,r).bindings);t.forEach((h,g)=>{if(wn(h)){let N=widenType(substitute(n.params[g]?.type??s.any,d));r[g]=Mn(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);Se(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"&&Re(C)){r[g]=Fn(h,C,s$1,a);return}let $=N.t==="var"?N.bound?substitute(N.bound,d):void 0:C;$&&Xs($,a.schemes)&&(r[g]=Qs(h,$,s$1,a,N.t==="var")??r[g]);}});let f=u??l(instantiateLoose(n,r).bindings);u||vs(e,n,f,a),Is(e,n,r,f,a,t,o),t.forEach((h,g)=>{let N=n.params[g];h.type==="ObjectExpression"&&N&&!N.variadic&&jn(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 Bt=new WeakMap;function Mt(e){let n=Bt.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)F(s.type,t,r);return F(e.returns,t,r),Bt.set(e,t),t}function F(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":F(e.items,n,t);return;case "union":for(let r of e.of)F(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)F(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)F(r.type,n,t);F(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)F(s.type,n,t);F(r.returns,n,t);}return;case "apply":for(let r of e.args)F(r,n,t);return;case "keyof":F(e.of,n,t);return;case "index":F(e.obj,n,t),F(e.key,n,t);return;case "mapped":F(e.over,n,t),F(e.body,n,t);return;default:return}}function vs(e,n,t,r){let s=Mt(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let c=substitute(o,t);subtype(i,c,r.schemes)||r.sink.report(y.constraintViolation(e,a,i,c));}}function Es(e,n,t,r,s){let a=Tt(e.arguments,t,r),o=a.nodes,i=o.map(u=>Pt(u,t,r)),c=It(e),l=c?n.signatures.filter(u=>jt(u,c.length)):n.signatures;if(c&&!l.length){let u=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(y.wrongTypeArgumentCount(e,u,c.length)),kt(e,n.signatures,a,o,i,t,r,s,void 0)}return kt(e,l,a,o,i,t,r,s,c)}function kt(e,n,t,r,s$1,a,o,i,c){let l={t:"overload",signatures:n},u=m=>t.spread?Ts(m,r.length):Ps(m,r.length),d=l.signatures.filter(u);if(d.length>1&&s$1.some(m=>m.t==="any"))for(let m of d){let h=oe(),g=Dn(e,m,r,s$1,a,{...o,sink:h},t.spread,i,c);if(!h.hasErrors())return h.all.forEach(N=>o.sink.report(N)),g}let f=l.signatures.find(m=>u(m)&&Ms(m,s$1,o));if(!f){let m=l.signatures.filter(u);m.length===1?f=m[0]:l.signatures.length===1&&(f=l.signatures[0]);}return f?Dn(e,f,r,s$1,a,o,t.spread,i,c):(o.sink.report(y.noMatchingOverload(e,l,s$1)),s.unknown)}function As(e,n,t,r){let s$1=O(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 ke(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let l=false,u=a.map(d=>{let f=s$1(d);return f!==d&&(l=true),f});return l?u:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return As(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(Ds(o.name,n,t,r),!(o.name in t.schemes)))return s.any;let i=false,c={};for(let l of Object.keys(o)){let u=s$1(o[l]);u!==o[l]&&(i=true),c[l]=u;}return i?c:o};return s$1(e)}function Ds(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=ke(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function Cs(e,n,t,r,s){let a={...t,sink:oe(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=ke(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var $e=(e,n,t)=>{let r=Nn(e);return r===void 0?r:ke(r,n,t,e)},Os=(e,n,t)=>{let r=Bn(e);return r===void 0?r:ke(r,n,t,e)},It=e=>{let n=e.typeArguments;return n?.length?n:void 0},jt=(e,n)=>(e.typeParams?.length??0)===n;function Rs(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,c)=>a[i]=t[c]);let o=a;for(let[i,c]of Mt(n)){let l=o[i];if(!l)continue;let u=groundVars(substitute(c,o),r.schemes);subtype(l,u,r.schemes)||r.sink.report(y.constraintViolation(e,i,l,u));}return o}function Ts(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 Ps(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 Ms(e,n,t){let{bindings:r}=instantiateLoose(e,n);for(let s$1=0;s$1<e.params.length;s$1++){let a=e.params[s$1];if(a.variadic){let o=substitute(a.type,r),i=o.t==="array"?o.items:s.unknown;for(let c=s$1;c<n.length;c++)if(!subtype(n[c],i,t.schemes))return false;return true}if(s$1>=n.length){if(!a.optional)return false;continue}if(!subtype(n[s$1],substitute(a.type,r),t.schemes))return false}return true}function Is(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=l=>a[l]??e;for(let l=0;l<n.params.length;l++){let u=n.params[l];if(u.variadic){let f=substitute(u.type,r),m=f.t==="array"?f.items:s.unknown;for(let h=l;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(u.type,r);if(l>=t.length){!u.optional&&!o&&s$1.sink.report(y.missingArgument(e,u.name,d));continue}subtype(t[l],d,s$1.schemes)||s$1.sink.report(y.notAssignable(i(l),t[l],d,s$1.schemes));}let c=n.params.find(l=>l.variadic);if(o){let l=t.length,u=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(l>=u&&(c||l<n.params.length))){s$1.sink.report(y.spreadArgument(o.node));return}if(c){let d=substitute(c.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}!c&&t.length>n.params.length&&s$1.sink.report(y.excessArgument(i(n.params.length),n.params.length,t.length));}function Ft(e,n,t){if(e.t==="object"){let r=ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>Ft(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:resolveTypeOp({t:"intersection",of:r})}}function 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?Se(n)?i:widen(ze(e)):n,t)}case "ArrayExpression":{if(Re(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 l of e.elements){if(!l)continue;let u=l;if(u.type==="SpreadElement"){let d=J(u.argument,n,t,r,s$1);d.t==="array"&&i.push(d.items);}else i.push(J(u,a.items,t,r,s$1));}let c=s$1&&i.length>0?s.array(normalizeUnion(i)):n;return b(r,e,c,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},c={};for(let u of e.properties){let d=u;if(d.type==="SpreadElement"){S(d.argument,t,r);continue}let f=d,m=Te(f),h=m!==null?Ft(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},c[m]={type:g}),b(r,d,g,t);}let l={t:"object",props:i};return subtype(l,n,r.schemes)||r.sink.report(y.notAssignable(e,l,n,r.schemes)),b(r,e,s$1?{t:"object",props:c}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=Mn(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 c=J(i.consequent,n,t,r,s$1),l=J(i.alternate,n,t,r,s$1);return b(r,e,s$1?normalizeUnion([c,l]):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 Mn(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=D=>a?.length?{...D,typeParams:a}:D,i={},c=new Map,l=e.params.map((D,T)=>{let P=D,Qe=s$1?.params[T]?.type;if(P.type==="RestElement"){let te=P.argument,x=$e(te,n,t)??(s$1?.params[T]?.variadic?Qe:void 0)??s.array(s.unknown),W=U(te);return W?(se(W,te,t),i[W]=x):Z(te,x,i,n,t),t.overlay.set(te,{type:x,scope:n}),t.overlay.set(P,{type:x,scope:n}),{name:W??`arg${T}`,type:x,variadic:true}}if(P.type==="AssignmentPattern"){let te=P.left,He=$e(te,n,t)??Qe;Z(P,He??s.unknown,i,n,t);let x=U(te),W=x?i[x]:void 0,Ze=He??W??s.unknown,Gn=Ze.t==="unknown"?Ze:normalizeUnion([Ze,s.undefined]);return x&&W&&(W.t==="union"||W.t==="boolean")&&c.set(x,W),t.overlay.set(P,{type:Gn,scope:n}),{name:x??`arg${T}`,type:Gn,optional:true}}let ye=U(P),Vn=$e(P,n,t),we=Vn??Qe??s.unknown,xn=P.type==="Identifier"&&(!!P.optional||Vn===void 0&&!!s$1?.params[T]?.optional),he=xn&&we.t!=="unknown"?normalizeUnion([we,s.undefined]):we;return ye?(se(ye,P,t),i[ye]=he,(he.t==="union"||he.t==="boolean")&&c.set(ye,he)):P.type!=="Identifier"&&Z(P,we,i,n,t),t.overlay.set(P,{type:he,scope:n}),xn?{name:ye??`arg${T}`,type:he,optional:true}:{name:ye??`arg${T}`,type:we}}),u=false;l.forEach((D,T)=>{D.optional?u=true:!D.variadic&&u&&t.sink.report(y.requiredAfterOptional(e.params[T]));});let d=L(n,i),f=e.body,m=Os(e,n,t),h=e.returnGuard,g=h?{param:h.param,type:ke(h.type,n,t,e)}:void 0;if(g){let D=l[g.param];D&&!subtype(g.type,D.type,t.schemes)&&t.sink.report(y.notAssignable(e,g.type,D.type,t.schemes));}let N=D=>g?{...D,guard:g}:D;if(f.type!=="BlockStatement"&&m){let D=e.async?Pe(m):m;J(f,D,d,t);let T=e.async?Me(m):m;return b(t,e,N(o({t:"fn",params:l,returns:T})),n)}let C=m??s$1?.returns,$=C&&e.async?Pe(C):C,ae=f.type==="BlockStatement"?b(t,f,Lt(f,d,t,new Set(Object.keys(i)),c,$),d):S(f,d,t),fe=e.async?Me(ae):ae;if(m){let D=e.async?Pe(m):m,T=e.async?ae:fe;subtype(T,D,t.schemes)||t.sink.report(y.notAssignable(f,fe,m,t.schemes));let P=e.async?Me(m):m;return b(t,e,N(o({t:"fn",params:l,returns:P})),n)}return b(t,e,o({t:"fn",params:l,returns:widenType(fe)}),n)}function Ne(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?Ne(n.argument):Ne(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?Ne(n.argument):Ne(n):[]);case "AssignmentPattern":return Ne(e.left);default:return []}}function $t(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>Ne(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?$t(e.declaration):[]}function Lt(e,n,t,r=new Set,s$1,a){let{returns:o}=Je(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 js=[s.literal(true),s.literal(false)];function Fs(e){return e.t==="union"?e.of:e.t==="boolean"?js:[e]}function Ut(e,n,t){let r=Fs(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 Vt(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 de(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=de(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=Vt(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=xt(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=de(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=de(r.handler.body,n,t);i.exits||s.push(i.types);}let o=$s(n,s);return r.finalizer&&(o=de(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 xt(e,n,t){let r=de(e.consequent,n,t),s=e.alternate?de(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let c=[];r.exits||c.push(r.types.get(i)??n.get(i)),s.exits||c.push(s.types.get(i)??n.get(i)),c.length&&o.set(i,normalizeUnion(c));}return o}function Gt(e,n){let t=new Map,r=s=>{let a=O(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 $s(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 Ls(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=Gt(n,t),s=de(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 Je(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!Us(e))return wt(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[c,l]of s)t.declaredMut.set(c,l);try{return wt(e,n,t,r,a)}finally{t.evolving.clear();for(let c of o)t.evolving.add(c);t.declaredMut.clear();for(let[c,l]of i)t.declaredMut.set(c,l);}}function Us(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 wt(e,n,t,r,s){let a=n,o=[];for(let i of e){let c=i;for(let l of $t(c))r.has(l.name)?t.sink.report(y.cannotRedeclare(l,l.name)):r.add(l.name);if(c.type==="VariableDeclaration")a=Ye(c,a,t);else if(c.type!=="ImportDeclaration")if(c.type==="ExportNamedDeclaration"){let l=c;if(l.declaration?.type==="VariableDeclaration")a=Ye(l.declaration,a,t);else if(l.declaration?.type==="FunctionDeclaration"){let u=S(l.declaration,a,t),d=U(l.declaration.id);d&&(a=L(a,{[d]:u}));}else for(let u of l.specifiers)O(a,u.local.name)===void 0&&t.sink.report(y.unknownName(u.local,u.local.name));}else if(c.type==="ExportDefaultDeclaration")S(c.declaration,a,t);else if(c.type==="FunctionDeclaration"){let l=S(c,a,t),u=U(c.id);u&&(a=L(a,{[u]:l}));}else if(c.type==="IfStatement"){let l=c,u=t.evolving.size||t.declaredMut.size?Gt(a,t):null;if(o.push(...q(c,a,t,s)),u&&u.size){let d=xt(l,u,t);d.size&&(a=H(a,Object.fromEntries(d)));}!l.alternate&&V(l.consequent)&&(a=H(a,je(l.test,a,t.schemes).else));}else {o.push(...q(c,a,t,s));let l=Vt(c,t);l?a=H(a,{[l.name]:l.type}):(c.type==="BlockStatement"||c.type==="TryStatement")&&(a=Ls(c,a,t));}}return {scope:a,returns:o}}function q(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=je(s$1.test,n,t.schemes),o=q(s$1.consequent,H(n,a.then),t,r);return s$1.alternate&&o.push(...q(s$1.alternate,H(n,a.else),t,r)),b(t,e,s.unknown,n),o}case "BlockStatement":{let{returns:s$1}=Je(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=Ye(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=q(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"?In(a,s$1.right,t):s.string,i=st(s$1.left);i&&se(i,at(s$1.left),t);let c=i?L(n,{[i]:o}):n,l=q(s$1.body,c,t,r);return b(t,e,s.unknown,n),l}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=q(s$1.block,n,t,r);if(s$1.handler){let o=s$1.handler.param,i=o?U(o):null;i&&o&&se(i,o,t);let c=i?L(n,{[i]:s.unknown}):n;a.push(...q(s$1.handler.body,c,t,r));}return s$1.finalizer&&a.push(...q(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 c=Je(i.consequent,a,t,void 0,void 0,r);a=c.scope,o.push(...c.returns);}return b(t,e,s.unknown,n),o}default:return S(e,n,t),[]}}function Vs(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function In(e,n,t){let r=G(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=>In(s,n,t)));}return t.sink.report(y.notIterable(n,e)),s.any}function xs(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function Gs(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return s.object(t,e.index)}function Ks(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function Z(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=$e(e,r,s$1)??n;se(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:c}=withoutUndefined(n),l=c.t==="unknown"?i:normalizeUnion([c,i]),u=a.left;if(u.type==="Identifier"){let d=u.name;se(d,u,s$1),t[d]=l,s$1.overlay.set(u,{type:l,scope:r});}else Z(u,l,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Z(o.argument,Gs(n,a),t,r,s$1);continue}let i=o,c=Te(i);c!=null&&a.push(c);let l=c!=null?Vs(n,c,s$1):s.unknown;Z(i.value,l,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Z(i.argument,Ks(n,o),t,r,s$1):Z(i,xs(n,o),t,r,s$1);});return}}}function jn(e,n,t){let r=G(n,t.schemes),a=(r.t==="union"?r.of.map(o=>G(o,t.schemes)):[r]).filter(o=>o.t==="object"&&(!o.index||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 c=Te(i);if(c===null)continue;let l=a.filter(u=>c in u.props||u.index?.key==="number"&&isNumericLiteralName(c));if(!l.length){t.sink.report(y.excessProperty(i.key,c,n));continue}i.value.type==="ObjectExpression"&&jn(i.value,l[0].props[c].type,t);}}function Ye(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=U(a);o&&se(o,a,t);let i=$e(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,vt(o,i,t)):(r[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(y.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let c=i??(s$1.init.type==="ArrowFunctionExpression"?lt(s$1.init):null),l=o&&c?L(n,{[o]:c}):n,u,d=null;i?(J(s$1.init,i,l,t),s$1.init.type==="ObjectExpression"&&jn(s$1.init,i,t),u=i,d=i,(i.t==="union"||i.t==="boolean")&&s$1.init.type==="Literal"&&(u=Ut(i,ue(s$1.init),t.schemes))):(u=S(s$1.init,l,t),e.kind!=="const"&&(u=widenLiteral(u)),d=u),b(t,s$1,u,n),o?(r[o]=u,e.kind!=="const"&&d&&vt(o,d,t)):Z(a,u,r,n,t);}return b(t,e,s.unknown,n),L(n,r)}function vt(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function _s(e,n,t){let r=S(e.left,n,t),s$1=S(e.right,n,t),a=e.operator,o=Ee.get(a);if(!o)return s.boolean;if(o.category==="additive"){if(me(r)||me(s$1))return pe(r,t.schemes)||pe(s$1,t.schemes)?s.string:s.number;if(pe(r,t.schemes)&&pe(s$1,t.schemes))return s.string;if(Fe(r,t.schemes)&&Fe(s$1,t.schemes))return s.number;if(pe(r,t.schemes)||pe(s$1,t.schemes)){let c=pe(r,t.schemes)?s$1:r;return t.sink.report(y.implicitCoercion(e,r,s$1,Kt(c,t.schemes))),s.string}return t.sink.report(y.operatorNotApplicable(e,"+",r,s$1)),s.number}if(o.category==="arithmetic"||o.category==="bitwise")Fe(r,t.schemes)||t.sink.report(y.arithmeticOperand(e.left,"left")),Fe(s$1,t.schemes)||t.sink.report(y.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!me(r)&&!me(s$1)){let i=apparentType(r,t.schemes),c=apparentType(s$1,t.schemes),l=subtype(i,s.number,t.schemes),u=subtype(c,s.number,t.schemes);l&&u||!l&&!u&&(subtype(i,c,t.schemes)||subtype(c,i,t.schemes))||t.sink.report(y.operatorNotApplicable(e,a,r,s$1));}return fn(o.result)}var me=e=>e.t==="any"||e.t==="unknown",Fe=(e,n)=>me(e)||subtype(apparentType(e,n),s.number,n),pe=(e,n)=>!me(e)&&subtype(apparentType(e,n),s.string,n),qs=s.union([s.string,s.number,s.boolean,s.null,s.undefined]),Kt=(e,n)=>me(e)||subtype(apparentType(e,n),qs,n),Et={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},En=e=>e.t==="null"||e.t==="undefined";function Ws(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=>!En(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!En(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>En(a)?[a]:a.t==="literal"?a.value?[]:[a]:Et[a.t]?[Et[a.t]]:[]);return normalizeUnion([...s$1,t])}var zs=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function Js(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 zs;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function Ys(e,n,t){let r={},s,a=[],o=[],i=false,c=false;for(let l of e.properties){let u=l;if(u.type==="SpreadElement"){let g=G(S(u.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=u,f=S(d.value,n,t),m=widen(f);if(b(t,u,f,n),d.computed){let g=G(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"&&(c=true,a.push(m),o.push(m));continue}let h=Te(d);h!==null&&(r[h]={type:m},a.push(m),/^\d+$/.test(h)&&o.push(m));}return i?s={key:"string",type:normalizeUnion(a)}:c&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function _t(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=G(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=G(n,r.schemes),a=e.elements,o=a.every(c=>c&&c.type!=="SpreadElement"),i=(c,l)=>c.type==="ArrayExpression"?Fn(c,l,t,r):Se(l)?S(c,t,r):widen(S(c,t,r));if(s$1.t==="tuple"&&o){let c=s$1.elements.length,l=restIndex(s$1),u=l<0?0:c-l-1,d=m=>{if(l<0||m<l)return s$1.elements[m];let h=a.length-m;return h<=u?s$1.elements[c-h]:s$1.elements[l]},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 c=[];for(let l of a){if(!l)continue;let u=l;if(u.type==="SpreadElement"){S(u.argument,t,r);continue}c.push(i(u,s$1.items));}return b(r,e,s.array(c.length?normalizeUnion(c):s.unknown),t)}return _t(e,t,r)}function Cn(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=>Cn(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if(isExprMarker(s$1)){let o;try{o=fromJson(s$1);}catch{return t.sink.report(y.unsupported(r,`'${EXPR_MARKER}: ${String(s$1[EXPR_MARKER])}'`)),s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:Cn(s$1[o],n,t,r)};return {t:"object",props:a}}function Xs(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 Qs(e,n,t,r,s){let a=oe(),o=J(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=c=>r.sink.all.some(l=>l.node===c.node&&l.code===c.code&&l.message===c.message);for(let c of a.all)i(c)||r.sink.report(c);return a.hasErrors()?n:o}var Hs=(e,n)=>({...e,typeAnnotation:n}),Zs=(e,n)=>({...e,returnType:n}),ea=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Ln(e,n){return e.get(n)?.type}function na(e,n){return e.get(n)?.scope}function ta(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function ra(e,n){let t=e.get(n)?.scope;return t?[...en(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var sa=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function aa(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 Xe(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(sa)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=Ln(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=Xe(e,n+2,t,r),c=aa(a);return !i||!c?void 0:discover(i,[c],r)?.type}case "ArrayExpression":{let o=Xe(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=Ee.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return s.number;let i=a.left===s$1?a.right:a.left,c=Ln(t,i);return c&&c.t!=="any"&&c.t!=="unknown"?c:void 0}case "LogicalExpression":return Xe(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function oa(e,n){return e.filter(t=>t.node===n)}function ua(){let e=new WeakMap;return {stamp:(n,t)=>(e.set(n,t),n),get:n=>e.get(n)}}var pa=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function Un(e,n,t,r){if(isExprMarker(e)){let s=r.island?r.island(e,n):fromExprMarker(e);return t.stamp(s,n)}return Array.isArray(e)?t.stamp(ne.arrayExpression(e.map((s,a)=>Un(s,r.child(n,a),t,r))),n):pa(e)?t.stamp(ne.objectExpression(Object.entries(e).map(([s,a])=>{let o=r.child(n,s),i=t.stamp(ne.literal(s),o);return t.stamp(ne.property(i,Un(a,o,t,r),false,false),o)})),n):t.stamp(ne.literal(e),n)}function da(e){let n=new WeakMap,t=[e];for(;t.length>0;){let r=t.pop();forEachChild(r,s=>{n.set(s,r),t.push(s);});}return n}function ma(e,n,t,r){let s=da(e),a=new Map,o=c=>{let l=a.get(c);return l===void 0&&(l=createPositionMap(c),a.set(c,l)),l},i=c=>{let l=c;for(;l!==void 0;){let u=t.get(l);if(u!==void 0)return u;l=s.get(l);}return r.fallback};return n.map(c=>{let l=i(c.node),u=r.textOf?.(l),d=u===void 0?void 0:zt(o(u),c.node.loc);return {diagnostic:c,anchor:l,...d?{span:d}:{}}})}function zt(e,n){if(!n?.start)return;let t=a=>e.offsetAt({line:a.line-1,column:a.column}),r=t(n.start),s=n.end?t(n.end):r;return {from:r,to:s<r?r:s}}function fa(e,n){return zt(createPositionMap(e),n)}export{Ee as BINARY_OP,mn as BINARY_OPS,Jn as FUNCTION_KINDS,yr as LOGICAL_OPS,Zn as UNARY_OPS,ma as anchorDiagnostics,Hs as annotate,Zs as annotateReturn,ea as asExpression,hr as binaryOpsProducing,sn as calleeAllowlist,rn as capabilityNodes,Ct as check,L as childScope,Ar as collectBindings,bn as collectMutations,gn as collectUnused,Ns as componentProps,Pn as componentPropsOf,Xe as contextualTypeAt,ua as createAnchors,Zt as createEnv,oe as createSink,y as diag,oa as diagnosticsAt,ds as extractModuleType,mr as fromCapability,tn as guard,xe as guardsFromCompiled,O as lookup,Un as lowerValue,R as makeDiagnostic,pn as maxArgs,on as maxCallNesting,cn as maxDepth,an as maxFunctionNesting,Ve as maxNestingOf,un as maxNodes,ta as memberCompletions,ln as memberDepth,fn as opResultSchema,er as resolveNamed,nr as resolveScheme,dn as resultType,_n as rootScope,na as scopeAt,ra as scopeCompletions,fa as spanOf,Ln as typeAt,gr as unaryOpsProducing,en as visibleNames};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tslite/checker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "TSLite type system — a structural type checker over the AST (the 'TypeScript of TSLite')",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -39,13 +39,14 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@tslite/capability": "0.
|
|
43
|
-
"@tslite/codec": "0.
|
|
44
|
-
"@tslite/core": "0.
|
|
45
|
-
"@tslite/type-core": "0.
|
|
42
|
+
"@tslite/capability": "0.6.0",
|
|
43
|
+
"@tslite/codec": "0.8.0",
|
|
44
|
+
"@tslite/core": "0.10.0",
|
|
45
|
+
"@tslite/type-core": "0.5.0",
|
|
46
|
+
"@tslite/language-service": "0.4.0"
|
|
46
47
|
},
|
|
47
48
|
"devDependencies": {
|
|
48
|
-
"@tslite/parser": "1.3.
|
|
49
|
+
"@tslite/parser": "1.3.2"
|
|
49
50
|
},
|
|
50
51
|
"scripts": {
|
|
51
52
|
"build": "tsup",
|