@tslite/parser 1.7.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- 'use strict';var ast=require('@tslite/ast');var re=class extends ast.TSLiteError{constructor(a,p,d,g,P){super("lex-error",`${a} (${p.line}:${p.column})`,{position:p,index:d,loc:g,end:P});this.position=p;this.index=d;this.loc=g;this.end=P;this.name="LexError";}},Me=new Set(["const","if","else","return","async","await","true","false","null","typeof","let","var","function","class","new","for","while","do","this","throw","try","catch","finally","switch","case","break","continue","default","void","delete","instanceof","in","yield","import","export","extends","super","debugger","with","enum","interface"]),vt=["...","===","!==","=>","?.","??=","&&=","||=","**=","??","==","!=","<=",">=","&&","||","|","&","++","--","+=","-=","*=","/=","%=","**","<<","+","-","*","/","%","<",">","!","?",":",".",",",";","=","^","~","(",")","[","]","{","}"],Te=n=>n>="a"&&n<="z"||n>="A"&&n<="Z"||n==="_"||n==="$",ge=n=>Te(n)||n>="0"&&n<="9",ne=n=>n>="0"&&n<="9",Xe=n=>ne(n)||n>="a"&&n<="f"||n>="A"&&n<="F",xt=n=>ge(n)||n==="-",de=n=>n===`
2
- `||n==="\r"||n==="\u2028"||n==="\u2029",he=(n,u)=>{let a=u;for(;;){let p=n[a]??"";if(p===" "||p===" "||p==="\f"||p==="\v"||de(p))a++;else if(p==="/"&&n[a+1]==="/")for(a+=2;a<n.length&&!de(n[a]??"");)a++;else if(p==="/"&&n[a+1]==="*"){for(a+=2;a<n.length&&!(n[a]==="*"&&n[a+1]==="/");)a++;a+=2;}else return a}},St=(n,u)=>{if(!Te(n[u]??""))return u;let a=u+1;for(;ge(n[a]??"");)a++;return a},Ke=(n,u,a)=>n.startsWith(a,u)&&!ge(n[u+a.length]??""),kt=(n,u)=>{let a=he(n,u);Ke(n,a,"const")&&(a=he(n,a+5));let p=St(n,a);if(p===a)return false;if(a=he(n,p),Ke(n,a,"extends")){let d=he(n,a+7),g=n[d]??"";return !(g==="="||g===">"||g==="/")}return n[a]===","?true:n[a]==="="&&n[a+1]!==">"},wt=new Set(["(","[","{",",",";",":","?","=>","...","=","+","-","*","/","%","<","<=",">",">=","==","===","!=","!==","&&","||","??","!","+=","-=","*=","/=","%=","??=","&&=","||=","**="]),Pt=new Set(["return","typeof","await","delete","void","in","instanceof","else","case","yield","throw"]);function Nt(n,u,a){return we(n,u,a).scan()}function we(n,u,a){let p=[],d=0,g=1,P=0,X=()=>({line:g,column:P}),h=(b=0)=>n[d+b]??"",$=b=>{let c=X(),f={start:c,end:{line:g,column:P+1}};if(a){a({message:b,position:c,index:d,loc:f,end:d+1});return}throw new re(b,c,d,f,d+1)},k=()=>{let b=n[d++];return b==="\r"?(n[d]===`
3
- `&&d++,g++,P=0):b===`
4
- `||b==="\u2028"||b==="\u2029"?(g++,P=0):P++,b},w=()=>{for(;;){let b=h();if(b===" "||b===" "||b==="\f"||b==="\v"||de(b))k();else if(b==="/"&&h(1)==="/"){let c=d,f=X();k(),k();let i=d;for(;d<n.length&&!de(h());)k();u?.({type:"Line",value:n.slice(i,d),start:c,end:d,loc:{start:f,end:X()}});}else if(b==="/"&&h(1)==="*"){let c=d,f=X();k(),k();let i=d,y=d;for(;;){if(d>=n.length){$("Unterminated block comment"),y=d;break}if(h()==="*"&&h(1)==="/"){y=d,k(),k();break}k();}u?.({type:"Block",value:n.slice(i,y),start:c,end:d,loc:{start:f,end:X()}});}else break}},o=(b,c,f,i)=>{p.push({type:b,value:c,start:f,end:d,loc:{start:i,end:X()}}),j=b==="Punctuator"?wt.has(c):b==="Keyword"?Pt.has(c):b==="TemplateHead"||b==="TemplateMiddle";},V=b=>{for(k();d<n.length;){let c=h();if(c===b)return k(),n.slice(s,d);if(de(c))return $("Unterminated string literal"),n.slice(s,d);if(c==="\\"){if(k(),d>=n.length)return $("Unterminated string literal"),n.slice(s,d);k();continue}k();}return $("Unterminated string literal"),n.slice(s,d)},W=()=>{if(h()==="0"&&(h(1)==="x"||h(1)==="X")){if(k(),k(),!Xe(h()))return $("Invalid hexadecimal literal");for(;Xe(h());)k();return}if(h()==="0"&&(h(1)==="b"||h(1)==="B")){if(k(),k(),h()!=="0"&&h()!=="1")return $("Invalid binary literal");for(;h()==="0"||h()==="1";)k();return}if(h()==="0"&&(h(1)==="o"||h(1)==="O")){if(k(),k(),!(h()>="0"&&h()<="7"))return $("Invalid octal literal");for(;h()>="0"&&h()<="7";)k();return}for(;ne(h());)k();if(h()===".")for(k();ne(h());)k();if(h()==="e"||h()==="E"){if(k(),(h()==="+"||h()==="-")&&k(),!ne(h()))return $("Invalid exponent");for(;ne(h());)k();}},J=()=>{let b=d;for(;d<n.length;){let c=h();if(c==="`"){let f=n.slice(b,d);return k(),{raw:f,interp:false}}if(c==="$"&&h(1)==="{"){let f=n.slice(b,d);return k(),k(),{raw:f,interp:true}}if(c==="\\"){if(k(),d>=n.length)break;k();continue}k();}return $("Unterminated template literal"),{raw:n.slice(b,d),interp:false}},s=0,N=0,U=[],j=true,D="js",S=[],C=[],T=new Map,z=-1,A=()=>({i:d,line:g,col:P,mode:D,braceDepth:N,tmplStack:[...U],jsxParent:[...S],jsxExpr:C.map(b=>({...b}))}),G=b=>{d=b.i,g=b.line,P=b.col,D=b.mode,N=b.braceDepth,U=[...b.tmplStack],S=[...b.jsxParent],C=b.jsxExpr.map(c=>({...c}));},le=()=>(p=[],pe(),p),pe=()=>{for(;;){if(D==="jsxChildren"){s=d;let i=X();if(d>=n.length){o("EOF","",s,i);break}let y=h();if(y==="<"){h(1)==="/"?(k(),k(),o("Punctuator","</",s,i),D="jsxCloseTag"):(k(),o("Punctuator","<",s,i),S.push("jsxChildren"),D="jsxOpenTag");continue}if(y==="{"){k(),o("Punctuator","{",s,i),C.push({level:N,restore:"jsxChildren"}),D="js";continue}for(;d<n.length&&h()!=="<"&&h()!=="{";)k();o("JSXText",n.slice(s,d),s,i);continue}if(D==="jsxOpenTag"||D==="jsxCloseTag"){w(),s=d;let i=X();if(d>=n.length){o("EOF","",s,i);break}let y=h();if(Te(y)){for(k();xt(h());)k();o("Identifier",n.slice(s,d),s,i);continue}if(y==="/"&&h(1)===">"){k(),k(),o("Punctuator","/>",s,i),D=S.pop()??"js";continue}if(y===">"){k(),o("Punctuator",">",s,i),D=D==="jsxCloseTag"?S.pop()??"js":"jsxChildren";continue}if(y==="{"){k(),o("Punctuator","{",s,i),C.push({level:N,restore:D}),D="js";continue}if(y==='"'||y==="'"){o("String",V(y),s,i);continue}if(y==="="||y==="."||y===":"){k(),o("Punctuator",y,s,i);continue}if(y==="<"&&D==="jsxOpenTag"){k(),o("Punctuator","<",s,i),S.push("jsxOpenTag");continue}$(`Unexpected character '${y}' in JSX tag`),k(),o("Unknown",y,s,i);continue}w(),s=d;let b=X();if(d>=n.length){o("EOF","",s,b);break}let c=h();if(Te(c)){for(;ge(h());)k();let i=n.slice(s,d);o(Me.has(i)?"Keyword":"Identifier",i,s,b);continue}if(ne(c)||c==="."&&ne(h(1))){W(),o("Number",n.slice(s,d),s,b);continue}if(c==='"'||c==="'"){let i=V(c);o("String",i,s,b);continue}if(c==="`"){k();let{raw:i,interp:y}=J();y?(o("TemplateHead",i,s,b),U.push(N)):o("Template",i,s,b);continue}if(c==="<"&&d===z){z=-1,k(),o("Punctuator","<",s,b);continue}if(c==="<"&&j&&!kt(n,d+1)){T.set(d,A()),k(),o("Punctuator","<",s,b),S.push("js"),D="jsxOpenTag";continue}if(c==="{"){k(),o("Punctuator","{",s,b),N++;continue}if(c==="}"){if(U.length>0&&N===U[U.length-1]){U.pop(),k();let{raw:i,interp:y}=J();o(y?"TemplateMiddle":"TemplateTail",i,s,b),y&&U.push(N);continue}if(C.length>0&&N===C[C.length-1].level){let{restore:i}=C.pop();k(),o("Punctuator","}",s,b),D=i;continue}k(),o("Punctuator","}",s,b),N--;continue}if(c==="?"&&h(1)==="."&&ne(h(2))){k(),o("Punctuator","?",s,b);continue}let f=vt.find(i=>n.startsWith(i,d));if(f){for(let i=0;i<f.length;i++)k();o("Punctuator",f,s,b);continue}$(`Unexpected character '${c}'`),k(),o("Unknown",c,s,b);}};return {scan:le,opensJsx:b=>T.has(b),rescanLessThan:b=>{let c=T.get(b);return c?(G(c),z=b,le()):null}}}var Et=new Set(["leadingComments","trailingComments","innerComments","comments"]),Ue=n=>typeof n=="object"&&n!==null&&typeof n.type=="string"&&n.loc!=null&&typeof n.start=="number",$e=new WeakMap;function It(n){let u=$e.get(n);if(u)return u;let a=[];for(let p of Object.keys(n)){if(Et.has(p))continue;let d=n[p];if(Ue(d))a.push(d);else if(Array.isArray(d))for(let g of d)Ue(g)&&a.push(g);}return a.sort((p,d)=>p.start-d.start),$e.set(n,a),a}function Ct(n,u){let a=n,p,d;for(;;){let g=It(a);p=void 0,d=void 0;let P;for(let X of g){if(X.start<=u.start&&u.end<=X.end){P=X;break}if(X.end<=u.start)p=X;else if(u.end<=X.start){d=X;break}}if(!P)break;a=P;}return {enclosing:a,preceding:p,following:d}}var Pe=(n,u)=>{(n.leadingComments??(n.leadingComments=[])).push(u);},be=(n,u)=>{(n.trailingComments??(n.trailingComments=[])).push(u);},Ne=(n,u)=>{(n.innerComments??(n.innerComments=[])).push(u);};function Lt(n,u){for(let a=u;a<n.length;a++){let p=n[a];if(p!==" "&&p!==" "&&p!=="\r"&&p!==`
5
- `&&p!=="\f")return p}return ""}var Rt=new Set([")","]","}",","]);function Ee(n,u,a=""){for(let p of u){let{enclosing:d,preceding:g,following:P}=Ct(n,p),X=g==null||g.loc.end.line<p.loc.start.line,h=!X&&(P==null||p.loc.end.line<P.loc.start.line);if(X)P?Pe(P,p):g?be(g,p):Ne(d,p);else if(h)g?be(g,p):P?Pe(P,p):Ne(d,p);else {let $=Rt.has(Lt(a,p.end));g&&$?be(g,p):P?Pe(P,p):g?be(g,p):Ne(d,p);}}}var jt=Object.prototype.hasOwnProperty,ve=(n,u)=>jt.call(n,u)?n[u]:void 0;function Be(n,u,a){u==="__proto__"?Object.defineProperty(n,u,{value:a,enumerable:true,writable:true,configurable:true}):n[u]=a;}var At=(n=[])=>({vars:new Set(n),bounds:new Map,noCond:false,inferSink:null}),ie=(n,u)=>{let a=new Set(n.vars),p=new Map(n.bounds);for(let d of u)a.add(d.name),d.bound?p.set(d.name,{bound:d.bound}):p.delete(d.name);return {vars:a,bounds:p,noCond:n.noCond,inferSink:n.inferSink}},Ie=n=>({t:"var",name:n.name,...n.bound?{bound:n.bound}:{},...n.default?{default:n.default}:{}}),Ot=(n,u)=>{let a=n.bounds.get(u)?.bound;return a?{t:"var",name:u,bound:a}:{t:"var",name:u}},_e=n=>{let{peek:u,next:a,isP:p,isK:d,expectP:g,fail:P,unescape:X}=n,h=(c,f)=>{let i=n.tokens[n.pos()-1]??f;return Object.assign(c,{start:f.start,end:i.end,loc:{start:f.loc.start,end:i.loc.end}})},$=()=>{let c=n.pos(),f=n.tokens[c],i=n.tokens[c-1];return !!i&&!!f&&f.loc.start.line>i.loc.end.line},k=()=>{let c=v=>n.tokens[n.pos()+v],f=(v,...x)=>v?.type==="Punctuator"&&x.includes(v.value),i=c(1);if(f(i,")","..."))return true;if(i?.type!=="Identifier")return false;let y=c(2);return f(y,":",",","?","=")?true:f(y,")")&&f(c(3),"=>")},w=()=>{let c=n.tokens,f=[],i=0,y=false;for(let v=n.pos();v<c.length;v++){let x=c[v];if(x.type==="EOF")break;if(x.type==="Punctuator"){if(x.value==="<")i++,i===1&&(y=true);else if(x.value===">"){if(i--,i===0)break}else x.value==="("||x.value==="["||x.value==="{"?(i++,y=false):x.value===")"||x.value==="]"||x.value==="}"?(i--,y=false):x.value===","&&i===1?y=true:y=false;continue}if(i===1&&y){if(x.type==="Keyword"&&x.value==="const")continue;if(x.type==="Identifier"){f.push(x.value),y=false;continue}}y=false;}return f},o=c=>{let f=ie(c,w().map(y=>({name:y})));g("<");let i=[];for(;!p(">");){let y=u();d("const")&&P("'const' type parameters are not supported in this language; a constraint keeps the literal: '<T extends string>'");let v=u();v.type!=="Identifier"&&P("Expected type parameter name"),a();let x,E;if(d("extends")){a();let R=J(f);x=R.schema,E=R.node;}let O,K;if(p("=")){a();let R=J(f);O=R.schema,K=R.node;}i.push(h({type:"TSTypeParameter",name:v.value,...x?{bound:x}:{},...E?{boundNode:E}:{},...O?{default:O}:{},...K?{defaultNode:K}:{}},y)),p(">")||g(",");}return g(">"),i},V=c=>{n.splitShiftLeft(),g("<");let f=[];for(;!p(">");)f.push(J(c)),p(">")||g(",");return g(">"),f},W=c=>{let f=u();return f.type==="Identifier"&&f.value===c},J=c=>{let f=u(),i=s(c);if(c.noCond||!d("extends")||$())return i;a();let y=[],v=s({...c,noCond:true,inferSink:y});g("?");let x=ie(c,y.map(K=>({name:K}))),E=J(x);g(":");let O=J(x);return {node:h({type:"TSConditionalType",checkType:i.node,extendsType:v.node,trueType:E.node,falseType:O.node},f),schema:{t:"conditional",check:i.schema,extends:v.schema,then:E.schema,else:O.schema,...y.length?{infer:y.map(K=>Ie({name:K}))}:{}}}},s=c=>{let f=u();p("|")&&a();let i=N(c);if(!p("|"))return i;let y=[i.node],v=[i.schema];for(;p("|");){a();let x=N(c);y.push(x.node),v.push(x.schema);}return {node:h({type:"TSUnionType",types:y},f),schema:{t:"union",of:v}}},N=c=>{let f=u();p("&")&&a();let i=U(c);if(!p("&"))return i;let y=[i.node],v=[i.schema];for(;p("&");){a();let x=U(c);y.push(x.node),v.push(x.schema);}return {node:h({type:"TSIntersectionType",types:y},f),schema:{t:"intersection",of:v}}},U=c=>{let f=u();if(W("keyof")){a();let i=U(c);return {node:h({type:"TSTypeOperator",operator:"keyof",typeAnnotation:i.node},f),schema:{t:"keyof",of:i.schema}}}if(W("readonly")){a();let i=U(c);return i.schema.t!=="array"&&i.schema.t!=="tuple"&&P("'readonly' only applies to array and tuple types"),{node:h({...i.node,readonly:true},f),schema:{...i.schema,readonly:true}}}if(W("infer")){a();let i=u();i.type!=="Identifier"&&P("Expected 'infer' variable name"),a();let y=c.inferSink;return y?(y.push(i.value),{node:h({type:"TSInferType",name:i.value},f),schema:{t:"var",name:i.value}}):P("'infer' is only allowed in the 'extends' clause of a conditional")}return j(c)},j=c=>{let f=u(),i=S(c);for(;p("[")&&!$();)if(a(),p("]"))a(),i={node:h({type:"TSArrayType",elementType:i.node},f),schema:{t:"array",items:i.schema}};else {let y=J(c);g("]"),i={node:h({type:"TSIndexedAccessType",objectType:i.node,indexType:y.node},f),schema:{t:"index",obj:i.schema,key:y.schema}};}return i},D=(c,f,i)=>({node:h({type:"TSKeywordType",kind:f},c),schema:i}),S=c=>{let f=u();if(d("typeof")){a();let v=u();v.type!=="Identifier"&&P("Expected a name after 'typeof' in type position"),a();let x=[v.value];for(;p(".");){a();let E=u();E.type!=="Identifier"&&E.type!=="Keyword"&&P("Expected a property name after '.' in 'typeof'"),a(),x.push(E.value);}return {node:h({type:"TSTypeQuery",exprName:x},f),schema:{t:"typeQuery",path:x}}}if(p("<")){n.rescanTypeLessThan();let v=o(c),x=ie(c,v);return z(x,f,v)}if(p("(")){if(k())return z(c,f);a();let v=J(c.noCond?{...c,noCond:false}:c);return g(")"),v}if(p("{"))return G()?le(c):pe(c);if(p("["))return A(c);let i=u();if(i.type==="String"){a();let v=X(i.value.slice(1,-1));return {node:h({type:"TSLiteralType",literal:v},f),schema:{t:"literal",value:v}}}if(i.type==="Number"){a();let v=Number(i.value);return {node:h({type:"TSLiteralType",literal:v},f),schema:{t:"literal",value:v}}}if(d("true"))return a(),{node:h({type:"TSLiteralType",literal:true},f),schema:{t:"literal",value:true}};if(d("false"))return a(),{node:h({type:"TSLiteralType",literal:false},f),schema:{t:"literal",value:false}};if(d("null"))return a(),D(f,"null",{t:"null"});if(d("void"))return a(),D(f,"void",{t:"void"});if(i.type==="Identifier"){switch(a(),i.value){case "string":return D(f,"string",{t:"string"});case "number":return D(f,"number",{t:"number"});case "boolean":return D(f,"boolean",{t:"boolean"});case "any":return D(f,"any",{t:"any"});case "unknown":return D(f,"unknown",{t:"unknown"});case "undefined":return D(f,"undefined",{t:"undefined"});case "never":return D(f,"never",{t:"union",of:[]});case "object":return D(f,"object",{t:"nonPrimitive"})}let v=p("<")||p("<<")?V(c):[],x=v.map(K=>K.schema),E=v.length?v.map(K=>K.node):void 0,O=h({type:"TSTypeReference",typeName:i.value,...E?{typeArguments:E}:{}},f);return c.vars.has(i.value)&&x.length===0?{node:O,schema:Ot(c,i.value)}:(n.typeRefs?.push({name:i.value,loc:i.loc,args:x}),{node:O,schema:{t:"apply",name:i.value,args:x}})}n.recordError(`Expected a type but got '${i.value||i.type}'`,i);let y=n.createMissingNode({type:"TSTypeReference",typeName:""},i);return n.typeRefs?.push({name:"",loc:y.loc,args:[]}),{node:y,schema:{t:"unknown"}}},C=c=>{g("(");let f=[];for(;!p(")");){let i=u(),y=p("...");y&&a();let v=u();v.type!=="Identifier"&&P("Expected parameter name in function type"),a();let x=!y&&p("?");x&&a(),g(":");let E=J(c),O=h({type:"Identifier",name:v.value,typeAnnotationNode:E.node,...x?{optional:true}:{}},v);f.push({node:y?h({type:"RestElement",argument:O},i):O,schema:{name:v.value,type:E.schema,...x?{optional:true}:{},...y?{variadic:true}:{}}}),y&&!p(")")&&P("A rest parameter must be last in a parameter list"),p(")")||g(",");}return g(")"),f},T=(c,f)=>{let i=u(),y=n.tokens[n.pos()+1];if(!(i.type==="Identifier"&&y?.type==="Identifier"&&y.value==="is"))return J(c);let x=f.indexOf(i.value);x<0&&P(`Cannot find parameter '${i.value}' for the type predicate`),a(),a();let E=J(c);return {node:h({type:"TSTypePredicate",parameterName:i.value,typeAnnotation:E.node},i),schema:{t:"boolean"},guard:{param:x,type:E.schema}}},z=(c,f,i)=>{let y=C(c);g("=>");let v=T(c,y.map(x=>x.schema.name));return {node:h({type:"TSFunctionType",params:y.map(x=>x.node),returnType:v.node,...i?.length?{typeParameters:[...i]}:{}},f),schema:{t:"fn",params:y.map(x=>x.schema),returns:v.schema,...v.guard?{guard:v.guard}:{},...i?.length?{typeParams:i.map(Ie)}:{}}}},A=c=>{let f=u();g("[");let i=[],y=[],v=[],x=[],E=()=>{let R=n.tokens[n.pos()],F=n.tokens[n.pos()+1],B=n.tokens[n.pos()+2];if(R?.type==="Identifier"&&F?.type==="Punctuator"&&(F.value===":"||F.value==="?"&&B?.type==="Punctuator"&&B.value===":"))return a(),R.value};for(;!p("]");){if(v[v.length-1]==="rest"&&P("A rest element must be last in a tuple type"),p("...")){a();let R=E();R!==void 0&&g(":"),x.push(R);let F=J(c);F.schema.t!=="array"&&P("A rest element type must be written as an array type ('...T[]')"),y.push(F.schema.items),i.push(F.node.elementType),v.push("rest");}else {let R=E(),F=false;R!==void 0&&(p("?")&&(a(),F=true),g(":")),x.push(R);let B=J(c);!F&&p("?")&&(a(),F=true),y.push(B.schema),i.push(B.node),v.push(F?"optional":"req");}p("]")||g(",");}g("]");let O=v.some(R=>R!=="req"),K=x.some(R=>R!==void 0);return {node:h({type:"TSTupleType",elementTypes:i,...O?{flags:v}:{},...K?{labels:x}:{}},f),schema:O?{t:"tuple",elements:y,flags:v}:{t:"tuple",elements:y}}},G=()=>{let c=n.tokens,f=n.pos()+1;return c[f]?.type==="Punctuator"&&(c[f]?.value==="+"||c[f]?.value==="-")&&(f++,!(c[f]?.type==="Identifier"&&c[f]?.value==="readonly"))?false:(c[f]?.type==="Identifier"&&c[f]?.value==="readonly"&&f++,c[f]?.type==="Punctuator"&&c[f]?.value==="["&&c[f+1]?.type==="Identifier"&&c[f+2]?.type==="Keyword"&&c[f+2]?.value==="in")},le=c=>{let f=u();g("{");let i=p("+")||p("-")?a().value:null,y;W("readonly")&&(a(),y=i==="+"?"+":i==="-"?"-":true),g("[");let v=u();v.type!=="Identifier"&&P("Expected mapped type key name"),a(),d("in")||P("Expected 'in' in mapped type"),a();let x=J(c);W("as")&&P("Key remapping ('as') in mapped types is not supported"),g("]");let E=p("+")||p("-")?a().value:null,O;E!==null&&!p("?")&&P("'?' expected"),p("?")&&(a(),O=E==="+"?"+":E==="-"?"-":true),g(":");let K=J(ie(c,[{name:v.value}]));return (p(";")||p(","))&&a(),g("}"),{node:h({type:"TSMappedType",key:v.value,constraint:x.node,typeAnnotation:K.node,...y!==void 0?{readonly:y}:{},...O!==void 0?{optional:O}:{}},f),schema:{t:"mapped",key:v.value,over:x.schema,body:K.schema,...O===true||O==="+"?{optional:true}:{},...O==="-"?{excludeOptional:true}:{},...y===true||y==="+"?{readonly:true}:{},...y==="-"?{excludeReadonly:true}:{}}}},pe=c=>{let f=u();g("{");let i=[],y={},v,x=[];for(;!p("}");){let O=u(),K=W("readonly")&&n.tokens[n.pos()+1]?.value==="[";if(K&&a(),!K&&(p("(")||p("<"))){p("<")&&n.rescanTypeLessThan();let R=p("<")?o(c):[],F=R.length?ie(c,R):c,B=C(F);g(":");let q=T(F,B.map(Y=>Y.schema.name));x.push({t:"fn",params:B.map(Y=>Y.schema),returns:q.schema,...q.guard?{guard:q.guard}:{},...R.length?{typeParams:R.map(Ie)}:{}}),i.push(h({type:"TSCallSignatureDeclaration",params:B.map(Y=>Y.node),returnType:q.node,...R.length?{typeParameters:R}:{}},O));}else if(p("[")){a(),u().type!=="Identifier"&&P("Expected index signature parameter name"),a(),g(":");let R=u();(R.type!=="Identifier"||R.value!=="string"&&R.value!=="number")&&P("Index signature parameter type must be 'string' or 'number'"),a(),g("]"),g(":");let F=J(c);v={key:R.value,value:F.schema,...K?{readonly:true}:{}},i.push(h({type:"TSIndexSignature",keyType:R.value,typeAnnotation:F.node,...K?{readonly:true}:{}},O));}else {let R=false;if(W("readonly")){let se=n.tokens[n.pos()+1];se&&(se.type==="Identifier"||se.type==="Keyword"||se.type==="String"||se.type==="Number")&&(a(),R=true);}let F=u(),B;if(F.type==="Identifier"||F.type==="Keyword")a(),B=F.value;else if(F.type==="String")a(),B=X(F.value.slice(1,-1));else if(F.type==="Number")a(),B=F.value;else return P("Expected property name in object type");let q=p("?");q&&a(),g(":");let Y=J(c);Be(y,B,{type:Y.schema,...q?{optional:true}:{},...R?{readonly:true}:{}}),i.push(h({type:"TSPropertySignature",key:B,typeAnnotation:Y.node,...q?{optional:true}:{},...R?{readonly:true}:{}},O));}if(p(";")||p(","))a();else break}g("}");let E=h({type:"TSTypeLiteral",members:i},f);return x.length>0?Object.keys(y).length>0||v?P("Callable object types (call signatures mixed with members) are not supported"):{node:E,schema:x.length===1?x[0]:{t:"overload",signatures:x}}:{node:E,schema:{t:"object",props:y,...v?{index:v}:{}}}},b=At();return {parseType:()=>J(b),parseReturnType:c=>T(b,c),parseTypeParamList:()=>o(b),parseTypeInScope:c=>J(ie(b,c)),withTypeParams:(c,f)=>{let i=b;b=ie(i,c);try{return f()}finally{b=i;}}}};var oe=class extends ast.TSLiteError{constructor(a,p,d,g,P){super("parse-error",`${a} (${p.line}:${p.column})`,{position:p,index:d,loc:g,end:P});this.position=p;this.index=d;this.loc=g;this.end=P;this.name="ParseError";}},Jt=n=>{let u=n;return u!=null&&typeof u.start=="number"&&u.start===u.end&&u.start>=0},Ve=(n,u)=>Object.assign(n,{start:u.start,end:u.start,loc:{start:u.loc.start,end:u.loc.start}}),Ft={"??":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"==":7,"===":7,"!=":7,"!==":7,"<":8,"<=":8,">":8,">=":8,in:8,as:8,satisfies:8,"<<":9,">>":9,">>>":9,"+":10,"-":10,"*":11,"/":11,"%":11,"**":12},Xt=new Set(["??","||","&&"]),Kt=new Set(["class","debugger","with","enum","interface"]),Mt={enum:'use a union of literals (`type T = "a" | "b"`) \u2014 it is serializable',interface:"use a type alias (`type X = { \u2026 }`)",namespace:"use modules (`import`/`export`)",module:"use modules (`import`/`export`)",declare:"declare the shape via the DI env, or with a `type` alias",abstract:"classes are not part of the language \u2014 model with objects + functions"},Ut={namespace:(n,u)=>n.type==="Identifier"&&u.type==="Punctuator"&&u.value==="{",module:(n,u)=>n.type==="Identifier"&&u.type==="Punctuator"&&u.value==="{",declare:n=>n.type==="Keyword"&&["const","let","var","function","class","enum","interface"].includes(n.value)||n.type==="Identifier"&&["type","namespace","module"].includes(n.value),abstract:n=>n.type==="Keyword"&&n.value==="class"},$t=new Set(["=","+=","-=","*=","/=","%=","**=","??=","&&=","||="]),ze=(n,u)=>{let a=0;for(let p of n)u(p)&&(n[a++]=p);n.length=a;};function Ce(n){let u=[],a=[],p=we(n,e=>a.push(e),e=>u.push({code:"lex-error",...e})),d=p.scan(),g=0,P=[],X=e=>{for(;P.length>e;)P.pop()();},h=(e=g)=>{let t=d[e];if(t?.type!=="Punctuator"||t.value!=="<"||!p.opensJsx(t.start))return;let r=d.slice(e),l=u.slice(),m=a.slice();ze(u,I=>I.code!=="lex-error"||I.index<t.start),ze(a,I=>I.start<t.start);let L=p.rescanLessThan(t.start);d.splice(e,d.length-e,...L),P.push(()=>{d.splice(e,d.length-e,...r),u.splice(0,u.length,...l),a.splice(0,a.length,...m);});},$=()=>{let e=d[g];if(e?.type!=="Punctuator"||e.value!=="<<")return;let t={line:e.loc.start.line,column:e.loc.start.column+1},r=g;d.splice(r,1,{...e,value:"<",end:e.start+1,loc:{start:e.loc.start,end:t}},{...e,value:"<",start:e.start+1,loc:{start:t,end:e.loc.end}}),P.push(()=>d.splice(r,2,e));},k=[],w=(e=0)=>d[Math.min(g+e,d.length-1)],o=()=>d[g++],V=()=>d[g-1],W=()=>{let e=d[g],t=d[g-1];return !!e&&!!t&&e.loc.start.line>t.loc.end.line},J=()=>w().type==="EOF",s=e=>w().type==="Punctuator"&&w().value===e,N=e=>w().type==="Keyword"&&w().value===e,U=e=>w().type==="Identifier"&&w().value===e,j=(e,t=w())=>{throw D(e,t),new oe(e,t.loc.start,t.start,t.loc,t.end)},D=(e,t=w())=>{let r=u[u.length-1];r&&r.index===t.start||u.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},S=e=>(s(e)||j(`Expected '${e}' but got '${w().value||w().type}'`),o()),C=(e,t)=>{let r=V()??t;return Object.assign(e,{start:t.start,end:r.end,loc:{start:t.loc.start,end:r.loc.end}})},T=(e,t,r)=>Object.assign(e,{start:t.start,end:r.end,loc:{start:t.loc.start,end:r.loc.end}}),z=e=>{let t="";for(let r=0;r<e.length;r++){if(e[r]!=="\\"){t+=e[r];continue}let l=e[++r];switch(l){case "n":t+=`
6
- `;break;case "t":t+=" ";break;case "r":t+="\r";break;case "b":t+="\b";break;case "f":t+="\f";break;case "v":t+="\v";break;case "0":t+="\0";break;case "x":t+=String.fromCharCode(parseInt(e.slice(r+1,r+3),16)),r+=2;break;case "u":if(e[r+1]==="{"){let m=e.indexOf("}",r);t+=String.fromCodePoint(parseInt(e.slice(r+2,m),16)),r=m;}else t+=String.fromCharCode(parseInt(e.slice(r+1,r+5),16)),r+=4;break;default:t+=l;}}return t},A=(e=false)=>G(e),G=(e=false)=>{let t=le(e),r=w();if(r.type==="Punctuator"&&$t.has(r.value)){o();let l=G();return T({type:"AssignmentExpression",operator:r.value,left:t,right:l},t,l)}return t},le=(e=false)=>{let t=b(0,e);if(!s("?"))return t;o();let r=A();S(":");let l=A();return T({type:"ConditionalExpression",test:t,consequent:r,alternate:l},t,l)},pe=()=>{let e=w();if(e.type==="Keyword")return e.value==="in"?{op:"in",consume:1}:null;if(e.type==="Identifier")return e.value==="as"?{op:"as",consume:1}:e.value==="satisfies"?{op:"satisfies",consume:1}:null;if(e.type!=="Punctuator")return null;if(e.value===">"){let t=w(1);if(t.type==="Punctuator"&&t.value===">"&&e.end===t.start){let r=w(2);return r.type==="Punctuator"&&r.value===">"&&t.end===r.start?{op:">>>",consume:3}:{op:">>",consume:2}}return {op:">",consume:1}}return {op:e.value,consume:1}},b=(e,t=false)=>{let r=c();for(;;){let l=pe();if(!l)break;let{op:m,consume:L}=l;if(m==="in"&&t)break;let I=ve(Ft,m);if(!I||I<=e)break;if(m==="satisfies"){if(W())break;j("'satisfies' is not supported in this language \u2014 a type annotation (`const x: T = \u2026`) also checks compatibility, but it declares the type as T, while 'satisfies' keeps the inferred one");}if(m==="as"){if(W())break;o();let M=me();r=T({type:"TSAsExpression",expression:r,typeAnnotation:M.schema,typeAnnotationNode:M.node},r,V());continue}for(let M=0;M<L;M++)o();let _=b(m==="**"?I-1:I,t);r=T({type:Xt.has(m)?"LogicalExpression":"BinaryExpression",operator:m,left:r,right:_},r,_);}return r},c=()=>{let e=w();return e.type==="Punctuator"&&(e.value==="++"||e.value==="--")?(o(),C({type:"UpdateExpression",operator:e.value,prefix:true,argument:c()},e)):N("await")?(o(),C({type:"AwaitExpression",argument:c()},e)):N("typeof")||N("void")||N("delete")||e.type==="Punctuator"&&(e.value==="!"||e.value==="-"||e.value==="+"||e.value==="~")?f(e):y()},f=e=>{o();let t=c();return s("**")&&j(`An unary expression with the '${e.value}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.`),C({type:"UnaryExpression",operator:e.value,prefix:true,argument:t},e)},i=()=>{let e=g,t=P.length,r=u.length,l=()=>(X(t),g=e,u.length=r,void 0);try{if($(),o(),s(">"))return l();let m=[];for(;m.push(me().schema),!!s(",");)o();return s(">")?(o(),s("(")?m:l()):l()}catch{return l()}},y=()=>{let e=et(),t=false;for(;;)if((w().type==="Template"||w().type==="TemplateHead")&&j("Tagged templates are not supported in this language"),s("?."))if(o(),t=true,s("(")){let{args:r,close:l}=v();e=T({type:"CallExpression",callee:e,arguments:r,optional:true},e,l);}else if(s("[")){o();let r=A(),l=S("]");e=T({type:"MemberExpression",object:e,property:r,computed:true,optional:true},e,l);}else {let r=w();r.type!=="Identifier"&&r.type!=="Keyword"&&j("Expected property name after '?.'"),o();let l=C({type:"Identifier",name:r.value},r);e=T({type:"MemberExpression",object:e,property:l,computed:false,optional:true},e,l);}else if(s(".")){o();let r=w(),l;r.type==="Identifier"||r.type==="Keyword"?(o(),l=C({type:"Identifier",name:r.value},r)):(D("Expected property name"),l=Ve({type:"Identifier",name:""},r)),e=T({type:"MemberExpression",object:e,property:l,computed:false,optional:false},e,l);}else if(s("[")){o();let r=A(),l=S("]");e=T({type:"MemberExpression",object:e,property:r,computed:true,optional:false},e,l);}else if(s("(")){let{args:r,close:l}=v();e=T({type:"CallExpression",callee:e,arguments:r,optional:false},e,l);}else if(s("<")||s("<<")){let r=i();if(!r)break;let{args:l,close:m}=v();e=T({type:"CallExpression",callee:e,arguments:l,optional:false,typeArguments:r},e,m);}else if(s("++")||s("--")){let r=o();e=T({type:"UpdateExpression",operator:r.value,prefix:false,argument:e},e,r);}else break;return t?T({type:"ChainExpression",expression:e},e,e):e},v=()=>{S("(");let e=[];for(;!s(")");)e.push(x()),s(")")||S(",");return {args:e,close:S(")")}},x=()=>{if(s("...")){let e=o(),t=A();return T({type:"SpreadElement",argument:t},e,t)}return A()},E=()=>{let e=w();return e.type!=="Identifier"&&j("Expected identifier"),o(),C({type:"Identifier",name:e.value},e)},O=(e=false)=>{let t=s("{")?K():s("[")?R():E();if(e&&s("?")&&(t.type!=="Identifier"&&j("A binding pattern parameter cannot be optional"),o(),t.optional=true),s(":")){o();let r=me();t.typeAnnotation=r.schema,t.typeAnnotationNode=r.node;}return t},K=()=>{let e=S("{"),t=[];for(;!s("}");){if(s("...")){let l=o(),m=O();t.push(T({type:"RestElement",argument:m},l,m));}else {let l=E(),m,L=false;if(s(":")?(o(),m=O()):(m={...l},L=true),s("=")){o();let I=A();m=T({type:"AssignmentPattern",left:m,right:I},m,I);}t.push(T({type:"Property",key:l,value:m,kind:"init",shorthand:L,computed:false},l,m));}s("}")||S(",");}let r=S("}");return T({type:"ObjectPattern",properties:t},e,r)},R=()=>{let e=S("["),t=[];for(;!s("]");){if(s(",")){t.push(null),o();continue}if(s("...")){let l=o(),m=O();t.push(T({type:"RestElement",argument:m},l,m));}else {let l=O();if(s("=")){o();let m=A();l=T({type:"AssignmentPattern",left:l,right:m},l,m);}t.push(l);}s("]")||S(",");}let r=S("]");return T({type:"ArrayPattern",elements:t},e,r)},F=()=>{let e=P.length,t=B();return t||X(e),t},B=()=>{let e=0,t="name";for(let r=g;r<d.length;r++){let l=d[r];if(l.type==="EOF")return false;if(l.type==="Punctuator"){if(l.value==="<"&&t==="type"){h(r);continue}if(e===1&&l.value===":"&&t==="name"?t="type":e===1&&l.value==="="?t="default":e===1&&l.value===","&&(t="name"),l.value==="("||l.value==="["||l.value==="{")e++;else if((l.value===")"||l.value==="]"||l.value==="}")&&(e--,e===0)){let m=d[r+1];return !m||m.type!=="Punctuator"?false:m.value==="=>"?true:m.value===":"?q(r+2):false}}}return false},q=e=>{let t=0;for(let r=e;r<d.length;r++){let l=d[r];if(l.type==="EOF")return false;if(l.type==="Punctuator")if(l.value==="<"&&h(r),["(","[","{","<"].includes(l.value))t++;else if([")","]","}",">"].includes(l.value)){if(t===0)return false;t--;}else {if(t===0&&l.value==="=>")return true;if(t===0&&(l.value===";"||l.value===","))return false}}return false},Y=()=>{S("(");let e=[];for(;!s(")");){if(s("...")){let t=o(),r=O();e.push(T({type:"RestElement",argument:r},t,r));}else {let t=O(true);if(s("=")){t.optional&&j("Parameter cannot have question mark and initializer"),o();let r=A();t=T({type:"AssignmentPattern",left:t,right:r},t,r);}e.push(t);}s(")")||S(",");}return S(")"),e},se=e=>{if(e.type==="Identifier")return e.name;let t=e.left;return e.type==="AssignmentPattern"&&t?.type==="Identifier"?t.name:null},fe=(e,t,r=[])=>rt(r,()=>qe(e,t,r)),qe=(e,t,r)=>{let l=s("(")?Y():[E()],m,L,I;if(s(":")){o();let M=tt(l.map(se));m=M.schema,L=M.node,I=M.guard;}S("=>");let _=s("{")?ue():A();return C({type:"ArrowFunctionExpression",params:l,body:_,async:e,expression:_.type!=="BlockStatement",generator:false,...m?{returnType:m,returnTypeNode:L}:{},...I?{returnGuard:I}:{},...r.length?{typeParameters:[...r]}:{}},t)},He=()=>{let e=S("["),t=[];for(;!s("]");){if(s(",")){o(),t.push(null);continue}t.push(x()),s("]")||S(",");}return T({type:"ArrayExpression",elements:t},e,S("]"))},Ge=()=>{let e=S("{"),t=[];for(;!s("}");){if(s("...")){let r=o(),l=A();t.push(T({type:"SpreadElement",argument:l},r,l));}else {let r=w(),l,m=false;if(s("["))m=true,o(),l=A(),S("]");else if(r.type==="String")o(),l=C({type:"Literal",value:z(r.value.slice(1,-1)),raw:r.value},r);else if(r.type==="Number")o(),l=C({type:"Literal",value:Number(r.value),raw:r.value},r);else if(r.type==="Identifier"||r.type==="Keyword")o(),l=C({type:"Identifier",name:r.value},r);else return j("Invalid property key");if(s(":")){o();let L=A();t.push(T({type:"Property",key:l,value:L,kind:"init",shorthand:false,computed:m},r,L));}else t.push(T({type:"Property",key:l,value:l,kind:"init",shorthand:true,computed:false},r,l));}s("}")||S(",");}return T({type:"ObjectExpression",properties:t},e,S("}"))},ye=(e,t)=>({type:"TemplateElement",value:{raw:e,cooked:z(e)},tail:t}),Ye=e=>{o();let t=[ye(e.value,false)],r=[];for(;;){r.push(A());let l=w();if(l.type==="TemplateMiddle")o(),t.push(ye(l.value,false));else if(l.type==="TemplateTail"){o(),t.push(ye(l.value,true));break}else j("Expected `}` to close template interpolation");}return C({type:"TemplateLiteral",quasis:t,expressions:r},e)},ce=()=>{let e=w();return e.type!=="Identifier"&&j(`Expected JSX identifier but got '${e.value||e.type}'`),C({type:"JSXIdentifier",name:o().value},e)},Le=()=>{let e=ce();if(s(":")){o();let t=ce();return T({type:"JSXNamespacedName",namespace:e,name:t},e,t)}for(;s(".");){o();let t=ce();e=T({type:"JSXMemberExpression",object:e,property:t},e,t);}return e},Z=e=>e.type==="JSXIdentifier"?e.name:e.type==="JSXNamespacedName"?`${Z(e.namespace)}:${Z(e.name)}`:`${Z(e.object)}.${Z(e.property)}`,Qe=()=>{let e=w();if(e.type==="String")return o(),C({type:"Literal",value:z(e.value.slice(1,-1)),raw:e.value},e);if(s("{")){let t=o(),r=G(),l=S("}");return T({type:"JSXExpressionContainer",expression:r},t,l)}return s("<")?xe():j(`Invalid JSX attribute value '${e.value||e.type}'`)},Ze=()=>{let e=[];for(;!s(">")&&!s("/>")&&!J();){if(s("{")){let l=o();S("...");let m=G(),L=S("}");e.push(T({type:"JSXSpreadAttribute",argument:m},l,L));continue}let t=ce();if(s(":")){o();let l=ce();t=T({type:"JSXNamespacedName",namespace:t,name:l},t,l);}let r=null;s("=")&&(o(),r=Qe()),e.push(T({type:"JSXAttribute",name:t,value:r},t,r??t));}return e},Re=()=>{let e=[];for(;!(s("</")||J());){let t=w();if(t.type==="JSXText")o(),e.push(C({type:"JSXText",value:t.value,raw:t.value},t));else if(s("{")){let r=o();if(s("}")){let l=o(),m=C({type:"JSXEmptyExpression"},r);e.push(T({type:"JSXExpressionContainer",expression:m},r,l));}else if(s("...")){o();let l=G(),m=S("}");e.push(T({type:"JSXSpreadChild",expression:l},r,m));}else {let l=G(),m=S("}");e.push(T({type:"JSXExpressionContainer",expression:l},r,m));}}else s("<")?e.push(xe()):j(`Unexpected token in JSX children '${t.value||t.type}'`);}return e},xe=()=>{let e=S("<");if(s(">")){let te=o(),ae=T({type:"JSXOpeningFragment"},e,te),ht=Re(),Tt=S("</"),Fe=S(">"),gt=T({type:"JSXClosingFragment"},Tt,Fe);return T({type:"JSXFragment",openingFragment:ae,children:ht,closingFragment:gt},e,Fe)}let t=Le(),r=Ze();if(s("/>")){let te=o(),ae=T({type:"JSXOpeningElement",name:t,attributes:r,selfClosing:true},e,te);return T({type:"JSXElement",openingElement:ae,children:[],closingElement:null},e,te)}let l=S(">"),m=T({type:"JSXOpeningElement",name:t,attributes:r,selfClosing:false},e,l),L=Re(),I=S("</"),_=w(),M=Le();Z(M)!==Z(t)&&j(`JSX closing tag </${Z(M)}> does not match opening <${Z(t)}>`,_);let H=S(">"),Q=T({type:"JSXClosingElement",name:M},I,H);return T({type:"JSXElement",openingElement:m,children:L,closingElement:Q},e,H)},et=()=>{let e=w();if(N("async")){let t=w(1);if(t.value==="("||t.type==="Identifier")return o(),fe(true,e);if(t.value==="<"){o();let r=je(e,true);if(r)return r}return j("Unexpected 'async'")}if(s("(")&&F()||e.type==="Identifier"&&w(1).type==="Punctuator"&&w(1).value==="=>")return fe(false,e);if(e.type==="Number")return o(),C({type:"Literal",value:Number(e.value),raw:e.value},e);if(e.type==="String")return o(),C({type:"Literal",value:z(e.value.slice(1,-1)),raw:e.value},e);if(e.type==="Template")return o(),C({type:"TemplateLiteral",expressions:[],quasis:[ye(e.value,true)]},e);if(e.type==="TemplateHead")return Ye(e);if(e.type==="Keyword")return e.value==="true"?(o(),C({type:"Literal",value:true,raw:"true"},e)):e.value==="false"?(o(),C({type:"Literal",value:false,raw:"false"},e)):e.value==="null"?(o(),C({type:"Literal",value:null,raw:"null"},e)):e.value==="new"?j("'new' is not supported \u2014 the language has no constructors (FP / portable IR). Use a factory function provided via DI (e.g. `now()` instead of `new Date()`)."):e.value==="function"?j("Anonymous functions are not supported \u2014 use an arrow function"):j(`'${e.value}' is not supported in this language`);if(e.type==="Identifier")return o(),C({type:"Identifier",name:e.value},e);if(s("(")){o();let t=A();return S(")"),t}return s("[")?He():s("{")?Ge():s("<")?je(e)??xe():j(`Unexpected token '${e.value||e.type}'`)},je=(e,t=false)=>{let r=g,l=P.length,m=u.length,L=()=>(X(l),g=r,u.length=m,void 0),I=w(1);I.type==="Keyword"&&I.value==="const"&&Se();try{let _=Se();return !_.length||!s("(")?L():fe(t,e,_)}catch{return L()}},{parseType:me,parseReturnType:tt,parseTypeParamList:Se,parseTypeInScope:nt,withTypeParams:rt}=_e({rescanTypeLessThan:h,splitShiftLeft:$,tokens:d,pos:()=>g,peek:w,next:o,isP:s,isK:N,expectP:S,fail:j,recordError:D,createMissingNode:Ve,unescape:z,typeRefs:k}),Ae=()=>{let e=o(),t=E(),r=[];s("<")&&(r=Se()),S("=");let l=nt(r),m=T({type:"TSTypeAliasDeclaration",id:t,...r.length?{typeParameters:[...r]}:{},typeAnnotation:l.schema,typeNode:l.node},e,V());return s(";")&&o(),m},ee=()=>{let e=w();if(e.type==="Identifier"&&e.value==="type"&&w(1).type==="Identifier"&&w(2).type==="Punctuator"&&(w(2).value==="="||w(2).value==="<"))return Ae();if(N("const")||N("let")||N("var")){let m=Oe();return s(";")&&o(),m}if(N("if"))return ut();if(N("for"))return it();if(N("while"))return ct();if(N("do"))return lt();if(N("break")||N("continue"))return pt();if(N("return"))return dt();if(N("throw"))return ft();if(N("try"))return yt();if(N("switch"))return mt();if(N("import"))return st();if(N("export"))return at();if(s("{"))return ue();if((N("function")||N("async")&&w(1).type==="Keyword"&&w(1).value==="function")&&j("Function declarations are not supported \u2014 use 'const fn = () => \u2026'"),s(";"))return o(),C({type:"EmptyStatement"},e);if(e.type==="Keyword"&&Kt.has(e.value)||e.type==="Identifier"&&ve(Ut,e.value)?.(w(1),w(2))===true){let m=ve(Mt,e.value);j(`'${e.value}' is not supported in this language`+(m?` \u2014 ${m}`:""));}let r=A(),l=s(";")?o():V();return T({type:"ExpressionStatement",expression:r},r,l)},Oe=()=>{let e=o(),t=e.value,r=()=>{let m=O(),L=null;return s("=")?(o(),L=A()):t==="const"&&D("'const' declarations must be initialized"),T({type:"VariableDeclarator",id:m,init:L},m,L??m)},l=[r()];for(;s(",");)o(),l.push(r());return T({type:"VariableDeclaration",kind:t,declarations:l},e,l[l.length-1])},ot=()=>{let e=w();return e.type!=="String"&&j("Expected module specifier string"),o(),C({type:"Literal",value:z(e.value.slice(1,-1)),raw:e.value},e)},st=()=>{let e=o(),t=[],r;if(U("type")){let m=w(1);(m.type==="Punctuator"&&(m.value==="{"||m.value==="*")||m.type==="Identifier"&&m.value!=="from")&&(o(),r="type");}if(w().type!=="String"){if(w().type==="Identifier"){let m=E();t.push(T({type:"ImportDefaultSpecifier",local:m},m,m)),s(",")&&o();}if(s("*")){let m=o();U("as")||j("Expected 'as' after '*' in import"),o();let L=E();t.push(T({type:"ImportNamespaceSpecifier",local:L},m,L));}else if(s("{")){for(o();!s("}")&&!J();){let m;U("type")&&w(1).type==="Identifier"&&w(1).value!=="as"&&(o(),m="type");let L=E(),I=L;if(U("as")&&(o(),I=E()),t.push(T({type:"ImportSpecifier",imported:L,local:I,...m?{importKind:m}:{}},L,I)),s(","))o();else break}S("}");}U("from")||j("Expected 'from' in import declaration"),o();}let l=ot();return s(";")&&o(),C({type:"ImportDeclaration",specifiers:t,source:l,...r?{importKind:r}:{}},e)},at=()=>{let e=o();if(U("type")&&w(1).type==="Identifier"){let t=Ae();return C({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(N("default")){o();let t=A();return s(";")&&o(),C({type:"ExportDefaultDeclaration",declaration:t},e)}if(N("const")||N("let")||N("var")){let t=Oe();return s(";")&&o(),C({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(s("{")){o();let t=[];for(;!s("}")&&!J();){let r=E(),l=r;if(U("as")&&(o(),l=E()),t.push(T({type:"ExportSpecifier",local:r,exported:l},r,l)),s(","))o();else break}return S("}"),s(";")&&o(),C({type:"ExportNamedDeclaration",declaration:null,specifiers:t,source:null},e)}return j("Expected 'const', 'type', '{', or 'default' after 'export'")},De=()=>w().type==="Identifier"&&w().value==="of",ke=()=>N("in"),it=()=>{let e=o();S("(");let t=null,r=null;if(!s(";"))if(N("const")||N("let")||N("var")){let I=o(),_=()=>{let H=E();if(s(":")){o();let Q=me();H.typeAnnotation=Q.schema,H.typeAnnotationNode=Q.node;}return H},M=_();if(De()||ke()){let H=T({type:"VariableDeclarator",id:M,init:null},M,M);r=T({type:"VariableDeclaration",kind:I.value,declarations:[H]},I,M);}else {let H=te=>{let ae=null;return s("=")?(o(),ae=A(true)):I.value==="const"&&j("'const' declarations must be initialized"),T({type:"VariableDeclarator",id:te,init:ae},te,ae??te)},Q=[H(M)];for(;s(",");)o(),Q.push(H(_()));t=T({type:"VariableDeclaration",kind:I.value,declarations:Q},I,Q[Q.length-1]);}}else {let I=A(true);De()||ke()?r=I:t=I;}if(r){let I=ke();o();let _=A();S(")");let M=ee();return T(I?{type:"ForInStatement",left:r,right:_,body:M}:{type:"ForOfStatement",left:r,right:_,body:M,await:false},e,M)}S(";");let l=s(";")?null:A();S(";");let m=s(")")?null:A();S(")");let L=ee();return T({type:"ForStatement",init:t,test:l,update:m,body:L},e,L)},lt=()=>{let e=o(),t=ee();N("while")||j("Expected 'while' after the 'do' body"),o(),S("(");let r=A(),l=S(")");return s(";")&&o(),T({type:"DoWhileStatement",body:t,test:r},e,l)},pt=()=>{let e=o(),t=e.value==="break"?"BreakStatement":"ContinueStatement",r=s(";")?o():V();return T({type:t,label:null},e,r)},ct=()=>{let e=o();S("(");let t=A();S(")");let r=ee();return T({type:"WhileStatement",test:t,body:r},e,r)},ut=()=>{let e=o();S("(");let t=A();S(")");let r=ee(),l=null;return N("else")&&(o(),l=ee()),T({type:"IfStatement",test:t,consequent:r,alternate:l},e,l??r)},dt=()=>{let e=o(),t=null;!s(";")&&!s("}")&&!J()&&(t=A());let r=s(";")?o():V();return T({type:"ReturnStatement",argument:t},e,r)},ft=()=>{let e=o(),t=A(),r=s(";")?o():V();return T({type:"ThrowStatement",argument:t},e,r)},yt=()=>{let e=o(),t=ue(),r=null,l=null;if(N("catch")){let m=o(),L=null;s("(")&&(o(),L=E(),S(")"));let I=ue();r=T({type:"CatchClause",param:L,body:I},m,I);}return N("finally")&&(o(),l=ue()),!r&&!l&&j("'try' requires a 'catch' or 'finally' clause"),T({type:"TryStatement",block:t,handler:r,finalizer:l},e,l??r??t)},mt=()=>{let e=o();S("(");let t=A();S(")"),S("{");let r=[];for(;!s("}")&&!J();){let m=w(),L=null;N("case")?(o(),L=A()):N("default")?o():j("Expected 'case' or 'default' in switch"),S(":");let I=[];for(;!s("}")&&!N("case")&&!N("default")&&!J();)I.push(ee());r.push(T({type:"SwitchCase",test:L,consequent:I},m,V()??m));}let l=S("}");return T({type:"SwitchStatement",discriminant:t,cases:r},e,l)},ue=()=>{let e=S("{"),t=Je(()=>s("}"));return T({type:"BlockStatement",body:t},e,S("}"))},Je=e=>{let t=[];for(;!e()&&!J();){if(w().type==="Unknown"){o();continue}try{t.push(ee());}catch(r){if(!(r instanceof oe))throw r;J()||o();}}return t};return {parseExpr:A,parseProgram:()=>{let e=w(),t=Je(()=>false);return T({type:"Program",sourceType:"module",body:t,...k.length?{typeRefs:k}:{},...a.length?{comments:a}:{},...u.length?{parseDiagnostics:u}:{}},e,V()??e)},eof:J,fail:j,recordError:D,diagnostics:u}}function We(n){let u=Ce(n),a=u.parseProgram(),p=a.comments;return p?.length&&Ee(a,p,n),{ast:a,diagnostics:u.diagnostics}}function Bt(n){let{ast:u,diagnostics:a}=We(n),p=a[0];if(p){let d=p.code==="lex-error"?re:oe;throw new d(p.message,p.position,p.index,p.loc,p.end)}return u}function _t(n){let u=Ce(n),a=u.parseExpr();u.eof()||u.fail("Unexpected token after expression");let p=u.diagnostics[0];if(p){let d=p.code==="lex-error"?re:oe;throw new d(p.message,p.position,p.index,p.loc,p.end)}return a}function Vt(n){let u=Ce(n),a;try{a=u.parseExpr(),u.eof()||u.recordError("Unexpected token after expression");}catch(p){if(!(p instanceof oe)&&!(p instanceof re))throw p}return {ast:a,diagnostics:u.diagnostics}}var zt="1.7.0";exports.KEYWORDS=Me;exports.LexError=re;exports.ParseError=oe;exports.attachComments=Ee;exports.nodeIsMissing=Jt;exports.parse=Bt;exports.parseExpression=_t;exports.parseExpressionTolerant=Vt;exports.parseTolerant=We;exports.tokenize=Nt;exports.version=zt;
1
+ 'use strict';var ast=require('@tslite/ast');var ie=class extends ast.TSLiteError{constructor(a,i,y,m,E){super("lex-error",`${a} (${i.line}:${i.column})`,{position:i,index:y,loc:m,end:E});this.position=i;this.index=y;this.loc=m;this.end=E;this.name="LexError";}},We=new Set(["const","if","else","return","async","await","true","false","null","typeof","let","var","function","class","new","for","while","do","this","throw","try","catch","finally","switch","case","break","continue","default","void","delete","instanceof","in","yield","import","export","extends","super","debugger","with","enum","interface"]),Dt=["...","===","!==","=>","?.","??=","&&=","||=","**=","??","==","!=","<=",">=","&&","||","|","&","++","--","+=","-=","*=","/=","%=","**","<<","+","-","*","/","%","<",">","!","?",":",".",",",";","=","^","~","(",")","[","]","{","}"],Se=r=>r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$",ke=r=>Se(r)||r>="0"&&r<="9",ae=r=>r>="0"&&r<="9",ze=r=>ae(r)||r>="a"&&r<="f"||r>="A"&&r<="F",Jt=r=>ke(r)||r==="-",me=r=>r===`
2
+ `||r==="\r"||r==="\u2028"||r==="\u2029",xe=(r,c)=>{let a=c;for(;;){let i=r[a]??"";if(i===" "||i===" "||i==="\f"||i==="\v"||me(i))a++;else if(i==="/"&&r[a+1]==="/")for(a+=2;a<r.length&&!me(r[a]??"");)a++;else if(i==="/"&&r[a+1]==="*"){for(a+=2;a<r.length&&!(r[a]==="*"&&r[a+1]==="/");)a++;a+=2;}else return a}},Ft=(r,c)=>{if(!Se(r[c]??""))return c;let a=c+1;for(;ke(r[a]??"");)a++;return a},qe=(r,c,a)=>r.startsWith(a,c)&&!ke(r[c+a.length]??""),Kt=(r,c)=>{let a=xe(r,c);qe(r,a,"const")&&(a=xe(r,a+5));let i=Ft(r,a);if(i===a)return false;if(a=xe(r,i),qe(r,a,"extends")){let y=xe(r,a+7),m=r[y]??"";return !(m==="="||m===">"||m==="/")}return r[a]===","?true:r[a]==="="&&r[a+1]!==">"},Xt=new Set(["(","[","{",",",";",":","?","=>","...","=","+","-","*","/","%","<","<=",">",">=","==","===","!=","!==","&&","||","??","!","+=","-=","*=","/=","%=","??=","&&=","||=","**="]),Mt=new Set(["return","typeof","await","delete","void","in","instanceof","else","case","yield","throw"]);function $t(r,c,a){return Ae(r,c,a).scan()}function Ae(r,c,a){let i=[],y=0,m=1,E=0,K=()=>({line:m,column:E}),h=(w=0)=>r[y+w]??"",_=w=>{let S=K(),X={start:S,end:{line:m,column:E+1}};if(a){a({message:w,position:S,index:y,loc:X,end:y+1});return}throw new ie(w,S,y,X,y+1)},P=()=>{let w=r[y++];return w==="\r"?(r[y]===`
3
+ `&&y++,m++,E=0):w===`
4
+ `||w==="\u2028"||w==="\u2029"?(m++,E=0):E++,w},H=()=>{for(;;){let w=h();if(w===" "||w===" "||w==="\f"||w==="\v"||me(w))P();else if(w==="/"&&h(1)==="/"){let S=y,X=K();P(),P();let l=y;for(;y<r.length&&!me(h());)P();c?.({type:"Line",value:r.slice(l,y),start:S,end:y,loc:{start:X,end:K()}});}else if(w==="/"&&h(1)==="*"){let S=y,X=K();P(),P();let l=y,p=y;for(;;){if(y>=r.length){_("Unterminated block comment"),p=y;break}if(h()==="*"&&h(1)==="/"){p=y,P(),P();break}P();}c?.({type:"Block",value:r.slice(l,p),start:S,end:y,loc:{start:X,end:K()}});}else break}},A=(w,S,X,l)=>{i.push({type:w,value:S,start:X,end:y,loc:{start:l,end:K()}}),u=w==="Punctuator"?Xt.has(S):w==="Keyword"?Mt.has(S):w==="TemplateHead"||w==="TemplateMiddle";},q=w=>{for(P();y<r.length;){let S=h();if(S===w)return P(),r.slice(C,y);if(me(S))return _("Unterminated string literal"),r.slice(C,y);if(S==="\\"){if(P(),y>=r.length)return _("Unterminated string literal"),r.slice(C,y);P();continue}P();}return _("Unterminated string literal"),r.slice(C,y)},T=()=>{if(h()==="0"&&(h(1)==="x"||h(1)==="X")){if(P(),P(),!ze(h()))return _("Invalid hexadecimal literal");for(;ze(h());)P();return}if(h()==="0"&&(h(1)==="b"||h(1)==="B")){if(P(),P(),h()!=="0"&&h()!=="1")return _("Invalid binary literal");for(;h()==="0"||h()==="1";)P();return}if(h()==="0"&&(h(1)==="o"||h(1)==="O")){if(P(),P(),!(h()>="0"&&h()<="7"))return _("Invalid octal literal");for(;h()>="0"&&h()<="7";)P();return}for(;ae(h());)P();if(h()===".")for(P();ae(h());)P();if(h()==="e"||h()==="E"){if(P(),(h()==="+"||h()==="-")&&P(),!ae(h()))return _("Invalid exponent");for(;ae(h());)P();}},o=()=>{let w=y;for(;y<r.length;){let S=h();if(S==="`"){let X=r.slice(w,y);return P(),{raw:X,interp:false}}if(S==="$"&&h(1)==="{"){let X=r.slice(w,y);return P(),P(),{raw:X,interp:true}}if(S==="\\"){if(P(),y>=r.length)break;P();continue}P();}return _("Unterminated template literal"),{raw:r.slice(w,y),interp:false}},C=0,G=0,U=[],u=true,v="js",B=[],R=[],Y=new Map,Z=-1,re=()=>({i:y,line:m,col:E,mode:v,braceDepth:G,tmplStack:[...U],jsxParent:[...B],jsxExpr:R.map(w=>({...w}))}),N=w=>{y=w.i,m=w.line,E=w.col,v=w.mode,G=w.braceDepth,U=[...w.tmplStack],B=[...w.jsxParent],R=w.jsxExpr.map(S=>({...S}));},O=()=>(i=[],g(),i),g=()=>{for(;;){if(v==="jsxChildren"){C=y;let l=K();if(y>=r.length){A("EOF","",C,l);break}let p=h();if(p==="<"){h(1)==="/"?(P(),P(),A("Punctuator","</",C,l),v="jsxCloseTag"):(P(),A("Punctuator","<",C,l),B.push("jsxChildren"),v="jsxOpenTag");continue}if(p==="{"){P(),A("Punctuator","{",C,l),R.push({level:G,restore:"jsxChildren"}),v="js";continue}for(;y<r.length&&h()!=="<"&&h()!=="{";)P();A("JSXText",r.slice(C,y),C,l);continue}if(v==="jsxOpenTag"||v==="jsxCloseTag"){H(),C=y;let l=K();if(y>=r.length){A("EOF","",C,l);break}let p=h();if(Se(p)){for(P();Jt(h());)P();A("Identifier",r.slice(C,y),C,l);continue}if(p==="/"&&h(1)===">"){P(),P(),A("Punctuator","/>",C,l),v=B.pop()??"js";continue}if(p===">"){P(),A("Punctuator",">",C,l),v=v==="jsxCloseTag"?B.pop()??"js":"jsxChildren";continue}if(p==="{"){P(),A("Punctuator","{",C,l),R.push({level:G,restore:v}),v="js";continue}if(p==='"'||p==="'"){A("String",q(p),C,l);continue}if(p==="="||p==="."||p===":"){P(),A("Punctuator",p,C,l);continue}if(p==="<"&&v==="jsxOpenTag"){P(),A("Punctuator","<",C,l),B.push("jsxOpenTag");continue}_(`Unexpected character '${p}' in JSX tag`),P(),A("Unknown",p,C,l);continue}H(),C=y;let w=K();if(y>=r.length){A("EOF","",C,w);break}let S=h();if(Se(S)){for(;ke(h());)P();let l=r.slice(C,y);A(We.has(l)?"Keyword":"Identifier",l,C,w);continue}if(ae(S)||S==="."&&ae(h(1))){T(),A("Number",r.slice(C,y),C,w);continue}if(S==='"'||S==="'"){let l=q(S);A("String",l,C,w);continue}if(S==="`"){P();let{raw:l,interp:p}=o();p?(A("TemplateHead",l,C,w),U.push(G)):A("Template",l,C,w);continue}if(S==="<"&&y===Z){Z=-1,P(),A("Punctuator","<",C,w);continue}if(S==="<"&&u&&!Kt(r,y+1)){Y.set(y,re()),P(),A("Punctuator","<",C,w),B.push("js"),v="jsxOpenTag";continue}if(S==="{"){P(),A("Punctuator","{",C,w),G++;continue}if(S==="}"){if(U.length>0&&G===U[U.length-1]){U.pop(),P();let{raw:l,interp:p}=o();A(p?"TemplateMiddle":"TemplateTail",l,C,w),p&&U.push(G);continue}if(R.length>0&&G===R[R.length-1].level){let{restore:l}=R.pop();P(),A("Punctuator","}",C,w),v=l;continue}P(),A("Punctuator","}",C,w),G--;continue}if(S==="?"&&h(1)==="."&&ae(h(2))){P(),A("Punctuator","?",C,w);continue}let X=Dt.find(l=>r.startsWith(l,y));if(X){for(let l=0;l<X.length;l++)P();A("Punctuator",X,C,w);continue}_(`Unexpected character '${S}'`),P(),A("Unknown",S,C,w);}};return {scan:O,opensJsx:w=>Y.has(w),rescanLessThan:w=>{let S=Y.get(w);return S?(N(S),Z=w,O()):null}}}var Ut=new Set(["leadingComments","trailingComments","innerComments","comments"]),He=r=>typeof r=="object"&&r!==null&&typeof r.type=="string"&&r.loc!=null&&typeof r.start=="number",Qe=new WeakMap;function Bt(r){let c=Qe.get(r);if(c)return c;let a=[];for(let i of Object.keys(r)){if(Ut.has(i))continue;let y=r[i];if(He(y))a.push(y);else if(Array.isArray(y))for(let m of y)He(m)&&a.push(m);}return a.sort((i,y)=>i.start-y.start),Qe.set(r,a),a}function _t(r,c){let a=r,i,y;for(;;){let m=Bt(a);i=void 0,y=void 0;let E;for(let K of m){if(K.start<=c.start&&c.end<=K.end){E=K;break}if(K.end<=c.start)i=K;else if(c.end<=K.start){y=K;break}}if(!E)break;a=E;}return {enclosing:a,preceding:i,following:y}}var Oe=(r,c)=>{(r.leadingComments??(r.leadingComments=[])).push(c);},we=(r,c)=>{(r.trailingComments??(r.trailingComments=[])).push(c);},De=(r,c)=>{(r.innerComments??(r.innerComments=[])).push(c);};function Vt(r,c){for(let a=c;a<r.length;a++){let i=r[a];if(i!==" "&&i!==" "&&i!=="\r"&&i!==`
5
+ `&&i!=="\f")return i}return ""}var Gt=new Set([")","]","}",","]);function Je(r,c,a=""){for(let i of c){let{enclosing:y,preceding:m,following:E}=_t(r,i),K=m==null||m.loc.end.line<i.loc.start.line,h=!K&&(E==null||i.loc.end.line<E.loc.start.line);if(K)E?Oe(E,i):m?we(m,i):De(y,i);else if(h)m?we(m,i):E?Oe(E,i):De(y,i);else {let _=Gt.has(Vt(a,i.end));m&&_?we(m,i):E?Oe(E,i):m?we(m,i):De(y,i);}}}var zt=Object.prototype.hasOwnProperty,he=(r,c)=>zt.call(r,c)?r[c]:void 0;function Ye(r,c,a){c==="__proto__"?Object.defineProperty(r,c,{value:a,enumerable:true,writable:true,configurable:true}):r[c]=a;}var qt=(r=[])=>({vars:new Set(r),bounds:new Map,noCond:false,inferSink:null}),ue=(r,c)=>{let a=new Set(r.vars),i=new Map(r.bounds);for(let y of c)a.add(y.name),y.bound?i.set(y.name,{bound:y.bound}):i.delete(y.name);return {vars:a,bounds:i,noCond:r.noCond,inferSink:r.inferSink}},Fe=r=>({t:"var",name:r.name,...r.bound?{bound:r.bound}:{},...r.default?{default:r.default}:{}}),Wt=(r,c)=>{let a=r.bounds.get(c)?.bound;return a?{t:"var",name:c,bound:a}:{t:"var",name:c}},Ze=r=>{let{peek:c,next:a,isP:i,isK:y,expectP:m,fail:E,unescape:K}=r,h=(l,p)=>{let f=r.tokens[r.pos()-1]??p;return Object.assign(l,{start:p.start,end:f.end,loc:{start:p.loc.start,end:f.loc.end}})},_=()=>{let l=r.pos(),p=r.tokens[l],f=r.tokens[l-1];return !!f&&!!p&&p.loc.start.line>f.loc.end.line},P=()=>{let l=x=>r.tokens[r.pos()+x],p=(x,...k)=>x?.type==="Punctuator"&&k.includes(x.value),f=l(1);if(p(f,")","..."))return true;if(f?.type!=="Identifier")return false;let b=l(2);return p(b,":",",","?","=")?true:p(b,")")&&p(l(3),"=>")},H=()=>{let l=r.tokens,p=[],f=0,b=false;for(let x=r.pos();x<l.length;x++){let k=l[x];if(k.type==="EOF")break;if(k.type==="Punctuator"){if(k.value==="<")f++,f===1&&(b=true);else if(k.value===">"){if(f--,f===0)break}else k.value==="("||k.value==="["||k.value==="{"?(f++,b=false):k.value===")"||k.value==="]"||k.value==="}"?(f--,b=false):k.value===","&&f===1?b=true:b=false;continue}if(f===1&&b){if(k.type==="Keyword"&&k.value==="const")continue;if(k.type==="Identifier"){p.push(k.value),b=false;continue}}b=false;}return p},A=l=>{let p=ue(l,H().map(b=>({name:b})));m("<");let f=[];for(;!i(">");){let b=c();y("const")&&E("'const' type parameters are not supported in this language; a constraint keeps the literal: '<T extends string>'");let x=c();x.type!=="Identifier"&&E("Expected type parameter name"),a();let k,D;if(y("extends")){a();let I=o(p);k=I.schema,D=I.node;}let F,M;if(i("=")){a();let I=o(p);F=I.schema,M=I.node;}f.push(h({type:"TSTypeParameter",name:x.value,...k?{bound:k}:{},...D?{boundNode:D}:{},...F?{default:F}:{},...M?{defaultNode:M}:{}},b)),i(">")||m(",");}return m(">"),f},q=l=>{r.splitShiftLeft(),m("<");let p=[];for(;!i(">");)p.push(o(l)),i(">")||m(",");return m(">"),p},T=l=>{let p=c();return p.type==="Identifier"&&p.value===l},o=l=>{let p=c(),f=C(l);if(l.noCond||!y("extends")||_())return f;a();let b=[],x=C({...l,noCond:true,inferSink:b});m("?");let k=ue(l,b.map(M=>({name:M}))),D=o(k);m(":");let F=o(k);return {node:h({type:"TSConditionalType",checkType:f.node,extendsType:x.node,trueType:D.node,falseType:F.node},p),schema:{t:"conditional",check:f.schema,extends:x.schema,then:D.schema,else:F.schema,...b.length?{infer:b.map(M=>Fe({name:M}))}:{}}}},C=l=>{let p=c();i("|")&&a();let f=G(l);if(!i("|"))return f;let b=[f.node],x=[f.schema];for(;i("|");){a();let k=G(l);b.push(k.node),x.push(k.schema);}return {node:h({type:"TSUnionType",types:b},p),schema:{t:"union",of:x}}},G=l=>{let p=c();i("&")&&a();let f=U(l);if(!i("&"))return f;let b=[f.node],x=[f.schema];for(;i("&");){a();let k=U(l);b.push(k.node),x.push(k.schema);}return {node:h({type:"TSIntersectionType",types:b},p),schema:{t:"intersection",of:x}}},U=l=>{let p=c();if(T("keyof")){a();let f=U(l);return {node:h({type:"TSTypeOperator",operator:"keyof",typeAnnotation:f.node},p),schema:{t:"keyof",of:f.schema}}}if(T("readonly")){a();let f=U(l);return f.schema.t!=="array"&&f.schema.t!=="tuple"&&E("'readonly' only applies to array and tuple types"),{node:h({...f.node,readonly:true},p),schema:{...f.schema,readonly:true}}}if(T("infer")){a();let f=c();f.type!=="Identifier"&&E("Expected 'infer' variable name"),a();let b=l.inferSink;return b?(b.push(f.value),{node:h({type:"TSInferType",name:f.value},p),schema:{t:"var",name:f.value}}):E("'infer' is only allowed in the 'extends' clause of a conditional")}return u(l)},u=l=>{let p=c(),f=Y(l);for(;i("[")&&!_();)if(a(),i("]"))a(),f={node:h({type:"TSArrayType",elementType:f.node},p),schema:{t:"array",items:f.schema}};else {let b=o(l);m("]"),f={node:h({type:"TSIndexedAccessType",objectType:f.node,indexType:b.node},p),schema:{t:"index",obj:f.schema,key:b.schema}};}return f},v=(l,p,f)=>({node:h({type:"TSKeywordType",kind:p},l),schema:f}),B=l=>{let p=r.namespace?.()??null;r.typeRefs?.push(p===null?l:{...l,namespace:p});},R=(l,p,f)=>{let b=[{name:l.value,loc:l.loc}];for(;i(".");){a();let I=c();I.type!=="Identifier"&&I.type!=="Keyword"&&E("Expected a name after '.' in a qualified type name"),a(),b.push({name:I.value,loc:I.loc});}let x=b.map(I=>I.name).join("."),k=i("<")||i("<<")?q(f):[],D=k.map(I=>I.schema),F=h({type:"TSTypeReference",typeName:x,...k.length?{typeArguments:k.map(I=>I.node)}:{}},p),M=b[b.length-1];return B({name:x,loc:{start:l.loc.start,end:M.loc.end},args:D,segments:b}),{node:F,schema:{t:"apply",name:x,args:D}}},Y=l=>{let p=c();if(y("typeof")){a();let x=c();x.type!=="Identifier"&&E("Expected a name after 'typeof' in type position"),a();let k=[x.value];for(;i(".");){a();let D=c();D.type!=="Identifier"&&D.type!=="Keyword"&&E("Expected a property name after '.' in 'typeof'"),a(),k.push(D.value);}return {node:h({type:"TSTypeQuery",exprName:k},p),schema:{t:"typeQuery",path:k}}}if(i("<")){r.rescanTypeLessThan();let x=A(l),k=ue(l,x);return N(k,p,x)}if(i("(")){if(P())return N(l,p);a();let x=o(l.noCond?{...l,noCond:false}:l);return m(")"),x}if(i("{"))return g()?w(l):S(l);if(i("["))return O(l);let f=c();if(f.type==="String"){a();let x=K(f.value.slice(1,-1));return {node:h({type:"TSLiteralType",literal:x},p),schema:{t:"literal",value:x}}}if(f.type==="Number"){a();let x=Number(f.value);return {node:h({type:"TSLiteralType",literal:x},p),schema:{t:"literal",value:x}}}if(y("true"))return a(),{node:h({type:"TSLiteralType",literal:true},p),schema:{t:"literal",value:true}};if(y("false"))return a(),{node:h({type:"TSLiteralType",literal:false},p),schema:{t:"literal",value:false}};if(y("null"))return a(),v(p,"null",{t:"null"});if(y("void"))return a(),v(p,"void",{t:"void"});if(f.type==="Identifier"){if(a(),i("."))return R(f,p,l);switch(f.value){case "string":return v(p,"string",{t:"string"});case "number":return v(p,"number",{t:"number"});case "boolean":return v(p,"boolean",{t:"boolean"});case "any":return v(p,"any",{t:"any"});case "unknown":return v(p,"unknown",{t:"unknown"});case "undefined":return v(p,"undefined",{t:"undefined"});case "never":return v(p,"never",{t:"union",of:[]});case "object":return v(p,"object",{t:"nonPrimitive"})}let x=i("<")||i("<<")?q(l):[],k=x.map(M=>M.schema),D=x.length?x.map(M=>M.node):void 0,F=h({type:"TSTypeReference",typeName:f.value,...D?{typeArguments:D}:{}},p);return l.vars.has(f.value)&&k.length===0?{node:F,schema:Wt(l,f.value)}:(B({name:f.value,loc:f.loc,args:k}),{node:F,schema:{t:"apply",name:f.value,args:k}})}r.recordError(`Expected a type but got '${f.value||f.type}'`,f);let b=r.createMissingNode({type:"TSTypeReference",typeName:""},f);return B({name:"",loc:b.loc,args:[]}),{node:b,schema:{t:"unknown"}}},Z=l=>{m("(");let p=[];for(;!i(")");){let f=c(),b=i("...");b&&a();let x=c();x.type!=="Identifier"&&E("Expected parameter name in function type"),a();let k=!b&&i("?");k&&a(),m(":");let D=o(l),F=h({type:"Identifier",name:x.value,typeAnnotationNode:D.node,...k?{optional:true}:{}},x);p.push({node:b?h({type:"RestElement",argument:F},f):F,schema:{name:x.value,type:D.schema,...k?{optional:true}:{},...b?{variadic:true}:{}}}),b&&!i(")")&&E("A rest parameter must be last in a parameter list"),i(")")||m(",");}return m(")"),p},re=(l,p)=>{let f=c(),b=r.tokens[r.pos()+1];if(!(f.type==="Identifier"&&b?.type==="Identifier"&&b.value==="is"))return o(l);let k=p.indexOf(f.value);k<0&&E(`Cannot find parameter '${f.value}' for the type predicate`),a(),a();let D=o(l);return {node:h({type:"TSTypePredicate",parameterName:f.value,typeAnnotation:D.node},f),schema:{t:"boolean"},guard:{param:k,type:D.schema}}},N=(l,p,f)=>{let b=Z(l);m("=>");let x=re(l,b.map(k=>k.schema.name));return {node:h({type:"TSFunctionType",params:b.map(k=>k.node),returnType:x.node,...f?.length?{typeParameters:[...f]}:{}},p),schema:{t:"fn",params:b.map(k=>k.schema),returns:x.schema,...x.guard?{guard:x.guard}:{},...f?.length?{typeParams:f.map(Fe)}:{}}}},O=l=>{let p=c();m("[");let f=[],b=[],x=[],k=[],D=()=>{let I=r.tokens[r.pos()],J=r.tokens[r.pos()+1],V=r.tokens[r.pos()+2];if(I?.type==="Identifier"&&J?.type==="Punctuator"&&(J.value===":"||J.value==="?"&&V?.type==="Punctuator"&&V.value===":"))return a(),I.value};for(;!i("]");){if(x[x.length-1]==="rest"&&E("A rest element must be last in a tuple type"),i("...")){a();let I=D();I!==void 0&&m(":"),k.push(I);let J=o(l);J.schema.t!=="array"&&E("A rest element type must be written as an array type ('...T[]')"),b.push(J.schema.items),f.push(J.node.elementType),x.push("rest");}else {let I=D(),J=false;I!==void 0&&(i("?")&&(a(),J=true),m(":")),k.push(I);let V=o(l);!J&&i("?")&&(a(),J=true),b.push(V.schema),f.push(V.node),x.push(J?"optional":"req");}i("]")||m(",");}m("]");let F=x.some(I=>I!=="req"),M=k.some(I=>I!==void 0);return {node:h({type:"TSTupleType",elementTypes:f,...F?{flags:x}:{},...M?{labels:k}:{}},p),schema:F?{t:"tuple",elements:b,flags:x}:{t:"tuple",elements:b}}},g=()=>{let l=r.tokens,p=r.pos()+1;return l[p]?.type==="Punctuator"&&(l[p]?.value==="+"||l[p]?.value==="-")&&(p++,!(l[p]?.type==="Identifier"&&l[p]?.value==="readonly"))?false:(l[p]?.type==="Identifier"&&l[p]?.value==="readonly"&&p++,l[p]?.type==="Punctuator"&&l[p]?.value==="["&&l[p+1]?.type==="Identifier"&&l[p+2]?.type==="Keyword"&&l[p+2]?.value==="in")},w=l=>{let p=c();m("{");let f=i("+")||i("-")?a().value:null,b;T("readonly")&&(a(),b=f==="+"?"+":f==="-"?"-":true),m("[");let x=c();x.type!=="Identifier"&&E("Expected mapped type key name"),a(),y("in")||E("Expected 'in' in mapped type"),a();let k=o(l);T("as")&&E("Key remapping ('as') in mapped types is not supported"),m("]");let D=i("+")||i("-")?a().value:null,F;D!==null&&!i("?")&&E("'?' expected"),i("?")&&(a(),F=D==="+"?"+":D==="-"?"-":true),m(":");let M=o(ue(l,[{name:x.value}]));return (i(";")||i(","))&&a(),m("}"),{node:h({type:"TSMappedType",key:x.value,constraint:k.node,typeAnnotation:M.node,...b!==void 0?{readonly:b}:{},...F!==void 0?{optional:F}:{}},p),schema:{t:"mapped",key:x.value,over:k.schema,body:M.schema,...F===true||F==="+"?{optional:true}:{},...F==="-"?{excludeOptional:true}:{},...b===true||b==="+"?{readonly:true}:{},...b==="-"?{excludeReadonly:true}:{}}}},S=l=>{let p=c();m("{");let f=[],b={},x,k=[];for(;!i("}");){let F=c(),M=T("readonly")&&r.tokens[r.pos()+1]?.value==="[";if(M&&a(),!M&&(i("(")||i("<"))){i("<")&&r.rescanTypeLessThan();let I=i("<")?A(l):[],J=I.length?ue(l,I):l,V=Z(J);m(":");let Q=re(J,V.map(ee=>ee.schema.name));k.push({t:"fn",params:V.map(ee=>ee.schema),returns:Q.schema,...Q.guard?{guard:Q.guard}:{},...I.length?{typeParams:I.map(Fe)}:{}}),f.push(h({type:"TSCallSignatureDeclaration",params:V.map(ee=>ee.node),returnType:Q.node,...I.length?{typeParameters:I}:{}},F));}else if(i("[")){a(),c().type!=="Identifier"&&E("Expected index signature parameter name"),a(),m(":");let I=c();(I.type!=="Identifier"||I.value!=="string"&&I.value!=="number")&&E("Index signature parameter type must be 'string' or 'number'"),a(),m("]"),m(":");let J=o(l);x={key:I.value,value:J.schema,...M?{readonly:true}:{}},f.push(h({type:"TSIndexSignature",keyType:I.value,typeAnnotation:J.node,...M?{readonly:true}:{}},F));}else {let I=false;if(T("readonly")){let ce=r.tokens[r.pos()+1];ce&&(ce.type==="Identifier"||ce.type==="Keyword"||ce.type==="String"||ce.type==="Number")&&(a(),I=true);}let J=c(),V;if(J.type==="Identifier"||J.type==="Keyword")a(),V=J.value;else if(J.type==="String")a(),V=K(J.value.slice(1,-1));else if(J.type==="Number")a(),V=J.value;else return E("Expected property name in object type");let Q=i("?");Q&&a(),m(":");let ee=o(l);Ye(b,V,{type:ee.schema,...Q?{optional:true}:{},...I?{readonly:true}:{}}),f.push(h({type:"TSPropertySignature",key:V,typeAnnotation:ee.node,...Q?{optional:true}:{},...I?{readonly:true}:{}},F));}if(i(";")||i(","))a();else break}m("}");let D=h({type:"TSTypeLiteral",members:f},p);return k.length>0?Object.keys(b).length>0||x?E("Callable object types (call signatures mixed with members) are not supported"):{node:D,schema:k.length===1?k[0]:{t:"overload",signatures:k}}:{node:D,schema:{t:"object",props:b,...x?{index:x}:{}}}},X=qt();return {parseType:()=>o(X),parseReturnType:l=>re(X,l),parseTypeParamList:()=>A(X),parseTypeInScope:l=>o(ue(X,l)),withTypeParams:(l,p)=>{let f=X;X=ue(f,l);try{return p()}finally{X=f;}}}};var le=class extends ast.TSLiteError{constructor(a,i,y,m,E){super("parse-error",`${a} (${i.line}:${i.column})`,{position:i,index:y,loc:m,end:E});this.position=i;this.index=y;this.loc=m;this.end=E;this.name="ParseError";}},Qt=r=>{let c=r;return c!=null&&typeof c.start=="number"&&c.start===c.end&&c.start>=0},et=(r,c)=>Object.assign(r,{start:c.start,end:c.start,loc:{start:c.loc.start,end:c.loc.start}}),Yt={"??":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"==":7,"===":7,"!=":7,"!==":7,"<":8,"<=":8,">":8,">=":8,in:8,as:8,satisfies:8,"<<":9,">>":9,">>>":9,"+":10,"-":10,"*":11,"/":11,"%":11,"**":12},Zt=new Set(["??","||","&&"]),en=new Set(["class","debugger","with","enum","interface"]),tt={enum:'use a union of literals (`type T = "a" | "b"`) \u2014 it is serializable',interface:"use a type alias (`type X = { \u2026 }`)",module:"write it as `namespace X { \u2026 }` \u2014 the same declaration",abstract:"classes are not part of the language \u2014 model with objects + functions"},tn={module:(r,c)=>r.type==="Identifier"&&c.type==="Punctuator"&&c.value==="{",abstract:r=>r.type==="Keyword"&&r.value==="class"},nn=new Set(["=","+=","-=","*=","/=","%=","**=","??=","&&=","||="]),nt=(r,c)=>{let a=0;for(let i of r)c(i)&&(r[a++]=i);r.length=a;};function Ke(r){let c=[],a=[],i=[],y=Ae(r,e=>i.push(e),e=>c.push({code:"lex-error",...e})),m=y.scan(),E=0,K=[],h=e=>{for(;K.length>e;)K.pop()();},_=(e=E)=>{let t=m[e];if(t?.type!=="Punctuator"||t.value!=="<"||!y.opensJsx(t.start))return;let n=m.slice(e),s=c.slice(),d=i.slice();nt(c,j=>j.code!=="lex-error"||j.index<t.start),nt(i,j=>j.start<t.start);let L=y.rescanLessThan(t.start);m.splice(e,m.length-e,...L),K.push(()=>{m.splice(e,m.length-e,...n),c.splice(0,c.length,...s),i.splice(0,i.length,...d);});},P=()=>{let e=m[E];if(e?.type!=="Punctuator"||e.value!=="<<")return;let t={line:e.loc.start.line,column:e.loc.start.column+1},n=E;m.splice(n,1,{...e,value:"<",end:e.start+1,loc:{start:e.loc.start,end:t}},{...e,value:"<",start:e.start+1,loc:{start:t,end:e.loc.end}}),K.push(()=>m.splice(n,2,e));},H=[],A=[],q=false,T=(e=0)=>m[Math.min(E+e,m.length-1)],o=()=>m[E++],C=()=>m[E-1],G=()=>{let e=m[E],t=m[E-1];return !!e&&!!t&&e.loc.start.line>t.loc.end.line},U=()=>T().type==="EOF",u=e=>T().type==="Punctuator"&&T().value===e,v=e=>T().type==="Keyword"&&T().value===e,B=e=>T().type==="Identifier"&&T().value===e,R=(e,t=T())=>{throw Y(e,t),new le(e,t.loc.start,t.start,t.loc,t.end)},Y=(e,t=T())=>{let n=c[c.length-1];n&&n.index===t.start||c.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},Z=(e,t)=>{a.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},re=()=>{c.length||c.push(...a),a.length=0;},N=e=>(u(e)||R(`Expected '${e}' but got '${T().value||T().type}'`),o()),O=(e,t)=>{let n=C()??t;return Object.assign(e,{start:t.start,end:n.end,loc:{start:t.loc.start,end:n.loc.end}})},g=(e,t,n)=>Object.assign(e,{start:t.start,end:n.end,loc:{start:t.loc.start,end:n.loc.end}}),w=e=>{let t="";for(let n=0;n<e.length;n++){if(e[n]!=="\\"){t+=e[n];continue}let s=e[++n];switch(s){case "n":t+=`
6
+ `;break;case "t":t+=" ";break;case "r":t+="\r";break;case "b":t+="\b";break;case "f":t+="\f";break;case "v":t+="\v";break;case "0":t+="\0";break;case "x":t+=String.fromCharCode(parseInt(e.slice(n+1,n+3),16)),n+=2;break;case "u":if(e[n+1]==="{"){let d=e.indexOf("}",n);t+=String.fromCodePoint(parseInt(e.slice(n+2,d),16)),n=d;}else t+=String.fromCharCode(parseInt(e.slice(n+1,n+5),16)),n+=4;break;default:t+=s;}}return t},S=(e=false)=>X(e),X=(e=false)=>{let t=l(e),n=T();if(n.type==="Punctuator"&&nn.has(n.value)){o();let s=X();return g({type:"AssignmentExpression",operator:n.value,left:t,right:s},t,s)}return t},l=(e=false)=>{let t=f(0,e);if(!u("?"))return t;o();let n=S();N(":");let s=S();return g({type:"ConditionalExpression",test:t,consequent:n,alternate:s},t,s)},p=()=>{let e=T();if(e.type==="Keyword")return e.value==="in"?{op:"in",consume:1}:null;if(e.type==="Identifier")return e.value==="as"?{op:"as",consume:1}:e.value==="satisfies"?{op:"satisfies",consume:1}:null;if(e.type!=="Punctuator")return null;if(e.value===">"){let t=T(1);if(t.type==="Punctuator"&&t.value===">"&&e.end===t.start){let n=T(2);return n.type==="Punctuator"&&n.value===">"&&t.end===n.start?{op:">>>",consume:3}:{op:">>",consume:2}}return {op:">",consume:1}}return {op:e.value,consume:1}},f=(e,t=false)=>{let n=b();for(;;){let s=p();if(!s)break;let{op:d,consume:L}=s;if(d==="in"&&t)break;let j=he(Yt,d);if(!j||j<=e)break;if(d==="satisfies"){if(G())break;R("'satisfies' is not supported in this language \u2014 a type annotation (`const x: T = \u2026`) also checks compatibility, but it declares the type as T, while 'satisfies' keeps the inferred one");}if(d==="as"){if(G())break;o();let $=be();n=g({type:"TSAsExpression",expression:n,typeAnnotation:$.schema,typeAnnotationNode:$.node},n,C());continue}for(let $=0;$<L;$++)o();let z=f(d==="**"?j-1:j,t);n=g({type:Zt.has(d)?"LogicalExpression":"BinaryExpression",operator:d,left:n,right:z},n,z);}return n},b=()=>{let e=T();return e.type==="Punctuator"&&(e.value==="++"||e.value==="--")?(o(),O({type:"UpdateExpression",operator:e.value,prefix:true,argument:b()},e)):v("await")?(o(),O({type:"AwaitExpression",argument:b()},e)):v("typeof")||v("void")||v("delete")||e.type==="Punctuator"&&(e.value==="!"||e.value==="-"||e.value==="+"||e.value==="~")?x(e):D()},x=e=>{o();let t=b();return u("**")&&R(`An unary expression with the '${e.value}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.`),O({type:"UnaryExpression",operator:e.value,prefix:true,argument:t},e)},k=()=>{let e=E,t=K.length,n=c.length,s=H.length,d=()=>(h(t),E=e,c.length=n,H.length=s,void 0);try{if(P(),o(),u(">"))return d();let L=[];for(;L.push(be().schema),!!u(",");)o();return u(">")?(o(),u("(")?L:d()):d()}catch{return d()}},D=()=>{let e=ft(),t=false;for(;;)if((T().type==="Template"||T().type==="TemplateHead")&&R("Tagged templates are not supported in this language"),u("?."))if(o(),t=true,u("(")){let{args:n,close:s}=F();e=g({type:"CallExpression",callee:e,arguments:n,optional:true},e,s);}else if(u("[")){o();let n=S(),s=N("]");e=g({type:"MemberExpression",object:e,property:n,computed:true,optional:true},e,s);}else {let n=T();n.type!=="Identifier"&&n.type!=="Keyword"&&R("Expected property name after '?.'"),o();let s=O({type:"Identifier",name:n.value},n);e=g({type:"MemberExpression",object:e,property:s,computed:false,optional:true},e,s);}else if(u(".")){o();let n=T(),s;n.type==="Identifier"||n.type==="Keyword"?(o(),s=O({type:"Identifier",name:n.value},n)):(Y("Expected property name"),s=et({type:"Identifier",name:""},n)),e=g({type:"MemberExpression",object:e,property:s,computed:false,optional:false},e,s);}else if(u("[")){o();let n=S(),s=N("]");e=g({type:"MemberExpression",object:e,property:n,computed:true,optional:false},e,s);}else if(u("(")){let{args:n,close:s}=F();e=g({type:"CallExpression",callee:e,arguments:n,optional:false},e,s);}else if(u("<")||u("<<")){let n=k();if(!n)break;let{args:s,close:d}=F();e=g({type:"CallExpression",callee:e,arguments:s,optional:false,typeArguments:n},e,d);}else if(u("++")||u("--")){let n=o();e=g({type:"UpdateExpression",operator:n.value,prefix:false,argument:e},e,n);}else break;return t?g({type:"ChainExpression",expression:e},e,e):e},F=()=>{N("(");let e=[];for(;!u(")");)e.push(M()),u(")")||N(",");return {args:e,close:N(")")}},M=()=>{if(u("...")){let e=o(),t=S();return g({type:"SpreadElement",argument:t},e,t)}return S()},I=()=>{let e=T();return e.type!=="Identifier"&&R("Expected identifier"),o(),O({type:"Identifier",name:e.value},e)},J=(e=false)=>{let t=u("{")?V():u("[")?Q():I();if(e&&u("?")&&(t.type!=="Identifier"&&R("A binding pattern parameter cannot be optional"),o(),t.optional=true),u(":")){o();let n=be();t.typeAnnotation=n.schema,t.typeAnnotationNode=n.node;}return t},V=()=>{let e=N("{"),t=[];for(;!u("}");){if(u("...")){let s=o(),d=J();t.push(g({type:"RestElement",argument:d},s,d));}else {let s=I(),d,L=false;if(u(":")?(o(),d=J()):(d={...s},L=true),u("=")){o();let j=S();d=g({type:"AssignmentPattern",left:d,right:j},d,j);}t.push(g({type:"Property",key:s,value:d,kind:"init",shorthand:L,computed:false},s,d));}u("}")||N(",");}let n=N("}");return g({type:"ObjectPattern",properties:t},e,n)},Q=()=>{let e=N("["),t=[];for(;!u("]");){if(u(",")){t.push(null),o();continue}if(u("...")){let s=o(),d=J();t.push(g({type:"RestElement",argument:d},s,d));}else {let s=J();if(u("=")){o();let d=S();s=g({type:"AssignmentPattern",left:s,right:d},s,d);}t.push(s);}u("]")||N(",");}let n=N("]");return g({type:"ArrayPattern",elements:t},e,n)},ee=()=>{let e=K.length,t=ce();return t||h(e),t},ce=()=>{let e=0,t="name";for(let n=E;n<m.length;n++){let s=m[n];if(s.type==="EOF")return false;if(s.type==="Punctuator"){if(s.value==="<"&&t==="type"){_(n);continue}if(e===1&&s.value===":"&&t==="name"?t="type":e===1&&s.value==="="?t="default":e===1&&s.value===","&&(t="name"),s.value==="("||s.value==="["||s.value==="{")e++;else if((s.value===")"||s.value==="]"||s.value==="}")&&(e--,e===0)){let d=m[n+1];return !d||d.type!=="Punctuator"?false:d.value==="=>"?true:d.value===":"?ot(n+2):false}}}return false},ot=e=>{let t=0;for(let n=e;n<m.length;n++){let s=m[n];if(s.type==="EOF")return false;if(s.type==="Punctuator")if(s.value==="<"&&_(n),["(","[","{","<"].includes(s.value))t++;else if([")","]","}",">"].includes(s.value)){if(t===0)return false;t--;}else {if(t===0&&s.value==="=>")return true;if(t===0&&(s.value===";"||s.value===","))return false}}return false},st=()=>{N("(");let e=[];for(;!u(")");){if(u("...")){let t=o(),n=J();e.push(g({type:"RestElement",argument:n},t,n));}else {let t=J(true);if(u("=")){t.optional&&R("Parameter cannot have question mark and initializer"),o();let n=S();t=g({type:"AssignmentPattern",left:t,right:n},t,n);}e.push(t);}u(")")||N(",");}return N(")"),e},at=e=>{if(e.type==="Identifier")return e.name;let t=e.left;return e.type==="AssignmentPattern"&&t?.type==="Identifier"?t.name:null},ge=(e,t,n=[])=>ht(n,()=>it(e,t,n)),it=(e,t,n)=>{let s=u("(")?st():[I()],d,L,j;if(u(":")){o();let $=yt(s.map(at));d=$.schema,L=$.node,j=$.guard;}N("=>");let z=u("{")?ye():S();return O({type:"ArrowFunctionExpression",params:s,body:z,async:e,expression:z.type!=="BlockStatement",generator:false,...d?{returnType:d,returnTypeNode:L}:{},...j?{returnGuard:j}:{},...n.length?{typeParameters:[...n]}:{}},t)},lt=()=>{let e=N("["),t=[];for(;!u("]");){if(u(",")){o(),t.push(null);continue}t.push(M()),u("]")||N(",");}return g({type:"ArrayExpression",elements:t},e,N("]"))},ct=()=>{let e=N("{"),t=[];for(;!u("}");){if(u("...")){let n=o(),s=S();t.push(g({type:"SpreadElement",argument:s},n,s));}else {let n=T(),s,d=false;if(u("["))d=true,o(),s=S(),N("]");else if(n.type==="String")o(),s=O({type:"Literal",value:w(n.value.slice(1,-1)),raw:n.value},n);else if(n.type==="Number")o(),s=O({type:"Literal",value:Number(n.value),raw:n.value},n);else if(n.type==="Identifier"||n.type==="Keyword")o(),s=O({type:"Identifier",name:n.value},n);else return R("Invalid property key");if(u(":")){o();let L=S();t.push(g({type:"Property",key:s,value:L,kind:"init",shorthand:false,computed:d},n,L));}else t.push(g({type:"Property",key:s,value:s,kind:"init",shorthand:true,computed:false},n,s));}u("}")||N(",");}return g({type:"ObjectExpression",properties:t},e,N("}"))},Te=(e,t)=>({type:"TemplateElement",value:{raw:e,cooked:w(e)},tail:t}),pt=e=>{o();let t=[Te(e.value,false)],n=[];for(;;){n.push(S());let s=T();if(s.type==="TemplateMiddle")o(),t.push(Te(s.value,false));else if(s.type==="TemplateTail"){o(),t.push(Te(s.value,true));break}else R("Expected `}` to close template interpolation");}return O({type:"TemplateLiteral",quasis:t,expressions:n},e)},de=()=>{let e=T();return e.type!=="Identifier"&&R(`Expected JSX identifier but got '${e.value||e.type}'`),O({type:"JSXIdentifier",name:o().value},e)},Xe=()=>{let e=de();if(u(":")){o();let t=de();return g({type:"JSXNamespacedName",namespace:e,name:t},e,t)}for(;u(".");){o();let t=de();e=g({type:"JSXMemberExpression",object:e,property:t},e,t);}return e},oe=e=>e.type==="JSXIdentifier"?e.name:e.type==="JSXNamespacedName"?`${oe(e.namespace)}:${oe(e.name)}`:`${oe(e.object)}.${oe(e.property)}`,ut=()=>{let e=T();if(e.type==="String")return o(),O({type:"Literal",value:w(e.value.slice(1,-1)),raw:e.value},e);if(u("{")){let t=o(),n=X(),s=N("}");return g({type:"JSXExpressionContainer",expression:n},t,s)}return u("<")?Pe():R(`Invalid JSX attribute value '${e.value||e.type}'`)},dt=()=>{let e=[];for(;!u(">")&&!u("/>")&&!U();){if(u("{")){let s=o();N("...");let d=X(),L=N("}");e.push(g({type:"JSXSpreadAttribute",argument:d},s,L));continue}let t=de();if(u(":")){o();let s=de();t=g({type:"JSXNamespacedName",namespace:t,name:s},t,s);}let n=null;u("=")&&(o(),n=ut()),e.push(g({type:"JSXAttribute",name:t,value:n},t,n??t));}return e},Me=()=>{let e=[];for(;!(u("</")||U());){let t=T();if(t.type==="JSXText")o(),e.push(O({type:"JSXText",value:t.value,raw:t.value},t));else if(u("{")){let n=o();if(u("}")){let s=o(),d=O({type:"JSXEmptyExpression"},n);e.push(g({type:"JSXExpressionContainer",expression:d},n,s));}else if(u("...")){o();let s=X(),d=N("}");e.push(g({type:"JSXSpreadChild",expression:s},n,d));}else {let s=X(),d=N("}");e.push(g({type:"JSXExpressionContainer",expression:s},n,d));}}else u("<")?e.push(Pe()):R(`Unexpected token in JSX children '${t.value||t.type}'`);}return e},Pe=()=>{let e=N("<");if(u(">")){let ne=o(),pe=g({type:"JSXOpeningFragment"},e,ne),Lt=Me(),jt=N("</"),Ge=N(">"),At=g({type:"JSXClosingFragment"},jt,Ge);return g({type:"JSXFragment",openingFragment:pe,children:Lt,closingFragment:At},e,Ge)}let t=Xe(),n=dt();if(u("/>")){let ne=o(),pe=g({type:"JSXOpeningElement",name:t,attributes:n,selfClosing:true},e,ne);return g({type:"JSXElement",openingElement:pe,children:[],closingElement:null},e,ne)}let s=N(">"),d=g({type:"JSXOpeningElement",name:t,attributes:n,selfClosing:false},e,s),L=Me(),j=N("</"),z=T(),$=Xe();oe($)!==oe(t)&&R(`JSX closing tag </${oe($)}> does not match opening <${oe(t)}>`,z);let W=N(">"),te=g({type:"JSXClosingElement",name:$},j,W);return g({type:"JSXElement",openingElement:d,children:L,closingElement:te},e,W)},ft=()=>{let e=T();if(v("async")){let t=T(1);if(t.value==="("||t.type==="Identifier")return o(),ge(true,e);if(t.value==="<"){o();let n=$e(e,true);if(n)return n}return R("Unexpected 'async'")}if(u("(")&&ee()||e.type==="Identifier"&&T(1).type==="Punctuator"&&T(1).value==="=>")return ge(false,e);if(e.type==="Number")return o(),O({type:"Literal",value:Number(e.value),raw:e.value},e);if(e.type==="String")return o(),O({type:"Literal",value:w(e.value.slice(1,-1)),raw:e.value},e);if(e.type==="Template")return o(),O({type:"TemplateLiteral",expressions:[],quasis:[Te(e.value,true)]},e);if(e.type==="TemplateHead")return pt(e);if(e.type==="Keyword")return e.value==="true"?(o(),O({type:"Literal",value:true,raw:"true"},e)):e.value==="false"?(o(),O({type:"Literal",value:false,raw:"false"},e)):e.value==="null"?(o(),O({type:"Literal",value:null,raw:"null"},e)):e.value==="new"?R("'new' is not supported \u2014 the language has no constructors (FP / portable IR). Use a factory function provided via DI (e.g. `now()` instead of `new Date()`)."):e.value==="function"?R("Anonymous functions are not supported \u2014 use an arrow function"):R(`'${e.value}' is not supported in this language`);if(e.type==="Identifier")return o(),O({type:"Identifier",name:e.value},e);if(u("(")){o();let t=S();return N(")"),t}return u("[")?lt():u("{")?ct():u("<")?$e(e)??Pe():R(`Unexpected token '${e.value||e.type}'`)},$e=(e,t=false)=>{let n=E,s=K.length,d=c.length,L=a.length,j=H.length,z=()=>(h(s),E=n,c.length=d,a.length=L,H.length=j,void 0),$=T(1);$.type==="Keyword"&&$.value==="const"&&Ne();try{let W=Ne();return !W.length||!u("(")?z():ge(t,e,W)}catch{return z()}},{parseType:be,parseReturnType:yt,parseTypeParamList:Ne,parseTypeInScope:mt,withTypeParams:ht}=Ze({rescanTypeLessThan:_,splitShiftLeft:P,tokens:m,pos:()=>E,peek:T,next:o,isP:u,isK:v,expectP:N,fail:R,recordError:Y,createMissingNode:et,unescape:w,typeRefs:H,namespace:()=>A.length?A.join("."):null}),Ee=()=>{let e=o(),t=I(),n=[];u("<")&&(n=Ne()),N("=");let s=mt(n),d=g({type:"TSTypeAliasDeclaration",id:t,...n.length?{typeParameters:[...n]}:{},typeAnnotation:s.schema,typeNode:s.node},e,C());return u(";")&&o(),d},Ie=(e,t)=>t.loc.start.line===e.loc.end.line,ve=(e=0)=>T(e).type==="Identifier"&&T(e).value==="namespace"&&T(e+1).type==="Identifier"&&Ie(T(e),T(e+1)),gt=()=>B("declare")&&Ie(T(),T(1))&&ve(1),fe=e=>{let t=T(e),n=T(e+1),s=Ie(t,n);if(t.type==="Keyword")switch(t.value){case "var":case "let":case "const":case "function":case "class":case "enum":return true;case "interface":return n.type==="Identifier"&&s;case "async":return s&&fe(e+1);case "import":return n.type==="String"||n.type==="Identifier"||n.type==="Keyword"||n.type==="Punctuator"&&(n.value==="*"||n.value==="{");case "export":{let d=n.type==="Identifier"&&n.value==="type"?T(e+2):n;return d.type==="Punctuator"&&["=","*","{"].includes(d.value)||d.type==="Keyword"&&d.value==="default"||d.type==="Identifier"&&d.value==="as"||fe(e+1)}default:return false}if(t.type!=="Identifier")return false;switch(t.value){case "type":return n.type==="Identifier"&&s;case "namespace":case "module":return (n.type==="Identifier"||n.type==="String")&&s;case "abstract":case "declare":case "private":case "protected":case "public":case "readonly":return s&&fe(e+1);case "global":return n.type==="Punctuator"&&n.value==="{"||n.type==="Identifier"||n.type==="Keyword"&&n.value==="export";case "static":return fe(e+1);default:return false}},Ue=()=>B("declare")&&fe(0),Ce=()=>{let e=T(),t=B("declare");return t&&o(),o(),Be(e,t)},Be=(e,t)=>{let n=I();A.push(n.name);let s=q;t&&(q=true);try{let d;if(u("."))o(),d=Be(T(),!1);else {let L=N("{"),j=je(()=>u("}"));d=g({type:"TSModuleBlock",body:j},L,N("}"));}return g({type:"TSModuleDeclaration",id:n,body:d,...t?{declare:!0}:{}},e,d)}finally{q=s,A.pop();}},_e=()=>{if(gt())return Ce();let e=o();if(v("const")||v("let")||v("var")){let t=q;q=true;try{let n=g(Object.assign(Re(),{declare:!0}),e,C());return u(";")&&o(),n}finally{q=t;}}if(B("type")){let t=Ee();return g(Object.assign(t,{declare:true}),e,t)}return Tt()},Tt=()=>{let e=T();if(v("export"))return R("'export' modifier must precede 'declare' modifier.");if(v("import"))return R("A 'declare' modifier cannot be used with an import declaration.");if(e.type==="Identifier"&&["public","private","protected","static"].includes(e.value))return R(`'${e.value}' modifier cannot appear on a module or namespace element.`);if(B("readonly"))return R("'readonly' modifier can only appear on a property declaration or index signature.");if(v("function")||v("async"))return R("Function declarations are not supported \u2014 use 'const fn = () => \u2026'");if(e.type==="Identifier"&&e.value==="module"&&T(1).type==="String"||e.type==="Identifier"&&e.value==="global")return R(`'declare ${e.value}' is not supported in this language \u2014 it declares the types of an external module or of the global scope, and module resolution belongs to the application`);let t=he(tt,e.value);return R(`'${e.value}' is not supported in this language`+(t?` \u2014 ${t}`:""))},se=()=>{let e=T();if(e.type==="Identifier"&&e.value==="type"&&T(1).type==="Identifier"&&T(2).type==="Punctuator"&&(T(2).value==="="||T(2).value==="<"))return Ee();if(ve())return Ce();if(Ue())return _e();if(v("const")||v("let")||v("var")){let d=Re();return u(";")&&o(),d}if(v("if"))return Nt();if(v("for"))return St();if(v("while"))return Pt();if(v("do"))return kt();if(v("break")||v("continue"))return wt();if(v("return"))return Et();if(v("throw"))return It();if(v("try"))return Ct();if(v("switch"))return Rt();if(v("import"))return vt();if(v("export"))return xt();if(u("{"))return ye();if((v("function")||v("async")&&T(1).type==="Keyword"&&T(1).value==="function")&&R("Function declarations are not supported \u2014 use 'const fn = () => \u2026'"),u(";"))return o(),O({type:"EmptyStatement"},e);if(e.type==="Keyword"&&en.has(e.value)||e.type==="Identifier"&&he(tn,e.value)?.(T(1),T(2))===true){let d=he(tt,e.value);R(`'${e.value}' is not supported in this language`+(d?` \u2014 ${d}`:""));}let n=S(),s=u(";")?o():C();return g({type:"ExpressionStatement",expression:n},n,s)},Re=()=>{let e=o(),t=e.value,n=()=>{let d=J(),L=null;return u("=")?(o(),L=S()):!q&&d.type!=="Identifier"?Z("A destructuring declaration must have an initializer.",d):t==="const"&&!q&&Z("'const' declarations must be initialized",d),g({type:"VariableDeclarator",id:d,init:L},d,L??d)},s=[n()];for(;u(",");)o(),s.push(n());return g({type:"VariableDeclaration",kind:t,declarations:s},e,s[s.length-1])},bt=()=>{let e=T();return e.type!=="String"&&R("Expected module specifier string"),o(),O({type:"Literal",value:w(e.value.slice(1,-1)),raw:e.value},e)},vt=()=>{let e=o(),t=[],n;if(B("type")){let d=T(1);(d.type==="Punctuator"&&(d.value==="{"||d.value==="*")||d.type==="Identifier"&&d.value!=="from")&&(o(),n="type");}if(T().type!=="String"){if(T().type==="Identifier"){let d=I();t.push(g({type:"ImportDefaultSpecifier",local:d},d,d)),u(",")&&o();}if(u("*")){let d=o();B("as")||R("Expected 'as' after '*' in import"),o();let L=I();t.push(g({type:"ImportNamespaceSpecifier",local:L},d,L));}else if(u("{")){for(o();!u("}")&&!U();){let d;B("type")&&T(1).type==="Identifier"&&T(1).value!=="as"&&(o(),d="type");let L=I(),j=L;if(B("as")&&(o(),j=I()),t.push(g({type:"ImportSpecifier",imported:L,local:j,...d?{importKind:d}:{}},L,j)),u(","))o();else break}N("}");}B("from")||R("Expected 'from' in import declaration"),o();}let s=bt();return u(";")&&o(),O({type:"ImportDeclaration",specifiers:t,source:s,...n?{importKind:n}:{}},e)},xt=()=>{let e=o();if(B("type")&&T(1).type==="Identifier"){let t=Ee();return O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(ve()||Ue()){let t=ve()?Ce():_e();return O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(v("default")){o();let t=S();return u(";")&&o(),O({type:"ExportDefaultDeclaration",declaration:t},e)}if(v("const")||v("let")||v("var")){let t=Re();return u(";")&&o(),O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(u("{")){o();let t=[];for(;!u("}")&&!U();){let n=I(),s=n;if(B("as")&&(o(),s=I()),t.push(g({type:"ExportSpecifier",local:n,exported:s},n,s)),u(","))o();else break}return N("}"),u(";")&&o(),O({type:"ExportNamedDeclaration",declaration:null,specifiers:t,source:null},e)}return R("Expected 'const', 'type', 'namespace', 'declare', '{', or 'default' after 'export'")},Ve=()=>T().type==="Identifier"&&T().value==="of",Le=()=>v("in"),St=()=>{let e=o();N("(");let t=null,n=null;if(!u(";"))if(v("const")||v("let")||v("var")){let j=o(),z=()=>{let W=I();if(u(":")){o();let te=be();W.typeAnnotation=te.schema,W.typeAnnotationNode=te.node;}return W},$=z();if(Ve()||Le()){let W=g({type:"VariableDeclarator",id:$,init:null},$,$);n=g({type:"VariableDeclaration",kind:j.value,declarations:[W]},j,$);}else {let W=ne=>{let pe=null;return u("=")?(o(),pe=S(true)):j.value==="const"&&Z("'const' declarations must be initialized",ne),g({type:"VariableDeclarator",id:ne,init:pe},ne,pe??ne)},te=[W($)];for(;u(",");)o(),te.push(W(z()));t=g({type:"VariableDeclaration",kind:j.value,declarations:te},j,te[te.length-1]);}}else {let j=S(true);Ve()||Le()?n=j:t=j;}if(n){let j=Le();o();let z=S();N(")");let $=se();return g(j?{type:"ForInStatement",left:n,right:z,body:$}:{type:"ForOfStatement",left:n,right:z,body:$,await:false},e,$)}N(";");let s=u(";")?null:S();N(";");let d=u(")")?null:S();N(")");let L=se();return g({type:"ForStatement",init:t,test:s,update:d,body:L},e,L)},kt=()=>{let e=o(),t=se();v("while")||R("Expected 'while' after the 'do' body"),o(),N("(");let n=S(),s=N(")");return u(";")&&o(),g({type:"DoWhileStatement",body:t,test:n},e,s)},wt=()=>{let e=o(),t=e.value==="break"?"BreakStatement":"ContinueStatement",n=u(";")?o():C();return g({type:t,label:null},e,n)},Pt=()=>{let e=o();N("(");let t=S();N(")");let n=se();return g({type:"WhileStatement",test:t,body:n},e,n)},Nt=()=>{let e=o();N("(");let t=S();N(")");let n=se(),s=null;return v("else")&&(o(),s=se()),g({type:"IfStatement",test:t,consequent:n,alternate:s},e,s??n)},Et=()=>{let e=o(),t=null;!u(";")&&!u("}")&&!U()&&(t=S());let n=u(";")?o():C();return g({type:"ReturnStatement",argument:t},e,n)},It=()=>{let e=o(),t=S(),n=u(";")?o():C();return g({type:"ThrowStatement",argument:t},e,n)},Ct=()=>{let e=o(),t=ye(),n=null,s=null;if(v("catch")){let d=o(),L=null;u("(")&&(o(),L=I(),N(")"));let j=ye();n=g({type:"CatchClause",param:L,body:j},d,j);}return v("finally")&&(o(),s=ye()),!n&&!s&&R("'try' requires a 'catch' or 'finally' clause"),g({type:"TryStatement",block:t,handler:n,finalizer:s},e,s??n??t)},Rt=()=>{let e=o();N("(");let t=S();N(")"),N("{");let n=[];for(;!u("}")&&!U();){let d=T(),L=null;v("case")?(o(),L=S()):v("default")?o():R("Expected 'case' or 'default' in switch"),N(":");let j=[];for(;!u("}")&&!v("case")&&!v("default")&&!U();)j.push(se());n.push(g({type:"SwitchCase",test:L,consequent:j},d,C()??d));}let s=N("}");return g({type:"SwitchStatement",discriminant:t,cases:n},e,s)},ye=()=>{let e=N("{"),t=je(()=>u("}"));return g({type:"BlockStatement",body:t},e,N("}"))},je=e=>{let t=[];for(;!e()&&!U();){if(T().type==="Unknown"){o();continue}try{t.push(se());}catch(n){if(!(n instanceof le))throw n;U()||o();}}return t};return {parseExpr:S,parseProgram:()=>{let e=T(),t=je(()=>false);return re(),g({type:"Program",sourceType:"module",body:t,...H.length?{typeRefs:H}:{},...i.length?{comments:i}:{},...c.length?{parseDiagnostics:c}:{}},e,C()??e)},eof:U,fail:R,recordError:Y,settleGrammar:re,diagnostics:c}}function rt(r){let c=Ke(r),a=c.parseProgram(),i=a.comments;return i?.length&&Je(a,i,r),{ast:a,diagnostics:c.diagnostics}}function rn(r){let{ast:c,diagnostics:a}=rt(r),i=a[0];if(i){let y=i.code==="lex-error"?ie:le;throw new y(i.message,i.position,i.index,i.loc,i.end)}return c}function on(r){let c=Ke(r),a=c.parseExpr();c.eof()||c.fail("Unexpected token after expression"),c.settleGrammar();let i=c.diagnostics[0];if(i){let y=i.code==="lex-error"?ie:le;throw new y(i.message,i.position,i.index,i.loc,i.end)}return a}function sn(r){let c=Ke(r),a;try{a=c.parseExpr(),c.eof()||c.recordError("Unexpected token after expression");}catch(i){if(!(i instanceof le)&&!(i instanceof ie))throw i}return c.settleGrammar(),{ast:a,diagnostics:c.diagnostics}}var an="1.10.0";exports.KEYWORDS=We;exports.LexError=ie;exports.ParseError=le;exports.attachComments=Je;exports.nodeIsMissing=Qt;exports.parse=rn;exports.parseExpression=on;exports.parseExpressionTolerant=sn;exports.parseTolerant=rt;exports.tokenize=$t;exports.version=an;
package/dist/index.d.cts CHANGED
@@ -223,14 +223,27 @@ type TSchema = {
223
223
  * Mesmo movimento do overlay: informação AO LADO, não dentro.
224
224
  */
225
225
  type TypeRef = {
226
+ /** O nome como foi escrito — qualificado, se foi (`state.Config`). */
226
227
  readonly name: string;
227
228
  readonly loc: SourceLocation;
228
229
  /** Os argumentos de tipo escritos (`F<number, string>` → dois `Schema`; `F` → `[]`).
229
230
  * É o que deixa o checker cobrar aridade e bound na referência (TS2314/TS2344). */
230
231
  readonly args: readonly TSchema[];
232
+ /** O namespace em que a referência foi escrita (`"app.router"`), ausente no topo. Um
233
+ * nome resolve primeiro nele e depois nos de fora — o `resolveName` do tsc subindo os
234
+ * contêineres —, e quem resolve é o checker. */
235
+ readonly namespace?: string;
236
+ /** Cada segmento de um nome qualificado, com a posição dele (`state.Config` → `state`
237
+ * e `Config`), ausente num nome simples. O erro de um nome qualificado pousa no
238
+ * segmento que falhou: o namespace que não existe (TS2503) ou o membro que ele não tem
239
+ * (TS2694). */
240
+ readonly segments?: readonly {
241
+ readonly name: string;
242
+ readonly loc: SourceLocation;
243
+ }[];
231
244
  };
232
245
 
233
246
  /** A versão deste package, a do módulo de fato carregado. */
234
- declare const version = "1.7.0";
247
+ declare const version = "1.10.0";
235
248
 
236
249
  export { type CommentToken, KEYWORDS, type LexDiagnostic, LexError, type OnComment, type OnLexError, type ParseDiagnostic, ParseError, type ParseResult, type ParserErrorCode, type Position, type SourceLocation, type Token, type TokenType, type TypeRef, attachComments, nodeIsMissing, parse, parseExpression, parseExpressionTolerant, parseTolerant, tokenize, version };
package/dist/index.d.ts CHANGED
@@ -223,14 +223,27 @@ type TSchema = {
223
223
  * Mesmo movimento do overlay: informação AO LADO, não dentro.
224
224
  */
225
225
  type TypeRef = {
226
+ /** O nome como foi escrito — qualificado, se foi (`state.Config`). */
226
227
  readonly name: string;
227
228
  readonly loc: SourceLocation;
228
229
  /** Os argumentos de tipo escritos (`F<number, string>` → dois `Schema`; `F` → `[]`).
229
230
  * É o que deixa o checker cobrar aridade e bound na referência (TS2314/TS2344). */
230
231
  readonly args: readonly TSchema[];
232
+ /** O namespace em que a referência foi escrita (`"app.router"`), ausente no topo. Um
233
+ * nome resolve primeiro nele e depois nos de fora — o `resolveName` do tsc subindo os
234
+ * contêineres —, e quem resolve é o checker. */
235
+ readonly namespace?: string;
236
+ /** Cada segmento de um nome qualificado, com a posição dele (`state.Config` → `state`
237
+ * e `Config`), ausente num nome simples. O erro de um nome qualificado pousa no
238
+ * segmento que falhou: o namespace que não existe (TS2503) ou o membro que ele não tem
239
+ * (TS2694). */
240
+ readonly segments?: readonly {
241
+ readonly name: string;
242
+ readonly loc: SourceLocation;
243
+ }[];
231
244
  };
232
245
 
233
246
  /** A versão deste package, a do módulo de fato carregado. */
234
- declare const version = "1.7.0";
247
+ declare const version = "1.10.0";
235
248
 
236
249
  export { type CommentToken, KEYWORDS, type LexDiagnostic, LexError, type OnComment, type OnLexError, type ParseDiagnostic, ParseError, type ParseResult, type ParserErrorCode, type Position, type SourceLocation, type Token, type TokenType, type TypeRef, attachComments, nodeIsMissing, parse, parseExpression, parseExpressionTolerant, parseTolerant, tokenize, version };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import {TSLiteError}from'@tslite/ast';var re=class extends TSLiteError{constructor(a,p,d,g,P){super("lex-error",`${a} (${p.line}:${p.column})`,{position:p,index:d,loc:g,end:P});this.position=p;this.index=d;this.loc=g;this.end=P;this.name="LexError";}},Me=new Set(["const","if","else","return","async","await","true","false","null","typeof","let","var","function","class","new","for","while","do","this","throw","try","catch","finally","switch","case","break","continue","default","void","delete","instanceof","in","yield","import","export","extends","super","debugger","with","enum","interface"]),vt=["...","===","!==","=>","?.","??=","&&=","||=","**=","??","==","!=","<=",">=","&&","||","|","&","++","--","+=","-=","*=","/=","%=","**","<<","+","-","*","/","%","<",">","!","?",":",".",",",";","=","^","~","(",")","[","]","{","}"],Te=n=>n>="a"&&n<="z"||n>="A"&&n<="Z"||n==="_"||n==="$",ge=n=>Te(n)||n>="0"&&n<="9",ne=n=>n>="0"&&n<="9",Xe=n=>ne(n)||n>="a"&&n<="f"||n>="A"&&n<="F",xt=n=>ge(n)||n==="-",de=n=>n===`
2
- `||n==="\r"||n==="\u2028"||n==="\u2029",he=(n,u)=>{let a=u;for(;;){let p=n[a]??"";if(p===" "||p===" "||p==="\f"||p==="\v"||de(p))a++;else if(p==="/"&&n[a+1]==="/")for(a+=2;a<n.length&&!de(n[a]??"");)a++;else if(p==="/"&&n[a+1]==="*"){for(a+=2;a<n.length&&!(n[a]==="*"&&n[a+1]==="/");)a++;a+=2;}else return a}},St=(n,u)=>{if(!Te(n[u]??""))return u;let a=u+1;for(;ge(n[a]??"");)a++;return a},Ke=(n,u,a)=>n.startsWith(a,u)&&!ge(n[u+a.length]??""),kt=(n,u)=>{let a=he(n,u);Ke(n,a,"const")&&(a=he(n,a+5));let p=St(n,a);if(p===a)return false;if(a=he(n,p),Ke(n,a,"extends")){let d=he(n,a+7),g=n[d]??"";return !(g==="="||g===">"||g==="/")}return n[a]===","?true:n[a]==="="&&n[a+1]!==">"},wt=new Set(["(","[","{",",",";",":","?","=>","...","=","+","-","*","/","%","<","<=",">",">=","==","===","!=","!==","&&","||","??","!","+=","-=","*=","/=","%=","??=","&&=","||=","**="]),Pt=new Set(["return","typeof","await","delete","void","in","instanceof","else","case","yield","throw"]);function Nt(n,u,a){return we(n,u,a).scan()}function we(n,u,a){let p=[],d=0,g=1,P=0,X=()=>({line:g,column:P}),h=(b=0)=>n[d+b]??"",$=b=>{let c=X(),f={start:c,end:{line:g,column:P+1}};if(a){a({message:b,position:c,index:d,loc:f,end:d+1});return}throw new re(b,c,d,f,d+1)},k=()=>{let b=n[d++];return b==="\r"?(n[d]===`
3
- `&&d++,g++,P=0):b===`
4
- `||b==="\u2028"||b==="\u2029"?(g++,P=0):P++,b},w=()=>{for(;;){let b=h();if(b===" "||b===" "||b==="\f"||b==="\v"||de(b))k();else if(b==="/"&&h(1)==="/"){let c=d,f=X();k(),k();let i=d;for(;d<n.length&&!de(h());)k();u?.({type:"Line",value:n.slice(i,d),start:c,end:d,loc:{start:f,end:X()}});}else if(b==="/"&&h(1)==="*"){let c=d,f=X();k(),k();let i=d,y=d;for(;;){if(d>=n.length){$("Unterminated block comment"),y=d;break}if(h()==="*"&&h(1)==="/"){y=d,k(),k();break}k();}u?.({type:"Block",value:n.slice(i,y),start:c,end:d,loc:{start:f,end:X()}});}else break}},o=(b,c,f,i)=>{p.push({type:b,value:c,start:f,end:d,loc:{start:i,end:X()}}),j=b==="Punctuator"?wt.has(c):b==="Keyword"?Pt.has(c):b==="TemplateHead"||b==="TemplateMiddle";},V=b=>{for(k();d<n.length;){let c=h();if(c===b)return k(),n.slice(s,d);if(de(c))return $("Unterminated string literal"),n.slice(s,d);if(c==="\\"){if(k(),d>=n.length)return $("Unterminated string literal"),n.slice(s,d);k();continue}k();}return $("Unterminated string literal"),n.slice(s,d)},W=()=>{if(h()==="0"&&(h(1)==="x"||h(1)==="X")){if(k(),k(),!Xe(h()))return $("Invalid hexadecimal literal");for(;Xe(h());)k();return}if(h()==="0"&&(h(1)==="b"||h(1)==="B")){if(k(),k(),h()!=="0"&&h()!=="1")return $("Invalid binary literal");for(;h()==="0"||h()==="1";)k();return}if(h()==="0"&&(h(1)==="o"||h(1)==="O")){if(k(),k(),!(h()>="0"&&h()<="7"))return $("Invalid octal literal");for(;h()>="0"&&h()<="7";)k();return}for(;ne(h());)k();if(h()===".")for(k();ne(h());)k();if(h()==="e"||h()==="E"){if(k(),(h()==="+"||h()==="-")&&k(),!ne(h()))return $("Invalid exponent");for(;ne(h());)k();}},J=()=>{let b=d;for(;d<n.length;){let c=h();if(c==="`"){let f=n.slice(b,d);return k(),{raw:f,interp:false}}if(c==="$"&&h(1)==="{"){let f=n.slice(b,d);return k(),k(),{raw:f,interp:true}}if(c==="\\"){if(k(),d>=n.length)break;k();continue}k();}return $("Unterminated template literal"),{raw:n.slice(b,d),interp:false}},s=0,N=0,U=[],j=true,D="js",S=[],C=[],T=new Map,z=-1,A=()=>({i:d,line:g,col:P,mode:D,braceDepth:N,tmplStack:[...U],jsxParent:[...S],jsxExpr:C.map(b=>({...b}))}),G=b=>{d=b.i,g=b.line,P=b.col,D=b.mode,N=b.braceDepth,U=[...b.tmplStack],S=[...b.jsxParent],C=b.jsxExpr.map(c=>({...c}));},le=()=>(p=[],pe(),p),pe=()=>{for(;;){if(D==="jsxChildren"){s=d;let i=X();if(d>=n.length){o("EOF","",s,i);break}let y=h();if(y==="<"){h(1)==="/"?(k(),k(),o("Punctuator","</",s,i),D="jsxCloseTag"):(k(),o("Punctuator","<",s,i),S.push("jsxChildren"),D="jsxOpenTag");continue}if(y==="{"){k(),o("Punctuator","{",s,i),C.push({level:N,restore:"jsxChildren"}),D="js";continue}for(;d<n.length&&h()!=="<"&&h()!=="{";)k();o("JSXText",n.slice(s,d),s,i);continue}if(D==="jsxOpenTag"||D==="jsxCloseTag"){w(),s=d;let i=X();if(d>=n.length){o("EOF","",s,i);break}let y=h();if(Te(y)){for(k();xt(h());)k();o("Identifier",n.slice(s,d),s,i);continue}if(y==="/"&&h(1)===">"){k(),k(),o("Punctuator","/>",s,i),D=S.pop()??"js";continue}if(y===">"){k(),o("Punctuator",">",s,i),D=D==="jsxCloseTag"?S.pop()??"js":"jsxChildren";continue}if(y==="{"){k(),o("Punctuator","{",s,i),C.push({level:N,restore:D}),D="js";continue}if(y==='"'||y==="'"){o("String",V(y),s,i);continue}if(y==="="||y==="."||y===":"){k(),o("Punctuator",y,s,i);continue}if(y==="<"&&D==="jsxOpenTag"){k(),o("Punctuator","<",s,i),S.push("jsxOpenTag");continue}$(`Unexpected character '${y}' in JSX tag`),k(),o("Unknown",y,s,i);continue}w(),s=d;let b=X();if(d>=n.length){o("EOF","",s,b);break}let c=h();if(Te(c)){for(;ge(h());)k();let i=n.slice(s,d);o(Me.has(i)?"Keyword":"Identifier",i,s,b);continue}if(ne(c)||c==="."&&ne(h(1))){W(),o("Number",n.slice(s,d),s,b);continue}if(c==='"'||c==="'"){let i=V(c);o("String",i,s,b);continue}if(c==="`"){k();let{raw:i,interp:y}=J();y?(o("TemplateHead",i,s,b),U.push(N)):o("Template",i,s,b);continue}if(c==="<"&&d===z){z=-1,k(),o("Punctuator","<",s,b);continue}if(c==="<"&&j&&!kt(n,d+1)){T.set(d,A()),k(),o("Punctuator","<",s,b),S.push("js"),D="jsxOpenTag";continue}if(c==="{"){k(),o("Punctuator","{",s,b),N++;continue}if(c==="}"){if(U.length>0&&N===U[U.length-1]){U.pop(),k();let{raw:i,interp:y}=J();o(y?"TemplateMiddle":"TemplateTail",i,s,b),y&&U.push(N);continue}if(C.length>0&&N===C[C.length-1].level){let{restore:i}=C.pop();k(),o("Punctuator","}",s,b),D=i;continue}k(),o("Punctuator","}",s,b),N--;continue}if(c==="?"&&h(1)==="."&&ne(h(2))){k(),o("Punctuator","?",s,b);continue}let f=vt.find(i=>n.startsWith(i,d));if(f){for(let i=0;i<f.length;i++)k();o("Punctuator",f,s,b);continue}$(`Unexpected character '${c}'`),k(),o("Unknown",c,s,b);}};return {scan:le,opensJsx:b=>T.has(b),rescanLessThan:b=>{let c=T.get(b);return c?(G(c),z=b,le()):null}}}var Et=new Set(["leadingComments","trailingComments","innerComments","comments"]),Ue=n=>typeof n=="object"&&n!==null&&typeof n.type=="string"&&n.loc!=null&&typeof n.start=="number",$e=new WeakMap;function It(n){let u=$e.get(n);if(u)return u;let a=[];for(let p of Object.keys(n)){if(Et.has(p))continue;let d=n[p];if(Ue(d))a.push(d);else if(Array.isArray(d))for(let g of d)Ue(g)&&a.push(g);}return a.sort((p,d)=>p.start-d.start),$e.set(n,a),a}function Ct(n,u){let a=n,p,d;for(;;){let g=It(a);p=void 0,d=void 0;let P;for(let X of g){if(X.start<=u.start&&u.end<=X.end){P=X;break}if(X.end<=u.start)p=X;else if(u.end<=X.start){d=X;break}}if(!P)break;a=P;}return {enclosing:a,preceding:p,following:d}}var Pe=(n,u)=>{(n.leadingComments??(n.leadingComments=[])).push(u);},be=(n,u)=>{(n.trailingComments??(n.trailingComments=[])).push(u);},Ne=(n,u)=>{(n.innerComments??(n.innerComments=[])).push(u);};function Lt(n,u){for(let a=u;a<n.length;a++){let p=n[a];if(p!==" "&&p!==" "&&p!=="\r"&&p!==`
5
- `&&p!=="\f")return p}return ""}var Rt=new Set([")","]","}",","]);function Ee(n,u,a=""){for(let p of u){let{enclosing:d,preceding:g,following:P}=Ct(n,p),X=g==null||g.loc.end.line<p.loc.start.line,h=!X&&(P==null||p.loc.end.line<P.loc.start.line);if(X)P?Pe(P,p):g?be(g,p):Ne(d,p);else if(h)g?be(g,p):P?Pe(P,p):Ne(d,p);else {let $=Rt.has(Lt(a,p.end));g&&$?be(g,p):P?Pe(P,p):g?be(g,p):Ne(d,p);}}}var jt=Object.prototype.hasOwnProperty,ve=(n,u)=>jt.call(n,u)?n[u]:void 0;function Be(n,u,a){u==="__proto__"?Object.defineProperty(n,u,{value:a,enumerable:true,writable:true,configurable:true}):n[u]=a;}var At=(n=[])=>({vars:new Set(n),bounds:new Map,noCond:false,inferSink:null}),ie=(n,u)=>{let a=new Set(n.vars),p=new Map(n.bounds);for(let d of u)a.add(d.name),d.bound?p.set(d.name,{bound:d.bound}):p.delete(d.name);return {vars:a,bounds:p,noCond:n.noCond,inferSink:n.inferSink}},Ie=n=>({t:"var",name:n.name,...n.bound?{bound:n.bound}:{},...n.default?{default:n.default}:{}}),Ot=(n,u)=>{let a=n.bounds.get(u)?.bound;return a?{t:"var",name:u,bound:a}:{t:"var",name:u}},_e=n=>{let{peek:u,next:a,isP:p,isK:d,expectP:g,fail:P,unescape:X}=n,h=(c,f)=>{let i=n.tokens[n.pos()-1]??f;return Object.assign(c,{start:f.start,end:i.end,loc:{start:f.loc.start,end:i.loc.end}})},$=()=>{let c=n.pos(),f=n.tokens[c],i=n.tokens[c-1];return !!i&&!!f&&f.loc.start.line>i.loc.end.line},k=()=>{let c=v=>n.tokens[n.pos()+v],f=(v,...x)=>v?.type==="Punctuator"&&x.includes(v.value),i=c(1);if(f(i,")","..."))return true;if(i?.type!=="Identifier")return false;let y=c(2);return f(y,":",",","?","=")?true:f(y,")")&&f(c(3),"=>")},w=()=>{let c=n.tokens,f=[],i=0,y=false;for(let v=n.pos();v<c.length;v++){let x=c[v];if(x.type==="EOF")break;if(x.type==="Punctuator"){if(x.value==="<")i++,i===1&&(y=true);else if(x.value===">"){if(i--,i===0)break}else x.value==="("||x.value==="["||x.value==="{"?(i++,y=false):x.value===")"||x.value==="]"||x.value==="}"?(i--,y=false):x.value===","&&i===1?y=true:y=false;continue}if(i===1&&y){if(x.type==="Keyword"&&x.value==="const")continue;if(x.type==="Identifier"){f.push(x.value),y=false;continue}}y=false;}return f},o=c=>{let f=ie(c,w().map(y=>({name:y})));g("<");let i=[];for(;!p(">");){let y=u();d("const")&&P("'const' type parameters are not supported in this language; a constraint keeps the literal: '<T extends string>'");let v=u();v.type!=="Identifier"&&P("Expected type parameter name"),a();let x,E;if(d("extends")){a();let R=J(f);x=R.schema,E=R.node;}let O,K;if(p("=")){a();let R=J(f);O=R.schema,K=R.node;}i.push(h({type:"TSTypeParameter",name:v.value,...x?{bound:x}:{},...E?{boundNode:E}:{},...O?{default:O}:{},...K?{defaultNode:K}:{}},y)),p(">")||g(",");}return g(">"),i},V=c=>{n.splitShiftLeft(),g("<");let f=[];for(;!p(">");)f.push(J(c)),p(">")||g(",");return g(">"),f},W=c=>{let f=u();return f.type==="Identifier"&&f.value===c},J=c=>{let f=u(),i=s(c);if(c.noCond||!d("extends")||$())return i;a();let y=[],v=s({...c,noCond:true,inferSink:y});g("?");let x=ie(c,y.map(K=>({name:K}))),E=J(x);g(":");let O=J(x);return {node:h({type:"TSConditionalType",checkType:i.node,extendsType:v.node,trueType:E.node,falseType:O.node},f),schema:{t:"conditional",check:i.schema,extends:v.schema,then:E.schema,else:O.schema,...y.length?{infer:y.map(K=>Ie({name:K}))}:{}}}},s=c=>{let f=u();p("|")&&a();let i=N(c);if(!p("|"))return i;let y=[i.node],v=[i.schema];for(;p("|");){a();let x=N(c);y.push(x.node),v.push(x.schema);}return {node:h({type:"TSUnionType",types:y},f),schema:{t:"union",of:v}}},N=c=>{let f=u();p("&")&&a();let i=U(c);if(!p("&"))return i;let y=[i.node],v=[i.schema];for(;p("&");){a();let x=U(c);y.push(x.node),v.push(x.schema);}return {node:h({type:"TSIntersectionType",types:y},f),schema:{t:"intersection",of:v}}},U=c=>{let f=u();if(W("keyof")){a();let i=U(c);return {node:h({type:"TSTypeOperator",operator:"keyof",typeAnnotation:i.node},f),schema:{t:"keyof",of:i.schema}}}if(W("readonly")){a();let i=U(c);return i.schema.t!=="array"&&i.schema.t!=="tuple"&&P("'readonly' only applies to array and tuple types"),{node:h({...i.node,readonly:true},f),schema:{...i.schema,readonly:true}}}if(W("infer")){a();let i=u();i.type!=="Identifier"&&P("Expected 'infer' variable name"),a();let y=c.inferSink;return y?(y.push(i.value),{node:h({type:"TSInferType",name:i.value},f),schema:{t:"var",name:i.value}}):P("'infer' is only allowed in the 'extends' clause of a conditional")}return j(c)},j=c=>{let f=u(),i=S(c);for(;p("[")&&!$();)if(a(),p("]"))a(),i={node:h({type:"TSArrayType",elementType:i.node},f),schema:{t:"array",items:i.schema}};else {let y=J(c);g("]"),i={node:h({type:"TSIndexedAccessType",objectType:i.node,indexType:y.node},f),schema:{t:"index",obj:i.schema,key:y.schema}};}return i},D=(c,f,i)=>({node:h({type:"TSKeywordType",kind:f},c),schema:i}),S=c=>{let f=u();if(d("typeof")){a();let v=u();v.type!=="Identifier"&&P("Expected a name after 'typeof' in type position"),a();let x=[v.value];for(;p(".");){a();let E=u();E.type!=="Identifier"&&E.type!=="Keyword"&&P("Expected a property name after '.' in 'typeof'"),a(),x.push(E.value);}return {node:h({type:"TSTypeQuery",exprName:x},f),schema:{t:"typeQuery",path:x}}}if(p("<")){n.rescanTypeLessThan();let v=o(c),x=ie(c,v);return z(x,f,v)}if(p("(")){if(k())return z(c,f);a();let v=J(c.noCond?{...c,noCond:false}:c);return g(")"),v}if(p("{"))return G()?le(c):pe(c);if(p("["))return A(c);let i=u();if(i.type==="String"){a();let v=X(i.value.slice(1,-1));return {node:h({type:"TSLiteralType",literal:v},f),schema:{t:"literal",value:v}}}if(i.type==="Number"){a();let v=Number(i.value);return {node:h({type:"TSLiteralType",literal:v},f),schema:{t:"literal",value:v}}}if(d("true"))return a(),{node:h({type:"TSLiteralType",literal:true},f),schema:{t:"literal",value:true}};if(d("false"))return a(),{node:h({type:"TSLiteralType",literal:false},f),schema:{t:"literal",value:false}};if(d("null"))return a(),D(f,"null",{t:"null"});if(d("void"))return a(),D(f,"void",{t:"void"});if(i.type==="Identifier"){switch(a(),i.value){case "string":return D(f,"string",{t:"string"});case "number":return D(f,"number",{t:"number"});case "boolean":return D(f,"boolean",{t:"boolean"});case "any":return D(f,"any",{t:"any"});case "unknown":return D(f,"unknown",{t:"unknown"});case "undefined":return D(f,"undefined",{t:"undefined"});case "never":return D(f,"never",{t:"union",of:[]});case "object":return D(f,"object",{t:"nonPrimitive"})}let v=p("<")||p("<<")?V(c):[],x=v.map(K=>K.schema),E=v.length?v.map(K=>K.node):void 0,O=h({type:"TSTypeReference",typeName:i.value,...E?{typeArguments:E}:{}},f);return c.vars.has(i.value)&&x.length===0?{node:O,schema:Ot(c,i.value)}:(n.typeRefs?.push({name:i.value,loc:i.loc,args:x}),{node:O,schema:{t:"apply",name:i.value,args:x}})}n.recordError(`Expected a type but got '${i.value||i.type}'`,i);let y=n.createMissingNode({type:"TSTypeReference",typeName:""},i);return n.typeRefs?.push({name:"",loc:y.loc,args:[]}),{node:y,schema:{t:"unknown"}}},C=c=>{g("(");let f=[];for(;!p(")");){let i=u(),y=p("...");y&&a();let v=u();v.type!=="Identifier"&&P("Expected parameter name in function type"),a();let x=!y&&p("?");x&&a(),g(":");let E=J(c),O=h({type:"Identifier",name:v.value,typeAnnotationNode:E.node,...x?{optional:true}:{}},v);f.push({node:y?h({type:"RestElement",argument:O},i):O,schema:{name:v.value,type:E.schema,...x?{optional:true}:{},...y?{variadic:true}:{}}}),y&&!p(")")&&P("A rest parameter must be last in a parameter list"),p(")")||g(",");}return g(")"),f},T=(c,f)=>{let i=u(),y=n.tokens[n.pos()+1];if(!(i.type==="Identifier"&&y?.type==="Identifier"&&y.value==="is"))return J(c);let x=f.indexOf(i.value);x<0&&P(`Cannot find parameter '${i.value}' for the type predicate`),a(),a();let E=J(c);return {node:h({type:"TSTypePredicate",parameterName:i.value,typeAnnotation:E.node},i),schema:{t:"boolean"},guard:{param:x,type:E.schema}}},z=(c,f,i)=>{let y=C(c);g("=>");let v=T(c,y.map(x=>x.schema.name));return {node:h({type:"TSFunctionType",params:y.map(x=>x.node),returnType:v.node,...i?.length?{typeParameters:[...i]}:{}},f),schema:{t:"fn",params:y.map(x=>x.schema),returns:v.schema,...v.guard?{guard:v.guard}:{},...i?.length?{typeParams:i.map(Ie)}:{}}}},A=c=>{let f=u();g("[");let i=[],y=[],v=[],x=[],E=()=>{let R=n.tokens[n.pos()],F=n.tokens[n.pos()+1],B=n.tokens[n.pos()+2];if(R?.type==="Identifier"&&F?.type==="Punctuator"&&(F.value===":"||F.value==="?"&&B?.type==="Punctuator"&&B.value===":"))return a(),R.value};for(;!p("]");){if(v[v.length-1]==="rest"&&P("A rest element must be last in a tuple type"),p("...")){a();let R=E();R!==void 0&&g(":"),x.push(R);let F=J(c);F.schema.t!=="array"&&P("A rest element type must be written as an array type ('...T[]')"),y.push(F.schema.items),i.push(F.node.elementType),v.push("rest");}else {let R=E(),F=false;R!==void 0&&(p("?")&&(a(),F=true),g(":")),x.push(R);let B=J(c);!F&&p("?")&&(a(),F=true),y.push(B.schema),i.push(B.node),v.push(F?"optional":"req");}p("]")||g(",");}g("]");let O=v.some(R=>R!=="req"),K=x.some(R=>R!==void 0);return {node:h({type:"TSTupleType",elementTypes:i,...O?{flags:v}:{},...K?{labels:x}:{}},f),schema:O?{t:"tuple",elements:y,flags:v}:{t:"tuple",elements:y}}},G=()=>{let c=n.tokens,f=n.pos()+1;return c[f]?.type==="Punctuator"&&(c[f]?.value==="+"||c[f]?.value==="-")&&(f++,!(c[f]?.type==="Identifier"&&c[f]?.value==="readonly"))?false:(c[f]?.type==="Identifier"&&c[f]?.value==="readonly"&&f++,c[f]?.type==="Punctuator"&&c[f]?.value==="["&&c[f+1]?.type==="Identifier"&&c[f+2]?.type==="Keyword"&&c[f+2]?.value==="in")},le=c=>{let f=u();g("{");let i=p("+")||p("-")?a().value:null,y;W("readonly")&&(a(),y=i==="+"?"+":i==="-"?"-":true),g("[");let v=u();v.type!=="Identifier"&&P("Expected mapped type key name"),a(),d("in")||P("Expected 'in' in mapped type"),a();let x=J(c);W("as")&&P("Key remapping ('as') in mapped types is not supported"),g("]");let E=p("+")||p("-")?a().value:null,O;E!==null&&!p("?")&&P("'?' expected"),p("?")&&(a(),O=E==="+"?"+":E==="-"?"-":true),g(":");let K=J(ie(c,[{name:v.value}]));return (p(";")||p(","))&&a(),g("}"),{node:h({type:"TSMappedType",key:v.value,constraint:x.node,typeAnnotation:K.node,...y!==void 0?{readonly:y}:{},...O!==void 0?{optional:O}:{}},f),schema:{t:"mapped",key:v.value,over:x.schema,body:K.schema,...O===true||O==="+"?{optional:true}:{},...O==="-"?{excludeOptional:true}:{},...y===true||y==="+"?{readonly:true}:{},...y==="-"?{excludeReadonly:true}:{}}}},pe=c=>{let f=u();g("{");let i=[],y={},v,x=[];for(;!p("}");){let O=u(),K=W("readonly")&&n.tokens[n.pos()+1]?.value==="[";if(K&&a(),!K&&(p("(")||p("<"))){p("<")&&n.rescanTypeLessThan();let R=p("<")?o(c):[],F=R.length?ie(c,R):c,B=C(F);g(":");let q=T(F,B.map(Y=>Y.schema.name));x.push({t:"fn",params:B.map(Y=>Y.schema),returns:q.schema,...q.guard?{guard:q.guard}:{},...R.length?{typeParams:R.map(Ie)}:{}}),i.push(h({type:"TSCallSignatureDeclaration",params:B.map(Y=>Y.node),returnType:q.node,...R.length?{typeParameters:R}:{}},O));}else if(p("[")){a(),u().type!=="Identifier"&&P("Expected index signature parameter name"),a(),g(":");let R=u();(R.type!=="Identifier"||R.value!=="string"&&R.value!=="number")&&P("Index signature parameter type must be 'string' or 'number'"),a(),g("]"),g(":");let F=J(c);v={key:R.value,value:F.schema,...K?{readonly:true}:{}},i.push(h({type:"TSIndexSignature",keyType:R.value,typeAnnotation:F.node,...K?{readonly:true}:{}},O));}else {let R=false;if(W("readonly")){let se=n.tokens[n.pos()+1];se&&(se.type==="Identifier"||se.type==="Keyword"||se.type==="String"||se.type==="Number")&&(a(),R=true);}let F=u(),B;if(F.type==="Identifier"||F.type==="Keyword")a(),B=F.value;else if(F.type==="String")a(),B=X(F.value.slice(1,-1));else if(F.type==="Number")a(),B=F.value;else return P("Expected property name in object type");let q=p("?");q&&a(),g(":");let Y=J(c);Be(y,B,{type:Y.schema,...q?{optional:true}:{},...R?{readonly:true}:{}}),i.push(h({type:"TSPropertySignature",key:B,typeAnnotation:Y.node,...q?{optional:true}:{},...R?{readonly:true}:{}},O));}if(p(";")||p(","))a();else break}g("}");let E=h({type:"TSTypeLiteral",members:i},f);return x.length>0?Object.keys(y).length>0||v?P("Callable object types (call signatures mixed with members) are not supported"):{node:E,schema:x.length===1?x[0]:{t:"overload",signatures:x}}:{node:E,schema:{t:"object",props:y,...v?{index:v}:{}}}},b=At();return {parseType:()=>J(b),parseReturnType:c=>T(b,c),parseTypeParamList:()=>o(b),parseTypeInScope:c=>J(ie(b,c)),withTypeParams:(c,f)=>{let i=b;b=ie(i,c);try{return f()}finally{b=i;}}}};var oe=class extends TSLiteError{constructor(a,p,d,g,P){super("parse-error",`${a} (${p.line}:${p.column})`,{position:p,index:d,loc:g,end:P});this.position=p;this.index=d;this.loc=g;this.end=P;this.name="ParseError";}},Jt=n=>{let u=n;return u!=null&&typeof u.start=="number"&&u.start===u.end&&u.start>=0},Ve=(n,u)=>Object.assign(n,{start:u.start,end:u.start,loc:{start:u.loc.start,end:u.loc.start}}),Ft={"??":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"==":7,"===":7,"!=":7,"!==":7,"<":8,"<=":8,">":8,">=":8,in:8,as:8,satisfies:8,"<<":9,">>":9,">>>":9,"+":10,"-":10,"*":11,"/":11,"%":11,"**":12},Xt=new Set(["??","||","&&"]),Kt=new Set(["class","debugger","with","enum","interface"]),Mt={enum:'use a union of literals (`type T = "a" | "b"`) \u2014 it is serializable',interface:"use a type alias (`type X = { \u2026 }`)",namespace:"use modules (`import`/`export`)",module:"use modules (`import`/`export`)",declare:"declare the shape via the DI env, or with a `type` alias",abstract:"classes are not part of the language \u2014 model with objects + functions"},Ut={namespace:(n,u)=>n.type==="Identifier"&&u.type==="Punctuator"&&u.value==="{",module:(n,u)=>n.type==="Identifier"&&u.type==="Punctuator"&&u.value==="{",declare:n=>n.type==="Keyword"&&["const","let","var","function","class","enum","interface"].includes(n.value)||n.type==="Identifier"&&["type","namespace","module"].includes(n.value),abstract:n=>n.type==="Keyword"&&n.value==="class"},$t=new Set(["=","+=","-=","*=","/=","%=","**=","??=","&&=","||="]),ze=(n,u)=>{let a=0;for(let p of n)u(p)&&(n[a++]=p);n.length=a;};function Ce(n){let u=[],a=[],p=we(n,e=>a.push(e),e=>u.push({code:"lex-error",...e})),d=p.scan(),g=0,P=[],X=e=>{for(;P.length>e;)P.pop()();},h=(e=g)=>{let t=d[e];if(t?.type!=="Punctuator"||t.value!=="<"||!p.opensJsx(t.start))return;let r=d.slice(e),l=u.slice(),m=a.slice();ze(u,I=>I.code!=="lex-error"||I.index<t.start),ze(a,I=>I.start<t.start);let L=p.rescanLessThan(t.start);d.splice(e,d.length-e,...L),P.push(()=>{d.splice(e,d.length-e,...r),u.splice(0,u.length,...l),a.splice(0,a.length,...m);});},$=()=>{let e=d[g];if(e?.type!=="Punctuator"||e.value!=="<<")return;let t={line:e.loc.start.line,column:e.loc.start.column+1},r=g;d.splice(r,1,{...e,value:"<",end:e.start+1,loc:{start:e.loc.start,end:t}},{...e,value:"<",start:e.start+1,loc:{start:t,end:e.loc.end}}),P.push(()=>d.splice(r,2,e));},k=[],w=(e=0)=>d[Math.min(g+e,d.length-1)],o=()=>d[g++],V=()=>d[g-1],W=()=>{let e=d[g],t=d[g-1];return !!e&&!!t&&e.loc.start.line>t.loc.end.line},J=()=>w().type==="EOF",s=e=>w().type==="Punctuator"&&w().value===e,N=e=>w().type==="Keyword"&&w().value===e,U=e=>w().type==="Identifier"&&w().value===e,j=(e,t=w())=>{throw D(e,t),new oe(e,t.loc.start,t.start,t.loc,t.end)},D=(e,t=w())=>{let r=u[u.length-1];r&&r.index===t.start||u.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},S=e=>(s(e)||j(`Expected '${e}' but got '${w().value||w().type}'`),o()),C=(e,t)=>{let r=V()??t;return Object.assign(e,{start:t.start,end:r.end,loc:{start:t.loc.start,end:r.loc.end}})},T=(e,t,r)=>Object.assign(e,{start:t.start,end:r.end,loc:{start:t.loc.start,end:r.loc.end}}),z=e=>{let t="";for(let r=0;r<e.length;r++){if(e[r]!=="\\"){t+=e[r];continue}let l=e[++r];switch(l){case "n":t+=`
6
- `;break;case "t":t+=" ";break;case "r":t+="\r";break;case "b":t+="\b";break;case "f":t+="\f";break;case "v":t+="\v";break;case "0":t+="\0";break;case "x":t+=String.fromCharCode(parseInt(e.slice(r+1,r+3),16)),r+=2;break;case "u":if(e[r+1]==="{"){let m=e.indexOf("}",r);t+=String.fromCodePoint(parseInt(e.slice(r+2,m),16)),r=m;}else t+=String.fromCharCode(parseInt(e.slice(r+1,r+5),16)),r+=4;break;default:t+=l;}}return t},A=(e=false)=>G(e),G=(e=false)=>{let t=le(e),r=w();if(r.type==="Punctuator"&&$t.has(r.value)){o();let l=G();return T({type:"AssignmentExpression",operator:r.value,left:t,right:l},t,l)}return t},le=(e=false)=>{let t=b(0,e);if(!s("?"))return t;o();let r=A();S(":");let l=A();return T({type:"ConditionalExpression",test:t,consequent:r,alternate:l},t,l)},pe=()=>{let e=w();if(e.type==="Keyword")return e.value==="in"?{op:"in",consume:1}:null;if(e.type==="Identifier")return e.value==="as"?{op:"as",consume:1}:e.value==="satisfies"?{op:"satisfies",consume:1}:null;if(e.type!=="Punctuator")return null;if(e.value===">"){let t=w(1);if(t.type==="Punctuator"&&t.value===">"&&e.end===t.start){let r=w(2);return r.type==="Punctuator"&&r.value===">"&&t.end===r.start?{op:">>>",consume:3}:{op:">>",consume:2}}return {op:">",consume:1}}return {op:e.value,consume:1}},b=(e,t=false)=>{let r=c();for(;;){let l=pe();if(!l)break;let{op:m,consume:L}=l;if(m==="in"&&t)break;let I=ve(Ft,m);if(!I||I<=e)break;if(m==="satisfies"){if(W())break;j("'satisfies' is not supported in this language \u2014 a type annotation (`const x: T = \u2026`) also checks compatibility, but it declares the type as T, while 'satisfies' keeps the inferred one");}if(m==="as"){if(W())break;o();let M=me();r=T({type:"TSAsExpression",expression:r,typeAnnotation:M.schema,typeAnnotationNode:M.node},r,V());continue}for(let M=0;M<L;M++)o();let _=b(m==="**"?I-1:I,t);r=T({type:Xt.has(m)?"LogicalExpression":"BinaryExpression",operator:m,left:r,right:_},r,_);}return r},c=()=>{let e=w();return e.type==="Punctuator"&&(e.value==="++"||e.value==="--")?(o(),C({type:"UpdateExpression",operator:e.value,prefix:true,argument:c()},e)):N("await")?(o(),C({type:"AwaitExpression",argument:c()},e)):N("typeof")||N("void")||N("delete")||e.type==="Punctuator"&&(e.value==="!"||e.value==="-"||e.value==="+"||e.value==="~")?f(e):y()},f=e=>{o();let t=c();return s("**")&&j(`An unary expression with the '${e.value}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.`),C({type:"UnaryExpression",operator:e.value,prefix:true,argument:t},e)},i=()=>{let e=g,t=P.length,r=u.length,l=()=>(X(t),g=e,u.length=r,void 0);try{if($(),o(),s(">"))return l();let m=[];for(;m.push(me().schema),!!s(",");)o();return s(">")?(o(),s("(")?m:l()):l()}catch{return l()}},y=()=>{let e=et(),t=false;for(;;)if((w().type==="Template"||w().type==="TemplateHead")&&j("Tagged templates are not supported in this language"),s("?."))if(o(),t=true,s("(")){let{args:r,close:l}=v();e=T({type:"CallExpression",callee:e,arguments:r,optional:true},e,l);}else if(s("[")){o();let r=A(),l=S("]");e=T({type:"MemberExpression",object:e,property:r,computed:true,optional:true},e,l);}else {let r=w();r.type!=="Identifier"&&r.type!=="Keyword"&&j("Expected property name after '?.'"),o();let l=C({type:"Identifier",name:r.value},r);e=T({type:"MemberExpression",object:e,property:l,computed:false,optional:true},e,l);}else if(s(".")){o();let r=w(),l;r.type==="Identifier"||r.type==="Keyword"?(o(),l=C({type:"Identifier",name:r.value},r)):(D("Expected property name"),l=Ve({type:"Identifier",name:""},r)),e=T({type:"MemberExpression",object:e,property:l,computed:false,optional:false},e,l);}else if(s("[")){o();let r=A(),l=S("]");e=T({type:"MemberExpression",object:e,property:r,computed:true,optional:false},e,l);}else if(s("(")){let{args:r,close:l}=v();e=T({type:"CallExpression",callee:e,arguments:r,optional:false},e,l);}else if(s("<")||s("<<")){let r=i();if(!r)break;let{args:l,close:m}=v();e=T({type:"CallExpression",callee:e,arguments:l,optional:false,typeArguments:r},e,m);}else if(s("++")||s("--")){let r=o();e=T({type:"UpdateExpression",operator:r.value,prefix:false,argument:e},e,r);}else break;return t?T({type:"ChainExpression",expression:e},e,e):e},v=()=>{S("(");let e=[];for(;!s(")");)e.push(x()),s(")")||S(",");return {args:e,close:S(")")}},x=()=>{if(s("...")){let e=o(),t=A();return T({type:"SpreadElement",argument:t},e,t)}return A()},E=()=>{let e=w();return e.type!=="Identifier"&&j("Expected identifier"),o(),C({type:"Identifier",name:e.value},e)},O=(e=false)=>{let t=s("{")?K():s("[")?R():E();if(e&&s("?")&&(t.type!=="Identifier"&&j("A binding pattern parameter cannot be optional"),o(),t.optional=true),s(":")){o();let r=me();t.typeAnnotation=r.schema,t.typeAnnotationNode=r.node;}return t},K=()=>{let e=S("{"),t=[];for(;!s("}");){if(s("...")){let l=o(),m=O();t.push(T({type:"RestElement",argument:m},l,m));}else {let l=E(),m,L=false;if(s(":")?(o(),m=O()):(m={...l},L=true),s("=")){o();let I=A();m=T({type:"AssignmentPattern",left:m,right:I},m,I);}t.push(T({type:"Property",key:l,value:m,kind:"init",shorthand:L,computed:false},l,m));}s("}")||S(",");}let r=S("}");return T({type:"ObjectPattern",properties:t},e,r)},R=()=>{let e=S("["),t=[];for(;!s("]");){if(s(",")){t.push(null),o();continue}if(s("...")){let l=o(),m=O();t.push(T({type:"RestElement",argument:m},l,m));}else {let l=O();if(s("=")){o();let m=A();l=T({type:"AssignmentPattern",left:l,right:m},l,m);}t.push(l);}s("]")||S(",");}let r=S("]");return T({type:"ArrayPattern",elements:t},e,r)},F=()=>{let e=P.length,t=B();return t||X(e),t},B=()=>{let e=0,t="name";for(let r=g;r<d.length;r++){let l=d[r];if(l.type==="EOF")return false;if(l.type==="Punctuator"){if(l.value==="<"&&t==="type"){h(r);continue}if(e===1&&l.value===":"&&t==="name"?t="type":e===1&&l.value==="="?t="default":e===1&&l.value===","&&(t="name"),l.value==="("||l.value==="["||l.value==="{")e++;else if((l.value===")"||l.value==="]"||l.value==="}")&&(e--,e===0)){let m=d[r+1];return !m||m.type!=="Punctuator"?false:m.value==="=>"?true:m.value===":"?q(r+2):false}}}return false},q=e=>{let t=0;for(let r=e;r<d.length;r++){let l=d[r];if(l.type==="EOF")return false;if(l.type==="Punctuator")if(l.value==="<"&&h(r),["(","[","{","<"].includes(l.value))t++;else if([")","]","}",">"].includes(l.value)){if(t===0)return false;t--;}else {if(t===0&&l.value==="=>")return true;if(t===0&&(l.value===";"||l.value===","))return false}}return false},Y=()=>{S("(");let e=[];for(;!s(")");){if(s("...")){let t=o(),r=O();e.push(T({type:"RestElement",argument:r},t,r));}else {let t=O(true);if(s("=")){t.optional&&j("Parameter cannot have question mark and initializer"),o();let r=A();t=T({type:"AssignmentPattern",left:t,right:r},t,r);}e.push(t);}s(")")||S(",");}return S(")"),e},se=e=>{if(e.type==="Identifier")return e.name;let t=e.left;return e.type==="AssignmentPattern"&&t?.type==="Identifier"?t.name:null},fe=(e,t,r=[])=>rt(r,()=>qe(e,t,r)),qe=(e,t,r)=>{let l=s("(")?Y():[E()],m,L,I;if(s(":")){o();let M=tt(l.map(se));m=M.schema,L=M.node,I=M.guard;}S("=>");let _=s("{")?ue():A();return C({type:"ArrowFunctionExpression",params:l,body:_,async:e,expression:_.type!=="BlockStatement",generator:false,...m?{returnType:m,returnTypeNode:L}:{},...I?{returnGuard:I}:{},...r.length?{typeParameters:[...r]}:{}},t)},He=()=>{let e=S("["),t=[];for(;!s("]");){if(s(",")){o(),t.push(null);continue}t.push(x()),s("]")||S(",");}return T({type:"ArrayExpression",elements:t},e,S("]"))},Ge=()=>{let e=S("{"),t=[];for(;!s("}");){if(s("...")){let r=o(),l=A();t.push(T({type:"SpreadElement",argument:l},r,l));}else {let r=w(),l,m=false;if(s("["))m=true,o(),l=A(),S("]");else if(r.type==="String")o(),l=C({type:"Literal",value:z(r.value.slice(1,-1)),raw:r.value},r);else if(r.type==="Number")o(),l=C({type:"Literal",value:Number(r.value),raw:r.value},r);else if(r.type==="Identifier"||r.type==="Keyword")o(),l=C({type:"Identifier",name:r.value},r);else return j("Invalid property key");if(s(":")){o();let L=A();t.push(T({type:"Property",key:l,value:L,kind:"init",shorthand:false,computed:m},r,L));}else t.push(T({type:"Property",key:l,value:l,kind:"init",shorthand:true,computed:false},r,l));}s("}")||S(",");}return T({type:"ObjectExpression",properties:t},e,S("}"))},ye=(e,t)=>({type:"TemplateElement",value:{raw:e,cooked:z(e)},tail:t}),Ye=e=>{o();let t=[ye(e.value,false)],r=[];for(;;){r.push(A());let l=w();if(l.type==="TemplateMiddle")o(),t.push(ye(l.value,false));else if(l.type==="TemplateTail"){o(),t.push(ye(l.value,true));break}else j("Expected `}` to close template interpolation");}return C({type:"TemplateLiteral",quasis:t,expressions:r},e)},ce=()=>{let e=w();return e.type!=="Identifier"&&j(`Expected JSX identifier but got '${e.value||e.type}'`),C({type:"JSXIdentifier",name:o().value},e)},Le=()=>{let e=ce();if(s(":")){o();let t=ce();return T({type:"JSXNamespacedName",namespace:e,name:t},e,t)}for(;s(".");){o();let t=ce();e=T({type:"JSXMemberExpression",object:e,property:t},e,t);}return e},Z=e=>e.type==="JSXIdentifier"?e.name:e.type==="JSXNamespacedName"?`${Z(e.namespace)}:${Z(e.name)}`:`${Z(e.object)}.${Z(e.property)}`,Qe=()=>{let e=w();if(e.type==="String")return o(),C({type:"Literal",value:z(e.value.slice(1,-1)),raw:e.value},e);if(s("{")){let t=o(),r=G(),l=S("}");return T({type:"JSXExpressionContainer",expression:r},t,l)}return s("<")?xe():j(`Invalid JSX attribute value '${e.value||e.type}'`)},Ze=()=>{let e=[];for(;!s(">")&&!s("/>")&&!J();){if(s("{")){let l=o();S("...");let m=G(),L=S("}");e.push(T({type:"JSXSpreadAttribute",argument:m},l,L));continue}let t=ce();if(s(":")){o();let l=ce();t=T({type:"JSXNamespacedName",namespace:t,name:l},t,l);}let r=null;s("=")&&(o(),r=Qe()),e.push(T({type:"JSXAttribute",name:t,value:r},t,r??t));}return e},Re=()=>{let e=[];for(;!(s("</")||J());){let t=w();if(t.type==="JSXText")o(),e.push(C({type:"JSXText",value:t.value,raw:t.value},t));else if(s("{")){let r=o();if(s("}")){let l=o(),m=C({type:"JSXEmptyExpression"},r);e.push(T({type:"JSXExpressionContainer",expression:m},r,l));}else if(s("...")){o();let l=G(),m=S("}");e.push(T({type:"JSXSpreadChild",expression:l},r,m));}else {let l=G(),m=S("}");e.push(T({type:"JSXExpressionContainer",expression:l},r,m));}}else s("<")?e.push(xe()):j(`Unexpected token in JSX children '${t.value||t.type}'`);}return e},xe=()=>{let e=S("<");if(s(">")){let te=o(),ae=T({type:"JSXOpeningFragment"},e,te),ht=Re(),Tt=S("</"),Fe=S(">"),gt=T({type:"JSXClosingFragment"},Tt,Fe);return T({type:"JSXFragment",openingFragment:ae,children:ht,closingFragment:gt},e,Fe)}let t=Le(),r=Ze();if(s("/>")){let te=o(),ae=T({type:"JSXOpeningElement",name:t,attributes:r,selfClosing:true},e,te);return T({type:"JSXElement",openingElement:ae,children:[],closingElement:null},e,te)}let l=S(">"),m=T({type:"JSXOpeningElement",name:t,attributes:r,selfClosing:false},e,l),L=Re(),I=S("</"),_=w(),M=Le();Z(M)!==Z(t)&&j(`JSX closing tag </${Z(M)}> does not match opening <${Z(t)}>`,_);let H=S(">"),Q=T({type:"JSXClosingElement",name:M},I,H);return T({type:"JSXElement",openingElement:m,children:L,closingElement:Q},e,H)},et=()=>{let e=w();if(N("async")){let t=w(1);if(t.value==="("||t.type==="Identifier")return o(),fe(true,e);if(t.value==="<"){o();let r=je(e,true);if(r)return r}return j("Unexpected 'async'")}if(s("(")&&F()||e.type==="Identifier"&&w(1).type==="Punctuator"&&w(1).value==="=>")return fe(false,e);if(e.type==="Number")return o(),C({type:"Literal",value:Number(e.value),raw:e.value},e);if(e.type==="String")return o(),C({type:"Literal",value:z(e.value.slice(1,-1)),raw:e.value},e);if(e.type==="Template")return o(),C({type:"TemplateLiteral",expressions:[],quasis:[ye(e.value,true)]},e);if(e.type==="TemplateHead")return Ye(e);if(e.type==="Keyword")return e.value==="true"?(o(),C({type:"Literal",value:true,raw:"true"},e)):e.value==="false"?(o(),C({type:"Literal",value:false,raw:"false"},e)):e.value==="null"?(o(),C({type:"Literal",value:null,raw:"null"},e)):e.value==="new"?j("'new' is not supported \u2014 the language has no constructors (FP / portable IR). Use a factory function provided via DI (e.g. `now()` instead of `new Date()`)."):e.value==="function"?j("Anonymous functions are not supported \u2014 use an arrow function"):j(`'${e.value}' is not supported in this language`);if(e.type==="Identifier")return o(),C({type:"Identifier",name:e.value},e);if(s("(")){o();let t=A();return S(")"),t}return s("[")?He():s("{")?Ge():s("<")?je(e)??xe():j(`Unexpected token '${e.value||e.type}'`)},je=(e,t=false)=>{let r=g,l=P.length,m=u.length,L=()=>(X(l),g=r,u.length=m,void 0),I=w(1);I.type==="Keyword"&&I.value==="const"&&Se();try{let _=Se();return !_.length||!s("(")?L():fe(t,e,_)}catch{return L()}},{parseType:me,parseReturnType:tt,parseTypeParamList:Se,parseTypeInScope:nt,withTypeParams:rt}=_e({rescanTypeLessThan:h,splitShiftLeft:$,tokens:d,pos:()=>g,peek:w,next:o,isP:s,isK:N,expectP:S,fail:j,recordError:D,createMissingNode:Ve,unescape:z,typeRefs:k}),Ae=()=>{let e=o(),t=E(),r=[];s("<")&&(r=Se()),S("=");let l=nt(r),m=T({type:"TSTypeAliasDeclaration",id:t,...r.length?{typeParameters:[...r]}:{},typeAnnotation:l.schema,typeNode:l.node},e,V());return s(";")&&o(),m},ee=()=>{let e=w();if(e.type==="Identifier"&&e.value==="type"&&w(1).type==="Identifier"&&w(2).type==="Punctuator"&&(w(2).value==="="||w(2).value==="<"))return Ae();if(N("const")||N("let")||N("var")){let m=Oe();return s(";")&&o(),m}if(N("if"))return ut();if(N("for"))return it();if(N("while"))return ct();if(N("do"))return lt();if(N("break")||N("continue"))return pt();if(N("return"))return dt();if(N("throw"))return ft();if(N("try"))return yt();if(N("switch"))return mt();if(N("import"))return st();if(N("export"))return at();if(s("{"))return ue();if((N("function")||N("async")&&w(1).type==="Keyword"&&w(1).value==="function")&&j("Function declarations are not supported \u2014 use 'const fn = () => \u2026'"),s(";"))return o(),C({type:"EmptyStatement"},e);if(e.type==="Keyword"&&Kt.has(e.value)||e.type==="Identifier"&&ve(Ut,e.value)?.(w(1),w(2))===true){let m=ve(Mt,e.value);j(`'${e.value}' is not supported in this language`+(m?` \u2014 ${m}`:""));}let r=A(),l=s(";")?o():V();return T({type:"ExpressionStatement",expression:r},r,l)},Oe=()=>{let e=o(),t=e.value,r=()=>{let m=O(),L=null;return s("=")?(o(),L=A()):t==="const"&&D("'const' declarations must be initialized"),T({type:"VariableDeclarator",id:m,init:L},m,L??m)},l=[r()];for(;s(",");)o(),l.push(r());return T({type:"VariableDeclaration",kind:t,declarations:l},e,l[l.length-1])},ot=()=>{let e=w();return e.type!=="String"&&j("Expected module specifier string"),o(),C({type:"Literal",value:z(e.value.slice(1,-1)),raw:e.value},e)},st=()=>{let e=o(),t=[],r;if(U("type")){let m=w(1);(m.type==="Punctuator"&&(m.value==="{"||m.value==="*")||m.type==="Identifier"&&m.value!=="from")&&(o(),r="type");}if(w().type!=="String"){if(w().type==="Identifier"){let m=E();t.push(T({type:"ImportDefaultSpecifier",local:m},m,m)),s(",")&&o();}if(s("*")){let m=o();U("as")||j("Expected 'as' after '*' in import"),o();let L=E();t.push(T({type:"ImportNamespaceSpecifier",local:L},m,L));}else if(s("{")){for(o();!s("}")&&!J();){let m;U("type")&&w(1).type==="Identifier"&&w(1).value!=="as"&&(o(),m="type");let L=E(),I=L;if(U("as")&&(o(),I=E()),t.push(T({type:"ImportSpecifier",imported:L,local:I,...m?{importKind:m}:{}},L,I)),s(","))o();else break}S("}");}U("from")||j("Expected 'from' in import declaration"),o();}let l=ot();return s(";")&&o(),C({type:"ImportDeclaration",specifiers:t,source:l,...r?{importKind:r}:{}},e)},at=()=>{let e=o();if(U("type")&&w(1).type==="Identifier"){let t=Ae();return C({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(N("default")){o();let t=A();return s(";")&&o(),C({type:"ExportDefaultDeclaration",declaration:t},e)}if(N("const")||N("let")||N("var")){let t=Oe();return s(";")&&o(),C({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(s("{")){o();let t=[];for(;!s("}")&&!J();){let r=E(),l=r;if(U("as")&&(o(),l=E()),t.push(T({type:"ExportSpecifier",local:r,exported:l},r,l)),s(","))o();else break}return S("}"),s(";")&&o(),C({type:"ExportNamedDeclaration",declaration:null,specifiers:t,source:null},e)}return j("Expected 'const', 'type', '{', or 'default' after 'export'")},De=()=>w().type==="Identifier"&&w().value==="of",ke=()=>N("in"),it=()=>{let e=o();S("(");let t=null,r=null;if(!s(";"))if(N("const")||N("let")||N("var")){let I=o(),_=()=>{let H=E();if(s(":")){o();let Q=me();H.typeAnnotation=Q.schema,H.typeAnnotationNode=Q.node;}return H},M=_();if(De()||ke()){let H=T({type:"VariableDeclarator",id:M,init:null},M,M);r=T({type:"VariableDeclaration",kind:I.value,declarations:[H]},I,M);}else {let H=te=>{let ae=null;return s("=")?(o(),ae=A(true)):I.value==="const"&&j("'const' declarations must be initialized"),T({type:"VariableDeclarator",id:te,init:ae},te,ae??te)},Q=[H(M)];for(;s(",");)o(),Q.push(H(_()));t=T({type:"VariableDeclaration",kind:I.value,declarations:Q},I,Q[Q.length-1]);}}else {let I=A(true);De()||ke()?r=I:t=I;}if(r){let I=ke();o();let _=A();S(")");let M=ee();return T(I?{type:"ForInStatement",left:r,right:_,body:M}:{type:"ForOfStatement",left:r,right:_,body:M,await:false},e,M)}S(";");let l=s(";")?null:A();S(";");let m=s(")")?null:A();S(")");let L=ee();return T({type:"ForStatement",init:t,test:l,update:m,body:L},e,L)},lt=()=>{let e=o(),t=ee();N("while")||j("Expected 'while' after the 'do' body"),o(),S("(");let r=A(),l=S(")");return s(";")&&o(),T({type:"DoWhileStatement",body:t,test:r},e,l)},pt=()=>{let e=o(),t=e.value==="break"?"BreakStatement":"ContinueStatement",r=s(";")?o():V();return T({type:t,label:null},e,r)},ct=()=>{let e=o();S("(");let t=A();S(")");let r=ee();return T({type:"WhileStatement",test:t,body:r},e,r)},ut=()=>{let e=o();S("(");let t=A();S(")");let r=ee(),l=null;return N("else")&&(o(),l=ee()),T({type:"IfStatement",test:t,consequent:r,alternate:l},e,l??r)},dt=()=>{let e=o(),t=null;!s(";")&&!s("}")&&!J()&&(t=A());let r=s(";")?o():V();return T({type:"ReturnStatement",argument:t},e,r)},ft=()=>{let e=o(),t=A(),r=s(";")?o():V();return T({type:"ThrowStatement",argument:t},e,r)},yt=()=>{let e=o(),t=ue(),r=null,l=null;if(N("catch")){let m=o(),L=null;s("(")&&(o(),L=E(),S(")"));let I=ue();r=T({type:"CatchClause",param:L,body:I},m,I);}return N("finally")&&(o(),l=ue()),!r&&!l&&j("'try' requires a 'catch' or 'finally' clause"),T({type:"TryStatement",block:t,handler:r,finalizer:l},e,l??r??t)},mt=()=>{let e=o();S("(");let t=A();S(")"),S("{");let r=[];for(;!s("}")&&!J();){let m=w(),L=null;N("case")?(o(),L=A()):N("default")?o():j("Expected 'case' or 'default' in switch"),S(":");let I=[];for(;!s("}")&&!N("case")&&!N("default")&&!J();)I.push(ee());r.push(T({type:"SwitchCase",test:L,consequent:I},m,V()??m));}let l=S("}");return T({type:"SwitchStatement",discriminant:t,cases:r},e,l)},ue=()=>{let e=S("{"),t=Je(()=>s("}"));return T({type:"BlockStatement",body:t},e,S("}"))},Je=e=>{let t=[];for(;!e()&&!J();){if(w().type==="Unknown"){o();continue}try{t.push(ee());}catch(r){if(!(r instanceof oe))throw r;J()||o();}}return t};return {parseExpr:A,parseProgram:()=>{let e=w(),t=Je(()=>false);return T({type:"Program",sourceType:"module",body:t,...k.length?{typeRefs:k}:{},...a.length?{comments:a}:{},...u.length?{parseDiagnostics:u}:{}},e,V()??e)},eof:J,fail:j,recordError:D,diagnostics:u}}function We(n){let u=Ce(n),a=u.parseProgram(),p=a.comments;return p?.length&&Ee(a,p,n),{ast:a,diagnostics:u.diagnostics}}function Bt(n){let{ast:u,diagnostics:a}=We(n),p=a[0];if(p){let d=p.code==="lex-error"?re:oe;throw new d(p.message,p.position,p.index,p.loc,p.end)}return u}function _t(n){let u=Ce(n),a=u.parseExpr();u.eof()||u.fail("Unexpected token after expression");let p=u.diagnostics[0];if(p){let d=p.code==="lex-error"?re:oe;throw new d(p.message,p.position,p.index,p.loc,p.end)}return a}function Vt(n){let u=Ce(n),a;try{a=u.parseExpr(),u.eof()||u.recordError("Unexpected token after expression");}catch(p){if(!(p instanceof oe)&&!(p instanceof re))throw p}return {ast:a,diagnostics:u.diagnostics}}var zt="1.7.0";export{Me as KEYWORDS,re as LexError,oe as ParseError,Ee as attachComments,Jt as nodeIsMissing,Bt as parse,_t as parseExpression,Vt as parseExpressionTolerant,We as parseTolerant,Nt as tokenize,zt as version};
1
+ import {TSLiteError}from'@tslite/ast';var ie=class extends TSLiteError{constructor(a,i,y,m,E){super("lex-error",`${a} (${i.line}:${i.column})`,{position:i,index:y,loc:m,end:E});this.position=i;this.index=y;this.loc=m;this.end=E;this.name="LexError";}},We=new Set(["const","if","else","return","async","await","true","false","null","typeof","let","var","function","class","new","for","while","do","this","throw","try","catch","finally","switch","case","break","continue","default","void","delete","instanceof","in","yield","import","export","extends","super","debugger","with","enum","interface"]),Dt=["...","===","!==","=>","?.","??=","&&=","||=","**=","??","==","!=","<=",">=","&&","||","|","&","++","--","+=","-=","*=","/=","%=","**","<<","+","-","*","/","%","<",">","!","?",":",".",",",";","=","^","~","(",")","[","]","{","}"],Se=r=>r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$",ke=r=>Se(r)||r>="0"&&r<="9",ae=r=>r>="0"&&r<="9",ze=r=>ae(r)||r>="a"&&r<="f"||r>="A"&&r<="F",Jt=r=>ke(r)||r==="-",me=r=>r===`
2
+ `||r==="\r"||r==="\u2028"||r==="\u2029",xe=(r,c)=>{let a=c;for(;;){let i=r[a]??"";if(i===" "||i===" "||i==="\f"||i==="\v"||me(i))a++;else if(i==="/"&&r[a+1]==="/")for(a+=2;a<r.length&&!me(r[a]??"");)a++;else if(i==="/"&&r[a+1]==="*"){for(a+=2;a<r.length&&!(r[a]==="*"&&r[a+1]==="/");)a++;a+=2;}else return a}},Ft=(r,c)=>{if(!Se(r[c]??""))return c;let a=c+1;for(;ke(r[a]??"");)a++;return a},qe=(r,c,a)=>r.startsWith(a,c)&&!ke(r[c+a.length]??""),Kt=(r,c)=>{let a=xe(r,c);qe(r,a,"const")&&(a=xe(r,a+5));let i=Ft(r,a);if(i===a)return false;if(a=xe(r,i),qe(r,a,"extends")){let y=xe(r,a+7),m=r[y]??"";return !(m==="="||m===">"||m==="/")}return r[a]===","?true:r[a]==="="&&r[a+1]!==">"},Xt=new Set(["(","[","{",",",";",":","?","=>","...","=","+","-","*","/","%","<","<=",">",">=","==","===","!=","!==","&&","||","??","!","+=","-=","*=","/=","%=","??=","&&=","||=","**="]),Mt=new Set(["return","typeof","await","delete","void","in","instanceof","else","case","yield","throw"]);function $t(r,c,a){return Ae(r,c,a).scan()}function Ae(r,c,a){let i=[],y=0,m=1,E=0,K=()=>({line:m,column:E}),h=(w=0)=>r[y+w]??"",_=w=>{let S=K(),X={start:S,end:{line:m,column:E+1}};if(a){a({message:w,position:S,index:y,loc:X,end:y+1});return}throw new ie(w,S,y,X,y+1)},P=()=>{let w=r[y++];return w==="\r"?(r[y]===`
3
+ `&&y++,m++,E=0):w===`
4
+ `||w==="\u2028"||w==="\u2029"?(m++,E=0):E++,w},H=()=>{for(;;){let w=h();if(w===" "||w===" "||w==="\f"||w==="\v"||me(w))P();else if(w==="/"&&h(1)==="/"){let S=y,X=K();P(),P();let l=y;for(;y<r.length&&!me(h());)P();c?.({type:"Line",value:r.slice(l,y),start:S,end:y,loc:{start:X,end:K()}});}else if(w==="/"&&h(1)==="*"){let S=y,X=K();P(),P();let l=y,p=y;for(;;){if(y>=r.length){_("Unterminated block comment"),p=y;break}if(h()==="*"&&h(1)==="/"){p=y,P(),P();break}P();}c?.({type:"Block",value:r.slice(l,p),start:S,end:y,loc:{start:X,end:K()}});}else break}},A=(w,S,X,l)=>{i.push({type:w,value:S,start:X,end:y,loc:{start:l,end:K()}}),u=w==="Punctuator"?Xt.has(S):w==="Keyword"?Mt.has(S):w==="TemplateHead"||w==="TemplateMiddle";},q=w=>{for(P();y<r.length;){let S=h();if(S===w)return P(),r.slice(C,y);if(me(S))return _("Unterminated string literal"),r.slice(C,y);if(S==="\\"){if(P(),y>=r.length)return _("Unterminated string literal"),r.slice(C,y);P();continue}P();}return _("Unterminated string literal"),r.slice(C,y)},T=()=>{if(h()==="0"&&(h(1)==="x"||h(1)==="X")){if(P(),P(),!ze(h()))return _("Invalid hexadecimal literal");for(;ze(h());)P();return}if(h()==="0"&&(h(1)==="b"||h(1)==="B")){if(P(),P(),h()!=="0"&&h()!=="1")return _("Invalid binary literal");for(;h()==="0"||h()==="1";)P();return}if(h()==="0"&&(h(1)==="o"||h(1)==="O")){if(P(),P(),!(h()>="0"&&h()<="7"))return _("Invalid octal literal");for(;h()>="0"&&h()<="7";)P();return}for(;ae(h());)P();if(h()===".")for(P();ae(h());)P();if(h()==="e"||h()==="E"){if(P(),(h()==="+"||h()==="-")&&P(),!ae(h()))return _("Invalid exponent");for(;ae(h());)P();}},o=()=>{let w=y;for(;y<r.length;){let S=h();if(S==="`"){let X=r.slice(w,y);return P(),{raw:X,interp:false}}if(S==="$"&&h(1)==="{"){let X=r.slice(w,y);return P(),P(),{raw:X,interp:true}}if(S==="\\"){if(P(),y>=r.length)break;P();continue}P();}return _("Unterminated template literal"),{raw:r.slice(w,y),interp:false}},C=0,G=0,U=[],u=true,v="js",B=[],R=[],Y=new Map,Z=-1,re=()=>({i:y,line:m,col:E,mode:v,braceDepth:G,tmplStack:[...U],jsxParent:[...B],jsxExpr:R.map(w=>({...w}))}),N=w=>{y=w.i,m=w.line,E=w.col,v=w.mode,G=w.braceDepth,U=[...w.tmplStack],B=[...w.jsxParent],R=w.jsxExpr.map(S=>({...S}));},O=()=>(i=[],g(),i),g=()=>{for(;;){if(v==="jsxChildren"){C=y;let l=K();if(y>=r.length){A("EOF","",C,l);break}let p=h();if(p==="<"){h(1)==="/"?(P(),P(),A("Punctuator","</",C,l),v="jsxCloseTag"):(P(),A("Punctuator","<",C,l),B.push("jsxChildren"),v="jsxOpenTag");continue}if(p==="{"){P(),A("Punctuator","{",C,l),R.push({level:G,restore:"jsxChildren"}),v="js";continue}for(;y<r.length&&h()!=="<"&&h()!=="{";)P();A("JSXText",r.slice(C,y),C,l);continue}if(v==="jsxOpenTag"||v==="jsxCloseTag"){H(),C=y;let l=K();if(y>=r.length){A("EOF","",C,l);break}let p=h();if(Se(p)){for(P();Jt(h());)P();A("Identifier",r.slice(C,y),C,l);continue}if(p==="/"&&h(1)===">"){P(),P(),A("Punctuator","/>",C,l),v=B.pop()??"js";continue}if(p===">"){P(),A("Punctuator",">",C,l),v=v==="jsxCloseTag"?B.pop()??"js":"jsxChildren";continue}if(p==="{"){P(),A("Punctuator","{",C,l),R.push({level:G,restore:v}),v="js";continue}if(p==='"'||p==="'"){A("String",q(p),C,l);continue}if(p==="="||p==="."||p===":"){P(),A("Punctuator",p,C,l);continue}if(p==="<"&&v==="jsxOpenTag"){P(),A("Punctuator","<",C,l),B.push("jsxOpenTag");continue}_(`Unexpected character '${p}' in JSX tag`),P(),A("Unknown",p,C,l);continue}H(),C=y;let w=K();if(y>=r.length){A("EOF","",C,w);break}let S=h();if(Se(S)){for(;ke(h());)P();let l=r.slice(C,y);A(We.has(l)?"Keyword":"Identifier",l,C,w);continue}if(ae(S)||S==="."&&ae(h(1))){T(),A("Number",r.slice(C,y),C,w);continue}if(S==='"'||S==="'"){let l=q(S);A("String",l,C,w);continue}if(S==="`"){P();let{raw:l,interp:p}=o();p?(A("TemplateHead",l,C,w),U.push(G)):A("Template",l,C,w);continue}if(S==="<"&&y===Z){Z=-1,P(),A("Punctuator","<",C,w);continue}if(S==="<"&&u&&!Kt(r,y+1)){Y.set(y,re()),P(),A("Punctuator","<",C,w),B.push("js"),v="jsxOpenTag";continue}if(S==="{"){P(),A("Punctuator","{",C,w),G++;continue}if(S==="}"){if(U.length>0&&G===U[U.length-1]){U.pop(),P();let{raw:l,interp:p}=o();A(p?"TemplateMiddle":"TemplateTail",l,C,w),p&&U.push(G);continue}if(R.length>0&&G===R[R.length-1].level){let{restore:l}=R.pop();P(),A("Punctuator","}",C,w),v=l;continue}P(),A("Punctuator","}",C,w),G--;continue}if(S==="?"&&h(1)==="."&&ae(h(2))){P(),A("Punctuator","?",C,w);continue}let X=Dt.find(l=>r.startsWith(l,y));if(X){for(let l=0;l<X.length;l++)P();A("Punctuator",X,C,w);continue}_(`Unexpected character '${S}'`),P(),A("Unknown",S,C,w);}};return {scan:O,opensJsx:w=>Y.has(w),rescanLessThan:w=>{let S=Y.get(w);return S?(N(S),Z=w,O()):null}}}var Ut=new Set(["leadingComments","trailingComments","innerComments","comments"]),He=r=>typeof r=="object"&&r!==null&&typeof r.type=="string"&&r.loc!=null&&typeof r.start=="number",Qe=new WeakMap;function Bt(r){let c=Qe.get(r);if(c)return c;let a=[];for(let i of Object.keys(r)){if(Ut.has(i))continue;let y=r[i];if(He(y))a.push(y);else if(Array.isArray(y))for(let m of y)He(m)&&a.push(m);}return a.sort((i,y)=>i.start-y.start),Qe.set(r,a),a}function _t(r,c){let a=r,i,y;for(;;){let m=Bt(a);i=void 0,y=void 0;let E;for(let K of m){if(K.start<=c.start&&c.end<=K.end){E=K;break}if(K.end<=c.start)i=K;else if(c.end<=K.start){y=K;break}}if(!E)break;a=E;}return {enclosing:a,preceding:i,following:y}}var Oe=(r,c)=>{(r.leadingComments??(r.leadingComments=[])).push(c);},we=(r,c)=>{(r.trailingComments??(r.trailingComments=[])).push(c);},De=(r,c)=>{(r.innerComments??(r.innerComments=[])).push(c);};function Vt(r,c){for(let a=c;a<r.length;a++){let i=r[a];if(i!==" "&&i!==" "&&i!=="\r"&&i!==`
5
+ `&&i!=="\f")return i}return ""}var Gt=new Set([")","]","}",","]);function Je(r,c,a=""){for(let i of c){let{enclosing:y,preceding:m,following:E}=_t(r,i),K=m==null||m.loc.end.line<i.loc.start.line,h=!K&&(E==null||i.loc.end.line<E.loc.start.line);if(K)E?Oe(E,i):m?we(m,i):De(y,i);else if(h)m?we(m,i):E?Oe(E,i):De(y,i);else {let _=Gt.has(Vt(a,i.end));m&&_?we(m,i):E?Oe(E,i):m?we(m,i):De(y,i);}}}var zt=Object.prototype.hasOwnProperty,he=(r,c)=>zt.call(r,c)?r[c]:void 0;function Ye(r,c,a){c==="__proto__"?Object.defineProperty(r,c,{value:a,enumerable:true,writable:true,configurable:true}):r[c]=a;}var qt=(r=[])=>({vars:new Set(r),bounds:new Map,noCond:false,inferSink:null}),ue=(r,c)=>{let a=new Set(r.vars),i=new Map(r.bounds);for(let y of c)a.add(y.name),y.bound?i.set(y.name,{bound:y.bound}):i.delete(y.name);return {vars:a,bounds:i,noCond:r.noCond,inferSink:r.inferSink}},Fe=r=>({t:"var",name:r.name,...r.bound?{bound:r.bound}:{},...r.default?{default:r.default}:{}}),Wt=(r,c)=>{let a=r.bounds.get(c)?.bound;return a?{t:"var",name:c,bound:a}:{t:"var",name:c}},Ze=r=>{let{peek:c,next:a,isP:i,isK:y,expectP:m,fail:E,unescape:K}=r,h=(l,p)=>{let f=r.tokens[r.pos()-1]??p;return Object.assign(l,{start:p.start,end:f.end,loc:{start:p.loc.start,end:f.loc.end}})},_=()=>{let l=r.pos(),p=r.tokens[l],f=r.tokens[l-1];return !!f&&!!p&&p.loc.start.line>f.loc.end.line},P=()=>{let l=x=>r.tokens[r.pos()+x],p=(x,...k)=>x?.type==="Punctuator"&&k.includes(x.value),f=l(1);if(p(f,")","..."))return true;if(f?.type!=="Identifier")return false;let b=l(2);return p(b,":",",","?","=")?true:p(b,")")&&p(l(3),"=>")},H=()=>{let l=r.tokens,p=[],f=0,b=false;for(let x=r.pos();x<l.length;x++){let k=l[x];if(k.type==="EOF")break;if(k.type==="Punctuator"){if(k.value==="<")f++,f===1&&(b=true);else if(k.value===">"){if(f--,f===0)break}else k.value==="("||k.value==="["||k.value==="{"?(f++,b=false):k.value===")"||k.value==="]"||k.value==="}"?(f--,b=false):k.value===","&&f===1?b=true:b=false;continue}if(f===1&&b){if(k.type==="Keyword"&&k.value==="const")continue;if(k.type==="Identifier"){p.push(k.value),b=false;continue}}b=false;}return p},A=l=>{let p=ue(l,H().map(b=>({name:b})));m("<");let f=[];for(;!i(">");){let b=c();y("const")&&E("'const' type parameters are not supported in this language; a constraint keeps the literal: '<T extends string>'");let x=c();x.type!=="Identifier"&&E("Expected type parameter name"),a();let k,D;if(y("extends")){a();let I=o(p);k=I.schema,D=I.node;}let F,M;if(i("=")){a();let I=o(p);F=I.schema,M=I.node;}f.push(h({type:"TSTypeParameter",name:x.value,...k?{bound:k}:{},...D?{boundNode:D}:{},...F?{default:F}:{},...M?{defaultNode:M}:{}},b)),i(">")||m(",");}return m(">"),f},q=l=>{r.splitShiftLeft(),m("<");let p=[];for(;!i(">");)p.push(o(l)),i(">")||m(",");return m(">"),p},T=l=>{let p=c();return p.type==="Identifier"&&p.value===l},o=l=>{let p=c(),f=C(l);if(l.noCond||!y("extends")||_())return f;a();let b=[],x=C({...l,noCond:true,inferSink:b});m("?");let k=ue(l,b.map(M=>({name:M}))),D=o(k);m(":");let F=o(k);return {node:h({type:"TSConditionalType",checkType:f.node,extendsType:x.node,trueType:D.node,falseType:F.node},p),schema:{t:"conditional",check:f.schema,extends:x.schema,then:D.schema,else:F.schema,...b.length?{infer:b.map(M=>Fe({name:M}))}:{}}}},C=l=>{let p=c();i("|")&&a();let f=G(l);if(!i("|"))return f;let b=[f.node],x=[f.schema];for(;i("|");){a();let k=G(l);b.push(k.node),x.push(k.schema);}return {node:h({type:"TSUnionType",types:b},p),schema:{t:"union",of:x}}},G=l=>{let p=c();i("&")&&a();let f=U(l);if(!i("&"))return f;let b=[f.node],x=[f.schema];for(;i("&");){a();let k=U(l);b.push(k.node),x.push(k.schema);}return {node:h({type:"TSIntersectionType",types:b},p),schema:{t:"intersection",of:x}}},U=l=>{let p=c();if(T("keyof")){a();let f=U(l);return {node:h({type:"TSTypeOperator",operator:"keyof",typeAnnotation:f.node},p),schema:{t:"keyof",of:f.schema}}}if(T("readonly")){a();let f=U(l);return f.schema.t!=="array"&&f.schema.t!=="tuple"&&E("'readonly' only applies to array and tuple types"),{node:h({...f.node,readonly:true},p),schema:{...f.schema,readonly:true}}}if(T("infer")){a();let f=c();f.type!=="Identifier"&&E("Expected 'infer' variable name"),a();let b=l.inferSink;return b?(b.push(f.value),{node:h({type:"TSInferType",name:f.value},p),schema:{t:"var",name:f.value}}):E("'infer' is only allowed in the 'extends' clause of a conditional")}return u(l)},u=l=>{let p=c(),f=Y(l);for(;i("[")&&!_();)if(a(),i("]"))a(),f={node:h({type:"TSArrayType",elementType:f.node},p),schema:{t:"array",items:f.schema}};else {let b=o(l);m("]"),f={node:h({type:"TSIndexedAccessType",objectType:f.node,indexType:b.node},p),schema:{t:"index",obj:f.schema,key:b.schema}};}return f},v=(l,p,f)=>({node:h({type:"TSKeywordType",kind:p},l),schema:f}),B=l=>{let p=r.namespace?.()??null;r.typeRefs?.push(p===null?l:{...l,namespace:p});},R=(l,p,f)=>{let b=[{name:l.value,loc:l.loc}];for(;i(".");){a();let I=c();I.type!=="Identifier"&&I.type!=="Keyword"&&E("Expected a name after '.' in a qualified type name"),a(),b.push({name:I.value,loc:I.loc});}let x=b.map(I=>I.name).join("."),k=i("<")||i("<<")?q(f):[],D=k.map(I=>I.schema),F=h({type:"TSTypeReference",typeName:x,...k.length?{typeArguments:k.map(I=>I.node)}:{}},p),M=b[b.length-1];return B({name:x,loc:{start:l.loc.start,end:M.loc.end},args:D,segments:b}),{node:F,schema:{t:"apply",name:x,args:D}}},Y=l=>{let p=c();if(y("typeof")){a();let x=c();x.type!=="Identifier"&&E("Expected a name after 'typeof' in type position"),a();let k=[x.value];for(;i(".");){a();let D=c();D.type!=="Identifier"&&D.type!=="Keyword"&&E("Expected a property name after '.' in 'typeof'"),a(),k.push(D.value);}return {node:h({type:"TSTypeQuery",exprName:k},p),schema:{t:"typeQuery",path:k}}}if(i("<")){r.rescanTypeLessThan();let x=A(l),k=ue(l,x);return N(k,p,x)}if(i("(")){if(P())return N(l,p);a();let x=o(l.noCond?{...l,noCond:false}:l);return m(")"),x}if(i("{"))return g()?w(l):S(l);if(i("["))return O(l);let f=c();if(f.type==="String"){a();let x=K(f.value.slice(1,-1));return {node:h({type:"TSLiteralType",literal:x},p),schema:{t:"literal",value:x}}}if(f.type==="Number"){a();let x=Number(f.value);return {node:h({type:"TSLiteralType",literal:x},p),schema:{t:"literal",value:x}}}if(y("true"))return a(),{node:h({type:"TSLiteralType",literal:true},p),schema:{t:"literal",value:true}};if(y("false"))return a(),{node:h({type:"TSLiteralType",literal:false},p),schema:{t:"literal",value:false}};if(y("null"))return a(),v(p,"null",{t:"null"});if(y("void"))return a(),v(p,"void",{t:"void"});if(f.type==="Identifier"){if(a(),i("."))return R(f,p,l);switch(f.value){case "string":return v(p,"string",{t:"string"});case "number":return v(p,"number",{t:"number"});case "boolean":return v(p,"boolean",{t:"boolean"});case "any":return v(p,"any",{t:"any"});case "unknown":return v(p,"unknown",{t:"unknown"});case "undefined":return v(p,"undefined",{t:"undefined"});case "never":return v(p,"never",{t:"union",of:[]});case "object":return v(p,"object",{t:"nonPrimitive"})}let x=i("<")||i("<<")?q(l):[],k=x.map(M=>M.schema),D=x.length?x.map(M=>M.node):void 0,F=h({type:"TSTypeReference",typeName:f.value,...D?{typeArguments:D}:{}},p);return l.vars.has(f.value)&&k.length===0?{node:F,schema:Wt(l,f.value)}:(B({name:f.value,loc:f.loc,args:k}),{node:F,schema:{t:"apply",name:f.value,args:k}})}r.recordError(`Expected a type but got '${f.value||f.type}'`,f);let b=r.createMissingNode({type:"TSTypeReference",typeName:""},f);return B({name:"",loc:b.loc,args:[]}),{node:b,schema:{t:"unknown"}}},Z=l=>{m("(");let p=[];for(;!i(")");){let f=c(),b=i("...");b&&a();let x=c();x.type!=="Identifier"&&E("Expected parameter name in function type"),a();let k=!b&&i("?");k&&a(),m(":");let D=o(l),F=h({type:"Identifier",name:x.value,typeAnnotationNode:D.node,...k?{optional:true}:{}},x);p.push({node:b?h({type:"RestElement",argument:F},f):F,schema:{name:x.value,type:D.schema,...k?{optional:true}:{},...b?{variadic:true}:{}}}),b&&!i(")")&&E("A rest parameter must be last in a parameter list"),i(")")||m(",");}return m(")"),p},re=(l,p)=>{let f=c(),b=r.tokens[r.pos()+1];if(!(f.type==="Identifier"&&b?.type==="Identifier"&&b.value==="is"))return o(l);let k=p.indexOf(f.value);k<0&&E(`Cannot find parameter '${f.value}' for the type predicate`),a(),a();let D=o(l);return {node:h({type:"TSTypePredicate",parameterName:f.value,typeAnnotation:D.node},f),schema:{t:"boolean"},guard:{param:k,type:D.schema}}},N=(l,p,f)=>{let b=Z(l);m("=>");let x=re(l,b.map(k=>k.schema.name));return {node:h({type:"TSFunctionType",params:b.map(k=>k.node),returnType:x.node,...f?.length?{typeParameters:[...f]}:{}},p),schema:{t:"fn",params:b.map(k=>k.schema),returns:x.schema,...x.guard?{guard:x.guard}:{},...f?.length?{typeParams:f.map(Fe)}:{}}}},O=l=>{let p=c();m("[");let f=[],b=[],x=[],k=[],D=()=>{let I=r.tokens[r.pos()],J=r.tokens[r.pos()+1],V=r.tokens[r.pos()+2];if(I?.type==="Identifier"&&J?.type==="Punctuator"&&(J.value===":"||J.value==="?"&&V?.type==="Punctuator"&&V.value===":"))return a(),I.value};for(;!i("]");){if(x[x.length-1]==="rest"&&E("A rest element must be last in a tuple type"),i("...")){a();let I=D();I!==void 0&&m(":"),k.push(I);let J=o(l);J.schema.t!=="array"&&E("A rest element type must be written as an array type ('...T[]')"),b.push(J.schema.items),f.push(J.node.elementType),x.push("rest");}else {let I=D(),J=false;I!==void 0&&(i("?")&&(a(),J=true),m(":")),k.push(I);let V=o(l);!J&&i("?")&&(a(),J=true),b.push(V.schema),f.push(V.node),x.push(J?"optional":"req");}i("]")||m(",");}m("]");let F=x.some(I=>I!=="req"),M=k.some(I=>I!==void 0);return {node:h({type:"TSTupleType",elementTypes:f,...F?{flags:x}:{},...M?{labels:k}:{}},p),schema:F?{t:"tuple",elements:b,flags:x}:{t:"tuple",elements:b}}},g=()=>{let l=r.tokens,p=r.pos()+1;return l[p]?.type==="Punctuator"&&(l[p]?.value==="+"||l[p]?.value==="-")&&(p++,!(l[p]?.type==="Identifier"&&l[p]?.value==="readonly"))?false:(l[p]?.type==="Identifier"&&l[p]?.value==="readonly"&&p++,l[p]?.type==="Punctuator"&&l[p]?.value==="["&&l[p+1]?.type==="Identifier"&&l[p+2]?.type==="Keyword"&&l[p+2]?.value==="in")},w=l=>{let p=c();m("{");let f=i("+")||i("-")?a().value:null,b;T("readonly")&&(a(),b=f==="+"?"+":f==="-"?"-":true),m("[");let x=c();x.type!=="Identifier"&&E("Expected mapped type key name"),a(),y("in")||E("Expected 'in' in mapped type"),a();let k=o(l);T("as")&&E("Key remapping ('as') in mapped types is not supported"),m("]");let D=i("+")||i("-")?a().value:null,F;D!==null&&!i("?")&&E("'?' expected"),i("?")&&(a(),F=D==="+"?"+":D==="-"?"-":true),m(":");let M=o(ue(l,[{name:x.value}]));return (i(";")||i(","))&&a(),m("}"),{node:h({type:"TSMappedType",key:x.value,constraint:k.node,typeAnnotation:M.node,...b!==void 0?{readonly:b}:{},...F!==void 0?{optional:F}:{}},p),schema:{t:"mapped",key:x.value,over:k.schema,body:M.schema,...F===true||F==="+"?{optional:true}:{},...F==="-"?{excludeOptional:true}:{},...b===true||b==="+"?{readonly:true}:{},...b==="-"?{excludeReadonly:true}:{}}}},S=l=>{let p=c();m("{");let f=[],b={},x,k=[];for(;!i("}");){let F=c(),M=T("readonly")&&r.tokens[r.pos()+1]?.value==="[";if(M&&a(),!M&&(i("(")||i("<"))){i("<")&&r.rescanTypeLessThan();let I=i("<")?A(l):[],J=I.length?ue(l,I):l,V=Z(J);m(":");let Q=re(J,V.map(ee=>ee.schema.name));k.push({t:"fn",params:V.map(ee=>ee.schema),returns:Q.schema,...Q.guard?{guard:Q.guard}:{},...I.length?{typeParams:I.map(Fe)}:{}}),f.push(h({type:"TSCallSignatureDeclaration",params:V.map(ee=>ee.node),returnType:Q.node,...I.length?{typeParameters:I}:{}},F));}else if(i("[")){a(),c().type!=="Identifier"&&E("Expected index signature parameter name"),a(),m(":");let I=c();(I.type!=="Identifier"||I.value!=="string"&&I.value!=="number")&&E("Index signature parameter type must be 'string' or 'number'"),a(),m("]"),m(":");let J=o(l);x={key:I.value,value:J.schema,...M?{readonly:true}:{}},f.push(h({type:"TSIndexSignature",keyType:I.value,typeAnnotation:J.node,...M?{readonly:true}:{}},F));}else {let I=false;if(T("readonly")){let ce=r.tokens[r.pos()+1];ce&&(ce.type==="Identifier"||ce.type==="Keyword"||ce.type==="String"||ce.type==="Number")&&(a(),I=true);}let J=c(),V;if(J.type==="Identifier"||J.type==="Keyword")a(),V=J.value;else if(J.type==="String")a(),V=K(J.value.slice(1,-1));else if(J.type==="Number")a(),V=J.value;else return E("Expected property name in object type");let Q=i("?");Q&&a(),m(":");let ee=o(l);Ye(b,V,{type:ee.schema,...Q?{optional:true}:{},...I?{readonly:true}:{}}),f.push(h({type:"TSPropertySignature",key:V,typeAnnotation:ee.node,...Q?{optional:true}:{},...I?{readonly:true}:{}},F));}if(i(";")||i(","))a();else break}m("}");let D=h({type:"TSTypeLiteral",members:f},p);return k.length>0?Object.keys(b).length>0||x?E("Callable object types (call signatures mixed with members) are not supported"):{node:D,schema:k.length===1?k[0]:{t:"overload",signatures:k}}:{node:D,schema:{t:"object",props:b,...x?{index:x}:{}}}},X=qt();return {parseType:()=>o(X),parseReturnType:l=>re(X,l),parseTypeParamList:()=>A(X),parseTypeInScope:l=>o(ue(X,l)),withTypeParams:(l,p)=>{let f=X;X=ue(f,l);try{return p()}finally{X=f;}}}};var le=class extends TSLiteError{constructor(a,i,y,m,E){super("parse-error",`${a} (${i.line}:${i.column})`,{position:i,index:y,loc:m,end:E});this.position=i;this.index=y;this.loc=m;this.end=E;this.name="ParseError";}},Qt=r=>{let c=r;return c!=null&&typeof c.start=="number"&&c.start===c.end&&c.start>=0},et=(r,c)=>Object.assign(r,{start:c.start,end:c.start,loc:{start:c.loc.start,end:c.loc.start}}),Yt={"??":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"==":7,"===":7,"!=":7,"!==":7,"<":8,"<=":8,">":8,">=":8,in:8,as:8,satisfies:8,"<<":9,">>":9,">>>":9,"+":10,"-":10,"*":11,"/":11,"%":11,"**":12},Zt=new Set(["??","||","&&"]),en=new Set(["class","debugger","with","enum","interface"]),tt={enum:'use a union of literals (`type T = "a" | "b"`) \u2014 it is serializable',interface:"use a type alias (`type X = { \u2026 }`)",module:"write it as `namespace X { \u2026 }` \u2014 the same declaration",abstract:"classes are not part of the language \u2014 model with objects + functions"},tn={module:(r,c)=>r.type==="Identifier"&&c.type==="Punctuator"&&c.value==="{",abstract:r=>r.type==="Keyword"&&r.value==="class"},nn=new Set(["=","+=","-=","*=","/=","%=","**=","??=","&&=","||="]),nt=(r,c)=>{let a=0;for(let i of r)c(i)&&(r[a++]=i);r.length=a;};function Ke(r){let c=[],a=[],i=[],y=Ae(r,e=>i.push(e),e=>c.push({code:"lex-error",...e})),m=y.scan(),E=0,K=[],h=e=>{for(;K.length>e;)K.pop()();},_=(e=E)=>{let t=m[e];if(t?.type!=="Punctuator"||t.value!=="<"||!y.opensJsx(t.start))return;let n=m.slice(e),s=c.slice(),d=i.slice();nt(c,j=>j.code!=="lex-error"||j.index<t.start),nt(i,j=>j.start<t.start);let L=y.rescanLessThan(t.start);m.splice(e,m.length-e,...L),K.push(()=>{m.splice(e,m.length-e,...n),c.splice(0,c.length,...s),i.splice(0,i.length,...d);});},P=()=>{let e=m[E];if(e?.type!=="Punctuator"||e.value!=="<<")return;let t={line:e.loc.start.line,column:e.loc.start.column+1},n=E;m.splice(n,1,{...e,value:"<",end:e.start+1,loc:{start:e.loc.start,end:t}},{...e,value:"<",start:e.start+1,loc:{start:t,end:e.loc.end}}),K.push(()=>m.splice(n,2,e));},H=[],A=[],q=false,T=(e=0)=>m[Math.min(E+e,m.length-1)],o=()=>m[E++],C=()=>m[E-1],G=()=>{let e=m[E],t=m[E-1];return !!e&&!!t&&e.loc.start.line>t.loc.end.line},U=()=>T().type==="EOF",u=e=>T().type==="Punctuator"&&T().value===e,v=e=>T().type==="Keyword"&&T().value===e,B=e=>T().type==="Identifier"&&T().value===e,R=(e,t=T())=>{throw Y(e,t),new le(e,t.loc.start,t.start,t.loc,t.end)},Y=(e,t=T())=>{let n=c[c.length-1];n&&n.index===t.start||c.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},Z=(e,t)=>{a.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},re=()=>{c.length||c.push(...a),a.length=0;},N=e=>(u(e)||R(`Expected '${e}' but got '${T().value||T().type}'`),o()),O=(e,t)=>{let n=C()??t;return Object.assign(e,{start:t.start,end:n.end,loc:{start:t.loc.start,end:n.loc.end}})},g=(e,t,n)=>Object.assign(e,{start:t.start,end:n.end,loc:{start:t.loc.start,end:n.loc.end}}),w=e=>{let t="";for(let n=0;n<e.length;n++){if(e[n]!=="\\"){t+=e[n];continue}let s=e[++n];switch(s){case "n":t+=`
6
+ `;break;case "t":t+=" ";break;case "r":t+="\r";break;case "b":t+="\b";break;case "f":t+="\f";break;case "v":t+="\v";break;case "0":t+="\0";break;case "x":t+=String.fromCharCode(parseInt(e.slice(n+1,n+3),16)),n+=2;break;case "u":if(e[n+1]==="{"){let d=e.indexOf("}",n);t+=String.fromCodePoint(parseInt(e.slice(n+2,d),16)),n=d;}else t+=String.fromCharCode(parseInt(e.slice(n+1,n+5),16)),n+=4;break;default:t+=s;}}return t},S=(e=false)=>X(e),X=(e=false)=>{let t=l(e),n=T();if(n.type==="Punctuator"&&nn.has(n.value)){o();let s=X();return g({type:"AssignmentExpression",operator:n.value,left:t,right:s},t,s)}return t},l=(e=false)=>{let t=f(0,e);if(!u("?"))return t;o();let n=S();N(":");let s=S();return g({type:"ConditionalExpression",test:t,consequent:n,alternate:s},t,s)},p=()=>{let e=T();if(e.type==="Keyword")return e.value==="in"?{op:"in",consume:1}:null;if(e.type==="Identifier")return e.value==="as"?{op:"as",consume:1}:e.value==="satisfies"?{op:"satisfies",consume:1}:null;if(e.type!=="Punctuator")return null;if(e.value===">"){let t=T(1);if(t.type==="Punctuator"&&t.value===">"&&e.end===t.start){let n=T(2);return n.type==="Punctuator"&&n.value===">"&&t.end===n.start?{op:">>>",consume:3}:{op:">>",consume:2}}return {op:">",consume:1}}return {op:e.value,consume:1}},f=(e,t=false)=>{let n=b();for(;;){let s=p();if(!s)break;let{op:d,consume:L}=s;if(d==="in"&&t)break;let j=he(Yt,d);if(!j||j<=e)break;if(d==="satisfies"){if(G())break;R("'satisfies' is not supported in this language \u2014 a type annotation (`const x: T = \u2026`) also checks compatibility, but it declares the type as T, while 'satisfies' keeps the inferred one");}if(d==="as"){if(G())break;o();let $=be();n=g({type:"TSAsExpression",expression:n,typeAnnotation:$.schema,typeAnnotationNode:$.node},n,C());continue}for(let $=0;$<L;$++)o();let z=f(d==="**"?j-1:j,t);n=g({type:Zt.has(d)?"LogicalExpression":"BinaryExpression",operator:d,left:n,right:z},n,z);}return n},b=()=>{let e=T();return e.type==="Punctuator"&&(e.value==="++"||e.value==="--")?(o(),O({type:"UpdateExpression",operator:e.value,prefix:true,argument:b()},e)):v("await")?(o(),O({type:"AwaitExpression",argument:b()},e)):v("typeof")||v("void")||v("delete")||e.type==="Punctuator"&&(e.value==="!"||e.value==="-"||e.value==="+"||e.value==="~")?x(e):D()},x=e=>{o();let t=b();return u("**")&&R(`An unary expression with the '${e.value}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.`),O({type:"UnaryExpression",operator:e.value,prefix:true,argument:t},e)},k=()=>{let e=E,t=K.length,n=c.length,s=H.length,d=()=>(h(t),E=e,c.length=n,H.length=s,void 0);try{if(P(),o(),u(">"))return d();let L=[];for(;L.push(be().schema),!!u(",");)o();return u(">")?(o(),u("(")?L:d()):d()}catch{return d()}},D=()=>{let e=ft(),t=false;for(;;)if((T().type==="Template"||T().type==="TemplateHead")&&R("Tagged templates are not supported in this language"),u("?."))if(o(),t=true,u("(")){let{args:n,close:s}=F();e=g({type:"CallExpression",callee:e,arguments:n,optional:true},e,s);}else if(u("[")){o();let n=S(),s=N("]");e=g({type:"MemberExpression",object:e,property:n,computed:true,optional:true},e,s);}else {let n=T();n.type!=="Identifier"&&n.type!=="Keyword"&&R("Expected property name after '?.'"),o();let s=O({type:"Identifier",name:n.value},n);e=g({type:"MemberExpression",object:e,property:s,computed:false,optional:true},e,s);}else if(u(".")){o();let n=T(),s;n.type==="Identifier"||n.type==="Keyword"?(o(),s=O({type:"Identifier",name:n.value},n)):(Y("Expected property name"),s=et({type:"Identifier",name:""},n)),e=g({type:"MemberExpression",object:e,property:s,computed:false,optional:false},e,s);}else if(u("[")){o();let n=S(),s=N("]");e=g({type:"MemberExpression",object:e,property:n,computed:true,optional:false},e,s);}else if(u("(")){let{args:n,close:s}=F();e=g({type:"CallExpression",callee:e,arguments:n,optional:false},e,s);}else if(u("<")||u("<<")){let n=k();if(!n)break;let{args:s,close:d}=F();e=g({type:"CallExpression",callee:e,arguments:s,optional:false,typeArguments:n},e,d);}else if(u("++")||u("--")){let n=o();e=g({type:"UpdateExpression",operator:n.value,prefix:false,argument:e},e,n);}else break;return t?g({type:"ChainExpression",expression:e},e,e):e},F=()=>{N("(");let e=[];for(;!u(")");)e.push(M()),u(")")||N(",");return {args:e,close:N(")")}},M=()=>{if(u("...")){let e=o(),t=S();return g({type:"SpreadElement",argument:t},e,t)}return S()},I=()=>{let e=T();return e.type!=="Identifier"&&R("Expected identifier"),o(),O({type:"Identifier",name:e.value},e)},J=(e=false)=>{let t=u("{")?V():u("[")?Q():I();if(e&&u("?")&&(t.type!=="Identifier"&&R("A binding pattern parameter cannot be optional"),o(),t.optional=true),u(":")){o();let n=be();t.typeAnnotation=n.schema,t.typeAnnotationNode=n.node;}return t},V=()=>{let e=N("{"),t=[];for(;!u("}");){if(u("...")){let s=o(),d=J();t.push(g({type:"RestElement",argument:d},s,d));}else {let s=I(),d,L=false;if(u(":")?(o(),d=J()):(d={...s},L=true),u("=")){o();let j=S();d=g({type:"AssignmentPattern",left:d,right:j},d,j);}t.push(g({type:"Property",key:s,value:d,kind:"init",shorthand:L,computed:false},s,d));}u("}")||N(",");}let n=N("}");return g({type:"ObjectPattern",properties:t},e,n)},Q=()=>{let e=N("["),t=[];for(;!u("]");){if(u(",")){t.push(null),o();continue}if(u("...")){let s=o(),d=J();t.push(g({type:"RestElement",argument:d},s,d));}else {let s=J();if(u("=")){o();let d=S();s=g({type:"AssignmentPattern",left:s,right:d},s,d);}t.push(s);}u("]")||N(",");}let n=N("]");return g({type:"ArrayPattern",elements:t},e,n)},ee=()=>{let e=K.length,t=ce();return t||h(e),t},ce=()=>{let e=0,t="name";for(let n=E;n<m.length;n++){let s=m[n];if(s.type==="EOF")return false;if(s.type==="Punctuator"){if(s.value==="<"&&t==="type"){_(n);continue}if(e===1&&s.value===":"&&t==="name"?t="type":e===1&&s.value==="="?t="default":e===1&&s.value===","&&(t="name"),s.value==="("||s.value==="["||s.value==="{")e++;else if((s.value===")"||s.value==="]"||s.value==="}")&&(e--,e===0)){let d=m[n+1];return !d||d.type!=="Punctuator"?false:d.value==="=>"?true:d.value===":"?ot(n+2):false}}}return false},ot=e=>{let t=0;for(let n=e;n<m.length;n++){let s=m[n];if(s.type==="EOF")return false;if(s.type==="Punctuator")if(s.value==="<"&&_(n),["(","[","{","<"].includes(s.value))t++;else if([")","]","}",">"].includes(s.value)){if(t===0)return false;t--;}else {if(t===0&&s.value==="=>")return true;if(t===0&&(s.value===";"||s.value===","))return false}}return false},st=()=>{N("(");let e=[];for(;!u(")");){if(u("...")){let t=o(),n=J();e.push(g({type:"RestElement",argument:n},t,n));}else {let t=J(true);if(u("=")){t.optional&&R("Parameter cannot have question mark and initializer"),o();let n=S();t=g({type:"AssignmentPattern",left:t,right:n},t,n);}e.push(t);}u(")")||N(",");}return N(")"),e},at=e=>{if(e.type==="Identifier")return e.name;let t=e.left;return e.type==="AssignmentPattern"&&t?.type==="Identifier"?t.name:null},ge=(e,t,n=[])=>ht(n,()=>it(e,t,n)),it=(e,t,n)=>{let s=u("(")?st():[I()],d,L,j;if(u(":")){o();let $=yt(s.map(at));d=$.schema,L=$.node,j=$.guard;}N("=>");let z=u("{")?ye():S();return O({type:"ArrowFunctionExpression",params:s,body:z,async:e,expression:z.type!=="BlockStatement",generator:false,...d?{returnType:d,returnTypeNode:L}:{},...j?{returnGuard:j}:{},...n.length?{typeParameters:[...n]}:{}},t)},lt=()=>{let e=N("["),t=[];for(;!u("]");){if(u(",")){o(),t.push(null);continue}t.push(M()),u("]")||N(",");}return g({type:"ArrayExpression",elements:t},e,N("]"))},ct=()=>{let e=N("{"),t=[];for(;!u("}");){if(u("...")){let n=o(),s=S();t.push(g({type:"SpreadElement",argument:s},n,s));}else {let n=T(),s,d=false;if(u("["))d=true,o(),s=S(),N("]");else if(n.type==="String")o(),s=O({type:"Literal",value:w(n.value.slice(1,-1)),raw:n.value},n);else if(n.type==="Number")o(),s=O({type:"Literal",value:Number(n.value),raw:n.value},n);else if(n.type==="Identifier"||n.type==="Keyword")o(),s=O({type:"Identifier",name:n.value},n);else return R("Invalid property key");if(u(":")){o();let L=S();t.push(g({type:"Property",key:s,value:L,kind:"init",shorthand:false,computed:d},n,L));}else t.push(g({type:"Property",key:s,value:s,kind:"init",shorthand:true,computed:false},n,s));}u("}")||N(",");}return g({type:"ObjectExpression",properties:t},e,N("}"))},Te=(e,t)=>({type:"TemplateElement",value:{raw:e,cooked:w(e)},tail:t}),pt=e=>{o();let t=[Te(e.value,false)],n=[];for(;;){n.push(S());let s=T();if(s.type==="TemplateMiddle")o(),t.push(Te(s.value,false));else if(s.type==="TemplateTail"){o(),t.push(Te(s.value,true));break}else R("Expected `}` to close template interpolation");}return O({type:"TemplateLiteral",quasis:t,expressions:n},e)},de=()=>{let e=T();return e.type!=="Identifier"&&R(`Expected JSX identifier but got '${e.value||e.type}'`),O({type:"JSXIdentifier",name:o().value},e)},Xe=()=>{let e=de();if(u(":")){o();let t=de();return g({type:"JSXNamespacedName",namespace:e,name:t},e,t)}for(;u(".");){o();let t=de();e=g({type:"JSXMemberExpression",object:e,property:t},e,t);}return e},oe=e=>e.type==="JSXIdentifier"?e.name:e.type==="JSXNamespacedName"?`${oe(e.namespace)}:${oe(e.name)}`:`${oe(e.object)}.${oe(e.property)}`,ut=()=>{let e=T();if(e.type==="String")return o(),O({type:"Literal",value:w(e.value.slice(1,-1)),raw:e.value},e);if(u("{")){let t=o(),n=X(),s=N("}");return g({type:"JSXExpressionContainer",expression:n},t,s)}return u("<")?Pe():R(`Invalid JSX attribute value '${e.value||e.type}'`)},dt=()=>{let e=[];for(;!u(">")&&!u("/>")&&!U();){if(u("{")){let s=o();N("...");let d=X(),L=N("}");e.push(g({type:"JSXSpreadAttribute",argument:d},s,L));continue}let t=de();if(u(":")){o();let s=de();t=g({type:"JSXNamespacedName",namespace:t,name:s},t,s);}let n=null;u("=")&&(o(),n=ut()),e.push(g({type:"JSXAttribute",name:t,value:n},t,n??t));}return e},Me=()=>{let e=[];for(;!(u("</")||U());){let t=T();if(t.type==="JSXText")o(),e.push(O({type:"JSXText",value:t.value,raw:t.value},t));else if(u("{")){let n=o();if(u("}")){let s=o(),d=O({type:"JSXEmptyExpression"},n);e.push(g({type:"JSXExpressionContainer",expression:d},n,s));}else if(u("...")){o();let s=X(),d=N("}");e.push(g({type:"JSXSpreadChild",expression:s},n,d));}else {let s=X(),d=N("}");e.push(g({type:"JSXExpressionContainer",expression:s},n,d));}}else u("<")?e.push(Pe()):R(`Unexpected token in JSX children '${t.value||t.type}'`);}return e},Pe=()=>{let e=N("<");if(u(">")){let ne=o(),pe=g({type:"JSXOpeningFragment"},e,ne),Lt=Me(),jt=N("</"),Ge=N(">"),At=g({type:"JSXClosingFragment"},jt,Ge);return g({type:"JSXFragment",openingFragment:pe,children:Lt,closingFragment:At},e,Ge)}let t=Xe(),n=dt();if(u("/>")){let ne=o(),pe=g({type:"JSXOpeningElement",name:t,attributes:n,selfClosing:true},e,ne);return g({type:"JSXElement",openingElement:pe,children:[],closingElement:null},e,ne)}let s=N(">"),d=g({type:"JSXOpeningElement",name:t,attributes:n,selfClosing:false},e,s),L=Me(),j=N("</"),z=T(),$=Xe();oe($)!==oe(t)&&R(`JSX closing tag </${oe($)}> does not match opening <${oe(t)}>`,z);let W=N(">"),te=g({type:"JSXClosingElement",name:$},j,W);return g({type:"JSXElement",openingElement:d,children:L,closingElement:te},e,W)},ft=()=>{let e=T();if(v("async")){let t=T(1);if(t.value==="("||t.type==="Identifier")return o(),ge(true,e);if(t.value==="<"){o();let n=$e(e,true);if(n)return n}return R("Unexpected 'async'")}if(u("(")&&ee()||e.type==="Identifier"&&T(1).type==="Punctuator"&&T(1).value==="=>")return ge(false,e);if(e.type==="Number")return o(),O({type:"Literal",value:Number(e.value),raw:e.value},e);if(e.type==="String")return o(),O({type:"Literal",value:w(e.value.slice(1,-1)),raw:e.value},e);if(e.type==="Template")return o(),O({type:"TemplateLiteral",expressions:[],quasis:[Te(e.value,true)]},e);if(e.type==="TemplateHead")return pt(e);if(e.type==="Keyword")return e.value==="true"?(o(),O({type:"Literal",value:true,raw:"true"},e)):e.value==="false"?(o(),O({type:"Literal",value:false,raw:"false"},e)):e.value==="null"?(o(),O({type:"Literal",value:null,raw:"null"},e)):e.value==="new"?R("'new' is not supported \u2014 the language has no constructors (FP / portable IR). Use a factory function provided via DI (e.g. `now()` instead of `new Date()`)."):e.value==="function"?R("Anonymous functions are not supported \u2014 use an arrow function"):R(`'${e.value}' is not supported in this language`);if(e.type==="Identifier")return o(),O({type:"Identifier",name:e.value},e);if(u("(")){o();let t=S();return N(")"),t}return u("[")?lt():u("{")?ct():u("<")?$e(e)??Pe():R(`Unexpected token '${e.value||e.type}'`)},$e=(e,t=false)=>{let n=E,s=K.length,d=c.length,L=a.length,j=H.length,z=()=>(h(s),E=n,c.length=d,a.length=L,H.length=j,void 0),$=T(1);$.type==="Keyword"&&$.value==="const"&&Ne();try{let W=Ne();return !W.length||!u("(")?z():ge(t,e,W)}catch{return z()}},{parseType:be,parseReturnType:yt,parseTypeParamList:Ne,parseTypeInScope:mt,withTypeParams:ht}=Ze({rescanTypeLessThan:_,splitShiftLeft:P,tokens:m,pos:()=>E,peek:T,next:o,isP:u,isK:v,expectP:N,fail:R,recordError:Y,createMissingNode:et,unescape:w,typeRefs:H,namespace:()=>A.length?A.join("."):null}),Ee=()=>{let e=o(),t=I(),n=[];u("<")&&(n=Ne()),N("=");let s=mt(n),d=g({type:"TSTypeAliasDeclaration",id:t,...n.length?{typeParameters:[...n]}:{},typeAnnotation:s.schema,typeNode:s.node},e,C());return u(";")&&o(),d},Ie=(e,t)=>t.loc.start.line===e.loc.end.line,ve=(e=0)=>T(e).type==="Identifier"&&T(e).value==="namespace"&&T(e+1).type==="Identifier"&&Ie(T(e),T(e+1)),gt=()=>B("declare")&&Ie(T(),T(1))&&ve(1),fe=e=>{let t=T(e),n=T(e+1),s=Ie(t,n);if(t.type==="Keyword")switch(t.value){case "var":case "let":case "const":case "function":case "class":case "enum":return true;case "interface":return n.type==="Identifier"&&s;case "async":return s&&fe(e+1);case "import":return n.type==="String"||n.type==="Identifier"||n.type==="Keyword"||n.type==="Punctuator"&&(n.value==="*"||n.value==="{");case "export":{let d=n.type==="Identifier"&&n.value==="type"?T(e+2):n;return d.type==="Punctuator"&&["=","*","{"].includes(d.value)||d.type==="Keyword"&&d.value==="default"||d.type==="Identifier"&&d.value==="as"||fe(e+1)}default:return false}if(t.type!=="Identifier")return false;switch(t.value){case "type":return n.type==="Identifier"&&s;case "namespace":case "module":return (n.type==="Identifier"||n.type==="String")&&s;case "abstract":case "declare":case "private":case "protected":case "public":case "readonly":return s&&fe(e+1);case "global":return n.type==="Punctuator"&&n.value==="{"||n.type==="Identifier"||n.type==="Keyword"&&n.value==="export";case "static":return fe(e+1);default:return false}},Ue=()=>B("declare")&&fe(0),Ce=()=>{let e=T(),t=B("declare");return t&&o(),o(),Be(e,t)},Be=(e,t)=>{let n=I();A.push(n.name);let s=q;t&&(q=true);try{let d;if(u("."))o(),d=Be(T(),!1);else {let L=N("{"),j=je(()=>u("}"));d=g({type:"TSModuleBlock",body:j},L,N("}"));}return g({type:"TSModuleDeclaration",id:n,body:d,...t?{declare:!0}:{}},e,d)}finally{q=s,A.pop();}},_e=()=>{if(gt())return Ce();let e=o();if(v("const")||v("let")||v("var")){let t=q;q=true;try{let n=g(Object.assign(Re(),{declare:!0}),e,C());return u(";")&&o(),n}finally{q=t;}}if(B("type")){let t=Ee();return g(Object.assign(t,{declare:true}),e,t)}return Tt()},Tt=()=>{let e=T();if(v("export"))return R("'export' modifier must precede 'declare' modifier.");if(v("import"))return R("A 'declare' modifier cannot be used with an import declaration.");if(e.type==="Identifier"&&["public","private","protected","static"].includes(e.value))return R(`'${e.value}' modifier cannot appear on a module or namespace element.`);if(B("readonly"))return R("'readonly' modifier can only appear on a property declaration or index signature.");if(v("function")||v("async"))return R("Function declarations are not supported \u2014 use 'const fn = () => \u2026'");if(e.type==="Identifier"&&e.value==="module"&&T(1).type==="String"||e.type==="Identifier"&&e.value==="global")return R(`'declare ${e.value}' is not supported in this language \u2014 it declares the types of an external module or of the global scope, and module resolution belongs to the application`);let t=he(tt,e.value);return R(`'${e.value}' is not supported in this language`+(t?` \u2014 ${t}`:""))},se=()=>{let e=T();if(e.type==="Identifier"&&e.value==="type"&&T(1).type==="Identifier"&&T(2).type==="Punctuator"&&(T(2).value==="="||T(2).value==="<"))return Ee();if(ve())return Ce();if(Ue())return _e();if(v("const")||v("let")||v("var")){let d=Re();return u(";")&&o(),d}if(v("if"))return Nt();if(v("for"))return St();if(v("while"))return Pt();if(v("do"))return kt();if(v("break")||v("continue"))return wt();if(v("return"))return Et();if(v("throw"))return It();if(v("try"))return Ct();if(v("switch"))return Rt();if(v("import"))return vt();if(v("export"))return xt();if(u("{"))return ye();if((v("function")||v("async")&&T(1).type==="Keyword"&&T(1).value==="function")&&R("Function declarations are not supported \u2014 use 'const fn = () => \u2026'"),u(";"))return o(),O({type:"EmptyStatement"},e);if(e.type==="Keyword"&&en.has(e.value)||e.type==="Identifier"&&he(tn,e.value)?.(T(1),T(2))===true){let d=he(tt,e.value);R(`'${e.value}' is not supported in this language`+(d?` \u2014 ${d}`:""));}let n=S(),s=u(";")?o():C();return g({type:"ExpressionStatement",expression:n},n,s)},Re=()=>{let e=o(),t=e.value,n=()=>{let d=J(),L=null;return u("=")?(o(),L=S()):!q&&d.type!=="Identifier"?Z("A destructuring declaration must have an initializer.",d):t==="const"&&!q&&Z("'const' declarations must be initialized",d),g({type:"VariableDeclarator",id:d,init:L},d,L??d)},s=[n()];for(;u(",");)o(),s.push(n());return g({type:"VariableDeclaration",kind:t,declarations:s},e,s[s.length-1])},bt=()=>{let e=T();return e.type!=="String"&&R("Expected module specifier string"),o(),O({type:"Literal",value:w(e.value.slice(1,-1)),raw:e.value},e)},vt=()=>{let e=o(),t=[],n;if(B("type")){let d=T(1);(d.type==="Punctuator"&&(d.value==="{"||d.value==="*")||d.type==="Identifier"&&d.value!=="from")&&(o(),n="type");}if(T().type!=="String"){if(T().type==="Identifier"){let d=I();t.push(g({type:"ImportDefaultSpecifier",local:d},d,d)),u(",")&&o();}if(u("*")){let d=o();B("as")||R("Expected 'as' after '*' in import"),o();let L=I();t.push(g({type:"ImportNamespaceSpecifier",local:L},d,L));}else if(u("{")){for(o();!u("}")&&!U();){let d;B("type")&&T(1).type==="Identifier"&&T(1).value!=="as"&&(o(),d="type");let L=I(),j=L;if(B("as")&&(o(),j=I()),t.push(g({type:"ImportSpecifier",imported:L,local:j,...d?{importKind:d}:{}},L,j)),u(","))o();else break}N("}");}B("from")||R("Expected 'from' in import declaration"),o();}let s=bt();return u(";")&&o(),O({type:"ImportDeclaration",specifiers:t,source:s,...n?{importKind:n}:{}},e)},xt=()=>{let e=o();if(B("type")&&T(1).type==="Identifier"){let t=Ee();return O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(ve()||Ue()){let t=ve()?Ce():_e();return O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(v("default")){o();let t=S();return u(";")&&o(),O({type:"ExportDefaultDeclaration",declaration:t},e)}if(v("const")||v("let")||v("var")){let t=Re();return u(";")&&o(),O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(u("{")){o();let t=[];for(;!u("}")&&!U();){let n=I(),s=n;if(B("as")&&(o(),s=I()),t.push(g({type:"ExportSpecifier",local:n,exported:s},n,s)),u(","))o();else break}return N("}"),u(";")&&o(),O({type:"ExportNamedDeclaration",declaration:null,specifiers:t,source:null},e)}return R("Expected 'const', 'type', 'namespace', 'declare', '{', or 'default' after 'export'")},Ve=()=>T().type==="Identifier"&&T().value==="of",Le=()=>v("in"),St=()=>{let e=o();N("(");let t=null,n=null;if(!u(";"))if(v("const")||v("let")||v("var")){let j=o(),z=()=>{let W=I();if(u(":")){o();let te=be();W.typeAnnotation=te.schema,W.typeAnnotationNode=te.node;}return W},$=z();if(Ve()||Le()){let W=g({type:"VariableDeclarator",id:$,init:null},$,$);n=g({type:"VariableDeclaration",kind:j.value,declarations:[W]},j,$);}else {let W=ne=>{let pe=null;return u("=")?(o(),pe=S(true)):j.value==="const"&&Z("'const' declarations must be initialized",ne),g({type:"VariableDeclarator",id:ne,init:pe},ne,pe??ne)},te=[W($)];for(;u(",");)o(),te.push(W(z()));t=g({type:"VariableDeclaration",kind:j.value,declarations:te},j,te[te.length-1]);}}else {let j=S(true);Ve()||Le()?n=j:t=j;}if(n){let j=Le();o();let z=S();N(")");let $=se();return g(j?{type:"ForInStatement",left:n,right:z,body:$}:{type:"ForOfStatement",left:n,right:z,body:$,await:false},e,$)}N(";");let s=u(";")?null:S();N(";");let d=u(")")?null:S();N(")");let L=se();return g({type:"ForStatement",init:t,test:s,update:d,body:L},e,L)},kt=()=>{let e=o(),t=se();v("while")||R("Expected 'while' after the 'do' body"),o(),N("(");let n=S(),s=N(")");return u(";")&&o(),g({type:"DoWhileStatement",body:t,test:n},e,s)},wt=()=>{let e=o(),t=e.value==="break"?"BreakStatement":"ContinueStatement",n=u(";")?o():C();return g({type:t,label:null},e,n)},Pt=()=>{let e=o();N("(");let t=S();N(")");let n=se();return g({type:"WhileStatement",test:t,body:n},e,n)},Nt=()=>{let e=o();N("(");let t=S();N(")");let n=se(),s=null;return v("else")&&(o(),s=se()),g({type:"IfStatement",test:t,consequent:n,alternate:s},e,s??n)},Et=()=>{let e=o(),t=null;!u(";")&&!u("}")&&!U()&&(t=S());let n=u(";")?o():C();return g({type:"ReturnStatement",argument:t},e,n)},It=()=>{let e=o(),t=S(),n=u(";")?o():C();return g({type:"ThrowStatement",argument:t},e,n)},Ct=()=>{let e=o(),t=ye(),n=null,s=null;if(v("catch")){let d=o(),L=null;u("(")&&(o(),L=I(),N(")"));let j=ye();n=g({type:"CatchClause",param:L,body:j},d,j);}return v("finally")&&(o(),s=ye()),!n&&!s&&R("'try' requires a 'catch' or 'finally' clause"),g({type:"TryStatement",block:t,handler:n,finalizer:s},e,s??n??t)},Rt=()=>{let e=o();N("(");let t=S();N(")"),N("{");let n=[];for(;!u("}")&&!U();){let d=T(),L=null;v("case")?(o(),L=S()):v("default")?o():R("Expected 'case' or 'default' in switch"),N(":");let j=[];for(;!u("}")&&!v("case")&&!v("default")&&!U();)j.push(se());n.push(g({type:"SwitchCase",test:L,consequent:j},d,C()??d));}let s=N("}");return g({type:"SwitchStatement",discriminant:t,cases:n},e,s)},ye=()=>{let e=N("{"),t=je(()=>u("}"));return g({type:"BlockStatement",body:t},e,N("}"))},je=e=>{let t=[];for(;!e()&&!U();){if(T().type==="Unknown"){o();continue}try{t.push(se());}catch(n){if(!(n instanceof le))throw n;U()||o();}}return t};return {parseExpr:S,parseProgram:()=>{let e=T(),t=je(()=>false);return re(),g({type:"Program",sourceType:"module",body:t,...H.length?{typeRefs:H}:{},...i.length?{comments:i}:{},...c.length?{parseDiagnostics:c}:{}},e,C()??e)},eof:U,fail:R,recordError:Y,settleGrammar:re,diagnostics:c}}function rt(r){let c=Ke(r),a=c.parseProgram(),i=a.comments;return i?.length&&Je(a,i,r),{ast:a,diagnostics:c.diagnostics}}function rn(r){let{ast:c,diagnostics:a}=rt(r),i=a[0];if(i){let y=i.code==="lex-error"?ie:le;throw new y(i.message,i.position,i.index,i.loc,i.end)}return c}function on(r){let c=Ke(r),a=c.parseExpr();c.eof()||c.fail("Unexpected token after expression"),c.settleGrammar();let i=c.diagnostics[0];if(i){let y=i.code==="lex-error"?ie:le;throw new y(i.message,i.position,i.index,i.loc,i.end)}return a}function sn(r){let c=Ke(r),a;try{a=c.parseExpr(),c.eof()||c.recordError("Unexpected token after expression");}catch(i){if(!(i instanceof le)&&!(i instanceof ie))throw i}return c.settleGrammar(),{ast:a,diagnostics:c.diagnostics}}var an="1.10.0";export{We as KEYWORDS,ie as LexError,le as ParseError,Je as attachComments,Qt as nodeIsMissing,rn as parse,on as parseExpression,sn as parseExpressionTolerant,rt as parseTolerant,$t as tokenize,an as version};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/parser",
3
- "version": "1.7.0",
3
+ "version": "1.10.0",
4
4
  "description": "TSLite parser — tokenizer + Pratt parser for the TSLite language (JS subset + pipe) into ESTree",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -40,13 +40,13 @@
40
40
  "access": "public"
41
41
  },
42
42
  "dependencies": {
43
- "@tslite/ast": "1.3.0"
43
+ "@tslite/ast": "^1.5.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@tslite/capability": "1.3.0",
47
- "@tslite/codegen": "1.2.0",
48
- "@tslite/checker": "1.6.0",
49
- "@tslite/interpret": "1.2.0"
46
+ "@tslite/checker": "1.9.0",
47
+ "@tslite/interpret": "1.5.0",
48
+ "@tslite/codegen": "1.5.0",
49
+ "@tslite/capability": "1.4.0"
50
50
  },
51
51
  "scripts": {
52
52
  "build": "tsup",