@tslite/checker 0.9.4 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec');var Ln=(e={})=>core.rootScope(e),U=(e,n)=>core.childScope(e,n),R=(e,n)=>core.lookup(e,n),Qe=e=>core.visibleNames(e),Kt=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:Ln(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),qt=(e,n)=>e.types[n],_t=(e,n)=>e.schemes[n];var Vn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","required-after-optional":"type","not-iterable":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:Vn[e],severity:"error",node:n,message:t}),O=(e,n,t,r="error")=>({code:e,kind:Vn[e],severity:r,node:n,message:t}),y={notAssignable:(e,n,t,r={})=>{let s=typeCore.typeDiff(n,t,r),a=s.filter(u=>u.path.length>0),o=a.length?` ${typeCore.formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${typeCore.format(n)}' is not assignable to type '${typeCore.format(t)}'.${o}`),l=s.filter(u=>u.kind==="missing"&&u.path.length===1).map(u=>({name:u.path[0],type:u.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${typeCore.format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${typeCore.format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${typeCore.format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${typeCore.format(t)}'.`),notASchema:(e,n)=>B("not-a-schema",e,`'${n}' refers to a value, but no type named '${n}' is declared. An asserter needs a schema that is both a value in scope and a declared type.`),typeAsValue:(e,n)=>B("type-as-value",e,`'${n}' only refers to a type, but is being used as a value here. Types are erased at runtime: register '${n}' as a value in scope for the asserter to prove it.`),asserterNeedsName:(e,n)=>B("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>B("shadows-schema",e,`'${n}' shadows the schema of the same name: an asserter would type against the declared schema but prove against this value at runtime. Rename the binding.`),unknownModule:(e,n)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${typeCore.format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>B("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>B("not-iterable",e,`Type '${typeCore.format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${typeCore.format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${typeCore.format(n)}' matches the arguments (${t.map(r=>typeCore.format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>B("constraint-violation",e,`Type '${typeCore.format(t)}' does not satisfy the constraint '${n} extends ${typeCore.format(r)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>O("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${typeCore.format(n)}' only permits reading.`),castUnsound:(e,n,t)=>O("cast-unsound",e,`Conversion of type '${typeCore.format(n)}' to type '${typeCore.format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${typeCore.format(t)}' and '${typeCore.format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...B("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${typeCore.format(n)}' and '${typeCore.format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...B("implicit-coercion",e,`Cannot convert '${typeCore.format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function ae(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Ze(e,n,t={}){return n.flatMap(r=>r(e,t))}function ye(e,n){let t=r=>{n(r);for(let s of core.childrenOf(r))t(s);};t(e);}var Qt=e=>Array.isArray(e)?e:[e],Kn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function en(e,n="error"){return t=>{let r=[];return ye(t,s=>{let a=capability.nodeViolation(s,e);a&&r.push(O("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function qn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ye(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=capability.typeFeatureViolations(typeCore.typeFeatures(l,i),t);u.length&&s.push(O("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function D(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>D(t.type,n))||!!e.index&&D(e.index.value,n);case "array":return D(e.items,n);case "tuple":return e.elements.some(t=>D(t,n));case "union":case "intersection":return e.of.some(t=>D(t,n));case "fn":return e.params.some(t=>D(t.type,n))||D(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>D(r.type,n))||D(t.returns,n));case "keyof":return D(e.of,n);case "index":return D(e.obj,n)||D(e.key,n);case "mapped":return D(e.over,n)||D(e.body,n);case "conditional":return D(e.check,n)||D(e.extends,n)||D(e.then,n)||D(e.else,n);case "returnType":case "parameters":return D(e.fn,n);case "apply":return e.args.some(t=>D(t,n));default:return false}}function _n(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ye(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&D(o)){r.push(O("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function nn(e,n="error"){let t=new Set(e);return r=>{let s=[];return ye(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(O("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(O("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function $e(e,n,t={}){let r=new Set(Qt(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(u,p)=>{let d=r.has(u.type),f=d?p+1:p;d&&f>n&&i.push(O("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of core.childrenOf(u))l(m,f);};return l(o,0),i}}var tn=(e=3,n="error")=>$e(Kn,e,{hint:"use a pipe instead of nesting functions",severity:n}),rn=(e,n="error")=>$e("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),sn=(e,n="error")=>$e("MemberExpression",e,{severity:n});function an(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(O("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of core.childrenOf(a))s(i,o+1);};return s(t,0),r}}function on(e,n="error"){return t=>{let r=0;return ye(t,()=>{r++;}),r>e?[O("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function ln(e,n="error"){return t=>{let r=[];return ye(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(O("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function un(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?typeCore.subtype(a,e,n)?[]:[O("wrong-result-type",r,`Result type '${typeCore.format(a)}' is not assignable to the required '${typeCore.format(e)}'.`,t)]:[]}}function Ue(e){let n=[en(e),qn(e),_n(e)];return e.hostAllow!=="*"&&n.push(nn([...e.hostAllow])),n}function Zt(e){return Ue(capability.compileProfile(e))}var cn=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],we=new Map(cn.map(e=>[e.op,e])),zn={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string},pn=e=>zn[e],Wn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],er={number:typeCore.s.number,boolean:typeCore.s.boolean,string:typeCore.s.string,undefined:typeCore.s.undefined},nr=[{op:"&&"},{op:"||"},{op:"??"}];function tr(e,n={}){return cn.filter(t=>t.result==="additive"?typeCore.subtype(typeCore.s.string,e,n)||typeCore.subtype(typeCore.s.number,e,n):typeCore.subtype(zn[t.result],e,n))}function rr(e,n={}){return Wn.filter(t=>typeCore.subtype(er[t.result],e,n))}var oe=e=>({bindings:new Map,parent:e}),xn=e=>e.charCodeAt(0)===95;function Ve(e,n,t,r,s,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:r,kind:s,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function Ee(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ee(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&Ge(n,r);return}for(let r of Object.keys(t))Ee(t[r],n);}function Yn(e,n){let t=e;Ee(t.typeAnnotation,n),Ee(t.returnType,n);}function Ge(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function X(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Yn(e,n),Ve(n,t,o,e,r,s||a&&xn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")X(u.argument,n,t,r,s,false);else {let f=u;f.computed&&k(f.key,n,t),X(f.value,n,t,r,s||d,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;X(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":X(e.left,n,t,r,s,a);return;case "RestElement":X(e.argument,n,t,r,s,true);return;default:return}}function ve(e,n,t){if(e)switch(e.type){case "AssignmentPattern":k(e.right,n,t),ve(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)ve(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&ve(r,n,t);return;case "RestElement":ve(e.argument,n,t);return;default:return}}function Jn(e,n,t,r){for(let s of e.declarations)X(s.id,n,t,"local",r,false),k(s.init,n,t);}function dn(e,n,t){let r=e,s=oe(n),a=r.params??[];for(let o of a)X(o,s,t,"parameter",false,true);for(let o of a)ve(o,s,t);k(r.body,s,t);}function k(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Yn(e,n),e.type){case "Identifier":Ge(n,e.name);return;case "MemberExpression":{let r=e;k(r.object,n,t),r.computed&&k(r.property,n,t);return}case "Property":{let r=e;r.computed&&k(r.key,n,t),k(r.value,n,t);return}case "Program":case "BlockStatement":{let r=oe(n);for(let s of e.body??[])k(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":dn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Ve(n,t,r.name,r,"local",false),dn(e,n,t);return}case "CatchClause":{let r=e,s=oe(n);X(r.param,s,t,"local",true,false),k(r.body,s,t);return}case "SwitchStatement":{let r=e;k(r.discriminant,n,t);let s=oe(n);for(let a of r.cases){k(a.test,s,t);for(let o of a.consequent??[])k(o,s,t);}return}case "ForStatement":{let r=e,s=oe(n);k(r.init,s,t),k(r.test,s,t),k(r.update,s,t),k(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;k(r.right,n,t);let s=oe(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)X(o.id,s,t,"local",false,true);else k(a,s,t);k(r.body,s,t);return}case "VariableDeclaration":Jn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Ve(n,t,s.name,s,"import",xn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Jn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Ve(n,t,a.name,a,"local",true),dn(s,n,t);}else k(s,n,t);}else for(let s of r.specifiers)Ge(n,s.local.name);return}case "TSAsExpression":k(e.expression,n,t);return;case "TSTypeAliasDeclaration":Ee(e.typeAnnotation,n);return;case "JsonExpression":mn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;Xn(r.name,n);for(let s of r.attributes??[])k(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":k(e.value,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)k(i,n,t);else k(o,n,t);}return}}}function Xn(e,n,t){e&&(e.type==="JSXIdentifier"?Ge(n,e.name):e.type==="JSXMemberExpression"&&Xn(e.object,n));}function mn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)mn(s,n,t);return}let r=e;if("#expr"in r){try{k(codec.fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))mn(r[s],n,t);}function fn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};k(e,oe(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(y.unusedName(s.node,s.name));return r}var ir=new Set(["const","import"]),Ae=e=>({binds:new Map,parent:e});function lr(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ie(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ie(n.argument):ie(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ie(n):[]);case "AssignmentPattern":return ie(e.left);case "RestElement":return ie(e.argument);default:return []}}var Ke=(e,n,t)=>{for(let r of ie(n))e.binds.set(r.name,t);};function yn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ie(e))yn(a,n,t);return}let r=e.name,s=lr(n,r);s&&ir.has(s)&&(t.invalid.add(e),t.out.push(y.assignToConst(e,r,s==="import"?"import":"const")));}function F(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;yn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{yn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ae(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ae(n);for(let a of r.params??[])Ke(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ae(n);Ke(s,r.param,"param"),F(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Ae(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ke(s,o.id,a.kind);else a&&F(a,s,t);F(r.right,n,t),F(r.test,s,t),F(r.update,s,t),F(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)F(s.init,n,t),Ke(n,s.id,r.kind);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.binds.set(s.name,"import");}return}case "ExportNamedDeclaration":{let r=e;r.declaration&&F(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":F(e.expression,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)F(i,n,t);else F(o,n,t);}return}}}function hn(e){let n={out:[],invalid:new WeakSet};return F(e,Ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var De=e=>({decls:new Map,parent:e});function cr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function he(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?he(n.argument):he(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?he(n):[]);case "AssignmentPattern":return he(e.left);case "RestElement":return he(e.argument);default:return []}}var qe=(e,n)=>{for(let t of he(n))e.decls.set(t.name,t);};function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=cr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;M(r.object,n,t),r.computed&&M(r.property,n,t);return}case "Property":{let r=e;r.computed&&M(r.key,n,t),M(r.value,n,t);return}case "Program":case "BlockStatement":{let r=De(n);for(let s of e.body??[])M(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=e.id;s&&n.decls.set(s.name,s);let a=De(n);for(let o of r.params??[])qe(a,o);M(r.body,a,t);return}case "CatchClause":{let r=e,s=De(n);qe(s,r.param),M(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=De(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)qe(s,o.id);else a&&M(a,s,t);M(r.right,n,t),M(r.test,s,t),M(r.update,s,t),M(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)qe(n,r.id),M(r.init,n,t);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.decls.set(s.name,s);}return}case "TSTypeAliasDeclaration":{let r=e.id;r&&n.decls.set(r.name,r);return}case "TSAsExpression":M(e.expression,n,t);return;default:{let r=core.VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)M(i,n,t);else M(o,n,t);}return}}}function pr(e){let n=new WeakMap;return M(e,De(void 0),n),n}var gn=e=>e.typeAnnotation,Sn=e=>e.returnType,L=e=>e.type==="Identifier"?e.name:null,Qn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?L(n.id):null}return L(e)},Hn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Re=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function Zn(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function bn(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=bn(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function _e(e){let n=e;if(n.regex||n.bigint)return typeCore.s.unknown;let t=n.value;return t===null?typeCore.s.null:t===void 0?typeCore.s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:typeCore.s.unknown}var le=e=>{let n=e.value;return n===null?typeCore.s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeCore.s.literal(n):_e(e)},Nn=e=>e.type==="ArrowFunctionExpression",et=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Oe=e=>et(e)?e.args[0]:e,Te=e=>et(e)?e:typeCore.s.promise(e);function Ce(e){return e.t==="tuple"?true:e.t==="array"?Ce(e.items):e.t==="union"?e.of.some(Ce):false}function ge(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ge(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ge(e.bound):false}var K=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=typeCore.expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function nt(e){let n=Sn(e);return n?{t:"fn",params:e.params.map((r,s)=>({name:L(r)??`arg${s}`,type:gn(r)??typeCore.s.unknown})),returns:e.async?Te(n):n}:null}var Q={then:{},else:{}},ut=new Set(["string","number","boolean","undefined","function","object"]),tt={string:typeCore.s.string,number:typeCore.s.number,boolean:typeCore.s.boolean,undefined:typeCore.s.undefined};function ct(e,n){switch(n){case "string":return e.t==="string"||e.t==="literal"&&typeof e.value=="string";case "number":return e.t==="number"||e.t==="literal"&&typeof e.value=="number";case "boolean":return e.t==="boolean"||e.t==="literal"&&typeof e.value=="boolean";case "undefined":return e.t==="undefined";case "function":return e.t==="fn"||e.t==="overload";case "object":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="null";default:return false}}var yr=typeCore.s.literal(true),hr=typeCore.s.literal(false),J=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[yr,hr]:[e];function rt(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function gr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=J(e).filter(s=>typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):n}function Sr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=J(e).filter(s=>!typeCore.subtype(s,n,t));return r.length?typeCore.normalizeUnion(r):null}function br(e,n){if(!ut.has(n))return null;if(e.t==="unknown"||e.t==="any")return tt[n]??e;let t=J(e).filter(r=>ct(r,n));return t.length?typeCore.normalizeUnion(t):tt[n]??e}function Nr(e,n){if(!ut.has(n)||e.t==="unknown"||e.t==="any")return null;let t=J(e).filter(r=>!ct(r,n));return t.length?typeCore.normalizeUnion(t):null}function st(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=le(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function at(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=le(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function ot(e,n,t,r,s){let a=J(e),o=l=>l.t==="object"?typeCore.ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return r?!!u&&typeCore.subtype(t,u,s):!(u&&typeCore.subtype(u,t,s))});return i.length&&i.length<a.length?typeCore.normalizeUnion(i):null}function it(e,n,t){let r=J(e),s=o=>o.t==="object"&&(n in o.props||!!o.index),a=r.filter(o=>t?s(o):!s(o));return a.length&&a.length<r.length?typeCore.normalizeUnion(a):null}function Br(e,n,t){return e.t==="unknown"||e.t==="any"||typeCore.subtype(n,e,t)?n:null}function kr(e,n,t){let r=J(e),s=r.filter(a=>!typeCore.equals(a,n,t));return s.length&&s.length<r.length?typeCore.normalizeUnion(s):null}var wr=e=>e.t==="null"||e.t==="undefined",pt=e=>wr(e)||e.t==="literal"&&!e.value,vr=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=J(e),t=n.filter(r=>!pt(r));return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},Er=e=>{let n=J(e),t=n.filter(pt);return t.length&&t.length<n.length?typeCore.normalizeUnion(t):null},lt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,q=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Ar=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function Me(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,h=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&h.type==="Identifier"){let g=h.name,N=R(n,g);if(!N)return Q;let C=String(m.value);return q(g,it(N,C,true),it(N,C,false))}return Q}if(!Ar(r.operator))return Q;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=rt(a,o)??rt(o,a);if(i){let m=R(n,i.name);if(!m)return Q;let h=br(m,i.tag),g=Nr(m,i.tag);return s?q(i.name,g,h):q(i.name,h,g)}let l=lt(a),u=lt(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let m=p.name,h=R(n,m);if(!h)return Q;let N=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??u],C=J(h),$=C.filter(T=>N.includes(T.t)),se=C.filter(T=>!N.includes(T.t)),de=$.length?typeCore.normalizeUnion($):null,E=se.length&&se.length<C.length?typeCore.normalizeUnion(se):null;return s?q(m,E,de):q(m,de,E)}let d=st(a,o)??st(o,a);if(d){let m=R(n,d.name);if(!m)return Q;let h=Br(m,d.lit,t),g=kr(m,d.lit,t);return s?q(d.name,g,h):q(d.name,h,g)}let f=at(a,o)??at(o,a);if(f){let m=R(n,f.name);if(!m)return Q;let h=ot(m,f.prop,f.lit,true,t),g=ot(m,f.prop,f.lit,false,t);return s?q(f.name,g,h):q(f.name,h,g)}return Q}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=Me(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Cr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=R(n,r);if(s)return q(r,vr(s),Er(s))}return Q}function Dr(e,n){if(e.t==="fn")return e.guard??null;if(e.t==="overload"){for(let t of e.signatures)if(t.guard&&t.params.length===n)return t.guard}return null}function Cr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=R(n,r.name);if(!s)return null;let a=Dr(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?q(i,gr(l,a.type,t),Sr(l,a.type,t)):null}var H=(e,n)=>Object.keys(n).length?U(e,n):e;function V(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>V(t));case "IfStatement":{let n=e;return !!n.alternate&&V(n.consequent)&&V(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&V(n.finalizer))return true;let t=!n.handler||V(n.handler.body);return V(n.block)&&t}default:return false}}var Wr=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function Jr(e){let n=[];return e.maxDepth!==void 0&&n.push(an(e.maxDepth)),e.maxNodes!==void 0&&n.push(on(e.maxNodes)),e.maxArgs!==void 0&&n.push(ln(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(tn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(rn(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(sn(e.memberDepth)),n}function xr(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>O("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function Nt(e,n,t={}){let r={...Wr(n.types),...n.schemes,...Xr(e)},s=hn(e),a={overlay:new WeakMap,sink:ae(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?capability.compileProfile(t.profile):void 0;o&&typeCore.configureTypeLimits(o.typeLimits);try{let i,l=Qr(e,a);try{i=S(e,l,a);}catch(d){if(d instanceof typeCore.TypeEvalLimitError)a.sink.report(O("too-deep",e,d.message));else if(d instanceof typeCore.UnionTooComplexError)a.sink.report(O("too-complex-union",e,d.message));else throw d;i=typeCore.s.unknown;}let u=[];o&&u.push(...Ue(o)),t.limits&&u.push(...Jr(t.limits)),t.resultType&&u.push(un(t.resultType,r));let p=[...a.sink.all,...s.diagnostics,...xr(e,r),...t.unused?fn(e,t.unused):[],...u.length?Ze(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&typeCore.resetTypeLimits();}}function Yr(e,n,t={}){let r=Nt(e,n,t),s={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let f=L(d.id),m=r.overlay.get(d);f&&m&&(s[f]=m.type,p.push(f));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,f=r.overlay.get(u);d&&f&&(s[d]=f.type,p.push(d));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=r.overlay.get(u.declaration);o=p?p.type:typeCore.s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)s[p]&&(l[u]={type:s[p]});o!==void 0&&(l.default={type:o});}else for(let u in s)l[u]={type:s[u]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Xr=e=>{let n={};return core.walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function Qr(e,n){let t=n.env.modules,r={};core.walk(e,{ImportDeclaration(s){let a=s;if(a.importKind==="type")return;let o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(y.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=typeCore.s.unknown;return}for(let l of a.specifiers){if(l.importKind==="type")continue;let u=l.local.name;if(re(u,l.local,n),u in r){n.sink.report(y.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){r[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",d=typeCore.discover(i,[p],n.schemes);d?r[u]=d.type:(n.sink.report(y.noSuchMember(l,i,p)),r[u]=typeCore.s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?U(n.env.scope,r):n.env.scope}var b=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case kt:return e.schema;case "JSXElement":case "JSXFragment":return b(t,e,S(core.desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return b(t,e,_e(e),n);case "Placeholder":return b(t,e,typeCore.s.any,n);case "Identifier":{let s=e.name,a=R(n,s);return a===void 0?s==="undefined"?b(t,e,typeCore.s.undefined,n):(t.sink.report(y.unknownName(e,s)),b(t,e,typeCore.s.unknown,n)):b(t,e,a,n)}case "MemberExpression":return b(t,e,es(e,n,t),n);case "CallExpression":return b(t,e,os(e,n,t,r),n);case "ArrowFunctionExpression":return On(e,n,t);case "FunctionDeclaration":return t.sink.report(y.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),b(t,e,typeCore.s.unknown,n);case "FunctionExpression":return t.sink.report(y.unsupported(e,"anonymous function (use an arrow)")),b(t,e,typeCore.s.unknown,n);case "ThisExpression":return t.sink.report(y.unsupported(e,"'this'")),b(t,e,typeCore.s.unknown,n);case "BlockStatement":return b(t,e,Ot(e,n,t),n);case "ReturnStatement":{let s=e.argument;return b(t,e,s?S(s,n,t):typeCore.s.unknown,n)}case "IfStatement":return z(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return z(e,n,t),t.overlay.get(e)?.type??typeCore.s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=S(a,n,t);if(a.type==="MemberExpression"){let p=t.overlay.get(a.object)?.type,d=p&&typeCore.apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(y.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=S(s.right,n,t);return t.assignFlow.set(e,typeCore.widenLiteral(d)),b(t,e,d,n)}if(u&&i!==null){let d=S(s.right,n,t);return typeCore.subtype(d,u,t.schemes)||t.sink.report(y.notAssignable(s.right,d,u,t.schemes)),t.assignFlow.set(e,Tt(u,d,t.schemes)),b(t,e,d,n)}let p=x(s.right,o,n,t);return b(t,e,p,n)}return b(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s=e,a=S(s.argument,n,t);return Ie(a,t.schemes)||t.sink.report(y.arithmeticOperand(s.argument,"operand")),b(t,e,typeCore.s.number,n)}case "ExpressionStatement":return b(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return We(e,n,t),b(t,e,typeCore.s.unknown,n);case "TSTypeAliasDeclaration":{let s=e.id?.name,a=s?t.schemes[s]:void 0;return b(t,e,a?ps(a.body,n,t,e,a.params.length>0):typeCore.s.unknown,n)}case "BinaryExpression":return b(t,e,Ds(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=S(s.right,n,t);return b(t,e,Rs(s.operator,a,o),n)}case "UnaryExpression":return b(t,e,Ts(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=S(s.consequent,H(n,a.then),t),i=S(s.alternate,H(n,a.else),t);return b(t,e,typeCore.normalizeUnion([o,i]),n)}case "ObjectExpression":return b(t,e,Ps(e,n,t),n);case "ArrayExpression":return b(t,e,jt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=S(s,n,t);Ft(a,t.schemes)||t.sink.report(y.notTextConvertible(s,a));}return b(t,e,typeCore.s.string,n)}case "AwaitExpression":{let s=e.argument,a=s?S(s,n,t):typeCore.s.unknown;return b(t,e,Oe(a),n)}case "Program":{let s=ze(e.body,n,t,new Set(t.importNames)).scope;return b(t,e,typeCore.s.unknown,s)}case "JsonExpression":return b(t,e,En(e.body,n,t,e),n);case "ChainExpression":return b(t,e,typeCore.normalizeUnion([S(e.expression,n,t),typeCore.s.undefined]),n);case "TSAsExpression":{let s=e,a=S(s.expression,n,t),o=Be(s.typeAnnotation,n,t,e);return !typeCore.subtype(a,o,t.schemes)&&!typeCore.subtype(o,a,t.schemes)&&t.sink.report(y.castUnsound(e,a,o)),b(t,e,o,n)}default:return t.sink.report(y.unsupported(e,`'${e.type}'`)),b(t,e,typeCore.s.unknown,n)}}var Hr=new Set(["constructor","prototype","__proto__"]);function Zr(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function es(e,n,t){let r=S(e.object,n,t),s=Zr(e);if(s!==null&&Hr.has(s))return t.sink.report(y.forbiddenMember(e,s)),typeCore.s.unknown;if(e.computed){let i=S(e.property,n,t),l=typeCore.resolveTypeOp(typeCore.s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&dt(e,r,i.value,t),typeCore.s.unknown)}let a=e.property.name,o=typeCore.discover(r,[a],t.schemes);return o?o.type:(dt(e,r,a,t),typeCore.s.unknown)}function dt(e,n,t,r){let s=typeCore.isScheme(n,r.schemes)?typeCore.expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(y.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(y.notObject(e,n));}function ns(e,n,t,r){let s=e.arguments[0];if(!s){r.sink.report(y.missingArgument(e,"schema",typeCore.s.unknown));return}if(s.type!=="Identifier"){r.sink.report(y.asserterNeedsName(s,n));return}let a=s.name,o=R(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?y.typeAsValue(s,a):y.unknownName(s,a));return}if(!i||i.params.length>0){r.sink.report(y.notASchema(s,a));return}if(!(Bt(a,r)&&!ts(t,a)))return r.overlay.set(s,{type:i.body,scope:t}),i.body}function Bt(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&R(n.env.scope,e)!==void 0}function ts(e,n){for(let t=e;t;t=t.parent)if(Object.prototype.hasOwnProperty.call(t.vars,n))return t.parent===null;return false}function re(e,n,t){Bt(e,t)&&t.sink.report(y.shadowsSchema(n,e));}function Rn(e,n){let t=K(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function rs(e,n){let t=R(e.scope,n);if(!t)return;let r=Rn(t,e.schemes);return r?K(r,e.schemes):void 0}function ss(e,n,t,r){let s=Rn(S(n[0],t,r),r.schemes),a=n.length>1?S(n[1],t,r):typeCore.s.undefined;if(s){let o=typeCore.typeDiff(a,s,r.schemes);o.length&&r.sink.report(y.propsMismatch(n[1]??e,s,typeCore.formatTypeDiff(o)));}return b(r,e,typeCore.s.boolean,t)}var kt="TSLiteSyntheticArg",as=e=>({type:kt,schema:e});function wt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=K(S(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(as(l));else s={elem:Tn(i,o,t),node:a};}return {nodes:r,spread:s}}function os(e,n,t,r){let s=e.arguments,a=bn(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=Zn(s);if(f){let m=typeCore.discover(d,f,t.schemes);return m?m.type:(t.sink.report(y.noSuchMember(e,d,f.join("."))),typeCore.s.unknown)}return s.forEach(m=>S(m,n,t)),typeCore.s.unknown}}if(a&&t.env.asserters?.has(a)){let d=ns(e,a,n,t);s.length<2&&s.length>0&&t.sink.report(y.missingArgument(e,"value",typeCore.s.unknown));for(let f=1;f<s.length;f++)S(s[f],n,t);return d??typeCore.s.unknown}if(a&&t.env.matchers?.has(a))return ss(e,s,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s.forEach(d=>S(d,n,t)),typeCore.s.any;if(o.t==="overload")return ls(e,o,n,t,r);if(o.t!=="fn")return s.forEach(d=>S(d,n,t)),t.sink.report(y.notCallable(e,o)),typeCore.s.unknown;let i=wt(s,n,t),l=i.nodes.map(d=>vt(d,n,t)),u=At(e),p=!u||Dt(o,u.length);return p||t.sink.report(y.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),vn(e,o,i.nodes,l,n,t,i.spread,r,p?u:void 0)}function vt(e,n,t){if(Nn(e))return typeCore.s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=ae(),s=S(e,n,{...t,sink:r});return r.hasErrors()?typeCore.s.any:(r.all.forEach(a=>t.sink.report(a)),s)}function vn(e,n,t,r,s,a,o=null,i,l){let u=h=>{if(!i)return h;let g=typeCore.substitute(n.returns,h);if(g.t==="fn"&&i.t==="fn"){let N=h,C=Math.min(g.params.length,i.params.length);for(let $=0;$<C;$++)N=typeCore.unify(g.params[$].type,i.params[$].type,N)??N;return typeCore.unify(g.returns,i.returns,N)??N}return typeCore.unify(g,i,h)??h},p=l?ms(e,n,l,a):void 0,d=p??u(typeCore.instantiateLoose(n,r).bindings);t.forEach((h,g)=>{if(Nn(h)){let N=typeCore.widenType(typeCore.substitute(n.params[g]?.type??typeCore.s.any,d));r[g]=On(h,s,a,N);}else if(h.type==="CallExpression"&&r[g].t==="any")r[g]=S(h,s,a,typeCore.substitute(n.params[g]?.type??typeCore.s.unknown,d));else if(h.type==="Literal"){let N=n.params[g]?.type??typeCore.s.unknown,C=N.t==="var"?N.bound?typeCore.substitute(N.bound,d):N:typeCore.substitute(N,d);ge(C)&&(r[g]=b(a,h,le(h),s));}else if(h.type==="ArrayExpression"||h.type==="ObjectExpression"||h.type==="ConditionalExpression"){let N=n.params[g]?.type??typeCore.s.unknown,C=typeCore.substitute(N,d);if(h.type==="ArrayExpression"&&Ce(C)){r[g]=Mn(h,C,s,a);return}let $=N.t==="var"?N.bound?typeCore.substitute(N.bound,d):void 0:C;$&&Ms($,a.schemes)&&(r[g]=Is(h,$,s,a,N.t==="var")??r[g]);}});let f=p??u(typeCore.instantiateLoose(n,r).bindings);p||is(e,n,f,a),gs(e,n,r,f,a,t,o),t.forEach((h,g)=>{let N=n.params[g];h.type==="ObjectExpression"&&N&&!N.variadic&&Pn(h,typeCore.substitute(N.type,f),a);});let m=typeCore.substitute(n.returns,f);return typeCore.widenInferred(typeCore.groundVars(m.t==="union"?typeCore.normalizeUnion(m.of):m,a.schemes))}var mt=new WeakMap;function Et(e){let n=mt.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)j(s.type,t,r);return j(e.returns,t,r),mt.set(e,t),t}function j(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":j(e.items,n,t);return;case "union":for(let r of e.of)j(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)j(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)j(r.type,n,t);j(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)j(s.type,n,t);j(r.returns,n,t);}return;case "apply":for(let r of e.args)j(r,n,t);return;case "keyof":j(e.of,n,t);return;case "index":j(e.obj,n,t),j(e.key,n,t);return;case "mapped":j(e.over,n,t),j(e.body,n,t);return;default:return}}function is(e,n,t,r){let s=Et(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=typeCore.substitute(o,t);typeCore.subtype(i,l,r.schemes)||r.sink.report(y.constraintViolation(e,a,i,l));}}function ls(e,n,t,r,s){let a=wt(e.arguments,t,r),o=a.nodes,i=o.map(p=>vt(p,t,r)),l=At(e),u=l?n.signatures.filter(p=>Dt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(y.wrongTypeArgumentCount(e,p,l.length)),ft(e,n.signatures,a,o,i,t,r,s,void 0)}return ft(e,u,a,o,i,t,r,s,l)}function ft(e,n,t,r,s,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?fs(m,r.length):ys(m,r.length),d=u.signatures.filter(p);if(d.length>1&&s.some(m=>m.t==="any"))for(let m of d){let h=ae(),g=vn(e,m,r,s,a,{...o,sink:h},t.spread,i,l);if(!h.hasErrors())return h.all.forEach(N=>o.sink.report(N)),g}let f=u.signatures.find(m=>p(m)&&hs(m,s,o));if(!f){let m=u.signatures.filter(p);m.length===1?f=m[0]:u.signatures.length===1&&(f=u.signatures[0]);}return f?vn(e,f,r,s,a,o,t.spread,i,l):(o.sink.report(y.noMatchingOverload(e,u,s)),typeCore.s.unknown)}function us(e,n,t,r){let s=R(n,e[0]);if(s===void 0)return t.sink.report(y.unknownName(r,e[0])),typeCore.s.unknown;let a=e.slice(1),o=a.length?typeCore.discover(s,a,t.schemes)?.type:s;return o?o.t==="literal"?typeCore.s.literal(o.value):o:(t.sink.report(y.noSuchMember(r,s,a.join("."))),typeCore.s.unknown)}function Be(e,n,t,r){let s=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let f=s(d);return f!==d&&(u=true),f});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return us(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(cs(o.name,n,t,r),!(o.name in t.schemes)))return typeCore.s.any;let i=false,l={};for(let u of Object.keys(o)){let p=s(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return s(e)}function cs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Be(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function ps(e,n,t,r,s){let a={...t,sink:ae(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Be(e,n,a,r);return a.sink.hasErrors()?e:s?o:typeCore.groundVars(o,t.schemes)}var Fe=(e,n,t)=>{let r=gn(e);return r===void 0?r:Be(r,n,t,e)},ds=(e,n,t)=>{let r=Sn(e);return r===void 0?r:Be(r,n,t,e)},At=e=>{let n=e.typeArguments;return n?.length?n:void 0},Dt=(e,n)=>(e.typeParams?.length??0)===n;function ms(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Et(n)){let u=o[i];if(!u)continue;let p=typeCore.groundVars(typeCore.substitute(l,o),r.schemes);typeCore.subtype(u,p,r.schemes)||r.sink.report(y.constraintViolation(e,i,u,p));}return o}function fs(e,n){let t=0,r=false;for(let s of e.params)s.variadic?r=true:s.optional||t++;return n>=t&&(r||n<e.params.length)}function ys(e,n){let t=0;for(let r of e.params){if(r.variadic)return n>=t;r.optional||t++;}return n>=t&&n<=e.params.length}function hs(e,n,t){let{bindings:r}=typeCore.instantiateLoose(e,n);for(let s=0;s<e.params.length;s++){let a=e.params[s];if(a.variadic){let o=typeCore.substitute(a.type,r),i=o.t==="array"?o.items:typeCore.s.unknown;for(let l=s;l<n.length;l++)if(!typeCore.subtype(n[l],i,t.schemes))return false;return true}if(s>=n.length){if(!a.optional)return false;continue}if(!typeCore.subtype(n[s],typeCore.substitute(a.type,r),t.schemes))return false}return true}function gs(e,n,t,r,s,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic){let f=typeCore.substitute(p.type,r),m=f.t==="array"?f.items:typeCore.s.unknown;for(let h=u;h<t.length;h++)typeCore.subtype(t[h],m,s.schemes)||s.sink.report(y.notAssignable(i(h),t[h],m,s.schemes));break}let d=typeCore.substitute(p.type,r);if(u>=t.length){!p.optional&&!o&&s.sink.report(y.missingArgument(e,p.name,d));continue}typeCore.subtype(t[u],d,s.schemes)||s.sink.report(y.notAssignable(i(u),t[u],d,s.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){s.sink.report(y.spreadArgument(o.node));return}if(l){let d=typeCore.substitute(l.type,r),f=d.t==="array"?d.items:typeCore.s.unknown;typeCore.subtype(o.elem,f,s.schemes)||s.sink.report(y.notAssignable(o.node,o.elem,f,s.schemes));}return}!l&&t.length>n.params.length&&s.sink.report(y.excessArgument(i(n.params.length),n.params.length,t.length));}function Ct(e,n,t){if(e.t==="object"){let r=typeCore.ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>Ct(typeCore.apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:typeCore.resolveTypeOp({t:"intersection",of:r})}}function x(e,n,t,r,s=false){let a=typeCore.apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=typeCore.resolveConditional(a,r.schemes)??a),e.type){case "Literal":{let i=le(e);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,s?ge(n)?i:typeCore.widen(_e(e)):n,t)}case "ArrayExpression":{if(Ce(a)){let i=Mn(e,a,t,r);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,i,t)}if(a.t==="array"){let i=[];for(let u of e.elements){if(!u)continue;let p=u;if(p.type==="SpreadElement"){let d=x(p.argument,n,t,r,s);d.t==="array"&&i.push(d.items);}else i.push(x(p,a.items,t,r,s));}let l=s&&i.length>0?typeCore.s.array(typeCore.normalizeUnion(i)):n;return b(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let p of e.properties){let d=p;if(d.type==="SpreadElement"){S(d.argument,t,r);continue}let f=d,m=Re(f),h=m!==null?Ct(a,m,r.schemes):void 0,g=h?x(f.value,h,t,r,s):typeCore.widen(S(f.value,t,r));m!==null&&(i[m]={type:h??g},l[m]={type:g}),b(r,d,g,t);}let u={t:"object",props:i};return typeCore.subtype(u,n,r.schemes)||r.sink.report(y.notAssignable(e,u,n,r.schemes)),b(r,e,s?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=On(e,t,r,a);return typeCore.subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let l=x(i.consequent,n,t,r,s),u=x(i.alternate,n,t,r,s);return b(r,e,s?typeCore.normalizeUnion([l,u]):n,t)}case "Placeholder":return b(r,e,n,t)}let o=S(e,t,r);return typeCore.subtype(o,n,r.schemes)||r.sink.report(y.notAssignable(e,o,n,r.schemes)),b(r,e,o,t)}function On(e,n,t,r){let s=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=E=>a?.length?{...E,typeParams:a}:E,i={},l=new Map,u=e.params.map((E,T)=>{let P=E,xe=s?.params[T]?.type;if(P.type==="RestElement"){let ne=P.argument,G=Fe(ne,n,t)??(s?.params[T]?.variadic?xe:void 0)??typeCore.s.array(typeCore.s.unknown),W=L(ne);return W?(re(W,ne,t),i[W]=G):Z(ne,G,i,n,t),t.overlay.set(ne,{type:G,scope:n}),t.overlay.set(P,{type:G,scope:n}),{name:W??`arg${T}`,type:G,variadic:true}}if(P.type==="AssignmentPattern"){let ne=P.left,Ye=Fe(ne,n,t)??xe;Z(P,Ye??typeCore.s.unknown,i,n,t);let G=L(ne),W=G?i[G]:void 0,Xe=Ye??W??typeCore.s.unknown,Un=Xe.t==="unknown"?Xe:typeCore.normalizeUnion([Xe,typeCore.s.undefined]);return G&&W&&(W.t==="union"||W.t==="boolean")&&l.set(G,W),t.overlay.set(P,{type:Un,scope:n}),{name:G??`arg${T}`,type:Un,optional:true}}let me=L(P),jn=Fe(P,n,t),ke=jn??xe??typeCore.s.unknown,$n=P.type==="Identifier"&&(!!P.optional||jn===void 0&&!!s?.params[T]?.optional),fe=$n&&ke.t!=="unknown"?typeCore.normalizeUnion([ke,typeCore.s.undefined]):ke;return me?(re(me,P,t),i[me]=fe,(fe.t==="union"||fe.t==="boolean")&&l.set(me,fe)):P.type!=="Identifier"&&Z(P,ke,i,n,t),t.overlay.set(P,{type:fe,scope:n}),$n?{name:me??`arg${T}`,type:fe,optional:true}:{name:me??`arg${T}`,type:ke}}),p=false;u.forEach((E,T)=>{E.optional?p=true:!E.variadic&&p&&t.sink.report(y.requiredAfterOptional(e.params[T]));});let d=U(n,i),f=e.body,m=ds(e,n,t),h=e.returnGuard,g=h?{param:h.param,type:Be(h.type,n,t,e)}:void 0;if(g){let E=u[g.param];E&&!typeCore.subtype(g.type,E.type,t.schemes)&&t.sink.report(y.notAssignable(e,g.type,E.type,t.schemes));}let N=E=>g?{...E,guard:g}:E;if(f.type!=="BlockStatement"&&m){let E=e.async?Oe(m):m;x(f,E,d,t);let T=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:T})),n)}let C=m??s?.returns,$=C&&e.async?Oe(C):C,se=f.type==="BlockStatement"?b(t,f,Ot(f,d,t,new Set(Object.keys(i)),l,$),d):S(f,d,t),de=e.async?Te(se):se;if(m){let E=e.async?Oe(m):m,T=e.async?se:de;typeCore.subtype(T,E,t.schemes)||t.sink.report(y.notAssignable(f,de,m,t.schemes));let P=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:P})),n)}return b(t,e,o({t:"fn",params:u,returns:typeCore.widenType(de)}),n)}function be(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?be(n.argument):be(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?be(n.argument):be(n):[]);case "AssignmentPattern":return be(e.left);default:return []}}function Rt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>be(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Rt(e.declaration):[]}function Ot(e,n,t,r=new Set,s,a){let{returns:o}=ze(e.body,n,t,r,s,a),i=!V(e);return o.length===0?i?typeCore.s.void:typeCore.s.union([]):typeCore.normalizeUnion(i?[...o,typeCore.s.undefined]:o)}var Ss=[typeCore.s.literal(true),typeCore.s.literal(false)];function bs(e){return e.t==="union"?e.of:e.t==="boolean"?Ss:[e]}function Tt(e,n,t){let r=bs(e);if(r.length<=1)return e;let s=r.filter(o=>typeCore.subtype(n,o,t));if(s.length===0)return e;let a=typeCore.normalizeUnion(s);return typeCore.subtype(n,a,t)?a:e}function Pt(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let r=t,s=r.left;if(r.operator!=="="||s.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:s.name,type:a}:null}function ce(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=ce(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=Pt(e,t);if(!r)return {types:n,exits:false};let s=new Map(n);return s.set(r.name,r.type),{types:s,exits:false}}case "IfStatement":{let r=Mt(e,n,t);if(r.size===0)return {types:n,exits:V(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:V(e)}}case "TryStatement":{let r=e,s=[],a=ce(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=ce(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Ns(n,s);return r.finalizer&&(o=ce(r.finalizer,o,t).types),{types:o,exits:V(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function Mt(e,n,t){let r=ce(e.consequent,n,t),s=e.alternate?ce(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,typeCore.normalizeUnion(l));}return o}function It(e,n){let t=new Map,r=s=>{let a=R(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function Ns(e,n){let t=new Map(e);if(n.length===0)return t;for(let r of e.keys()){let s=n.map(a=>a.get(r)??e.get(r));t.set(r,typeCore.normalizeUnion(s));}return t}function Bs(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=It(n,t),s=ce(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return H(n,a)}function ze(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!ks(e))return yt(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,u]of s)t.declaredMut.set(l,u);try{return yt(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,u]of i)t.declaredMut.set(l,u);}}function ks(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let r=t.declaration;if(r?.type==="VariableDeclaration"&&r.kind!=="const")return true}}return false}function yt(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let u of Rt(l))r.has(u.name)?t.sink.report(y.cannotRedeclare(u,u.name)):r.add(u.name);if(l.type==="VariableDeclaration")a=We(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration?.type==="VariableDeclaration")a=We(u.declaration,a,t);else if(u.declaration?.type==="FunctionDeclaration"){let p=S(u.declaration,a,t),d=L(u.declaration.id);d&&(a=U(a,{[d]:p}));}else for(let p of u.specifiers)R(a,p.local.name)===void 0&&t.sink.report(y.unknownName(p.local,p.local.name));}else if(l.type==="ExportDefaultDeclaration")S(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let u=S(l,a,t),p=L(l.id);p&&(a=U(a,{[p]:u}));}else if(l.type==="IfStatement"){let u=l,p=t.evolving.size||t.declaredMut.size?It(a,t):null;if(o.push(...z(l,a,t,s)),p&&p.size){let d=Mt(u,p,t);d.size&&(a=H(a,Object.fromEntries(d)));}!u.alternate&&V(u.consequent)&&(a=H(a,Me(u.test,a,t.schemes).else));}else {o.push(...z(l,a,t,s));let u=Pt(l,t);u?a=H(a,{[u.name]:u.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=Bs(l,a,t));}}return {scope:a,returns:o}}function z(e,n,t,r){switch(e.type){case "ReturnStatement":{let s=e.argument,a=s?r?(x(s,r,n,t),r):S(s,n,t):typeCore.s.unknown;return b(t,e,a,n),[a]}case "IfStatement":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=z(s.consequent,H(n,a.then),t,r);return s.alternate&&o.push(...z(s.alternate,H(n,a.else),t,r)),b(t,e,typeCore.s.unknown,n),o}case "BlockStatement":{let{returns:s}=ze(e.body,n,t,void 0,void 0,r);return b(t,e,s.length?typeCore.normalizeUnion(s):typeCore.s.void,n),s}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s=e,a=n;s.init&&(s.init.type==="VariableDeclaration"?a=We(s.init,a,t):S(s.init,a,t)),s.test&&S(s.test,a,t),s.update&&S(s.update,a,t);let o=z(s.body,a,t,r);return b(t,e,typeCore.s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s=e,a=S(s.right,n,t),o=e.type==="ForOfStatement"?Tn(a,s.right,t):typeCore.s.string,i=Qn(s.left);i&&re(i,Hn(s.left),t);let l=i?U(n,{[i]:o}):n,u=z(s.body,l,t,r);return b(t,e,typeCore.s.unknown,n),u}case "BreakStatement":case "ContinueStatement":return b(t,e,typeCore.s.unknown,n),[];case "ThrowStatement":{let s=e.argument;return s&&S(s,n,t),b(t,e,typeCore.s.unknown,n),[]}case "TryStatement":{let s=e,a=z(s.block,n,t,r);if(s.handler){let o=s.handler.param,i=o?L(o):null;i&&o&&re(i,o,t);let l=i?U(n,{[i]:typeCore.s.unknown}):n;a.push(...z(s.handler.body,l,t,r));}return s.finalizer&&a.push(...z(s.finalizer,n,t,r)),b(t,e,typeCore.s.unknown,n),a}case "SwitchStatement":{let s=e;S(s.discriminant,n,t);let a=n,o=[];for(let i of s.cases){i.test&&S(i.test,a,t);let l=ze(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return b(t,e,typeCore.s.unknown,n),o}default:return S(e,n,t),[]}}function ws(e,n,t){let r=typeCore.discover(e,[n],t.schemes);return r?r.type:typeCore.s.unknown}function Tn(e,n,t){let r=K(e,t.schemes);switch(r.t){case "array":return r.items;case "tuple":return r.elements.length?typeCore.normalizeUnion([...r.elements]):typeCore.s.unknown;case "string":return typeCore.s.string;case "literal":if(typeof r.value=="string")return typeCore.s.string;break;case "unknown":case "any":return typeCore.s.unknown;case "union":return typeCore.normalizeUnion(r.of.map(s=>Tn(s,n,t)));}return t.sink.report(y.notIterable(n,e)),typeCore.s.any}function vs(e,n){let t=typeCore.resolveTypeOp(typeCore.s.index(e,typeCore.s.literal(n)));return t.t==="index"?typeCore.s.unknown:t}function Es(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return typeCore.s.object(t,e.index)}function As(e,n){return e.t==="tuple"?typeCore.s.tuple(e.elements.slice(n)):e.t==="array"?e:typeCore.s.array(typeCore.s.unknown)}function Z(e,n,t,r,s){switch(e.type){case "Identifier":{let a=Fe(e,r,s)??n;re(e.name,e,s),t[e.name]=a,s.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=S(a.right,r,s);n.t!=="unknown"&&!typeCore.subtype(o,n,s.schemes)&&s.sink.report(y.notAssignable(a.right,o,n,s.schemes));let i=typeCore.widenType(o),{type:l}=typeCore.withoutUndefined(n),u=l.t==="unknown"?i:typeCore.normalizeUnion([l,i]),p=a.left;if(p.type==="Identifier"){let d=p.name;re(d,p,s),t[d]=u,s.overlay.set(p,{type:u,scope:r});}else Z(p,u,t,r,s);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Z(o.argument,Es(n,a),t,r,s);continue}let i=o,l=Re(i);l!=null&&a.push(l);let u=l!=null?ws(n,l,s):typeCore.s.unknown;Z(i.value,u,t,r,s);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Z(i.argument,As(n,o),t,r,s):Z(i,vs(n,o),t,r,s);});return}}}function Pn(e,n,t){let r=K(n,t.schemes),a=(r.t==="union"?r.of.map(o=>K(o,t.schemes)):[r]).filter(o=>o.t==="object"&&(!o.index||o.index.key==="number"));if(a.length&&!a.some(o=>Object.keys(o.props).length===0&&!o.index))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=Re(i);if(l===null)continue;let u=a.filter(p=>l in p.props||p.index?.key==="number"&&typeCore.isNumericLiteralName(l));if(!u.length){t.sink.report(y.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&Pn(i.value,u[0].props[l].type,t);}}function We(e,n,t){let r={};for(let s of e.declarations){let a=s.id,o=L(a);o&&re(o,a,t);let i=Fe(a,n,t);if(!s.init){if(o&&e.kind!=="const"){i?(r[o]=i,ht(o,i,t)):(r[o]=typeCore.s.undefined,t.evolving.add(o));continue}t.sink.report(y.constNeedsInit(s)),o&&(r[o]=i??typeCore.s.unknown);continue}let l=i??(s.init.type==="ArrowFunctionExpression"?nt(s.init):null),u=o&&l?U(n,{[o]:l}):n,p,d=null;i?(x(s.init,i,u,t),s.init.type==="ObjectExpression"&&Pn(s.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&s.init.type==="Literal"&&(p=Tt(i,le(s.init),t.schemes))):(p=S(s.init,u,t),e.kind!=="const"&&(p=typeCore.widenLiteral(p)),d=p),b(t,s,p,n),o?(r[o]=p,e.kind!=="const"&&d&&ht(o,d,t)):Z(a,p,r,n,t);}return b(t,e,typeCore.s.unknown,n),U(n,r)}function ht(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Ds(e,n,t){let r=S(e.left,n,t),s=S(e.right,n,t),a=e.operator,o=we.get(a);if(!o)return typeCore.s.boolean;if(o.category==="additive"){if(pe(r)||pe(s))return ue(r,t.schemes)||ue(s,t.schemes)?typeCore.s.string:typeCore.s.number;if(ue(r,t.schemes)&&ue(s,t.schemes))return typeCore.s.string;if(Ie(r,t.schemes)&&Ie(s,t.schemes))return typeCore.s.number;if(ue(r,t.schemes)||ue(s,t.schemes)){let l=ue(r,t.schemes)?s:r;return t.sink.report(y.implicitCoercion(e,r,s,Ft(l,t.schemes))),typeCore.s.string}return t.sink.report(y.operatorNotApplicable(e,"+",r,s)),typeCore.s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ie(r,t.schemes)||t.sink.report(y.arithmeticOperand(e.left,"left")),Ie(s,t.schemes)||t.sink.report(y.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!pe(r)&&!pe(s)){let i=typeCore.apparentType(r,t.schemes),l=typeCore.apparentType(s,t.schemes),u=typeCore.subtype(i,typeCore.s.number,t.schemes),p=typeCore.subtype(l,typeCore.s.number,t.schemes);u&&p||!u&&!p&&(typeCore.subtype(i,l,t.schemes)||typeCore.subtype(l,i,t.schemes))||t.sink.report(y.operatorNotApplicable(e,a,r,s));}return pn(o.result)}var pe=e=>e.t==="any"||e.t==="unknown",Ie=(e,n)=>pe(e)||typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.number,n),ue=(e,n)=>!pe(e)&&typeCore.subtype(typeCore.apparentType(e,n),typeCore.s.string,n),Cs=typeCore.s.union([typeCore.s.string,typeCore.s.number,typeCore.s.boolean,typeCore.s.null,typeCore.s.undefined]),Ft=(e,n)=>pe(e)||typeCore.subtype(typeCore.apparentType(e,n),Cs,n),gt={string:typeCore.s.literal(""),number:typeCore.s.literal(0),boolean:typeCore.s.literal(false)},kn=e=>e.t==="null"||e.t==="undefined";function Rs(e,n,t){if(n.t==="any"||n.t==="unknown")return typeCore.normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[typeCore.s.literal(true),typeCore.s.literal(false)]:[n];if(e==="??")return typeCore.normalizeUnion([...r.filter(a=>!kn(a)),t]);if(e==="||")return typeCore.normalizeUnion([...r.filter(a=>!kn(a)&&!(a.t==="literal"&&!a.value)),t]);let s=r.flatMap(a=>kn(a)?[a]:a.t==="literal"?a.value?[]:[a]:gt[a.t]?[gt[a.t]]:[]);return typeCore.normalizeUnion([...s,t])}var Os=typeCore.s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>typeCore.s.literal(e)));function Ts(e,n,t){let r=S(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:typeCore.s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:typeCore.s.number;case "+":case "~":return typeCore.s.number;case "typeof":return Os;case "delete":return typeCore.s.boolean;case "void":return typeCore.s.undefined;default:return typeCore.s.unknown}}function Ps(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=K(S(p.argument,n,t),t.schemes);if(g.t==="object"){for(let N in g.props)r[N]=g.props[N];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let d=p,f=S(d.value,n,t),m=typeCore.widen(f);if(b(t,p,f,n),d.computed){let g=K(S(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let h=Re(d);h!==null&&(r[h]={type:m},a.push(m),/^\d+$/.test(h)&&o.push(m));}return i?s={key:"string",type:typeCore.normalizeUnion(a)}:l&&(s={key:"number",type:typeCore.normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function jt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=K(S(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(typeCore.widen(S(a,n,t)));}return typeCore.s.array(r.length?typeCore.normalizeUnion(r):typeCore.s.unknown)}function Mn(e,n,t,r){let s=K(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?Mn(l,u,t,r):ge(u)?S(l,t,r):typeCore.widen(S(l,t,r));if(s.t==="tuple"&&o){let l=s.elements.length,u=typeCore.restIndex(s),p=u<0?0:l-u-1,d=m=>{if(u<0||m<u)return s.elements[m];let h=a.length-m;return h<=p?s.elements[l-h]:s.elements[u]},f=a.map((m,h)=>{let g=d(h);return g?i(m,g):typeCore.widen(S(m,t,r))});return b(r,e,{t:"tuple",elements:f},t)}if(s.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){S(p.argument,t,r);continue}l.push(i(p,s.items));}return b(r,e,typeCore.s.array(l.length?typeCore.normalizeUnion(l):typeCore.s.unknown),t)}return jt(e,t,r)}function En(e,n,t,r){if(e===null)return typeCore.s.null;switch(typeof e){case "string":return typeCore.s.string;case "number":return typeCore.s.number;case "boolean":return typeCore.s.boolean;case "object":break;default:return typeCore.s.unknown}if(Array.isArray(e)){let o=e.map(i=>En(i,n,t,r));return typeCore.s.array(o.length?typeCore.normalizeUnion(o):typeCore.s.unknown)}let s=e;if("#expr"in s){let o;try{o=codec.fromJson(s);}catch{return t.sink.report(y.unsupported(r,`'#expr: ${String(s["#expr"])}'`)),typeCore.s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s))a[o]={type:En(s[o],n,t,r)};return {t:"object",props:a}}function Ms(e,n){let t=typeCore.apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function Is(e,n,t,r,s){let a=ae(),o=x(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(u=>u.node===l.node&&u.code===l.code&&u.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var Fs=(e,n)=>({...e,typeAnnotation:n}),js=(e,n)=>({...e,returnType:n}),$s=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Fn(e,n){return e.get(n)?.type}function Us(e,n){return e.get(n)?.scope}function Ls(e,n){let t=e.get(n)?.type;return t?typeCore.discover(t,[])?.completions??[]:[]}function Vs(e,n){let t=e.get(n)?.scope;return t?[...Qe(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Gs=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Ks(e){if(!e||e.computed)return;let n=e.key;if(n?.type==="Identifier")return n.name;if(n?.type==="Literal"&&typeof n.value=="string")return n.value}function Je(e,n,t,r={}){let s=e[n],a=e[n+1];if(!(!s||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===s?a.returnType:void 0;case "VariableDeclarator":return a.init===s?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(Gs)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s);if(o<0)return;let i=Fn(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==s||e[n+2]?.type!=="ObjectExpression")return;let i=Je(e,n+2,t,r),l=Ks(a);return !i||!l?void 0:typeCore.discover(i,[l],r)?.type}case "ArrayExpression":{let o=Je(e,n+1,t,r);return o?typeCore.discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=we.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return typeCore.s.number;let i=a.left===s?a.right:a.left,l=Fn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Je(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?typeCore.s.number:void 0}default:return}}function qs(e,n){return e.filter(t=>t.node===n)}exports.BINARY_OP=we;exports.BINARY_OPS=cn;exports.FUNCTION_KINDS=Kn;exports.LOGICAL_OPS=nr;exports.UNARY_OPS=Wn;exports.annotate=Fs;exports.annotateReturn=js;exports.asExpression=$s;exports.binaryOpsProducing=tr;exports.calleeAllowlist=nn;exports.capabilityNodes=en;exports.check=Nt;exports.childScope=U;exports.collectBindings=pr;exports.collectMutations=hn;exports.collectUnused=fn;exports.componentProps=rs;exports.componentPropsOf=Rn;exports.contextualTypeAt=Je;exports.createEnv=Kt;exports.createSink=ae;exports.diag=y;exports.diagnosticsAt=qs;exports.extractModuleType=Yr;exports.fromCapability=Zt;exports.guard=Ze;exports.guardsFromCompiled=Ue;exports.lookup=R;exports.makeDiagnostic=O;exports.maxArgs=ln;exports.maxCallNesting=rn;exports.maxDepth=an;exports.maxFunctionNesting=tn;exports.maxNestingOf=$e;exports.maxNodes=on;exports.memberCompletions=Ls;exports.memberDepth=sn;exports.opResultSchema=pn;exports.resolveNamed=qt;exports.resolveScheme=_t;exports.resultType=un;exports.rootScope=Ln;exports.scopeAt=Us;exports.scopeCompletions=Vs;exports.typeAt=Fn;exports.unaryOpsProducing=rr;exports.visibleNames=Qe;Object.keys(typeCore).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return typeCore[k]}})});
1
+ 'use strict';var typeCore=require('@tslite/type-core'),core=require('@tslite/core'),capability=require('@tslite/capability'),codec=require('@tslite/codec'),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
- * Cria um `Env` a partir das variáveis injetadas, dos tipos nomeados, dos type
74
- * schemes e dos acessores. Capability é separada (passe um `profile` ao `check`).
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
- declare const createEnv: (vars?: Record<string, Schema>, types?: Record<string, Schema>, schemes?: Record<string, TypeScheme>, accessors?: Record<string, Schema>, asserters?: ReadonlySet<string>, matchers?: ReadonlySet<string>, modules?: Record<string, Schema>) => Env;
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" | "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
@@ -200,11 +230,21 @@ declare const diag: {
200
230
  */
201
231
  readonlyWrite: (node: BaseNode, target: Schema) => Diagnostic;
202
232
  /**
203
- * Cast (`x as T`) entre tipos que não se sobrepõem em nenhum sentido. Warning
204
- * (não erro): o cast é um escape-hatch explícito — `unknown`/`any` passam
205
- * silenciosos; só o cast "torto" (ex.: `number as string`) avisa.
233
+ * Cast (`x as T`) entre tipos que não se sobrepõem na régua do tsc (`castOverlaps`:
234
+ * literal da origem alargado + comparabilidade). Erro, como o TS2352 — o texto é o
235
+ * dele. Se o cast pode estreitar é outra pergunta, de política: o
236
+ * `narrowing-cast-not-allowed` do `strict`.
206
237
  */
207
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;
208
248
  /**
209
249
  * Operando de operação aritmética (`*` `-` `/` `%` `**`, bitwise) ou de `++`/`--`
210
250
  * que não é numérico. Espelha TS2362 (esquerdo) / TS2363 (direito) / TS2356 (`++`/`--`).
@@ -380,9 +420,11 @@ declare function componentPropsOf(componentType: Schema, schemes: Schemes): Sche
380
420
  */
381
421
  declare function componentProps(env: Env, name: string): Schema | undefined;
382
422
 
383
- /** Contexto opcional de um guard (o overlay de tipos, p/ regras type-aware). */
423
+ /** Contexto opcional de um guard — o que as regras type-aware leem do `check`. */
384
424
  interface GuardContext {
385
425
  readonly overlay?: TypeOverlay;
426
+ /** Os tipos nomeados do programa: sem eles, uma relação sobre `apply` não expande. */
427
+ readonly schemes?: Schemes;
386
428
  }
387
429
  /** Um guard: percorre `root` e devolve os diagnósticos que encontrar. */
388
430
  type Guard = (root: BaseNode, ctx: GuardContext) => Diagnostic[];
@@ -560,4 +602,78 @@ declare function contextualTypeAt(ancestors: readonly BaseNode[], i: number, ove
560
602
  /** Os diagnósticos que apontam para `node`. */
561
603
  declare function diagnosticsAt(diagnostics: readonly Diagnostic[], node: BaseNode): readonly Diagnostic[];
562
604
 
563
- export { BINARY_OP, BINARY_OPS, type BinaryOpCategory, type BinaryOpSpec, type BindingMap, type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticData, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, LOGICAL_OPS, type LogicalOpSpec, type MissingProperty, type OpResult, type Profile, type Scope, type Severity, type TypeOverlay, UNARY_OPS, type UnaryOpSpec, type UnusedOptions, annotate, annotateReturn, asExpression, binaryOpsProducing, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, componentProps, componentPropsOf, contextualTypeAt, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, opResultSchema, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, unaryOpsProducing, visibleNames };
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
- * Cria um `Env` a partir das variáveis injetadas, dos tipos nomeados, dos type
74
- * schemes e dos acessores. Capability é separada (passe um `profile` ao `check`).
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
- declare const createEnv: (vars?: Record<string, Schema>, types?: Record<string, Schema>, schemes?: Record<string, TypeScheme>, accessors?: Record<string, Schema>, asserters?: ReadonlySet<string>, matchers?: ReadonlySet<string>, modules?: Record<string, Schema>) => Env;
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" | "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
@@ -200,11 +230,21 @@ declare const diag: {
200
230
  */
201
231
  readonlyWrite: (node: BaseNode, target: Schema) => Diagnostic;
202
232
  /**
203
- * Cast (`x as T`) entre tipos que não se sobrepõem em nenhum sentido. Warning
204
- * (não erro): o cast é um escape-hatch explícito — `unknown`/`any` passam
205
- * silenciosos; só o cast "torto" (ex.: `number as string`) avisa.
233
+ * Cast (`x as T`) entre tipos que não se sobrepõem na régua do tsc (`castOverlaps`:
234
+ * literal da origem alargado + comparabilidade). Erro, como o TS2352 — o texto é o
235
+ * dele. Se o cast pode estreitar é outra pergunta, de política: o
236
+ * `narrowing-cast-not-allowed` do `strict`.
206
237
  */
207
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;
208
248
  /**
209
249
  * Operando de operação aritmética (`*` `-` `/` `%` `**`, bitwise) ou de `++`/`--`
210
250
  * que não é numérico. Espelha TS2362 (esquerdo) / TS2363 (direito) / TS2356 (`++`/`--`).
@@ -380,9 +420,11 @@ declare function componentPropsOf(componentType: Schema, schemes: Schemes): Sche
380
420
  */
381
421
  declare function componentProps(env: Env, name: string): Schema | undefined;
382
422
 
383
- /** Contexto opcional de um guard (o overlay de tipos, p/ regras type-aware). */
423
+ /** Contexto opcional de um guard — o que as regras type-aware leem do `check`. */
384
424
  interface GuardContext {
385
425
  readonly overlay?: TypeOverlay;
426
+ /** Os tipos nomeados do programa: sem eles, uma relação sobre `apply` não expande. */
427
+ readonly schemes?: Schemes;
386
428
  }
387
429
  /** Um guard: percorre `root` e devolve os diagnósticos que encontrar. */
388
430
  type Guard = (root: BaseNode, ctx: GuardContext) => Diagnostic[];
@@ -560,4 +602,78 @@ declare function contextualTypeAt(ancestors: readonly BaseNode[], i: number, ove
560
602
  /** Os diagnósticos que apontam para `node`. */
561
603
  declare function diagnosticsAt(diagnostics: readonly Diagnostic[], node: BaseNode): readonly Diagnostic[];
562
604
 
563
- export { BINARY_OP, BINARY_OPS, type BinaryOpCategory, type BinaryOpSpec, type BindingMap, type CheckOptions, type CheckResult, type Diagnostic, type DiagnosticCode, type DiagnosticData, type DiagnosticKind, type DiagnosticSink, type Env, FUNCTION_KINDS, type Guard, type GuardContext, LOGICAL_OPS, type LogicalOpSpec, type MissingProperty, type OpResult, type Profile, type Scope, type Severity, type TypeOverlay, UNARY_OPS, type UnaryOpSpec, type UnusedOptions, annotate, annotateReturn, asExpression, binaryOpsProducing, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectUnused, componentProps, componentPropsOf, contextualTypeAt, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, opResultSchema, resolveNamed, resolveScheme, resultType, rootScope, scopeAt, scopeCompletions, typeAt, unaryOpsProducing, visibleNames };
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,unify,ownProp,equals,typeFeatures}from'@tslite/type-core';export*from'@tslite/type-core';import {rootScope,childScope,lookup,visibleNames,walk,desugarJSX,childrenOf,VisitorKeys}from'@tslite/core';import {compileProfile,nodeViolation,typeFeatureViolations}from'@tslite/capability';import {fromJson}from'@tslite/codec';var Ln=(e={})=>rootScope(e),U=(e,n)=>childScope(e,n),R=(e,n)=>lookup(e,n),Qe=e=>visibleNames(e),Kt=(e={},n={},t={},r={},s=new Set,a=new Set,o={})=>({scope:Ln(e),types:n,schemes:t,accessors:r,asserters:s,matchers:a,modules:o}),qt=(e,n)=>e.types[n],_t=(e,n)=>e.schemes[n];var Vn={"unknown-name":"semantic","const-needs-init":"semantic","cannot-redeclare":"semantic","unknown-module":"semantic","not-a-schema":"semantic","type-as-value":"semantic","asserter-needs-name":"semantic","shadows-schema":"semantic",unsupported:"semantic","forbidden-member":"semantic","unused-name":"semantic","assign-to-const":"semantic","readonly-write":"type","not-assignable":"type","not-callable":"type","no-such-member":"type","not-object":"type","missing-argument":"type","excess-argument":"type","excess-property":"type","spread-argument":"type","required-after-optional":"type","not-iterable":"type","props-mismatch":"type","no-matching-overload":"type","constraint-violation":"type","wrong-type-argument-count":"type","cast-unsound":"type","not-arithmetic-operand":"type","operator-not-applicable":"type","implicit-coercion":"type","too-deep":"type","too-complex-union":"type","node-not-allowed":"capability","name-not-allowed":"capability","type-feature-not-allowed":"capability","any-not-allowed":"capability","too-large":"capability","wrong-result-type":"capability"},B=(e,n,t)=>({code:e,kind:Vn[e],severity:"error",node:n,message:t}),O=(e,n,t,r="error")=>({code:e,kind:Vn[e],severity:r,node:n,message:t}),y={notAssignable:(e,n,t,r={})=>{let s=typeDiff(n,t,r),a=s.filter(u=>u.path.length>0),o=a.length?` ${formatTypeDiff(a)}.`:"",i=B("not-assignable",e,`Type '${format(n)}' is not assignable to type '${format(t)}'.${o}`),l=s.filter(u=>u.kind==="missing"&&u.path.length===1).map(u=>({name:u.path[0],type:u.expected}));return l.length?{...i,data:{kind:"missing-properties",properties:l}}:i},unknownName:(e,n)=>B("unknown-name",e,`Cannot find name '${n}'.`),notCallable:(e,n)=>B("not-callable",e,`Type '${format(n)}' is not callable.`),noSuchMember:(e,n,t)=>B("no-such-member",e,`Property '${t}' does not exist on type '${format(n)}'.`),notObject:(e,n)=>B("not-object",e,`Type '${format(n)}' has no members to access.`),constNeedsInit:e=>B("const-needs-init",e,"'const' declarations must be initialized."),missingArgument:(e,n,t)=>B("missing-argument",e,`Missing argument '${n}' of type '${format(t)}'.`),notASchema:(e,n)=>B("not-a-schema",e,`'${n}' refers to a value, but no type named '${n}' is declared. An asserter needs a schema that is both a value in scope and a declared type.`),typeAsValue:(e,n)=>B("type-as-value",e,`'${n}' only refers to a type, but is being used as a value here. Types are erased at runtime: register '${n}' as a value in scope for the asserter to prove it.`),asserterNeedsName:(e,n)=>B("asserter-needs-name",e,`The first argument of '${n}' must be the name of a schema, not a ${e.type}.`),shadowsSchema:(e,n)=>B("shadows-schema",e,`'${n}' shadows the schema of the same name: an asserter would type against the declared schema but prove against this value at runtime. Rename the binding.`),unknownModule:(e,n)=>B("unknown-module",e,`Cannot find module '${n}' or its corresponding type declarations.`),cannotRedeclare:(e,n)=>B("cannot-redeclare",e,`Cannot redeclare block-scoped variable '${n}'.`),excessArgument:(e,n,t)=>B("excess-argument",e,`Expected ${n} argument${n===1?"":"s"}, but got ${t}.`),excessProperty:(e,n,t)=>B("excess-property",e,`Object literal may only specify known properties, and '${n}' does not exist in type '${format(t)}'.`),spreadArgument:e=>B("spread-argument",e,"A spread argument must either have a tuple type or be passed to a rest parameter."),requiredAfterOptional:e=>B("required-after-optional",e,"A required parameter cannot follow an optional parameter."),notIterable:(e,n)=>B("not-iterable",e,`Type '${format(n)}' must have a '[Symbol.iterator]()' method that returns an iterator.`),propsMismatch:(e,n,t)=>B("props-mismatch",e,`Payload is not compatible with the component props '${format(n)}': ${t}.`),noMatchingOverload:(e,n,t)=>B("no-matching-overload",e,`No overload of '${format(n)}' matches the arguments (${t.map(r=>format(r)).join(", ")}).`),constraintViolation:(e,n,t,r)=>B("constraint-violation",e,`Type '${format(t)}' does not satisfy the constraint '${n} extends ${format(r)}'.`),unsupported:(e,n)=>B("unsupported",e,`${n} is not supported in this language.`),wrongTypeArgumentCount:(e,n,t)=>B("wrong-type-argument-count",e,`Expected ${n} type argument${n===1?"":"s"}, but got ${t}.`),forbiddenMember:(e,n)=>B("forbidden-member",e,`'${n}' is not a member of the language \u2014 the JS runtime substrate (identity/inheritance) is not vocabulary here (FP / portable IR). Use a factory/operator via DI.`),unusedName:(e,n)=>O("unused-name",e,`'${n}' is declared but its value is never read.`,"warning"),assignToConst:(e,n,t)=>B("assign-to-const",e,t==="import"?`Cannot assign to '${n}' because it is an import.`:`Cannot assign to '${n}' because it is a constant.`),readonlyWrite:(e,n)=>B("readonly-write",e,`Index signature in type '${format(n)}' only permits reading.`),castUnsound:(e,n,t)=>O("cast-unsound",e,`Conversion of type '${format(n)}' to type '${format(t)}' may be a mistake \u2014 neither sufficiently overlaps the other. Cast through 'unknown' first if intentional.`,"warning"),arithmeticOperand:(e,n)=>B("not-arithmetic-operand",e,n==="operand"?"An arithmetic operand must be of type 'any' or 'number'.":`The ${n==="left"?"left":"right"}-hand side of an arithmetic operation must be of type 'any' or 'number'.`),operatorNotApplicable:(e,n,t,r)=>B("operator-not-applicable",e,`Operator '${n}' cannot be applied to types '${format(t)}' and '${format(r)}'.`),implicitCoercion:(e,n,t,r)=>({...B("implicit-coercion",e,`Operator '+' does not convert to text: cannot mix '${format(n)}' and '${format(t)}'. `+(r?"Use a template literal or 'asString(\u2026)'.":"Use 'stringify(\u2026)' to serialize a structure.")),data:{kind:"implicit-coercion",textConvertible:r}}),notTextConvertible:(e,n)=>({...B("implicit-coercion",e,`Cannot convert '${format(n)}' to text: only string, number, boolean, null and undefined convert. Use 'stringify(\u2026)' to serialize a structure.`),data:{kind:"implicit-coercion",textConvertible:false}})};function ae(){let e=[];return {all:e,report(n){e.push(n);},hasErrors(){return e.some(n=>n.severity==="error")}}}function Ze(e,n,t={}){return n.flatMap(r=>r(e,t))}function ye(e,n){let t=r=>{n(r);for(let s of childrenOf(r))t(s);};t(e);}var Qt=e=>Array.isArray(e)?e:[e],Kn=["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"];function en(e,n="error"){return t=>{let r=[];return ye(t,s=>{let a=nodeViolation(s,e);a&&r.push(O("node-not-allowed",s,`'${a}' is not allowed by the capability profile.`,n));}),r}}function qn(e,n="error"){let t=e.typeTier;return r=>{if(t==="author")return [];let s=[];return ye(r,a=>{let o=a,i=o.type==="TSTypeAliasDeclaration"?o.id?.name:void 0;for(let l of [o.typeAnnotation,o.returnType]){if(!l)continue;let u=typeFeatureViolations(typeFeatures(l,i),t);u.length&&s.push(O("type-feature-not-allowed",a,`authoring type feature${u.length>1?"s":""} '${u.join("', '")}' requires capability tier 'author'.`,n));}}),s}}function D(e,n=new WeakSet){if(!e||typeof e!="object"||n.has(e))return false;switch(n.add(e),e.t){case "any":return true;case "object":return Object.values(e.props).some(t=>D(t.type,n))||!!e.index&&D(e.index.value,n);case "array":return D(e.items,n);case "tuple":return e.elements.some(t=>D(t,n));case "union":case "intersection":return e.of.some(t=>D(t,n));case "fn":return e.params.some(t=>D(t.type,n))||D(e.returns,n);case "overload":return e.signatures.some(t=>t.params.some(r=>D(r.type,n))||D(t.returns,n));case "keyof":return D(e.of,n);case "index":return D(e.obj,n)||D(e.key,n);case "mapped":return D(e.over,n)||D(e.body,n);case "conditional":return D(e.check,n)||D(e.extends,n)||D(e.then,n)||D(e.else,n);case "returnType":case "parameters":return D(e.fn,n);case "apply":return e.args.some(t=>D(t,n));default:return false}}function _n(e,n="error"){return t=>{if(!e.typeStrict)return [];let r=[];return ye(t,s=>{let a=s;for(let o of [a.typeAnnotation,a.returnType])if(o&&D(o)){r.push(O("any-not-allowed",s,"'any' is not allowed under 'strict' \u2014 use 'unknown' + validated narrowing (assert/parse).",n));break}}),r}}function nn(e,n="error"){let t=new Set(e);return r=>{let s=[];return ye(r,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o.type!=="Identifier")s.push(O("name-not-allowed",o,"Only direct calls to allowed functions are permitted.",n));else {let i=o.name;t.has(i)||s.push(O("name-not-allowed",o,`Function '${i}' is not allowed here.`,n));}}),s}}function $e(e,n,t={}){let r=new Set(Qt(e)),s=t.severity??"error",a=[...r].join("/");return o=>{let i=[],l=(u,p)=>{let d=r.has(u.type),f=d?p+1:p;d&&f>n&&i.push(O("too-deep",u,`Nesting of ${a} exceeds ${n}${t.hint?` \u2014 ${t.hint}`:""}.`,s));for(let m of childrenOf(u))l(m,f);};return l(o,0),i}}var tn=(e=3,n="error")=>$e(Kn,e,{hint:"use a pipe instead of nesting functions",severity:n}),rn=(e,n="error")=>$e("CallExpression",e,{hint:"use a pipe instead of nesting calls",severity:n}),sn=(e,n="error")=>$e("MemberExpression",e,{severity:n});function an(e,n="error"){return t=>{let r=[],s=(a,o)=>{if(o>e){r.push(O("too-deep",a,`Expression nesting exceeds ${e}.`,n));return}for(let i of childrenOf(a))s(i,o+1);};return s(t,0),r}}function on(e,n="error"){return t=>{let r=0;return ye(t,()=>{r++;}),r>e?[O("too-large",t,`Expression has ${r} nodes (max ${e}).`,n)]:[]}}function ln(e,n="error"){return t=>{let r=[];return ye(t,s=>{if(s.type==="CallExpression"){let a=s.arguments;a&&a.length>e&&r.push(O("too-large",s,`Call has ${a.length} arguments (max ${e}).`,n));}}),r}}function un(e,n={},t="error"){return (r,s)=>{let a=s.overlay?.get(r)?.type;return a?subtype(a,e,n)?[]:[O("wrong-result-type",r,`Result type '${format(a)}' is not assignable to the required '${format(e)}'.`,t)]:[]}}function Ue(e){let n=[en(e),qn(e),_n(e)];return e.hostAllow!=="*"&&n.push(nn([...e.hostAllow])),n}function Zt(e){return Ue(compileProfile(e))}var cn=[{op:"+",category:"additive",result:"additive"},{op:"-",category:"arithmetic",result:"number"},{op:"*",category:"arithmetic",result:"number"},{op:"/",category:"arithmetic",result:"number"},{op:"%",category:"arithmetic",result:"number"},{op:"**",category:"arithmetic",result:"number"},{op:"&",category:"bitwise",result:"number"},{op:"|",category:"bitwise",result:"number"},{op:"^",category:"bitwise",result:"number"},{op:"<<",category:"bitwise",result:"number"},{op:">>",category:"bitwise",result:"number"},{op:">>>",category:"bitwise",result:"number"},{op:"<",category:"relational",result:"boolean"},{op:">",category:"relational",result:"boolean"},{op:"<=",category:"relational",result:"boolean"},{op:">=",category:"relational",result:"boolean"},{op:"===",category:"equality",result:"boolean"},{op:"!==",category:"equality",result:"boolean"},{op:"==",category:"equality",result:"boolean"},{op:"!=",category:"equality",result:"boolean"}],we=new Map(cn.map(e=>[e.op,e])),zn={number:s.number,boolean:s.boolean,string:s.string},pn=e=>zn[e],Wn=[{op:"!",result:"boolean"},{op:"-",result:"number"},{op:"+",result:"number"},{op:"~",result:"number"},{op:"typeof",result:"string"},{op:"void",result:"undefined"},{op:"delete",result:"boolean"}],er={number:s.number,boolean:s.boolean,string:s.string,undefined:s.undefined},nr=[{op:"&&"},{op:"||"},{op:"??"}];function tr(e,n={}){return cn.filter(t=>t.result==="additive"?subtype(s.string,e,n)||subtype(s.number,e,n):subtype(zn[t.result],e,n))}function rr(e,n={}){return Wn.filter(t=>subtype(er[t.result],e,n))}var oe=e=>({bindings:new Map,parent:e}),xn=e=>e.charCodeAt(0)===95;function Ve(e,n,t,r,s,a){let o=e.bindings.get(t);o&&(o.exempt=true);let i={name:t,node:r,kind:s,exempt:a,used:false};e.bindings.set(t,i),n.all.push(i);}function Ee(e,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)Ee(r,n);return}let t=e;if(t.t==="typeQuery"&&Array.isArray(t.path)){let r=t.path[0];typeof r=="string"&&Ge(n,r);return}for(let r of Object.keys(t))Ee(t[r],n);}function Yn(e,n){let t=e;Ee(t.typeAnnotation,n),Ee(t.returnType,n);}function Ge(e,n){for(let t=e;t;t=t.parent){let r=t.bindings.get(n);if(r){r.used=true;return}}}function X(e,n,t,r,s,a){if(e)switch(e.type){case "Identifier":{let o=e.name;Yn(e,n),Ve(n,t,o,e,r,s||a&&xn(o));return}case "ObjectPattern":{let o=e.properties,i=o[o.length-1],l=!!i&&i.type==="RestElement";o.forEach((u,p)=>{let d=l&&p<o.length-1;if(u.type==="RestElement")X(u.argument,n,t,r,s,false);else {let f=u;f.computed&&k(f.key,n,t),X(f.value,n,t,r,s||d,!f.shorthand);}});return}case "ArrayPattern":{for(let o of e.elements){if(!o)continue;let i=o;X(i.type==="RestElement"?i.argument:i,n,t,r,s,true);}return}case "AssignmentPattern":X(e.left,n,t,r,s,a);return;case "RestElement":X(e.argument,n,t,r,s,true);return;default:return}}function ve(e,n,t){if(e)switch(e.type){case "AssignmentPattern":k(e.right,n,t),ve(e.left,n,t);return;case "ObjectPattern":for(let r of e.properties)ve(r.type==="RestElement"?r.argument:r.value,n,t);return;case "ArrayPattern":for(let r of e.elements)r&&ve(r,n,t);return;case "RestElement":ve(e.argument,n,t);return;default:return}}function Jn(e,n,t,r){for(let s of e.declarations)X(s.id,n,t,"local",r,false),k(s.init,n,t);}function dn(e,n,t){let r=e,s=oe(n),a=r.params??[];for(let o of a)X(o,s,t,"parameter",false,true);for(let o of a)ve(o,s,t);k(r.body,s,t);}function k(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(Yn(e,n),e.type){case "Identifier":Ge(n,e.name);return;case "MemberExpression":{let r=e;k(r.object,n,t),r.computed&&k(r.property,n,t);return}case "Property":{let r=e;r.computed&&k(r.key,n,t),k(r.value,n,t);return}case "Program":case "BlockStatement":{let r=oe(n);for(let s of e.body??[])k(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":dn(e,n,t);return;case "FunctionDeclaration":{let r=e.id;r&&Ve(n,t,r.name,r,"local",false),dn(e,n,t);return}case "CatchClause":{let r=e,s=oe(n);X(r.param,s,t,"local",true,false),k(r.body,s,t);return}case "SwitchStatement":{let r=e;k(r.discriminant,n,t);let s=oe(n);for(let a of r.cases){k(a.test,s,t);for(let o of a.consequent??[])k(o,s,t);}return}case "ForStatement":{let r=e,s=oe(n);k(r.init,s,t),k(r.test,s,t),k(r.update,s,t),k(r.body,s,t);return}case "ForOfStatement":case "ForInStatement":{let r=e;k(r.right,n,t);let s=oe(n),a=r.left;if(a.type==="VariableDeclaration")for(let o of a.declarations)X(o.id,s,t,"local",false,true);else k(a,s,t);k(r.body,s,t);return}case "VariableDeclaration":Jn(e,n,t,false);return;case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&Ve(n,t,s.name,s,"import",xn(s.name));}return}case "ExportNamedDeclaration":{let r=e;if(r.declaration){let s=r.declaration;if(s.type==="VariableDeclaration")Jn(s,n,t,true);else if(s.type==="FunctionDeclaration"){let a=s.id;a&&Ve(n,t,a.name,a,"local",true),dn(s,n,t);}else k(s,n,t);}else for(let s of r.specifiers)Ge(n,s.local.name);return}case "TSAsExpression":k(e.expression,n,t);return;case "TSTypeAliasDeclaration":Ee(e.typeAnnotation,n);return;case "JsonExpression":mn(e.body,n,t);return;case "JSXOpeningElement":{let r=e;Xn(r.name,n);for(let s of r.attributes??[])k(s,n,t);return}case "JSXClosingElement":return;case "JSXAttribute":k(e.value,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)k(i,n,t);else k(o,n,t);}return}}}function Xn(e,n,t){e&&(e.type==="JSXIdentifier"?Ge(n,e.name):e.type==="JSXMemberExpression"&&Xn(e.object,n));}function mn(e,n,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)mn(s,n,t);return}let r=e;if("#expr"in r){try{k(fromJson(r),n,t);}catch{}return}for(let s of Object.keys(r))mn(r[s],n,t);}function fn(e,n){if(!n.locals&&!n.parameters)return [];let t={all:[]};k(e,oe(void 0),t);let r=[];for(let s of t.all)s.used||s.exempt||(s.kind==="parameter"?n.parameters:n.locals)&&r.push(y.unusedName(s.node,s.name));return r}var ir=new Set(["const","import"]),Ae=e=>({binds:new Map,parent:e});function lr(e,n){for(let t=e;t;t=t.parent){let r=t.binds.get(n);if(r)return r}}function ie(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?ie(n.argument):ie(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?ie(n):[]);case "AssignmentPattern":return ie(e.left);case "RestElement":return ie(e.argument);default:return []}}var Ke=(e,n,t)=>{for(let r of ie(n))e.binds.set(r.name,t);};function yn(e,n,t){if(!e)return;if(e.type!=="Identifier"){for(let a of ie(e))yn(a,n,t);return}let r=e.name,s=lr(n,r);s&&ir.has(s)&&(t.invalid.add(e),t.out.push(y.assignToConst(e,r,s==="import"?"import":"const")));}function F(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "AssignmentExpression":{let r=e;yn(r.left,n,t),F(r.right,n,t);return}case "UpdateExpression":{yn(e.argument,n,t);return}case "Program":case "BlockStatement":{let r=Ae(n);for(let s of e.body??[])F(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=Ae(n);for(let a of r.params??[])Ke(s,a,"param");F(r.body,s,t);return}case "CatchClause":{let r=e,s=Ae(n);Ke(s,r.param,"param"),F(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=Ae(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)Ke(s,o.id,a.kind);else a&&F(a,s,t);F(r.right,n,t),F(r.test,s,t),F(r.update,s,t),F(r.body,s,t);return}case "VariableDeclaration":{let r=e;for(let s of r.declarations)F(s.init,n,t),Ke(n,s.id,r.kind);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.binds.set(s.name,"import");}return}case "ExportNamedDeclaration":{let r=e;r.declaration&&F(r.declaration,n,t);return}case "TSTypeAliasDeclaration":return;case "TSAsExpression":F(e.expression,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)F(i,n,t);else F(o,n,t);}return}}}function hn(e){let n={out:[],invalid:new WeakSet};return F(e,Ae(void 0),n),{diagnostics:n.out,invalidTargets:n.invalid}}var De=e=>({decls:new Map,parent:e});function cr(e,n){for(let t=e;t;t=t.parent){let r=t.decls.get(n);if(r)return r}}function he(e){if(!e)return [];switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?he(n.argument):he(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?he(n):[]);case "AssignmentPattern":return he(e.left);case "RestElement":return he(e.argument);default:return []}}var qe=(e,n)=>{for(let t of he(n))e.decls.set(t.name,t);};function M(e,n,t){if(!(!e||typeof e!="object"||typeof e.type!="string"))switch(e.type){case "Identifier":{let r=cr(n,e.name);r&&r!==e&&t.set(e,r);return}case "MemberExpression":{let r=e;M(r.object,n,t),r.computed&&M(r.property,n,t);return}case "Property":{let r=e;r.computed&&M(r.key,n,t),M(r.value,n,t);return}case "Program":case "BlockStatement":{let r=De(n);for(let s of e.body??[])M(s,r,t);return}case "ArrowFunctionExpression":case "FunctionExpression":case "FunctionDeclaration":{let r=e,s=e.id;s&&n.decls.set(s.name,s);let a=De(n);for(let o of r.params??[])qe(a,o);M(r.body,a,t);return}case "CatchClause":{let r=e,s=De(n);qe(s,r.param),M(r.body,s,t);return}case "ForStatement":case "ForOfStatement":case "ForInStatement":{let r=e,s=De(n),a=r.left??r.init;if(a?.type==="VariableDeclaration")for(let o of a.declarations)qe(s,o.id);else a&&M(a,s,t);M(r.right,n,t),M(r.test,s,t),M(r.update,s,t),M(r.body,s,t);return}case "VariableDeclaration":{for(let r of e.declarations)qe(n,r.id),M(r.init,n,t);return}case "ImportDeclaration":{for(let r of e.specifiers){let s=r.local;s&&n.decls.set(s.name,s);}return}case "TSTypeAliasDeclaration":{let r=e.id;r&&n.decls.set(r.name,r);return}case "TSAsExpression":M(e.expression,n,t);return;default:{let r=VisitorKeys[e.type];if(!r)return;let s=e;for(let a of r){let o=s[a];if(Array.isArray(o))for(let i of o)M(i,n,t);else M(o,n,t);}return}}}function pr(e){let n=new WeakMap;return M(e,De(void 0),n),n}var gn=e=>e.typeAnnotation,Sn=e=>e.returnType,L=e=>e.type==="Identifier"?e.name:null,Qn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?L(n.id):null}return L(e)},Hn=e=>{if(e.type==="VariableDeclaration"){let n=e.declarations[0];return n?n.id:e}return e},Re=e=>{if(e.computed)return null;let n=e.key;return n.type==="Identifier"?n.name:n.type==="Literal"?String(n.value??""):null};function Zn(e){let n=r=>r&&r.type==="Literal"&&typeof r.value=="string"?r.value:null;if(e.length===1&&e[0].type==="ArrayExpression"){let r=[];for(let s of e[0].elements){let a=n(s);if(a===null)return null;r.push(a);}return r}let t=[];for(let r of e){let s=n(r);if(s===null)return null;t.push(s);}return t.length?t:null}function bn(e){if(e.type==="Identifier")return e.name;if(e.type==="MemberExpression"){let n=e;if(n.computed||n.property.type!=="Identifier")return null;let t=bn(n.object);return t===null?null:`${t}.${n.property.name}`}return null}function _e(e){let n=e;if(n.regex||n.bigint)return s.unknown;let t=n.value;return t===null?s.null:t===void 0?s.undefined:typeof t=="string"||typeof t=="number"||typeof t=="boolean"?{t:"literal",value:t,fresh:true}:s.unknown}var le=e=>{let n=e.value;return n===null?s.null:typeof n=="string"||typeof n=="number"||typeof n=="boolean"?s.literal(n):_e(e)},Nn=e=>e.type==="ArrowFunctionExpression",et=e=>e.t==="apply"&&e.name==="Promise"&&e.args.length===1,Oe=e=>et(e)?e.args[0]:e,Te=e=>et(e)?e:s.promise(e);function Ce(e){return e.t==="tuple"?true:e.t==="array"?Ce(e.items):e.t==="union"?e.of.some(Ce):false}function ge(e){return e.t==="literal"?true:e.t==="union"?e.of.some(n=>ge(n)):e.t==="var"?e.isConst===true||e.bound!==void 0&&ge(e.bound):false}var K=(e,n)=>{let t=e;for(let r=0;r<50&&t.t==="apply";r++){let s=expand1(t,n);if(s===t||s.t==="apply"&&s.name===t.name)break;t=s;}return t};function nt(e){let n=Sn(e);return n?{t:"fn",params:e.params.map((r,s$1)=>({name:L(r)??`arg${s$1}`,type:gn(r)??s.unknown})),returns:e.async?Te(n):n}:null}var Q={then:{},else:{}},ut=new Set(["string","number","boolean","undefined","function","object"]),tt={string:s.string,number:s.number,boolean:s.boolean,undefined:s.undefined};function ct(e,n){switch(n){case "string":return e.t==="string"||e.t==="literal"&&typeof e.value=="string";case "number":return e.t==="number"||e.t==="literal"&&typeof e.value=="number";case "boolean":return e.t==="boolean"||e.t==="literal"&&typeof e.value=="boolean";case "undefined":return e.t==="undefined";case "function":return e.t==="fn"||e.t==="overload";case "object":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="null";default:return false}}var yr=s.literal(true),hr=s.literal(false),J=e=>e.t==="union"?[...e.of]:e.t==="boolean"?[yr,hr]:[e];function rt(e,n){let t=e,r=n;return e.type==="UnaryExpression"&&t.operator==="typeof"&&t.argument.type==="Identifier"&&n.type==="Literal"&&typeof r.value=="string"?{name:t.argument.name,tag:r.value}:null}function gr(e,n,t){if(e.t==="unknown"||e.t==="any")return n;let r=J(e).filter(s=>subtype(s,n,t));return r.length?normalizeUnion(r):n}function Sr(e,n,t){if(e.t==="unknown"||e.t==="any")return null;let r=J(e).filter(s=>!subtype(s,n,t));return r.length?normalizeUnion(r):null}function br(e,n){if(!ut.has(n))return null;if(e.t==="unknown"||e.t==="any")return tt[n]??e;let t=J(e).filter(r=>ct(r,n));return t.length?normalizeUnion(t):tt[n]??e}function Nr(e,n){if(!ut.has(n)||e.t==="unknown"||e.t==="any")return null;let t=J(e).filter(r=>!ct(r,n));return t.length?normalizeUnion(t):null}function st(e,n){if(e.type==="Identifier"&&n.type==="Literal"){let t=le(n);if(t.t==="literal"||t.t==="null")return {name:e.name,lit:t}}return null}function at(e,n){if(e.type==="MemberExpression"&&!e.computed&&!e.optional&&e.object.type==="Identifier"&&e.property.type==="Identifier"&&n.type==="Literal"){let t=le(n);if(t.t==="literal"||t.t==="null")return {name:e.object.name,prop:e.property.name,lit:t}}return null}function ot(e,n,t,r,s){let a=J(e),o=l=>l.t==="object"?ownProp(l.props,n)?.type:void 0,i=a.filter(l=>{let u=o(l);return r?!!u&&subtype(t,u,s):!(u&&subtype(u,t,s))});return i.length&&i.length<a.length?normalizeUnion(i):null}function it(e,n,t){let r=J(e),s=o=>o.t==="object"&&(n in o.props||!!o.index),a=r.filter(o=>t?s(o):!s(o));return a.length&&a.length<r.length?normalizeUnion(a):null}function Br(e,n,t){return e.t==="unknown"||e.t==="any"||subtype(n,e,t)?n:null}function kr(e,n,t){let r=J(e),s=r.filter(a=>!equals(a,n,t));return s.length&&s.length<r.length?normalizeUnion(s):null}var wr=e=>e.t==="null"||e.t==="undefined",pt=e=>wr(e)||e.t==="literal"&&!e.value,vr=e=>{if(e.t==="unknown"||e.t==="any")return null;let n=J(e),t=n.filter(r=>!pt(r));return t.length&&t.length<n.length?normalizeUnion(t):null},Er=e=>{let n=J(e),t=n.filter(pt);return t.length&&t.length<n.length?normalizeUnion(t):null},lt=e=>e.type==="Literal"&&e.value===null?"null":e.type==="Identifier"&&e.name==="undefined"?"undefined":null,q=(e,n,t)=>({then:n?{[e]:n}:{},else:t?{[e]:t}:{}}),Ar=e=>e==="==="||e==="=="||e==="!=="||e==="!=";function Me(e,n,t){if(e.type==="BinaryExpression"){let r=e;if(r.operator==="in"){let m=r.left,h=r.right;if(m.type==="Literal"&&typeof m.value=="string"&&h.type==="Identifier"){let g=h.name,N=R(n,g);if(!N)return Q;let C=String(m.value);return q(g,it(N,C,true),it(N,C,false))}return Q}if(!Ar(r.operator))return Q;let s=r.operator==="!=="||r.operator==="!=",a=r.left,o=r.right,i=rt(a,o)??rt(o,a);if(i){let m=R(n,i.name);if(!m)return Q;let h=br(m,i.tag),g=Nr(m,i.tag);return s?q(i.name,g,h):q(i.name,h,g)}let l=lt(a),u=lt(o),p=l?o:u?a:null;if((l||u)&&p?.type==="Identifier"){let m=p.name,h=R(n,m);if(!h)return Q;let N=r.operator==="=="||r.operator==="!="?["null","undefined"]:[l??u],C=J(h),$=C.filter(T=>N.includes(T.t)),se=C.filter(T=>!N.includes(T.t)),de=$.length?normalizeUnion($):null,E=se.length&&se.length<C.length?normalizeUnion(se):null;return s?q(m,E,de):q(m,de,E)}let d=st(a,o)??st(o,a);if(d){let m=R(n,d.name);if(!m)return Q;let h=Br(m,d.lit,t),g=kr(m,d.lit,t);return s?q(d.name,g,h):q(d.name,h,g)}let f=at(a,o)??at(o,a);if(f){let m=R(n,f.name);if(!m)return Q;let h=ot(m,f.prop,f.lit,true,t),g=ot(m,f.prop,f.lit,false,t);return s?q(f.name,g,h):q(f.name,h,g)}return Q}if(e.type==="UnaryExpression"&&e.operator==="!"){let r=Me(e.argument,n,t);return {then:r.else,else:r.then}}if(e.type==="CallExpression"){let r=Cr(e,n,t);if(r)return r}if(e.type==="Identifier"){let r=e.name,s=R(n,r);if(s)return q(r,vr(s),Er(s))}return Q}function Dr(e,n){if(e.t==="fn")return e.guard??null;if(e.t==="overload"){for(let t of e.signatures)if(t.guard&&t.params.length===n)return t.guard}return null}function Cr(e,n,t){let r=e.callee;if(r.type!=="Identifier")return null;let s=R(n,r.name);if(!s)return null;let a=Dr(s,e.arguments.length);if(!a)return null;let o=e.arguments[a.param];if(!o||o.type!=="Identifier")return null;let i=o.name,l=R(n,i);return l?q(i,gr(l,a.type,t),Sr(l,a.type,t)):null}var H=(e,n)=>Object.keys(n).length?U(e,n):e;function V(e){switch(e.type){case "ReturnStatement":case "ThrowStatement":return true;case "BlockStatement":return e.body.some(t=>V(t));case "IfStatement":{let n=e;return !!n.alternate&&V(n.consequent)&&V(n.alternate)}case "TryStatement":{let n=e;if(n.finalizer&&V(n.finalizer))return true;let t=!n.handler||V(n.handler.body);return V(n.block)&&t}default:return false}}var Wr=e=>{let n={};for(let t of Object.keys(e))n[t]={params:[],body:e[t]};return n};function Jr(e){let n=[];return e.maxDepth!==void 0&&n.push(an(e.maxDepth)),e.maxNodes!==void 0&&n.push(on(e.maxNodes)),e.maxArgs!==void 0&&n.push(ln(e.maxArgs)),e.maxFunctionNesting!==void 0&&n.push(tn(e.maxFunctionNesting)),e.maxCallNesting!==void 0&&n.push(rn(e.maxCallNesting)),e.memberDepth!==void 0&&n.push(sn(e.memberDepth)),n}function xr(e,n){let t=e.typeRefs;return t?.length?t.filter(r=>!(r.name in n)).map(r=>O("unknown-name",{type:"Identifier",name:r.name,loc:r.loc},`Cannot find name '${r.name}'.`)):[]}function Nt(e,n,t={}){let r={...Wr(n.types),...n.schemes,...Xr(e)},s$1=hn(e),a={overlay:new WeakMap,sink:ae(),env:n,schemes:r,importNames:new Set,resolvedSchemes:new Set,invalidTargets:s$1.invalidTargets,evolving:new Set,declaredMut:new Map,assignFlow:new WeakMap},o=t.profile?compileProfile(t.profile):void 0;o&&configureTypeLimits(o.typeLimits);try{let i,l=Qr(e,a);try{i=S(e,l,a);}catch(d){if(d instanceof TypeEvalLimitError)a.sink.report(O("too-deep",e,d.message));else if(d instanceof UnionTooComplexError)a.sink.report(O("too-complex-union",e,d.message));else throw d;i=s.unknown;}let u=[];o&&u.push(...Ue(o)),t.limits&&u.push(...Jr(t.limits)),t.resultType&&u.push(un(t.resultType,r));let p=[...a.sink.all,...s$1.diagnostics,...xr(e,r),...t.unused?fn(e,t.unused):[],...u.length?Ze(e,u,{overlay:a.overlay}):[]];return {type:i,overlay:a.overlay,diagnostics:p,schemes:a.schemes}}finally{o&&resetTypeLimits();}}function Yr(e,n,t={}){let r=Nt(e,n,t),s$1={},a=new Map,o,i=u=>{let p=[];if(u.type==="VariableDeclaration")for(let d of u.declarations){let f=L(d.id),m=r.overlay.get(d);f&&m&&(s$1[f]=m.type,p.push(f));}else if(u.type==="FunctionDeclaration"){let d=u.id?.name,f=r.overlay.get(u);d&&f&&(s$1[d]=f.type,p.push(d));}return p};for(let u of e.body??[])if(u.type==="VariableDeclaration"||u.type==="FunctionDeclaration")i(u);else if(u.type==="ExportNamedDeclaration"){let p=u;if(p.declaration)for(let d of i(p.declaration))a.set(d,d);else for(let d of p.specifiers)a.set(d.exported.name,d.local.name);}else if(u.type==="ExportDefaultDeclaration"){let p=r.overlay.get(u.declaration);o=p?p.type:s.unknown;}let l={};if(a.size||o!==void 0){for(let[u,p]of a)s$1[p]&&(l[u]={type:s$1[p]});o!==void 0&&(l.default={type:o});}else for(let u in s$1)l[u]={type:s$1[u]};return {type:{t:"object",props:l},diagnostics:r.diagnostics}}var Xr=e=>{let n={};return walk(e,{TSTypeAliasDeclaration(t){let r=t;r.id?.name&&r.typeAnnotation&&(n[r.id.name]={params:r.typeParameters??[],body:r.typeAnnotation});}}),n};function Qr(e,n){let t=n.env.modules,r={};walk(e,{ImportDeclaration(s$1){let a=s$1;if(a.importKind==="type")return;let o=a.source.value,i=typeof o=="string"?t?.[o]:void 0;if(!i){n.sink.report(y.unknownModule(a.source,String(o)));for(let l of a.specifiers)r[l.local.name]=s.unknown;return}for(let l of a.specifiers){if(l.importKind==="type")continue;let u=l.local.name;if(re(u,l.local,n),u in r){n.sink.report(y.cannotRedeclare(l.local,u));continue}if(l.type==="ImportNamespaceSpecifier"){r[u]=i;continue}let p=l.type==="ImportSpecifier"?l.imported.name:"default",d=discover(i,[p],n.schemes);d?r[u]=d.type:(n.sink.report(y.noSuchMember(l,i,p)),r[u]=s.unknown);}}});for(let s in r)n.importNames.add(s);return Object.keys(r).length?U(n.env.scope,r):n.env.scope}var b=(e,n,t,r)=>(e.overlay.set(n,{type:t,scope:r}),t);function S(e,n,t,r){switch(e.type){case kt:return e.schema;case "JSXElement":case "JSXFragment":return b(t,e,S(desugarJSX(e,{emptyPropsAsObject:true}),n,t),n);case "Literal":return b(t,e,_e(e),n);case "Placeholder":return b(t,e,s.any,n);case "Identifier":{let s$1=e.name,a=R(n,s$1);return a===void 0?s$1==="undefined"?b(t,e,s.undefined,n):(t.sink.report(y.unknownName(e,s$1)),b(t,e,s.unknown,n)):b(t,e,a,n)}case "MemberExpression":return b(t,e,es(e,n,t),n);case "CallExpression":return b(t,e,os(e,n,t,r),n);case "ArrowFunctionExpression":return On(e,n,t);case "FunctionDeclaration":return t.sink.report(y.unsupported(e,"function declaration (use 'const fn = () => \u2026')")),b(t,e,s.unknown,n);case "FunctionExpression":return t.sink.report(y.unsupported(e,"anonymous function (use an arrow)")),b(t,e,s.unknown,n);case "ThisExpression":return t.sink.report(y.unsupported(e,"'this'")),b(t,e,s.unknown,n);case "BlockStatement":return b(t,e,Ot(e,n,t),n);case "ReturnStatement":{let s$1=e.argument;return b(t,e,s$1?S(s$1,n,t):s.unknown,n)}case "IfStatement":return z(e,n,t),t.overlay.get(e)?.type??s.unknown;case "ForStatement":case "WhileStatement":case "DoWhileStatement":case "ForOfStatement":case "ForInStatement":case "BreakStatement":case "ContinueStatement":case "ThrowStatement":case "TryStatement":case "SwitchStatement":return z(e,n,t),t.overlay.get(e)?.type??s.unknown;case "AssignmentExpression":{let s=e,a=s.left,o=S(a,n,t);if(a.type==="MemberExpression"){let p=t.overlay.get(a.object)?.type,d=p&&apparentType(p,t.schemes);d&&(d.t==="array"||d.t==="tuple")&&d.readonly&&t.sink.report(y.readonlyWrite(a,d));}let i=a.type==="Identifier"?a.name:null,l=i!==null&&t.evolving.has(i),u=i!==null?t.declaredMut.get(i):void 0;if(s.operator==="="&&!t.invalidTargets.has(a)){if(l&&i!==null){let d=S(s.right,n,t);return t.assignFlow.set(e,widenLiteral(d)),b(t,e,d,n)}if(u&&i!==null){let d=S(s.right,n,t);return subtype(d,u,t.schemes)||t.sink.report(y.notAssignable(s.right,d,u,t.schemes)),t.assignFlow.set(e,Tt(u,d,t.schemes)),b(t,e,d,n)}let p=x(s.right,o,n,t);return b(t,e,p,n)}return b(t,e,S(s.right,n,t),n)}case "UpdateExpression":{let s$1=e,a=S(s$1.argument,n,t);return Ie(a,t.schemes)||t.sink.report(y.arithmeticOperand(s$1.argument,"operand")),b(t,e,s.number,n)}case "ExpressionStatement":return b(t,e,S(e.expression,n,t),n);case "VariableDeclaration":return We(e,n,t),b(t,e,s.unknown,n);case "TSTypeAliasDeclaration":{let s$1=e.id?.name,a=s$1?t.schemes[s$1]:void 0;return b(t,e,a?ps(a.body,n,t,e,a.params.length>0):s.unknown,n)}case "BinaryExpression":return b(t,e,Ds(e,n,t),n);case "LogicalExpression":{let s=e,a=S(s.left,n,t),o=S(s.right,n,t);return b(t,e,Rs(s.operator,a,o),n)}case "UnaryExpression":return b(t,e,Ts(e,n,t),n);case "ConditionalExpression":{let s=e;S(s.test,n,t);let a=Me(s.test,n,t.schemes),o=S(s.consequent,H(n,a.then),t),i=S(s.alternate,H(n,a.else),t);return b(t,e,normalizeUnion([o,i]),n)}case "ObjectExpression":return b(t,e,Ps(e,n,t),n);case "ArrayExpression":return b(t,e,jt(e,n,t),n);case "TemplateLiteral":{for(let s of e.expressions){let a=S(s,n,t);Ft(a,t.schemes)||t.sink.report(y.notTextConvertible(s,a));}return b(t,e,s.string,n)}case "AwaitExpression":{let s$1=e.argument,a=s$1?S(s$1,n,t):s.unknown;return b(t,e,Oe(a),n)}case "Program":{let s$1=ze(e.body,n,t,new Set(t.importNames)).scope;return b(t,e,s.unknown,s$1)}case "JsonExpression":return b(t,e,En(e.body,n,t,e),n);case "ChainExpression":return b(t,e,normalizeUnion([S(e.expression,n,t),s.undefined]),n);case "TSAsExpression":{let s=e,a=S(s.expression,n,t),o=Be(s.typeAnnotation,n,t,e);return !subtype(a,o,t.schemes)&&!subtype(o,a,t.schemes)&&t.sink.report(y.castUnsound(e,a,o)),b(t,e,o,n)}default:return t.sink.report(y.unsupported(e,`'${e.type}'`)),b(t,e,s.unknown,n)}}var Hr=new Set(["constructor","prototype","__proto__"]);function Zr(e){if(!e.computed)return e.property.type==="Identifier"?e.property.name:null;let n=e.property;if(n.type==="Literal"){let t=n.value;if(typeof t=="string")return t}return null}function es(e,n,t){let r=S(e.object,n,t),s$1=Zr(e);if(s$1!==null&&Hr.has(s$1))return t.sink.report(y.forbiddenMember(e,s$1)),s.unknown;if(e.computed){let i=S(e.property,n,t),l=resolveTypeOp(s.index(r,i));return l.t!=="index"?l:(i.t==="literal"&&typeof i.value=="string"&&dt(e,r,i.value,t),s.unknown)}let a=e.property.name,o=discover(r,[a],t.schemes);return o?o.type:(dt(e,r,a,t),s.unknown)}function dt(e,n,t,r){let s=isScheme(n,r.schemes)?expand1(n,r.schemes):n;s.t==="object"||s.t==="array"||s.t==="tuple"||s.t==="union"?r.sink.report(y.noSuchMember(e,n,t)):s.t!=="any"&&s.t!=="unknown"&&r.sink.report(y.notObject(e,n));}function ns(e,n,t,r){let s$1=e.arguments[0];if(!s$1){r.sink.report(y.missingArgument(e,"schema",s.unknown));return}if(s$1.type!=="Identifier"){r.sink.report(y.asserterNeedsName(s$1,n));return}let a=s$1.name,o=R(t,a),i=r.schemes[a];if(o===void 0){r.sink.report(i?y.typeAsValue(s$1,a):y.unknownName(s$1,a));return}if(!i||i.params.length>0){r.sink.report(y.notASchema(s$1,a));return}if(!(Bt(a,r)&&!ts(t,a)))return r.overlay.set(s$1,{type:i.body,scope:t}),i.body}function Bt(e,n){if(!n.env.asserters?.size)return false;let t=n.schemes[e];return t!==void 0&&t.params.length===0&&R(n.env.scope,e)!==void 0}function ts(e,n){for(let t=e;t;t=t.parent)if(Object.prototype.hasOwnProperty.call(t.vars,n))return t.parent===null;return false}function re(e,n,t){Bt(e,t)&&t.sink.report(y.shadowsSchema(n,e));}function Rn(e,n){let t=K(e,n);return (t.t==="fn"?t:t.t==="overload"?t.signatures[0]:void 0)?.params[0]?.type}function rs(e,n){let t=R(e.scope,n);if(!t)return;let r=Rn(t,e.schemes);return r?K(r,e.schemes):void 0}function ss(e,n,t,r){let s$1=Rn(S(n[0],t,r),r.schemes),a=n.length>1?S(n[1],t,r):s.undefined;if(s$1){let o=typeDiff(a,s$1,r.schemes);o.length&&r.sink.report(y.propsMismatch(n[1]??e,s$1,formatTypeDiff(o)));}return b(r,e,s.boolean,t)}var kt="TSLiteSyntheticArg",as=e=>({type:kt,schema:e});function wt(e,n,t){if(!e.some(a=>a.type==="SpreadElement"))return {nodes:[...e],spread:null};let r=[],s=null;for(let a of e){if(a.type!=="SpreadElement"){r.push(a);continue}let o=a.argument;if(o.type==="ArrayExpression"&&o.elements.every(l=>l&&l.type!=="SpreadElement")){for(let l of o.elements)r.push(l);continue}let i=K(S(o,n,t),t.schemes);if(i.t==="tuple")for(let l of i.elements)r.push(as(l));else s={elem:Tn(i,o,t),node:a};}return {nodes:r,spread:s}}function os(e,n,t,r){let s$1=e.arguments,a=bn(e.callee);if(a){let d=t.env.accessors?.[a];if(d){let f=Zn(s$1);if(f){let m=discover(d,f,t.schemes);return m?m.type:(t.sink.report(y.noSuchMember(e,d,f.join("."))),s.unknown)}return s$1.forEach(m=>S(m,n,t)),s.unknown}}if(a&&t.env.asserters?.has(a)){let d=ns(e,a,n,t);s$1.length<2&&s$1.length>0&&t.sink.report(y.missingArgument(e,"value",s.unknown));for(let f=1;f<s$1.length;f++)S(s$1[f],n,t);return d??s.unknown}if(a&&t.env.matchers?.has(a))return ss(e,s$1,n,t);let o=S(e.callee,n,t);if(o.t==="any")return s$1.forEach(d=>S(d,n,t)),s.any;if(o.t==="overload")return ls(e,o,n,t,r);if(o.t!=="fn")return s$1.forEach(d=>S(d,n,t)),t.sink.report(y.notCallable(e,o)),s.unknown;let i=wt(s$1,n,t),l=i.nodes.map(d=>vt(d,n,t)),u=At(e),p=!u||Dt(o,u.length);return p||t.sink.report(y.wrongTypeArgumentCount(e,o.typeParams?.length??0,u.length)),vn(e,o,i.nodes,l,n,t,i.spread,r,p?u:void 0)}function vt(e,n,t){if(Nn(e))return s.any;if(e.type!=="CallExpression")return S(e,n,t);let r=ae(),s$1=S(e,n,{...t,sink:r});return r.hasErrors()?s.any:(r.all.forEach(a=>t.sink.report(a)),s$1)}function vn(e,n,t,r,s$1,a,o=null,i,l){let u=h=>{if(!i)return h;let g=substitute(n.returns,h);if(g.t==="fn"&&i.t==="fn"){let N=h,C=Math.min(g.params.length,i.params.length);for(let $=0;$<C;$++)N=unify(g.params[$].type,i.params[$].type,N)??N;return unify(g.returns,i.returns,N)??N}return unify(g,i,h)??h},p=l?ms(e,n,l,a):void 0,d=p??u(instantiateLoose(n,r).bindings);t.forEach((h,g)=>{if(Nn(h)){let N=widenType(substitute(n.params[g]?.type??s.any,d));r[g]=On(h,s$1,a,N);}else if(h.type==="CallExpression"&&r[g].t==="any")r[g]=S(h,s$1,a,substitute(n.params[g]?.type??s.unknown,d));else if(h.type==="Literal"){let N=n.params[g]?.type??s.unknown,C=N.t==="var"?N.bound?substitute(N.bound,d):N:substitute(N,d);ge(C)&&(r[g]=b(a,h,le(h),s$1));}else if(h.type==="ArrayExpression"||h.type==="ObjectExpression"||h.type==="ConditionalExpression"){let N=n.params[g]?.type??s.unknown,C=substitute(N,d);if(h.type==="ArrayExpression"&&Ce(C)){r[g]=Mn(h,C,s$1,a);return}let $=N.t==="var"?N.bound?substitute(N.bound,d):void 0:C;$&&Ms($,a.schemes)&&(r[g]=Is(h,$,s$1,a,N.t==="var")??r[g]);}});let f=p??u(instantiateLoose(n,r).bindings);p||is(e,n,f,a),gs(e,n,r,f,a,t,o),t.forEach((h,g)=>{let N=n.params[g];h.type==="ObjectExpression"&&N&&!N.variadic&&Pn(h,substitute(N.type,f),a);});let m=substitute(n.returns,f);return widenInferred(groundVars(m.t==="union"?normalizeUnion(m.of):m,a.schemes))}var mt=new WeakMap;function Et(e){let n=mt.get(e);if(n)return n;let t=new Map,r=new WeakSet;for(let s of e.params)j(s.type,t,r);return j(e.returns,t,r),mt.set(e,t),t}function j(e,n,t){switch(e.t){case "var":e.bound&&!n.has(e.name)&&n.set(e.name,e.bound);return;case "array":j(e.items,n,t);return;case "union":for(let r of e.of)j(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)j(e.props[r].type,n,t);return;case "fn":if(t.has(e))return;t.add(e);for(let r of e.params)j(r.type,n,t);j(e.returns,n,t);return;case "overload":for(let r of e.signatures){for(let s of r.params)j(s.type,n,t);j(r.returns,n,t);}return;case "apply":for(let r of e.args)j(r,n,t);return;case "keyof":j(e.of,n,t);return;case "index":j(e.obj,n,t),j(e.key,n,t);return;case "mapped":j(e.over,n,t),j(e.body,n,t);return;default:return}}function is(e,n,t,r){let s=Et(n);if(s.size!==0)for(let[a,o]of s){let i=t[a];if(!i)continue;let l=substitute(o,t);subtype(i,l,r.schemes)||r.sink.report(y.constraintViolation(e,a,i,l));}}function ls(e,n,t,r,s){let a=wt(e.arguments,t,r),o=a.nodes,i=o.map(p=>vt(p,t,r)),l=At(e),u=l?n.signatures.filter(p=>Dt(p,l.length)):n.signatures;if(l&&!u.length){let p=n.signatures.reduce((d,f)=>Math.max(d,f.typeParams?.length??0),0);return r.sink.report(y.wrongTypeArgumentCount(e,p,l.length)),ft(e,n.signatures,a,o,i,t,r,s,void 0)}return ft(e,u,a,o,i,t,r,s,l)}function ft(e,n,t,r,s$1,a,o,i,l){let u={t:"overload",signatures:n},p=m=>t.spread?fs(m,r.length):ys(m,r.length),d=u.signatures.filter(p);if(d.length>1&&s$1.some(m=>m.t==="any"))for(let m of d){let h=ae(),g=vn(e,m,r,s$1,a,{...o,sink:h},t.spread,i,l);if(!h.hasErrors())return h.all.forEach(N=>o.sink.report(N)),g}let f=u.signatures.find(m=>p(m)&&hs(m,s$1,o));if(!f){let m=u.signatures.filter(p);m.length===1?f=m[0]:u.signatures.length===1&&(f=u.signatures[0]);}return f?vn(e,f,r,s$1,a,o,t.spread,i,l):(o.sink.report(y.noMatchingOverload(e,u,s$1)),s.unknown)}function us(e,n,t,r){let s$1=R(n,e[0]);if(s$1===void 0)return t.sink.report(y.unknownName(r,e[0])),s.unknown;let a=e.slice(1),o=a.length?discover(s$1,a,t.schemes)?.type:s$1;return o?o.t==="literal"?s.literal(o.value):o:(t.sink.report(y.noSuchMember(r,s$1,a.join("."))),s.unknown)}function Be(e,n,t,r){let s$1=a=>{if(Array.isArray(a)){let u=false,p=a.map(d=>{let f=s$1(d);return f!==d&&(u=true),f});return u?p:a}if(!a||typeof a!="object")return a;let o=a;if(o.t==="typeQuery")return us(o.path,n,t,r);if(o.t==="apply"&&typeof o.name=="string"&&(cs(o.name,n,t,r),!(o.name in t.schemes)))return s.any;let i=false,l={};for(let u of Object.keys(o)){let p=s$1(o[u]);p!==o[u]&&(i=true),l[u]=p;}return i?l:o};return s$1(e)}function cs(e,n,t,r){if(t.resolvedSchemes.has(e))return;let s=t.schemes[e];if(!s)return;t.resolvedSchemes.add(e);let a=Be(s.body,n,t,r);a!==s.body&&(t.schemes[e]={...s,body:a});}function ps(e,n,t,r,s){let a={...t,sink:ae(),resolvedSchemes:new Set(Object.keys(t.schemes))},o=Be(e,n,a,r);return a.sink.hasErrors()?e:s?o:groundVars(o,t.schemes)}var Fe=(e,n,t)=>{let r=gn(e);return r===void 0?r:Be(r,n,t,e)},ds=(e,n,t)=>{let r=Sn(e);return r===void 0?r:Be(r,n,t,e)},At=e=>{let n=e.typeArguments;return n?.length?n:void 0},Dt=(e,n)=>(e.typeParams?.length??0)===n;function ms(e,n,t,r){let s=n.typeParams??[],a={};s.forEach((i,l)=>a[i]=t[l]);let o=a;for(let[i,l]of Et(n)){let u=o[i];if(!u)continue;let p=groundVars(substitute(l,o),r.schemes);subtype(u,p,r.schemes)||r.sink.report(y.constraintViolation(e,i,u,p));}return o}function fs(e,n){let t=0,r=false;for(let s of e.params)s.variadic?r=true:s.optional||t++;return n>=t&&(r||n<e.params.length)}function ys(e,n){let t=0;for(let r of e.params){if(r.variadic)return n>=t;r.optional||t++;}return n>=t&&n<=e.params.length}function hs(e,n,t){let{bindings:r}=instantiateLoose(e,n);for(let s$1=0;s$1<e.params.length;s$1++){let a=e.params[s$1];if(a.variadic){let o=substitute(a.type,r),i=o.t==="array"?o.items:s.unknown;for(let l=s$1;l<n.length;l++)if(!subtype(n[l],i,t.schemes))return false;return true}if(s$1>=n.length){if(!a.optional)return false;continue}if(!subtype(n[s$1],substitute(a.type,r),t.schemes))return false}return true}function gs(e,n,t,r,s$1,a=e.arguments??[],o=null){let i=u=>a[u]??e;for(let u=0;u<n.params.length;u++){let p=n.params[u];if(p.variadic){let f=substitute(p.type,r),m=f.t==="array"?f.items:s.unknown;for(let h=u;h<t.length;h++)subtype(t[h],m,s$1.schemes)||s$1.sink.report(y.notAssignable(i(h),t[h],m,s$1.schemes));break}let d=substitute(p.type,r);if(u>=t.length){!p.optional&&!o&&s$1.sink.report(y.missingArgument(e,p.name,d));continue}subtype(t[u],d,s$1.schemes)||s$1.sink.report(y.notAssignable(i(u),t[u],d,s$1.schemes));}let l=n.params.find(u=>u.variadic);if(o){let u=t.length,p=n.params.filter(d=>!d.optional&&!d.variadic).length;if(!(u>=p&&(l||u<n.params.length))){s$1.sink.report(y.spreadArgument(o.node));return}if(l){let d=substitute(l.type,r),f=d.t==="array"?d.items:s.unknown;subtype(o.elem,f,s$1.schemes)||s$1.sink.report(y.notAssignable(o.node,o.elem,f,s$1.schemes));}return}!l&&t.length>n.params.length&&s$1.sink.report(y.excessArgument(i(n.params.length),n.params.length,t.length));}function Ct(e,n,t){if(e.t==="object"){let r=ownProp(e.props,n);return r?r.type:e.index?.key==="string"?e.index.value:void 0}if(e.t==="intersection"){let r=e.of.map(s=>Ct(apparentType(s,t),n,t)).filter(s=>s!==void 0);return r.length===0?void 0:r.length===1?r[0]:resolveTypeOp({t:"intersection",of:r})}}function x(e,n,t,r,s$1=false){let a=apparentType(n,r.schemes);switch(a.t==="conditional"&&(a=resolveConditional(a,r.schemes)??a),e.type){case "Literal":{let i=le(e);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,s$1?ge(n)?i:widen(_e(e)):n,t)}case "ArrayExpression":{if(Ce(a)){let i=Mn(e,a,t,r);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,i,t)}if(a.t==="array"){let i=[];for(let u of e.elements){if(!u)continue;let p=u;if(p.type==="SpreadElement"){let d=x(p.argument,n,t,r,s$1);d.t==="array"&&i.push(d.items);}else i.push(x(p,a.items,t,r,s$1));}let l=s$1&&i.length>0?s.array(normalizeUnion(i)):n;return b(r,e,l,t)}break}case "ObjectExpression":{if(a.t==="object"||a.t==="intersection"){let i={},l={};for(let p of e.properties){let d=p;if(d.type==="SpreadElement"){S(d.argument,t,r);continue}let f=d,m=Re(f),h=m!==null?Ct(a,m,r.schemes):void 0,g=h?x(f.value,h,t,r,s$1):widen(S(f.value,t,r));m!==null&&(i[m]={type:h??g},l[m]={type:g}),b(r,d,g,t);}let u={t:"object",props:i};return subtype(u,n,r.schemes)||r.sink.report(y.notAssignable(e,u,n,r.schemes)),b(r,e,s$1?{t:"object",props:l}:n,t)}break}case "ArrowFunctionExpression":{if(a.t==="fn"){let i=On(e,t,r,a);return subtype(i,n,r.schemes)||r.sink.report(y.notAssignable(e,i,n,r.schemes)),b(r,e,n,t)}break}case "ConditionalExpression":{let i=e;S(i.test,t,r);let l=x(i.consequent,n,t,r,s$1),u=x(i.alternate,n,t,r,s$1);return b(r,e,s$1?normalizeUnion([l,u]):n,t)}case "Placeholder":return b(r,e,n,t)}let o=S(e,t,r);return subtype(o,n,r.schemes)||r.sink.report(y.notAssignable(e,o,n,r.schemes)),b(r,e,o,t)}function On(e,n,t,r){let s$1=r&&r.t==="fn"?r:void 0,a=e.typeParams,o=E=>a?.length?{...E,typeParams:a}:E,i={},l=new Map,u=e.params.map((E,T)=>{let P=E,xe=s$1?.params[T]?.type;if(P.type==="RestElement"){let ne=P.argument,G=Fe(ne,n,t)??(s$1?.params[T]?.variadic?xe:void 0)??s.array(s.unknown),W=L(ne);return W?(re(W,ne,t),i[W]=G):Z(ne,G,i,n,t),t.overlay.set(ne,{type:G,scope:n}),t.overlay.set(P,{type:G,scope:n}),{name:W??`arg${T}`,type:G,variadic:true}}if(P.type==="AssignmentPattern"){let ne=P.left,Ye=Fe(ne,n,t)??xe;Z(P,Ye??s.unknown,i,n,t);let G=L(ne),W=G?i[G]:void 0,Xe=Ye??W??s.unknown,Un=Xe.t==="unknown"?Xe:normalizeUnion([Xe,s.undefined]);return G&&W&&(W.t==="union"||W.t==="boolean")&&l.set(G,W),t.overlay.set(P,{type:Un,scope:n}),{name:G??`arg${T}`,type:Un,optional:true}}let me=L(P),jn=Fe(P,n,t),ke=jn??xe??s.unknown,$n=P.type==="Identifier"&&(!!P.optional||jn===void 0&&!!s$1?.params[T]?.optional),fe=$n&&ke.t!=="unknown"?normalizeUnion([ke,s.undefined]):ke;return me?(re(me,P,t),i[me]=fe,(fe.t==="union"||fe.t==="boolean")&&l.set(me,fe)):P.type!=="Identifier"&&Z(P,ke,i,n,t),t.overlay.set(P,{type:fe,scope:n}),$n?{name:me??`arg${T}`,type:fe,optional:true}:{name:me??`arg${T}`,type:ke}}),p=false;u.forEach((E,T)=>{E.optional?p=true:!E.variadic&&p&&t.sink.report(y.requiredAfterOptional(e.params[T]));});let d=U(n,i),f=e.body,m=ds(e,n,t),h=e.returnGuard,g=h?{param:h.param,type:Be(h.type,n,t,e)}:void 0;if(g){let E=u[g.param];E&&!subtype(g.type,E.type,t.schemes)&&t.sink.report(y.notAssignable(e,g.type,E.type,t.schemes));}let N=E=>g?{...E,guard:g}:E;if(f.type!=="BlockStatement"&&m){let E=e.async?Oe(m):m;x(f,E,d,t);let T=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:T})),n)}let C=m??s$1?.returns,$=C&&e.async?Oe(C):C,se=f.type==="BlockStatement"?b(t,f,Ot(f,d,t,new Set(Object.keys(i)),l,$),d):S(f,d,t),de=e.async?Te(se):se;if(m){let E=e.async?Oe(m):m,T=e.async?se:de;subtype(T,E,t.schemes)||t.sink.report(y.notAssignable(f,de,m,t.schemes));let P=e.async?Te(m):m;return b(t,e,N(o({t:"fn",params:u,returns:P})),n)}return b(t,e,o({t:"fn",params:u,returns:widenType(de)}),n)}function be(e){switch(e.type){case "Identifier":return [e];case "ObjectPattern":return e.properties.flatMap(n=>n.type==="RestElement"?be(n.argument):be(n.value));case "ArrayPattern":return e.elements.flatMap(n=>n?n.type==="RestElement"?be(n.argument):be(n):[]);case "AssignmentPattern":return be(e.left);default:return []}}function Rt(e){if(e.type==="VariableDeclaration")return e.declarations.flatMap(n=>be(n.id));if(e.type==="FunctionDeclaration"){let n=e.id;return n?[n]:[]}return e.type==="ExportNamedDeclaration"&&e.declaration?Rt(e.declaration):[]}function Ot(e,n,t,r=new Set,s$1,a){let{returns:o}=ze(e.body,n,t,r,s$1,a),i=!V(e);return o.length===0?i?s.void:s.union([]):normalizeUnion(i?[...o,s.undefined]:o)}var Ss=[s.literal(true),s.literal(false)];function bs(e){return e.t==="union"?e.of:e.t==="boolean"?Ss:[e]}function Tt(e,n,t){let r=bs(e);if(r.length<=1)return e;let s=r.filter(o=>subtype(n,o,t));if(s.length===0)return e;let a=normalizeUnion(s);return subtype(n,a,t)?a:e}function Pt(e,n){if(e.type!=="ExpressionStatement")return null;let t=e.expression;if(t.type!=="AssignmentExpression")return null;let r=t,s=r.left;if(r.operator!=="="||s.type!=="Identifier")return null;let a=n.assignFlow.get(t);return a?{name:s.name,type:a}:null}function ce(e,n,t){switch(e.type){case "BlockStatement":{let r=n;for(let s of e.body){let a=ce(s,r,t);if(r=a.types,a.exits)return {types:r,exits:true}}return {types:r,exits:false}}case "ExpressionStatement":{let r=Pt(e,t);if(!r)return {types:n,exits:false};let s=new Map(n);return s.set(r.name,r.type),{types:s,exits:false}}case "IfStatement":{let r=Mt(e,n,t);if(r.size===0)return {types:n,exits:V(e)};let s=new Map(n);for(let[a,o]of r)s.set(a,o);return {types:s,exits:V(e)}}case "TryStatement":{let r=e,s=[],a=ce(r.block,n,t);if(a.exits||s.push(a.types),r.handler){let i=ce(r.handler.body,n,t);i.exits||s.push(i.types);}let o=Ns(n,s);return r.finalizer&&(o=ce(r.finalizer,o,t).types),{types:o,exits:V(e)}}case "ReturnStatement":case "ThrowStatement":return {types:n,exits:true};default:return {types:n,exits:false}}}function Mt(e,n,t){let r=ce(e.consequent,n,t),s=e.alternate?ce(e.alternate,n,t):{types:n,exits:false},a=new Set;for(let i of r.types.keys())r.types.get(i)!==n.get(i)&&a.add(i);for(let i of s.types.keys())s.types.get(i)!==n.get(i)&&a.add(i);let o=new Map;for(let i of a){let l=[];r.exits||l.push(r.types.get(i)??n.get(i)),s.exits||l.push(s.types.get(i)??n.get(i)),l.length&&o.set(i,normalizeUnion(l));}return o}function It(e,n){let t=new Map,r=s=>{let a=R(e,s);a!==void 0&&t.set(s,a);};for(let s of n.evolving)r(s);for(let s of n.declaredMut.keys())r(s);return t}function Ns(e,n){let t=new Map(e);if(n.length===0)return t;for(let r of e.keys()){let s=n.map(a=>a.get(r)??e.get(r));t.set(r,normalizeUnion(s));}return t}function Bs(e,n,t){if(!(t.evolving.size||t.declaredMut.size))return n;let r=It(n,t),s=ce(e,r,t);if(s.exits)return n;let a={};for(let[o,i]of s.types)r.has(o)&&i!==r.get(o)&&(a[o]=i);return H(n,a)}function ze(e,n,t,r=new Set,s,a){if(!(s&&s.size)&&!ks(e))return yt(e,n,t,r,a);let o=new Set(t.evolving),i=new Map(t.declaredMut);if(s)for(let[l,u]of s)t.declaredMut.set(l,u);try{return yt(e,n,t,r,a)}finally{t.evolving.clear();for(let l of o)t.evolving.add(l);t.declaredMut.clear();for(let[l,u]of i)t.declaredMut.set(l,u);}}function ks(e){for(let n of e){let t=n;if(t.type==="VariableDeclaration"&&t.kind!=="const")return true;if(t.type==="ExportNamedDeclaration"){let r=t.declaration;if(r?.type==="VariableDeclaration"&&r.kind!=="const")return true}}return false}function yt(e,n,t,r,s){let a=n,o=[];for(let i of e){let l=i;for(let u of Rt(l))r.has(u.name)?t.sink.report(y.cannotRedeclare(u,u.name)):r.add(u.name);if(l.type==="VariableDeclaration")a=We(l,a,t);else if(l.type!=="ImportDeclaration")if(l.type==="ExportNamedDeclaration"){let u=l;if(u.declaration?.type==="VariableDeclaration")a=We(u.declaration,a,t);else if(u.declaration?.type==="FunctionDeclaration"){let p=S(u.declaration,a,t),d=L(u.declaration.id);d&&(a=U(a,{[d]:p}));}else for(let p of u.specifiers)R(a,p.local.name)===void 0&&t.sink.report(y.unknownName(p.local,p.local.name));}else if(l.type==="ExportDefaultDeclaration")S(l.declaration,a,t);else if(l.type==="FunctionDeclaration"){let u=S(l,a,t),p=L(l.id);p&&(a=U(a,{[p]:u}));}else if(l.type==="IfStatement"){let u=l,p=t.evolving.size||t.declaredMut.size?It(a,t):null;if(o.push(...z(l,a,t,s)),p&&p.size){let d=Mt(u,p,t);d.size&&(a=H(a,Object.fromEntries(d)));}!u.alternate&&V(u.consequent)&&(a=H(a,Me(u.test,a,t.schemes).else));}else {o.push(...z(l,a,t,s));let u=Pt(l,t);u?a=H(a,{[u.name]:u.type}):(l.type==="BlockStatement"||l.type==="TryStatement")&&(a=Bs(l,a,t));}}return {scope:a,returns:o}}function z(e,n,t,r){switch(e.type){case "ReturnStatement":{let s$1=e.argument,a=s$1?r?(x(s$1,r,n,t),r):S(s$1,n,t):s.unknown;return b(t,e,a,n),[a]}case "IfStatement":{let s$1=e;S(s$1.test,n,t);let a=Me(s$1.test,n,t.schemes),o=z(s$1.consequent,H(n,a.then),t,r);return s$1.alternate&&o.push(...z(s$1.alternate,H(n,a.else),t,r)),b(t,e,s.unknown,n),o}case "BlockStatement":{let{returns:s$1}=ze(e.body,n,t,void 0,void 0,r);return b(t,e,s$1.length?normalizeUnion(s$1):s.void,n),s$1}case "ForStatement":case "WhileStatement":case "DoWhileStatement":{let s$1=e,a=n;s$1.init&&(s$1.init.type==="VariableDeclaration"?a=We(s$1.init,a,t):S(s$1.init,a,t)),s$1.test&&S(s$1.test,a,t),s$1.update&&S(s$1.update,a,t);let o=z(s$1.body,a,t,r);return b(t,e,s.unknown,n),o}case "ForOfStatement":case "ForInStatement":{let s$1=e,a=S(s$1.right,n,t),o=e.type==="ForOfStatement"?Tn(a,s$1.right,t):s.string,i=Qn(s$1.left);i&&re(i,Hn(s$1.left),t);let l=i?U(n,{[i]:o}):n,u=z(s$1.body,l,t,r);return b(t,e,s.unknown,n),u}case "BreakStatement":case "ContinueStatement":return b(t,e,s.unknown,n),[];case "ThrowStatement":{let s$1=e.argument;return s$1&&S(s$1,n,t),b(t,e,s.unknown,n),[]}case "TryStatement":{let s$1=e,a=z(s$1.block,n,t,r);if(s$1.handler){let o=s$1.handler.param,i=o?L(o):null;i&&o&&re(i,o,t);let l=i?U(n,{[i]:s.unknown}):n;a.push(...z(s$1.handler.body,l,t,r));}return s$1.finalizer&&a.push(...z(s$1.finalizer,n,t,r)),b(t,e,s.unknown,n),a}case "SwitchStatement":{let s$1=e;S(s$1.discriminant,n,t);let a=n,o=[];for(let i of s$1.cases){i.test&&S(i.test,a,t);let l=ze(i.consequent,a,t,void 0,void 0,r);a=l.scope,o.push(...l.returns);}return b(t,e,s.unknown,n),o}default:return S(e,n,t),[]}}function ws(e,n,t){let r=discover(e,[n],t.schemes);return r?r.type:s.unknown}function Tn(e,n,t){let r=K(e,t.schemes);switch(r.t){case "array":return r.items;case "tuple":return r.elements.length?normalizeUnion([...r.elements]):s.unknown;case "string":return s.string;case "literal":if(typeof r.value=="string")return s.string;break;case "unknown":case "any":return s.unknown;case "union":return normalizeUnion(r.of.map(s=>Tn(s,n,t)));}return t.sink.report(y.notIterable(n,e)),s.any}function vs(e,n){let t=resolveTypeOp(s.index(e,s.literal(n)));return t.t==="index"?s.unknown:t}function Es(e,n){if(e.t!=="object")return e;let t={};for(let r in e.props)n.includes(r)||(t[r]=e.props[r]);return s.object(t,e.index)}function As(e,n){return e.t==="tuple"?s.tuple(e.elements.slice(n)):e.t==="array"?e:s.array(s.unknown)}function Z(e,n,t,r,s$1){switch(e.type){case "Identifier":{let a=Fe(e,r,s$1)??n;re(e.name,e,s$1),t[e.name]=a,s$1.overlay.set(e,{type:a,scope:r});return}case "AssignmentPattern":{let a=e,o=S(a.right,r,s$1);n.t!=="unknown"&&!subtype(o,n,s$1.schemes)&&s$1.sink.report(y.notAssignable(a.right,o,n,s$1.schemes));let i=widenType(o),{type:l}=withoutUndefined(n),u=l.t==="unknown"?i:normalizeUnion([l,i]),p=a.left;if(p.type==="Identifier"){let d=p.name;re(d,p,s$1),t[d]=u,s$1.overlay.set(p,{type:u,scope:r});}else Z(p,u,t,r,s$1);return}case "ObjectPattern":{let a=[];for(let o of e.properties){if(o.type==="RestElement"){Z(o.argument,Es(n,a),t,r,s$1);continue}let i=o,l=Re(i);l!=null&&a.push(l);let u=l!=null?ws(n,l,s$1):s.unknown;Z(i.value,u,t,r,s$1);}return}case "ArrayPattern":{e.elements.forEach((a,o)=>{if(!a)return;let i=a;i.type==="RestElement"?Z(i.argument,As(n,o),t,r,s$1):Z(i,vs(n,o),t,r,s$1);});return}}}function Pn(e,n,t){let r=K(n,t.schemes),a=(r.t==="union"?r.of.map(o=>K(o,t.schemes)):[r]).filter(o=>o.t==="object"&&(!o.index||o.index.key==="number"));if(a.length&&!a.some(o=>Object.keys(o.props).length===0&&!o.index))for(let o of e.properties){if(o.type==="SpreadElement")continue;let i=o;if(i.computed)continue;let l=Re(i);if(l===null)continue;let u=a.filter(p=>l in p.props||p.index?.key==="number"&&isNumericLiteralName(l));if(!u.length){t.sink.report(y.excessProperty(i.key,l,n));continue}i.value.type==="ObjectExpression"&&Pn(i.value,u[0].props[l].type,t);}}function We(e,n,t){let r={};for(let s$1 of e.declarations){let a=s$1.id,o=L(a);o&&re(o,a,t);let i=Fe(a,n,t);if(!s$1.init){if(o&&e.kind!=="const"){i?(r[o]=i,ht(o,i,t)):(r[o]=s.undefined,t.evolving.add(o));continue}t.sink.report(y.constNeedsInit(s$1)),o&&(r[o]=i??s.unknown);continue}let l=i??(s$1.init.type==="ArrowFunctionExpression"?nt(s$1.init):null),u=o&&l?U(n,{[o]:l}):n,p,d=null;i?(x(s$1.init,i,u,t),s$1.init.type==="ObjectExpression"&&Pn(s$1.init,i,t),p=i,d=i,(i.t==="union"||i.t==="boolean")&&s$1.init.type==="Literal"&&(p=Tt(i,le(s$1.init),t.schemes))):(p=S(s$1.init,u,t),e.kind!=="const"&&(p=widenLiteral(p)),d=p),b(t,s$1,p,n),o?(r[o]=p,e.kind!=="const"&&d&&ht(o,d,t)):Z(a,p,r,n,t);}return b(t,e,s.unknown,n),U(n,r)}function ht(e,n,t){(n.t==="union"||n.t==="boolean")&&t.declaredMut.set(e,n);}function Ds(e,n,t){let r=S(e.left,n,t),s$1=S(e.right,n,t),a=e.operator,o=we.get(a);if(!o)return s.boolean;if(o.category==="additive"){if(pe(r)||pe(s$1))return ue(r,t.schemes)||ue(s$1,t.schemes)?s.string:s.number;if(ue(r,t.schemes)&&ue(s$1,t.schemes))return s.string;if(Ie(r,t.schemes)&&Ie(s$1,t.schemes))return s.number;if(ue(r,t.schemes)||ue(s$1,t.schemes)){let l=ue(r,t.schemes)?s$1:r;return t.sink.report(y.implicitCoercion(e,r,s$1,Ft(l,t.schemes))),s.string}return t.sink.report(y.operatorNotApplicable(e,"+",r,s$1)),s.number}if(o.category==="arithmetic"||o.category==="bitwise")Ie(r,t.schemes)||t.sink.report(y.arithmeticOperand(e.left,"left")),Ie(s$1,t.schemes)||t.sink.report(y.arithmeticOperand(e.right,"right"));else if(o.category==="relational"&&!pe(r)&&!pe(s$1)){let i=apparentType(r,t.schemes),l=apparentType(s$1,t.schemes),u=subtype(i,s.number,t.schemes),p=subtype(l,s.number,t.schemes);u&&p||!u&&!p&&(subtype(i,l,t.schemes)||subtype(l,i,t.schemes))||t.sink.report(y.operatorNotApplicable(e,a,r,s$1));}return pn(o.result)}var pe=e=>e.t==="any"||e.t==="unknown",Ie=(e,n)=>pe(e)||subtype(apparentType(e,n),s.number,n),ue=(e,n)=>!pe(e)&&subtype(apparentType(e,n),s.string,n),Cs=s.union([s.string,s.number,s.boolean,s.null,s.undefined]),Ft=(e,n)=>pe(e)||subtype(apparentType(e,n),Cs,n),gt={string:s.literal(""),number:s.literal(0),boolean:s.literal(false)},kn=e=>e.t==="null"||e.t==="undefined";function Rs(e,n,t){if(n.t==="any"||n.t==="unknown")return normalizeUnion([n,t]);let r=n.t==="union"?[...n.of]:n.t==="boolean"?[s.literal(true),s.literal(false)]:[n];if(e==="??")return normalizeUnion([...r.filter(a=>!kn(a)),t]);if(e==="||")return normalizeUnion([...r.filter(a=>!kn(a)&&!(a.t==="literal"&&!a.value)),t]);let s$1=r.flatMap(a=>kn(a)?[a]:a.t==="literal"?a.value?[]:[a]:gt[a.t]?[gt[a.t]]:[]);return normalizeUnion([...s$1,t])}var Os=s.union(["string","number","bigint","boolean","symbol","undefined","object","function"].map(e=>s.literal(e)));function Ts(e,n,t){let r=S(e.argument,n,t);switch(e.operator){case "!":return r.t==="literal"?{t:"literal",value:!r.value,fresh:true}:s.boolean;case "-":return r.t==="literal"&&typeof r.value=="number"?{t:"literal",value:-r.value,fresh:true}:s.number;case "+":case "~":return s.number;case "typeof":return Os;case "delete":return s.boolean;case "void":return s.undefined;default:return s.unknown}}function Ps(e,n,t){let r={},s,a=[],o=[],i=false,l=false;for(let u of e.properties){let p=u;if(p.type==="SpreadElement"){let g=K(S(p.argument,n,t),t.schemes);if(g.t==="object"){for(let N in g.props)r[N]=g.props[N];g.index&&(s={key:g.index.key,type:g.index.value});}continue}let d=p,f=S(d.value,n,t),m=widen(f);if(b(t,p,f,n),d.computed){let g=K(S(d.key,n,t),t.schemes);g.t==="literal"&&typeof g.value=="string"?(r[g.value]={type:m},a.push(m)):g.t==="literal"&&typeof g.value=="number"?(r[String(g.value)]={type:m},a.push(m),o.push(m)):g.t==="string"?(i=true,a.push(m)):g.t==="number"&&(l=true,a.push(m),o.push(m));continue}let h=Re(d);h!==null&&(r[h]={type:m},a.push(m),/^\d+$/.test(h)&&o.push(m));}return i?s={key:"string",type:normalizeUnion(a)}:l&&(s={key:"number",type:normalizeUnion(o)}),s?{t:"object",props:r,index:{key:s.key,value:s.type}}:{t:"object",props:r}}function jt(e,n,t){let r=[];for(let s of e.elements){if(!s)continue;let a=s;if(a.type==="SpreadElement"){let o=K(S(a.argument,n,t),t.schemes);o.t==="array"?r.push(o.items):o.t==="tuple"&&r.push(...o.elements);continue}r.push(widen(S(a,n,t)));}return s.array(r.length?normalizeUnion(r):s.unknown)}function Mn(e,n,t,r){let s$1=K(n,r.schemes),a=e.elements,o=a.every(l=>l&&l.type!=="SpreadElement"),i=(l,u)=>l.type==="ArrayExpression"?Mn(l,u,t,r):ge(u)?S(l,t,r):widen(S(l,t,r));if(s$1.t==="tuple"&&o){let l=s$1.elements.length,u=restIndex(s$1),p=u<0?0:l-u-1,d=m=>{if(u<0||m<u)return s$1.elements[m];let h=a.length-m;return h<=p?s$1.elements[l-h]:s$1.elements[u]},f=a.map((m,h)=>{let g=d(h);return g?i(m,g):widen(S(m,t,r))});return b(r,e,{t:"tuple",elements:f},t)}if(s$1.t==="array"){let l=[];for(let u of a){if(!u)continue;let p=u;if(p.type==="SpreadElement"){S(p.argument,t,r);continue}l.push(i(p,s$1.items));}return b(r,e,s.array(l.length?normalizeUnion(l):s.unknown),t)}return jt(e,t,r)}function En(e,n,t,r){if(e===null)return s.null;switch(typeof e){case "string":return s.string;case "number":return s.number;case "boolean":return s.boolean;case "object":break;default:return s.unknown}if(Array.isArray(e)){let o=e.map(i=>En(i,n,t,r));return s.array(o.length?normalizeUnion(o):s.unknown)}let s$1=e;if("#expr"in s$1){let o;try{o=fromJson(s$1);}catch{return t.sink.report(y.unsupported(r,`'#expr: ${String(s$1["#expr"])}'`)),s.unknown}return S(o,n,t)}let a={};for(let o of Object.keys(s$1))a[o]={type:En(s$1[o],n,t,r)};return {t:"object",props:a}}function Ms(e,n){let t=apparentType(e,n);return t.t==="object"?Object.keys(t.props).length>0||t.index!==void 0:t.t==="intersection"?true:t.t==="array"?t.items.t!=="any"&&t.items.t!=="unknown":false}function Is(e,n,t,r,s){let a=ae(),o=x(e,n,t,{...r,sink:a},true);if(a.hasErrors()&&s)return;let i=l=>r.sink.all.some(u=>u.node===l.node&&u.code===l.code&&u.message===l.message);for(let l of a.all)i(l)||r.sink.report(l);return a.hasErrors()?n:o}var Fs=(e,n)=>({...e,typeAnnotation:n}),js=(e,n)=>({...e,returnType:n}),$s=(e,n)=>({type:"TSAsExpression",expression:e,typeAnnotation:n});function Fn(e,n){return e.get(n)?.type}function Us(e,n){return e.get(n)?.scope}function Ls(e,n){let t=e.get(n)?.type;return t?discover(t,[])?.completions??[]:[]}function Vs(e,n){let t=e.get(n)?.scope;return t?[...Qe(t)].map(([r,s])=>({key:r,type:s,optional:false})):[]}var Gs=e=>e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration";function Ks(e){if(!e||e.computed)return;let n=e.key;if(n?.type==="Identifier")return n.name;if(n?.type==="Literal"&&typeof n.value=="string")return n.value}function Je(e,n,t,r={}){let s$1=e[n],a=e[n+1];if(!(!s$1||!a))switch(a.type){case "ArrowFunctionExpression":case "FunctionExpression":return a.body===s$1?a.returnType:void 0;case "VariableDeclarator":return a.init===s$1?a.id?.typeAnnotation:void 0;case "TSAsExpression":return a.typeAnnotation;case "ReturnStatement":return e.slice(n+1).find(Gs)?.returnType;case "CallExpression":{let o=(a.arguments??[]).indexOf(s$1);if(o<0)return;let i=Fn(t,a.callee);return i?.t==="fn"?i.params?.[o]?.type:void 0}case "Property":{if(a.value!==s$1||e[n+2]?.type!=="ObjectExpression")return;let i=Je(e,n+2,t,r),l=Ks(a);return !i||!l?void 0:discover(i,[l],r)?.type}case "ArrayExpression":{let o=Je(e,n+1,t,r);return o?discover(o,["[]"],r)?.type:void 0}case "BinaryExpression":{let o=we.get(a.operator);if(!o)return;if(o.category==="arithmetic"||o.category==="bitwise")return s.number;let i=a.left===s$1?a.right:a.left,l=Fn(t,i);return l&&l.t!=="any"&&l.t!=="unknown"?l:void 0}case "LogicalExpression":return Je(e,n+1,t,r);case "UnaryExpression":{let o=a.operator;return o==="-"||o==="+"||o==="~"?s.number:void 0}default:return}}function qs(e,n){return e.filter(t=>t.node===n)}export{we as BINARY_OP,cn as BINARY_OPS,Kn as FUNCTION_KINDS,nr as LOGICAL_OPS,Wn as UNARY_OPS,Fs as annotate,js as annotateReturn,$s as asExpression,tr as binaryOpsProducing,nn as calleeAllowlist,en as capabilityNodes,Nt as check,U as childScope,pr as collectBindings,hn as collectMutations,fn as collectUnused,rs as componentProps,Rn as componentPropsOf,Je as contextualTypeAt,Kt as createEnv,ae as createSink,y as diag,qs as diagnosticsAt,Yr as extractModuleType,Zt as fromCapability,Ze as guard,Ue as guardsFromCompiled,R as lookup,O as makeDiagnostic,ln as maxArgs,rn as maxCallNesting,an as maxDepth,tn as maxFunctionNesting,$e as maxNestingOf,on as maxNodes,Ls as memberCompletions,sn as memberDepth,pn as opResultSchema,qt as resolveNamed,_t as resolveScheme,un as resultType,Ln as rootScope,Us as scopeAt,Vs as scopeCompletions,Fn as typeAt,rr as unaryOpsProducing,Qe as visibleNames};
1
+ import {s,format,typeDiff,formatTypeDiff,subtype,configureTypeLimits,TypeEvalLimitError,UnionTooComplexError,resetTypeLimits,discover,normalizeUnion,apparentType,widenLiteral,resolveTypeOp,isScheme,expand1,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.9.4",
3
+ "version": "0.11.0",
4
4
  "description": "TSLite type system — a structural type checker over the AST (the 'TypeScript of TSLite')",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -39,13 +39,14 @@
39
39
  "access": "public"
40
40
  },
41
41
  "dependencies": {
42
- "@tslite/capability": "0.4.1",
43
- "@tslite/codec": "0.6.1",
44
- "@tslite/type-core": "0.3.4",
45
- "@tslite/core": "0.8.2"
42
+ "@tslite/capability": "0.6.0",
43
+ "@tslite/codec": "0.7.0",
44
+ "@tslite/language-service": "0.4.0",
45
+ "@tslite/type-core": "0.5.0",
46
+ "@tslite/core": "0.9.0"
46
47
  },
47
48
  "devDependencies": {
48
- "@tslite/parser": "1.3.0"
49
+ "@tslite/parser": "1.3.1"
49
50
  },
50
51
  "scripts": {
51
52
  "build": "tsup",