@tslite/parser 1.7.0 → 1.9.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(s,a,y,m,E){super("lex-error",`${s} (${a.line}:${a.column})`,{position:a,index:y,loc:m,end:E});this.position=a;this.index=y;this.loc=m;this.end=E;this.name="LexError";}},qe=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"]),Rt=["...","===","!==","=>","?.","??=","&&=","||=","**=","??","==","!=","<=",">=","&&","||","|","&","++","--","+=","-=","*=","/=","%=","**","<<","+","-","*","/","%","<",">","!","?",":",".",",",";","=","^","~","(",")","[","]","{","}"],be=n=>n>="a"&&n<="z"||n>="A"&&n<="Z"||n==="_"||n==="$",ve=n=>be(n)||n>="0"&&n<="9",ae=n=>n>="0"&&n<="9",Ve=n=>ae(n)||n>="a"&&n<="f"||n>="A"&&n<="F",Lt=n=>ve(n)||n==="-",ye=n=>n===`
2
+ `||n==="\r"||n==="\u2028"||n==="\u2029",Te=(n,c)=>{let s=c;for(;;){let a=n[s]??"";if(a===" "||a===" "||a==="\f"||a==="\v"||ye(a))s++;else if(a==="/"&&n[s+1]==="/")for(s+=2;s<n.length&&!ye(n[s]??"");)s++;else if(a==="/"&&n[s+1]==="*"){for(s+=2;s<n.length&&!(n[s]==="*"&&n[s+1]==="/");)s++;s+=2;}else return s}},jt=(n,c)=>{if(!be(n[c]??""))return c;let s=c+1;for(;ve(n[s]??"");)s++;return s},Ge=(n,c,s)=>n.startsWith(s,c)&&!ve(n[c+s.length]??""),At=(n,c)=>{let s=Te(n,c);Ge(n,s,"const")&&(s=Te(n,s+5));let a=jt(n,s);if(a===s)return false;if(s=Te(n,a),Ge(n,s,"extends")){let y=Te(n,s+7),m=n[y]??"";return !(m==="="||m===">"||m==="/")}return n[s]===","?true:n[s]==="="&&n[s+1]!==">"},Ot=new Set(["(","[","{",",",";",":","?","=>","...","=","+","-","*","/","%","<","<=",">",">=","==","===","!=","!==","&&","||","??","!","+=","-=","*=","/=","%=","??=","&&=","||=","**="]),Dt=new Set(["return","typeof","await","delete","void","in","instanceof","else","case","yield","throw"]);function Jt(n,c,s){return Ie(n,c,s).scan()}function Ie(n,c,s){let a=[],y=0,m=1,E=0,X=()=>({line:m,column:E}),h=(k=0)=>n[y+k]??"",_=k=>{let x=X(),K={start:x,end:{line:m,column:E+1}};if(s){s({message:k,position:x,index:y,loc:K,end:y+1});return}throw new ie(k,x,y,K,y+1)},P=()=>{let k=n[y++];return k==="\r"?(n[y]===`
3
+ `&&y++,m++,E=0):k===`
4
+ `||k==="\u2028"||k==="\u2029"?(m++,E=0):E++,k},W=()=>{for(;;){let k=h();if(k===" "||k===" "||k==="\f"||k==="\v"||ye(k))P();else if(k==="/"&&h(1)==="/"){let x=y,K=X();P(),P();let i=y;for(;y<n.length&&!ye(h());)P();c?.({type:"Line",value:n.slice(i,y),start:x,end:y,loc:{start:K,end:X()}});}else if(k==="/"&&h(1)==="*"){let x=y,K=X();P(),P();let i=y,p=y;for(;;){if(y>=n.length){_("Unterminated block comment"),p=y;break}if(h()==="*"&&h(1)==="/"){p=y,P(),P();break}P();}c?.({type:"Block",value:n.slice(i,p),start:x,end:y,loc:{start:K,end:X()}});}else break}},A=(k,x,K,i)=>{a.push({type:k,value:x,start:K,end:y,loc:{start:i,end:X()}}),u=k==="Punctuator"?Ot.has(x):k==="Keyword"?Dt.has(x):k==="TemplateHead"||k==="TemplateMiddle";},Q=k=>{for(P();y<n.length;){let x=h();if(x===k)return P(),n.slice(C,y);if(ye(x))return _("Unterminated string literal"),n.slice(C,y);if(x==="\\"){if(P(),y>=n.length)return _("Unterminated string literal"),n.slice(C,y);P();continue}P();}return _("Unterminated string literal"),n.slice(C,y)},v=()=>{if(h()==="0"&&(h(1)==="x"||h(1)==="X")){if(P(),P(),!Ve(h()))return _("Invalid hexadecimal literal");for(;Ve(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 k=y;for(;y<n.length;){let x=h();if(x==="`"){let K=n.slice(k,y);return P(),{raw:K,interp:false}}if(x==="$"&&h(1)==="{"){let K=n.slice(k,y);return P(),P(),{raw:K,interp:true}}if(x==="\\"){if(P(),y>=n.length)break;P();continue}P();}return _("Unterminated template literal"),{raw:n.slice(k,y),interp:false}},C=0,G=0,$=[],u=true,w="js",B=[],j=[],Y=new Map,ee=-1,re=()=>({i:y,line:m,col:E,mode:w,braceDepth:G,tmplStack:[...$],jsxParent:[...B],jsxExpr:j.map(k=>({...k}))}),N=k=>{y=k.i,m=k.line,E=k.col,w=k.mode,G=k.braceDepth,$=[...k.tmplStack],B=[...k.jsxParent],j=k.jsxExpr.map(x=>({...x}));},O=()=>(a=[],g(),a),g=()=>{for(;;){if(w==="jsxChildren"){C=y;let i=X();if(y>=n.length){A("EOF","",C,i);break}let p=h();if(p==="<"){h(1)==="/"?(P(),P(),A("Punctuator","</",C,i),w="jsxCloseTag"):(P(),A("Punctuator","<",C,i),B.push("jsxChildren"),w="jsxOpenTag");continue}if(p==="{"){P(),A("Punctuator","{",C,i),j.push({level:G,restore:"jsxChildren"}),w="js";continue}for(;y<n.length&&h()!=="<"&&h()!=="{";)P();A("JSXText",n.slice(C,y),C,i);continue}if(w==="jsxOpenTag"||w==="jsxCloseTag"){W(),C=y;let i=X();if(y>=n.length){A("EOF","",C,i);break}let p=h();if(be(p)){for(P();Lt(h());)P();A("Identifier",n.slice(C,y),C,i);continue}if(p==="/"&&h(1)===">"){P(),P(),A("Punctuator","/>",C,i),w=B.pop()??"js";continue}if(p===">"){P(),A("Punctuator",">",C,i),w=w==="jsxCloseTag"?B.pop()??"js":"jsxChildren";continue}if(p==="{"){P(),A("Punctuator","{",C,i),j.push({level:G,restore:w}),w="js";continue}if(p==='"'||p==="'"){A("String",Q(p),C,i);continue}if(p==="="||p==="."||p===":"){P(),A("Punctuator",p,C,i);continue}if(p==="<"&&w==="jsxOpenTag"){P(),A("Punctuator","<",C,i),B.push("jsxOpenTag");continue}_(`Unexpected character '${p}' in JSX tag`),P(),A("Unknown",p,C,i);continue}W(),C=y;let k=X();if(y>=n.length){A("EOF","",C,k);break}let x=h();if(be(x)){for(;ve(h());)P();let i=n.slice(C,y);A(qe.has(i)?"Keyword":"Identifier",i,C,k);continue}if(ae(x)||x==="."&&ae(h(1))){v(),A("Number",n.slice(C,y),C,k);continue}if(x==='"'||x==="'"){let i=Q(x);A("String",i,C,k);continue}if(x==="`"){P();let{raw:i,interp:p}=o();p?(A("TemplateHead",i,C,k),$.push(G)):A("Template",i,C,k);continue}if(x==="<"&&y===ee){ee=-1,P(),A("Punctuator","<",C,k);continue}if(x==="<"&&u&&!At(n,y+1)){Y.set(y,re()),P(),A("Punctuator","<",C,k),B.push("js"),w="jsxOpenTag";continue}if(x==="{"){P(),A("Punctuator","{",C,k),G++;continue}if(x==="}"){if($.length>0&&G===$[$.length-1]){$.pop(),P();let{raw:i,interp:p}=o();A(p?"TemplateMiddle":"TemplateTail",i,C,k),p&&$.push(G);continue}if(j.length>0&&G===j[j.length-1].level){let{restore:i}=j.pop();P(),A("Punctuator","}",C,k),w=i;continue}P(),A("Punctuator","}",C,k),G--;continue}if(x==="?"&&h(1)==="."&&ae(h(2))){P(),A("Punctuator","?",C,k);continue}let K=Rt.find(i=>n.startsWith(i,y));if(K){for(let i=0;i<K.length;i++)P();A("Punctuator",K,C,k);continue}_(`Unexpected character '${x}'`),P(),A("Unknown",x,C,k);}};return {scan:O,opensJsx:k=>Y.has(k),rescanLessThan:k=>{let x=Y.get(k);return x?(N(x),ee=k,O()):null}}}var Ft=new Set(["leadingComments","trailingComments","innerComments","comments"]),ze=n=>typeof n=="object"&&n!==null&&typeof n.type=="string"&&n.loc!=null&&typeof n.start=="number",We=new WeakMap;function Xt(n){let c=We.get(n);if(c)return c;let s=[];for(let a of Object.keys(n)){if(Ft.has(a))continue;let y=n[a];if(ze(y))s.push(y);else if(Array.isArray(y))for(let m of y)ze(m)&&s.push(m);}return s.sort((a,y)=>a.start-y.start),We.set(n,s),s}function Kt(n,c){let s=n,a,y;for(;;){let m=Xt(s);a=void 0,y=void 0;let E;for(let X of m){if(X.start<=c.start&&c.end<=X.end){E=X;break}if(X.end<=c.start)a=X;else if(c.end<=X.start){y=X;break}}if(!E)break;s=E;}return {enclosing:s,preceding:a,following:y}}var Ce=(n,c)=>{(n.leadingComments??(n.leadingComments=[])).push(c);},xe=(n,c)=>{(n.trailingComments??(n.trailingComments=[])).push(c);},Re=(n,c)=>{(n.innerComments??(n.innerComments=[])).push(c);};function Mt(n,c){for(let s=c;s<n.length;s++){let a=n[s];if(a!==" "&&a!==" "&&a!=="\r"&&a!==`
5
+ `&&a!=="\f")return a}return ""}var Ut=new Set([")","]","}",","]);function Le(n,c,s=""){for(let a of c){let{enclosing:y,preceding:m,following:E}=Kt(n,a),X=m==null||m.loc.end.line<a.loc.start.line,h=!X&&(E==null||a.loc.end.line<E.loc.start.line);if(X)E?Ce(E,a):m?xe(m,a):Re(y,a);else if(h)m?xe(m,a):E?Ce(E,a):Re(y,a);else {let _=Ut.has(Mt(s,a.end));m&&_?xe(m,a):E?Ce(E,a):m?xe(m,a):Re(y,a);}}}var $t=Object.prototype.hasOwnProperty,Se=(n,c)=>$t.call(n,c)?n[c]:void 0;function He(n,c,s){c==="__proto__"?Object.defineProperty(n,c,{value:s,enumerable:true,writable:true,configurable:true}):n[c]=s;}var Bt=(n=[])=>({vars:new Set(n),bounds:new Map,noCond:false,inferSink:null}),ue=(n,c)=>{let s=new Set(n.vars),a=new Map(n.bounds);for(let y of c)s.add(y.name),y.bound?a.set(y.name,{bound:y.bound}):a.delete(y.name);return {vars:s,bounds:a,noCond:n.noCond,inferSink:n.inferSink}},je=n=>({t:"var",name:n.name,...n.bound?{bound:n.bound}:{},...n.default?{default:n.default}:{}}),_t=(n,c)=>{let s=n.bounds.get(c)?.bound;return s?{t:"var",name:c,bound:s}:{t:"var",name:c}},Qe=n=>{let{peek:c,next:s,isP:a,isK:y,expectP:m,fail:E,unescape:X}=n,h=(i,p)=>{let d=n.tokens[n.pos()-1]??p;return Object.assign(i,{start:p.start,end:d.end,loc:{start:p.loc.start,end:d.loc.end}})},_=()=>{let i=n.pos(),p=n.tokens[i],d=n.tokens[i-1];return !!d&&!!p&&p.loc.start.line>d.loc.end.line},P=()=>{let i=b=>n.tokens[n.pos()+b],p=(b,...S)=>b?.type==="Punctuator"&&S.includes(b.value),d=i(1);if(p(d,")","..."))return true;if(d?.type!=="Identifier")return false;let T=i(2);return p(T,":",",","?","=")?true:p(T,")")&&p(i(3),"=>")},W=()=>{let i=n.tokens,p=[],d=0,T=false;for(let b=n.pos();b<i.length;b++){let S=i[b];if(S.type==="EOF")break;if(S.type==="Punctuator"){if(S.value==="<")d++,d===1&&(T=true);else if(S.value===">"){if(d--,d===0)break}else S.value==="("||S.value==="["||S.value==="{"?(d++,T=false):S.value===")"||S.value==="]"||S.value==="}"?(d--,T=false):S.value===","&&d===1?T=true:T=false;continue}if(d===1&&T){if(S.type==="Keyword"&&S.value==="const")continue;if(S.type==="Identifier"){p.push(S.value),T=false;continue}}T=false;}return p},A=i=>{let p=ue(i,W().map(T=>({name:T})));m("<");let d=[];for(;!a(">");){let T=c();y("const")&&E("'const' type parameters are not supported in this language; a constraint keeps the literal: '<T extends string>'");let b=c();b.type!=="Identifier"&&E("Expected type parameter name"),s();let S,D;if(y("extends")){s();let I=o(p);S=I.schema,D=I.node;}let F,M;if(a("=")){s();let I=o(p);F=I.schema,M=I.node;}d.push(h({type:"TSTypeParameter",name:b.value,...S?{bound:S}:{},...D?{boundNode:D}:{},...F?{default:F}:{},...M?{defaultNode:M}:{}},T)),a(">")||m(",");}return m(">"),d},Q=i=>{n.splitShiftLeft(),m("<");let p=[];for(;!a(">");)p.push(o(i)),a(">")||m(",");return m(">"),p},v=i=>{let p=c();return p.type==="Identifier"&&p.value===i},o=i=>{let p=c(),d=C(i);if(i.noCond||!y("extends")||_())return d;s();let T=[],b=C({...i,noCond:true,inferSink:T});m("?");let S=ue(i,T.map(M=>({name:M}))),D=o(S);m(":");let F=o(S);return {node:h({type:"TSConditionalType",checkType:d.node,extendsType:b.node,trueType:D.node,falseType:F.node},p),schema:{t:"conditional",check:d.schema,extends:b.schema,then:D.schema,else:F.schema,...T.length?{infer:T.map(M=>je({name:M}))}:{}}}},C=i=>{let p=c();a("|")&&s();let d=G(i);if(!a("|"))return d;let T=[d.node],b=[d.schema];for(;a("|");){s();let S=G(i);T.push(S.node),b.push(S.schema);}return {node:h({type:"TSUnionType",types:T},p),schema:{t:"union",of:b}}},G=i=>{let p=c();a("&")&&s();let d=$(i);if(!a("&"))return d;let T=[d.node],b=[d.schema];for(;a("&");){s();let S=$(i);T.push(S.node),b.push(S.schema);}return {node:h({type:"TSIntersectionType",types:T},p),schema:{t:"intersection",of:b}}},$=i=>{let p=c();if(v("keyof")){s();let d=$(i);return {node:h({type:"TSTypeOperator",operator:"keyof",typeAnnotation:d.node},p),schema:{t:"keyof",of:d.schema}}}if(v("readonly")){s();let d=$(i);return d.schema.t!=="array"&&d.schema.t!=="tuple"&&E("'readonly' only applies to array and tuple types"),{node:h({...d.node,readonly:true},p),schema:{...d.schema,readonly:true}}}if(v("infer")){s();let d=c();d.type!=="Identifier"&&E("Expected 'infer' variable name"),s();let T=i.inferSink;return T?(T.push(d.value),{node:h({type:"TSInferType",name:d.value},p),schema:{t:"var",name:d.value}}):E("'infer' is only allowed in the 'extends' clause of a conditional")}return u(i)},u=i=>{let p=c(),d=Y(i);for(;a("[")&&!_();)if(s(),a("]"))s(),d={node:h({type:"TSArrayType",elementType:d.node},p),schema:{t:"array",items:d.schema}};else {let T=o(i);m("]"),d={node:h({type:"TSIndexedAccessType",objectType:d.node,indexType:T.node},p),schema:{t:"index",obj:d.schema,key:T.schema}};}return d},w=(i,p,d)=>({node:h({type:"TSKeywordType",kind:p},i),schema:d}),B=i=>{let p=n.namespace?.()??null;n.typeRefs?.push(p===null?i:{...i,namespace:p});},j=(i,p,d)=>{let T=[{name:i.value,loc:i.loc}];for(;a(".");){s();let I=c();I.type!=="Identifier"&&I.type!=="Keyword"&&E("Expected a name after '.' in a qualified type name"),s(),T.push({name:I.value,loc:I.loc});}let b=T.map(I=>I.name).join("."),S=a("<")||a("<<")?Q(d):[],D=S.map(I=>I.schema),F=h({type:"TSTypeReference",typeName:b,...S.length?{typeArguments:S.map(I=>I.node)}:{}},p),M=T[T.length-1];return B({name:b,loc:{start:i.loc.start,end:M.loc.end},args:D,segments:T}),{node:F,schema:{t:"apply",name:b,args:D}}},Y=i=>{let p=c();if(y("typeof")){s();let b=c();b.type!=="Identifier"&&E("Expected a name after 'typeof' in type position"),s();let S=[b.value];for(;a(".");){s();let D=c();D.type!=="Identifier"&&D.type!=="Keyword"&&E("Expected a property name after '.' in 'typeof'"),s(),S.push(D.value);}return {node:h({type:"TSTypeQuery",exprName:S},p),schema:{t:"typeQuery",path:S}}}if(a("<")){n.rescanTypeLessThan();let b=A(i),S=ue(i,b);return N(S,p,b)}if(a("(")){if(P())return N(i,p);s();let b=o(i.noCond?{...i,noCond:false}:i);return m(")"),b}if(a("{"))return g()?k(i):x(i);if(a("["))return O(i);let d=c();if(d.type==="String"){s();let b=X(d.value.slice(1,-1));return {node:h({type:"TSLiteralType",literal:b},p),schema:{t:"literal",value:b}}}if(d.type==="Number"){s();let b=Number(d.value);return {node:h({type:"TSLiteralType",literal:b},p),schema:{t:"literal",value:b}}}if(y("true"))return s(),{node:h({type:"TSLiteralType",literal:true},p),schema:{t:"literal",value:true}};if(y("false"))return s(),{node:h({type:"TSLiteralType",literal:false},p),schema:{t:"literal",value:false}};if(y("null"))return s(),w(p,"null",{t:"null"});if(y("void"))return s(),w(p,"void",{t:"void"});if(d.type==="Identifier"){if(s(),a("."))return j(d,p,i);switch(d.value){case "string":return w(p,"string",{t:"string"});case "number":return w(p,"number",{t:"number"});case "boolean":return w(p,"boolean",{t:"boolean"});case "any":return w(p,"any",{t:"any"});case "unknown":return w(p,"unknown",{t:"unknown"});case "undefined":return w(p,"undefined",{t:"undefined"});case "never":return w(p,"never",{t:"union",of:[]});case "object":return w(p,"object",{t:"nonPrimitive"})}let b=a("<")||a("<<")?Q(i):[],S=b.map(M=>M.schema),D=b.length?b.map(M=>M.node):void 0,F=h({type:"TSTypeReference",typeName:d.value,...D?{typeArguments:D}:{}},p);return i.vars.has(d.value)&&S.length===0?{node:F,schema:_t(i,d.value)}:(B({name:d.value,loc:d.loc,args:S}),{node:F,schema:{t:"apply",name:d.value,args:S}})}n.recordError(`Expected a type but got '${d.value||d.type}'`,d);let T=n.createMissingNode({type:"TSTypeReference",typeName:""},d);return B({name:"",loc:T.loc,args:[]}),{node:T,schema:{t:"unknown"}}},ee=i=>{m("(");let p=[];for(;!a(")");){let d=c(),T=a("...");T&&s();let b=c();b.type!=="Identifier"&&E("Expected parameter name in function type"),s();let S=!T&&a("?");S&&s(),m(":");let D=o(i),F=h({type:"Identifier",name:b.value,typeAnnotationNode:D.node,...S?{optional:true}:{}},b);p.push({node:T?h({type:"RestElement",argument:F},d):F,schema:{name:b.value,type:D.schema,...S?{optional:true}:{},...T?{variadic:true}:{}}}),T&&!a(")")&&E("A rest parameter must be last in a parameter list"),a(")")||m(",");}return m(")"),p},re=(i,p)=>{let d=c(),T=n.tokens[n.pos()+1];if(!(d.type==="Identifier"&&T?.type==="Identifier"&&T.value==="is"))return o(i);let S=p.indexOf(d.value);S<0&&E(`Cannot find parameter '${d.value}' for the type predicate`),s(),s();let D=o(i);return {node:h({type:"TSTypePredicate",parameterName:d.value,typeAnnotation:D.node},d),schema:{t:"boolean"},guard:{param:S,type:D.schema}}},N=(i,p,d)=>{let T=ee(i);m("=>");let b=re(i,T.map(S=>S.schema.name));return {node:h({type:"TSFunctionType",params:T.map(S=>S.node),returnType:b.node,...d?.length?{typeParameters:[...d]}:{}},p),schema:{t:"fn",params:T.map(S=>S.schema),returns:b.schema,...b.guard?{guard:b.guard}:{},...d?.length?{typeParams:d.map(je)}:{}}}},O=i=>{let p=c();m("[");let d=[],T=[],b=[],S=[],D=()=>{let I=n.tokens[n.pos()],J=n.tokens[n.pos()+1],V=n.tokens[n.pos()+2];if(I?.type==="Identifier"&&J?.type==="Punctuator"&&(J.value===":"||J.value==="?"&&V?.type==="Punctuator"&&V.value===":"))return s(),I.value};for(;!a("]");){if(b[b.length-1]==="rest"&&E("A rest element must be last in a tuple type"),a("...")){s();let I=D();I!==void 0&&m(":"),S.push(I);let J=o(i);J.schema.t!=="array"&&E("A rest element type must be written as an array type ('...T[]')"),T.push(J.schema.items),d.push(J.node.elementType),b.push("rest");}else {let I=D(),J=false;I!==void 0&&(a("?")&&(s(),J=true),m(":")),S.push(I);let V=o(i);!J&&a("?")&&(s(),J=true),T.push(V.schema),d.push(V.node),b.push(J?"optional":"req");}a("]")||m(",");}m("]");let F=b.some(I=>I!=="req"),M=S.some(I=>I!==void 0);return {node:h({type:"TSTupleType",elementTypes:d,...F?{flags:b}:{},...M?{labels:S}:{}},p),schema:F?{t:"tuple",elements:T,flags:b}:{t:"tuple",elements:T}}},g=()=>{let i=n.tokens,p=n.pos()+1;return i[p]?.type==="Punctuator"&&(i[p]?.value==="+"||i[p]?.value==="-")&&(p++,!(i[p]?.type==="Identifier"&&i[p]?.value==="readonly"))?false:(i[p]?.type==="Identifier"&&i[p]?.value==="readonly"&&p++,i[p]?.type==="Punctuator"&&i[p]?.value==="["&&i[p+1]?.type==="Identifier"&&i[p+2]?.type==="Keyword"&&i[p+2]?.value==="in")},k=i=>{let p=c();m("{");let d=a("+")||a("-")?s().value:null,T;v("readonly")&&(s(),T=d==="+"?"+":d==="-"?"-":true),m("[");let b=c();b.type!=="Identifier"&&E("Expected mapped type key name"),s(),y("in")||E("Expected 'in' in mapped type"),s();let S=o(i);v("as")&&E("Key remapping ('as') in mapped types is not supported"),m("]");let D=a("+")||a("-")?s().value:null,F;D!==null&&!a("?")&&E("'?' expected"),a("?")&&(s(),F=D==="+"?"+":D==="-"?"-":true),m(":");let M=o(ue(i,[{name:b.value}]));return (a(";")||a(","))&&s(),m("}"),{node:h({type:"TSMappedType",key:b.value,constraint:S.node,typeAnnotation:M.node,...T!==void 0?{readonly:T}:{},...F!==void 0?{optional:F}:{}},p),schema:{t:"mapped",key:b.value,over:S.schema,body:M.schema,...F===true||F==="+"?{optional:true}:{},...F==="-"?{excludeOptional:true}:{},...T===true||T==="+"?{readonly:true}:{},...T==="-"?{excludeReadonly:true}:{}}}},x=i=>{let p=c();m("{");let d=[],T={},b,S=[];for(;!a("}");){let F=c(),M=v("readonly")&&n.tokens[n.pos()+1]?.value==="[";if(M&&s(),!M&&(a("(")||a("<"))){a("<")&&n.rescanTypeLessThan();let I=a("<")?A(i):[],J=I.length?ue(i,I):i,V=ee(J);m(":");let H=re(J,V.map(Z=>Z.schema.name));S.push({t:"fn",params:V.map(Z=>Z.schema),returns:H.schema,...H.guard?{guard:H.guard}:{},...I.length?{typeParams:I.map(je)}:{}}),d.push(h({type:"TSCallSignatureDeclaration",params:V.map(Z=>Z.node),returnType:H.node,...I.length?{typeParameters:I}:{}},F));}else if(a("[")){s(),c().type!=="Identifier"&&E("Expected index signature parameter name"),s(),m(":");let I=c();(I.type!=="Identifier"||I.value!=="string"&&I.value!=="number")&&E("Index signature parameter type must be 'string' or 'number'"),s(),m("]"),m(":");let J=o(i);b={key:I.value,value:J.schema,...M?{readonly:true}:{}},d.push(h({type:"TSIndexSignature",keyType:I.value,typeAnnotation:J.node,...M?{readonly:true}:{}},F));}else {let I=false;if(v("readonly")){let ce=n.tokens[n.pos()+1];ce&&(ce.type==="Identifier"||ce.type==="Keyword"||ce.type==="String"||ce.type==="Number")&&(s(),I=true);}let J=c(),V;if(J.type==="Identifier"||J.type==="Keyword")s(),V=J.value;else if(J.type==="String")s(),V=X(J.value.slice(1,-1));else if(J.type==="Number")s(),V=J.value;else return E("Expected property name in object type");let H=a("?");H&&s(),m(":");let Z=o(i);He(T,V,{type:Z.schema,...H?{optional:true}:{},...I?{readonly:true}:{}}),d.push(h({type:"TSPropertySignature",key:V,typeAnnotation:Z.node,...H?{optional:true}:{},...I?{readonly:true}:{}},F));}if(a(";")||a(","))s();else break}m("}");let D=h({type:"TSTypeLiteral",members:d},p);return S.length>0?Object.keys(T).length>0||b?E("Callable object types (call signatures mixed with members) are not supported"):{node:D,schema:S.length===1?S[0]:{t:"overload",signatures:S}}:{node:D,schema:{t:"object",props:T,...b?{index:b}:{}}}},K=Bt();return {parseType:()=>o(K),parseReturnType:i=>re(K,i),parseTypeParamList:()=>A(K),parseTypeInScope:i=>o(ue(K,i)),withTypeParams:(i,p)=>{let d=K;K=ue(d,i);try{return p()}finally{K=d;}}}};var le=class extends ast.TSLiteError{constructor(s,a,y,m,E){super("parse-error",`${s} (${a.line}:${a.column})`,{position:a,index:y,loc:m,end:E});this.position=a;this.index=y;this.loc=m;this.end=E;this.name="ParseError";}},Gt=n=>{let c=n;return c!=null&&typeof c.start=="number"&&c.start===c.end&&c.start>=0},Ye=(n,c)=>Object.assign(n,{start:c.start,end:c.start,loc:{start:c.loc.start,end:c.loc.start}}),qt={"??":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(["??","||","&&"]),Wt=new Set(["class","debugger","with","enum","interface"]),Ht={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",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"},Qt={module:(n,c)=>n.type==="Identifier"&&c.type==="Punctuator"&&c.value==="{",declare:n=>n.type==="Keyword"&&["const","let","var","function","class","enum","interface"].includes(n.value)||n.type==="Identifier"&&["type","module"].includes(n.value),abstract:n=>n.type==="Keyword"&&n.value==="class"},Yt=new Set(["=","+=","-=","*=","/=","%=","**=","??=","&&=","||="]),Ze=(n,c)=>{let s=0;for(let a of n)c(a)&&(n[s++]=a);n.length=s;};function Ae(n){let c=[],s=[],a=[],y=Ie(n,e=>a.push(e),e=>c.push({code:"lex-error",...e})),m=y.scan(),E=0,X=[],h=e=>{for(;X.length>e;)X.pop()();},_=(e=E)=>{let t=m[e];if(t?.type!=="Punctuator"||t.value!=="<"||!y.opensJsx(t.start))return;let r=m.slice(e),l=c.slice(),f=a.slice();Ze(c,L=>L.code!=="lex-error"||L.index<t.start),Ze(a,L=>L.start<t.start);let R=y.rescanLessThan(t.start);m.splice(e,m.length-e,...R),X.push(()=>{m.splice(e,m.length-e,...r),c.splice(0,c.length,...l),a.splice(0,a.length,...f);});},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},r=E;m.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}}),X.push(()=>m.splice(r,2,e));},W=[],A=[],Q=false,v=(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},$=()=>v().type==="EOF",u=e=>v().type==="Punctuator"&&v().value===e,w=e=>v().type==="Keyword"&&v().value===e,B=e=>v().type==="Identifier"&&v().value===e,j=(e,t=v())=>{throw Y(e,t),new le(e,t.loc.start,t.start,t.loc,t.end)},Y=(e,t=v())=>{let r=c[c.length-1];r&&r.index===t.start||c.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},ee=(e,t)=>{s.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},re=()=>{c.length||c.push(...s),s.length=0;},N=e=>(u(e)||j(`Expected '${e}' but got '${v().value||v().type}'`),o()),O=(e,t)=>{let r=C()??t;return Object.assign(e,{start:t.start,end:r.end,loc:{start:t.loc.start,end:r.loc.end}})},g=(e,t,r)=>Object.assign(e,{start:t.start,end:r.end,loc:{start:t.loc.start,end:r.loc.end}}),k=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 f=e.indexOf("}",r);t+=String.fromCodePoint(parseInt(e.slice(r+2,f),16)),r=f;}else t+=String.fromCharCode(parseInt(e.slice(r+1,r+5),16)),r+=4;break;default:t+=l;}}return t},x=(e=false)=>K(e),K=(e=false)=>{let t=i(e),r=v();if(r.type==="Punctuator"&&Yt.has(r.value)){o();let l=K();return g({type:"AssignmentExpression",operator:r.value,left:t,right:l},t,l)}return t},i=(e=false)=>{let t=d(0,e);if(!u("?"))return t;o();let r=x();N(":");let l=x();return g({type:"ConditionalExpression",test:t,consequent:r,alternate:l},t,l)},p=()=>{let e=v();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=v(1);if(t.type==="Punctuator"&&t.value===">"&&e.end===t.start){let r=v(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}},d=(e,t=false)=>{let r=T();for(;;){let l=p();if(!l)break;let{op:f,consume:R}=l;if(f==="in"&&t)break;let L=Se(qt,f);if(!L||L<=e)break;if(f==="satisfies"){if(G())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(f==="as"){if(G())break;o();let U=ge();r=g({type:"TSAsExpression",expression:r,typeAnnotation:U.schema,typeAnnotationNode:U.node},r,C());continue}for(let U=0;U<R;U++)o();let q=d(f==="**"?L-1:L,t);r=g({type:zt.has(f)?"LogicalExpression":"BinaryExpression",operator:f,left:r,right:q},r,q);}return r},T=()=>{let e=v();return e.type==="Punctuator"&&(e.value==="++"||e.value==="--")?(o(),O({type:"UpdateExpression",operator:e.value,prefix:true,argument:T()},e)):w("await")?(o(),O({type:"AwaitExpression",argument:T()},e)):w("typeof")||w("void")||w("delete")||e.type==="Punctuator"&&(e.value==="!"||e.value==="-"||e.value==="+"||e.value==="~")?b(e):D()},b=e=>{o();let t=T();return u("**")&&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.`),O({type:"UnaryExpression",operator:e.value,prefix:true,argument:t},e)},S=()=>{let e=E,t=X.length,r=c.length,l=W.length,f=()=>(h(t),E=e,c.length=r,W.length=l,void 0);try{if(P(),o(),u(">"))return f();let R=[];for(;R.push(ge().schema),!!u(",");)o();return u(">")?(o(),u("(")?R:f()):f()}catch{return f()}},D=()=>{let e=pt(),t=false;for(;;)if((v().type==="Template"||v().type==="TemplateHead")&&j("Tagged templates are not supported in this language"),u("?."))if(o(),t=true,u("(")){let{args:r,close:l}=F();e=g({type:"CallExpression",callee:e,arguments:r,optional:true},e,l);}else if(u("[")){o();let r=x(),l=N("]");e=g({type:"MemberExpression",object:e,property:r,computed:true,optional:true},e,l);}else {let r=v();r.type!=="Identifier"&&r.type!=="Keyword"&&j("Expected property name after '?.'"),o();let l=O({type:"Identifier",name:r.value},r);e=g({type:"MemberExpression",object:e,property:l,computed:false,optional:true},e,l);}else if(u(".")){o();let r=v(),l;r.type==="Identifier"||r.type==="Keyword"?(o(),l=O({type:"Identifier",name:r.value},r)):(Y("Expected property name"),l=Ye({type:"Identifier",name:""},r)),e=g({type:"MemberExpression",object:e,property:l,computed:false,optional:false},e,l);}else if(u("[")){o();let r=x(),l=N("]");e=g({type:"MemberExpression",object:e,property:r,computed:true,optional:false},e,l);}else if(u("(")){let{args:r,close:l}=F();e=g({type:"CallExpression",callee:e,arguments:r,optional:false},e,l);}else if(u("<")||u("<<")){let r=S();if(!r)break;let{args:l,close:f}=F();e=g({type:"CallExpression",callee:e,arguments:l,optional:false,typeArguments:r},e,f);}else if(u("++")||u("--")){let r=o();e=g({type:"UpdateExpression",operator:r.value,prefix:false,argument:e},e,r);}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=x();return g({type:"SpreadElement",argument:t},e,t)}return x()},I=()=>{let e=v();return e.type!=="Identifier"&&j("Expected identifier"),o(),O({type:"Identifier",name:e.value},e)},J=(e=false)=>{let t=u("{")?V():u("[")?H():I();if(e&&u("?")&&(t.type!=="Identifier"&&j("A binding pattern parameter cannot be optional"),o(),t.optional=true),u(":")){o();let r=ge();t.typeAnnotation=r.schema,t.typeAnnotationNode=r.node;}return t},V=()=>{let e=N("{"),t=[];for(;!u("}");){if(u("...")){let l=o(),f=J();t.push(g({type:"RestElement",argument:f},l,f));}else {let l=I(),f,R=false;if(u(":")?(o(),f=J()):(f={...l},R=true),u("=")){o();let L=x();f=g({type:"AssignmentPattern",left:f,right:L},f,L);}t.push(g({type:"Property",key:l,value:f,kind:"init",shorthand:R,computed:false},l,f));}u("}")||N(",");}let r=N("}");return g({type:"ObjectPattern",properties:t},e,r)},H=()=>{let e=N("["),t=[];for(;!u("]");){if(u(",")){t.push(null),o();continue}if(u("...")){let l=o(),f=J();t.push(g({type:"RestElement",argument:f},l,f));}else {let l=J();if(u("=")){o();let f=x();l=g({type:"AssignmentPattern",left:l,right:f},l,f);}t.push(l);}u("]")||N(",");}let r=N("]");return g({type:"ArrayPattern",elements:t},e,r)},Z=()=>{let e=X.length,t=ce();return t||h(e),t},ce=()=>{let e=0,t="name";for(let r=E;r<m.length;r++){let l=m[r];if(l.type==="EOF")return false;if(l.type==="Punctuator"){if(l.value==="<"&&t==="type"){_(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 f=m[r+1];return !f||f.type!=="Punctuator"?false:f.value==="=>"?true:f.value===":"?tt(r+2):false}}}return false},tt=e=>{let t=0;for(let r=e;r<m.length;r++){let l=m[r];if(l.type==="EOF")return false;if(l.type==="Punctuator")if(l.value==="<"&&_(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},nt=()=>{N("(");let e=[];for(;!u(")");){if(u("...")){let t=o(),r=J();e.push(g({type:"RestElement",argument:r},t,r));}else {let t=J(true);if(u("=")){t.optional&&j("Parameter cannot have question mark and initializer"),o();let r=x();t=g({type:"AssignmentPattern",left:t,right:r},t,r);}e.push(t);}u(")")||N(",");}return N(")"),e},rt=e=>{if(e.type==="Identifier")return e.name;let t=e.left;return e.type==="AssignmentPattern"&&t?.type==="Identifier"?t.name:null},me=(e,t,r=[])=>ft(r,()=>ot(e,t,r)),ot=(e,t,r)=>{let l=u("(")?nt():[I()],f,R,L;if(u(":")){o();let U=ut(l.map(rt));f=U.schema,R=U.node,L=U.guard;}N("=>");let q=u("{")?fe():x();return O({type:"ArrowFunctionExpression",params:l,body:q,async:e,expression:q.type!=="BlockStatement",generator:false,...f?{returnType:f,returnTypeNode:R}:{},...L?{returnGuard:L}:{},...r.length?{typeParameters:[...r]}:{}},t)},st=()=>{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("]"))},at=()=>{let e=N("{"),t=[];for(;!u("}");){if(u("...")){let r=o(),l=x();t.push(g({type:"SpreadElement",argument:l},r,l));}else {let r=v(),l,f=false;if(u("["))f=true,o(),l=x(),N("]");else if(r.type==="String")o(),l=O({type:"Literal",value:k(r.value.slice(1,-1)),raw:r.value},r);else if(r.type==="Number")o(),l=O({type:"Literal",value:Number(r.value),raw:r.value},r);else if(r.type==="Identifier"||r.type==="Keyword")o(),l=O({type:"Identifier",name:r.value},r);else return j("Invalid property key");if(u(":")){o();let R=x();t.push(g({type:"Property",key:l,value:R,kind:"init",shorthand:false,computed:f},r,R));}else t.push(g({type:"Property",key:l,value:l,kind:"init",shorthand:true,computed:false},r,l));}u("}")||N(",");}return g({type:"ObjectExpression",properties:t},e,N("}"))},he=(e,t)=>({type:"TemplateElement",value:{raw:e,cooked:k(e)},tail:t}),it=e=>{o();let t=[he(e.value,false)],r=[];for(;;){r.push(x());let l=v();if(l.type==="TemplateMiddle")o(),t.push(he(l.value,false));else if(l.type==="TemplateTail"){o(),t.push(he(l.value,true));break}else j("Expected `}` to close template interpolation");}return O({type:"TemplateLiteral",quasis:t,expressions:r},e)},de=()=>{let e=v();return e.type!=="Identifier"&&j(`Expected JSX identifier but got '${e.value||e.type}'`),O({type:"JSXIdentifier",name:o().value},e)},Oe=()=>{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)}`,lt=()=>{let e=v();if(e.type==="String")return o(),O({type:"Literal",value:k(e.value.slice(1,-1)),raw:e.value},e);if(u("{")){let t=o(),r=K(),l=N("}");return g({type:"JSXExpressionContainer",expression:r},t,l)}return u("<")?ke():j(`Invalid JSX attribute value '${e.value||e.type}'`)},ct=()=>{let e=[];for(;!u(">")&&!u("/>")&&!$();){if(u("{")){let l=o();N("...");let f=K(),R=N("}");e.push(g({type:"JSXSpreadAttribute",argument:f},l,R));continue}let t=de();if(u(":")){o();let l=de();t=g({type:"JSXNamespacedName",namespace:t,name:l},t,l);}let r=null;u("=")&&(o(),r=lt()),e.push(g({type:"JSXAttribute",name:t,value:r},t,r??t));}return e},De=()=>{let e=[];for(;!(u("</")||$());){let t=v();if(t.type==="JSXText")o(),e.push(O({type:"JSXText",value:t.value,raw:t.value},t));else if(u("{")){let r=o();if(u("}")){let l=o(),f=O({type:"JSXEmptyExpression"},r);e.push(g({type:"JSXExpressionContainer",expression:f},r,l));}else if(u("...")){o();let l=K(),f=N("}");e.push(g({type:"JSXSpreadChild",expression:l},r,f));}else {let l=K(),f=N("}");e.push(g({type:"JSXExpressionContainer",expression:l},r,f));}}else u("<")?e.push(ke()):j(`Unexpected token in JSX children '${t.value||t.type}'`);}return e},ke=()=>{let e=N("<");if(u(">")){let ne=o(),pe=g({type:"JSXOpeningFragment"},e,ne),Nt=De(),Et=N("</"),_e=N(">"),It=g({type:"JSXClosingFragment"},Et,_e);return g({type:"JSXFragment",openingFragment:pe,children:Nt,closingFragment:It},e,_e)}let t=Oe(),r=ct();if(u("/>")){let ne=o(),pe=g({type:"JSXOpeningElement",name:t,attributes:r,selfClosing:true},e,ne);return g({type:"JSXElement",openingElement:pe,children:[],closingElement:null},e,ne)}let l=N(">"),f=g({type:"JSXOpeningElement",name:t,attributes:r,selfClosing:false},e,l),R=De(),L=N("</"),q=v(),U=Oe();oe(U)!==oe(t)&&j(`JSX closing tag </${oe(U)}> does not match opening <${oe(t)}>`,q);let z=N(">"),te=g({type:"JSXClosingElement",name:U},L,z);return g({type:"JSXElement",openingElement:f,children:R,closingElement:te},e,z)},pt=()=>{let e=v();if(w("async")){let t=v(1);if(t.value==="("||t.type==="Identifier")return o(),me(true,e);if(t.value==="<"){o();let r=Je(e,true);if(r)return r}return j("Unexpected 'async'")}if(u("(")&&Z()||e.type==="Identifier"&&v(1).type==="Punctuator"&&v(1).value==="=>")return me(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:k(e.value.slice(1,-1)),raw:e.value},e);if(e.type==="Template")return o(),O({type:"TemplateLiteral",expressions:[],quasis:[he(e.value,true)]},e);if(e.type==="TemplateHead")return it(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"?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(),O({type:"Identifier",name:e.value},e);if(u("(")){o();let t=x();return N(")"),t}return u("[")?st():u("{")?at():u("<")?Je(e)??ke():j(`Unexpected token '${e.value||e.type}'`)},Je=(e,t=false)=>{let r=E,l=X.length,f=c.length,R=s.length,L=W.length,q=()=>(h(l),E=r,c.length=f,s.length=R,W.length=L,void 0),U=v(1);U.type==="Keyword"&&U.value==="const"&&we();try{let z=we();return !z.length||!u("(")?q():me(t,e,z)}catch{return q()}},{parseType:ge,parseReturnType:ut,parseTypeParamList:we,parseTypeInScope:dt,withTypeParams:ft}=Qe({rescanTypeLessThan:_,splitShiftLeft:P,tokens:m,pos:()=>E,peek:v,next:o,isP:u,isK:w,expectP:N,fail:j,recordError:Y,createMissingNode:Ye,unescape:k,typeRefs:W,namespace:()=>A.length?A.join("."):null}),Fe=()=>{let e=o(),t=I(),r=[];u("<")&&(r=we()),N("=");let l=dt(r),f=g({type:"TSTypeAliasDeclaration",id:t,...r.length?{typeParameters:[...r]}:{},typeAnnotation:l.schema,typeNode:l.node},e,C());return u(";")&&o(),f},Xe=(e,t)=>t.loc.start.line===e.loc.end.line,Pe=(e=0)=>v(e).type==="Identifier"&&v(e).value==="namespace"&&v(e+1).type==="Identifier"&&Xe(v(e),v(e+1)),Ke=()=>B("declare")&&Xe(v(),v(1))&&Pe(1),Me=()=>{let e=v(),t=B("declare");return t&&o(),o(),Ue(e,t)},Ue=(e,t)=>{let r=I();A.push(r.name);let l=Q;t&&(Q=true);try{let f;if(u("."))o(),f=Ue(v(),!1);else {let R=N("{"),L=Ee(()=>u("}"));f=g({type:"TSModuleBlock",body:L},R,N("}"));}return g({type:"TSModuleDeclaration",id:r,body:f,...t?{declare:!0}:{}},e,f)}finally{Q=l,A.pop();}},se=()=>{let e=v();if(e.type==="Identifier"&&e.value==="type"&&v(1).type==="Identifier"&&v(2).type==="Punctuator"&&(v(2).value==="="||v(2).value==="<"))return Fe();if(Pe()||Ke())return Me();if(w("const")||w("let")||w("var")){let f=$e();return u(";")&&o(),f}if(w("if"))return xt();if(w("for"))return gt();if(w("while"))return vt();if(w("do"))return Tt();if(w("break")||w("continue"))return bt();if(w("return"))return St();if(w("throw"))return kt();if(w("try"))return wt();if(w("switch"))return Pt();if(w("import"))return mt();if(w("export"))return ht();if(u("{"))return fe();if((w("function")||w("async")&&v(1).type==="Keyword"&&v(1).value==="function")&&j("Function declarations are not supported \u2014 use 'const fn = () => \u2026'"),u(";"))return o(),O({type:"EmptyStatement"},e);if(e.type==="Keyword"&&Wt.has(e.value)||e.type==="Identifier"&&Se(Qt,e.value)?.(v(1),v(2))===true){let f=Se(Ht,e.value);j(`'${e.value}' is not supported in this language`+(f?` \u2014 ${f}`:""));}let r=x(),l=u(";")?o():C();return g({type:"ExpressionStatement",expression:r},r,l)},$e=()=>{let e=o(),t=e.value,r=()=>{let f=J(),R=null;return u("=")?(o(),R=x()):t==="const"&&!Q&&ee("'const' declarations must be initialized",f),g({type:"VariableDeclarator",id:f,init:R},f,R??f)},l=[r()];for(;u(",");)o(),l.push(r());return g({type:"VariableDeclaration",kind:t,declarations:l},e,l[l.length-1])},yt=()=>{let e=v();return e.type!=="String"&&j("Expected module specifier string"),o(),O({type:"Literal",value:k(e.value.slice(1,-1)),raw:e.value},e)},mt=()=>{let e=o(),t=[],r;if(B("type")){let f=v(1);(f.type==="Punctuator"&&(f.value==="{"||f.value==="*")||f.type==="Identifier"&&f.value!=="from")&&(o(),r="type");}if(v().type!=="String"){if(v().type==="Identifier"){let f=I();t.push(g({type:"ImportDefaultSpecifier",local:f},f,f)),u(",")&&o();}if(u("*")){let f=o();B("as")||j("Expected 'as' after '*' in import"),o();let R=I();t.push(g({type:"ImportNamespaceSpecifier",local:R},f,R));}else if(u("{")){for(o();!u("}")&&!$();){let f;B("type")&&v(1).type==="Identifier"&&v(1).value!=="as"&&(o(),f="type");let R=I(),L=R;if(B("as")&&(o(),L=I()),t.push(g({type:"ImportSpecifier",imported:R,local:L,...f?{importKind:f}:{}},R,L)),u(","))o();else break}N("}");}B("from")||j("Expected 'from' in import declaration"),o();}let l=yt();return u(";")&&o(),O({type:"ImportDeclaration",specifiers:t,source:l,...r?{importKind:r}:{}},e)},ht=()=>{let e=o();if(B("type")&&v(1).type==="Identifier"){let t=Fe();return O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(Pe()||Ke()){let t=Me();return O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(w("default")){o();let t=x();return u(";")&&o(),O({type:"ExportDefaultDeclaration",declaration:t},e)}if(w("const")||w("let")||w("var")){let t=$e();return u(";")&&o(),O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(u("{")){o();let t=[];for(;!u("}")&&!$();){let r=I(),l=r;if(B("as")&&(o(),l=I()),t.push(g({type:"ExportSpecifier",local:r,exported:l},r,l)),u(","))o();else break}return N("}"),u(";")&&o(),O({type:"ExportNamedDeclaration",declaration:null,specifiers:t,source:null},e)}return j("Expected 'const', 'type', 'namespace', '{', or 'default' after 'export'")},Be=()=>v().type==="Identifier"&&v().value==="of",Ne=()=>w("in"),gt=()=>{let e=o();N("(");let t=null,r=null;if(!u(";"))if(w("const")||w("let")||w("var")){let L=o(),q=()=>{let z=I();if(u(":")){o();let te=ge();z.typeAnnotation=te.schema,z.typeAnnotationNode=te.node;}return z},U=q();if(Be()||Ne()){let z=g({type:"VariableDeclarator",id:U,init:null},U,U);r=g({type:"VariableDeclaration",kind:L.value,declarations:[z]},L,U);}else {let z=ne=>{let pe=null;return u("=")?(o(),pe=x(true)):L.value==="const"&&ee("'const' declarations must be initialized",ne),g({type:"VariableDeclarator",id:ne,init:pe},ne,pe??ne)},te=[z(U)];for(;u(",");)o(),te.push(z(q()));t=g({type:"VariableDeclaration",kind:L.value,declarations:te},L,te[te.length-1]);}}else {let L=x(true);Be()||Ne()?r=L:t=L;}if(r){let L=Ne();o();let q=x();N(")");let U=se();return g(L?{type:"ForInStatement",left:r,right:q,body:U}:{type:"ForOfStatement",left:r,right:q,body:U,await:false},e,U)}N(";");let l=u(";")?null:x();N(";");let f=u(")")?null:x();N(")");let R=se();return g({type:"ForStatement",init:t,test:l,update:f,body:R},e,R)},Tt=()=>{let e=o(),t=se();w("while")||j("Expected 'while' after the 'do' body"),o(),N("(");let r=x(),l=N(")");return u(";")&&o(),g({type:"DoWhileStatement",body:t,test:r},e,l)},bt=()=>{let e=o(),t=e.value==="break"?"BreakStatement":"ContinueStatement",r=u(";")?o():C();return g({type:t,label:null},e,r)},vt=()=>{let e=o();N("(");let t=x();N(")");let r=se();return g({type:"WhileStatement",test:t,body:r},e,r)},xt=()=>{let e=o();N("(");let t=x();N(")");let r=se(),l=null;return w("else")&&(o(),l=se()),g({type:"IfStatement",test:t,consequent:r,alternate:l},e,l??r)},St=()=>{let e=o(),t=null;!u(";")&&!u("}")&&!$()&&(t=x());let r=u(";")?o():C();return g({type:"ReturnStatement",argument:t},e,r)},kt=()=>{let e=o(),t=x(),r=u(";")?o():C();return g({type:"ThrowStatement",argument:t},e,r)},wt=()=>{let e=o(),t=fe(),r=null,l=null;if(w("catch")){let f=o(),R=null;u("(")&&(o(),R=I(),N(")"));let L=fe();r=g({type:"CatchClause",param:R,body:L},f,L);}return w("finally")&&(o(),l=fe()),!r&&!l&&j("'try' requires a 'catch' or 'finally' clause"),g({type:"TryStatement",block:t,handler:r,finalizer:l},e,l??r??t)},Pt=()=>{let e=o();N("(");let t=x();N(")"),N("{");let r=[];for(;!u("}")&&!$();){let f=v(),R=null;w("case")?(o(),R=x()):w("default")?o():j("Expected 'case' or 'default' in switch"),N(":");let L=[];for(;!u("}")&&!w("case")&&!w("default")&&!$();)L.push(se());r.push(g({type:"SwitchCase",test:R,consequent:L},f,C()??f));}let l=N("}");return g({type:"SwitchStatement",discriminant:t,cases:r},e,l)},fe=()=>{let e=N("{"),t=Ee(()=>u("}"));return g({type:"BlockStatement",body:t},e,N("}"))},Ee=e=>{let t=[];for(;!e()&&!$();){if(v().type==="Unknown"){o();continue}try{t.push(se());}catch(r){if(!(r instanceof le))throw r;$()||o();}}return t};return {parseExpr:x,parseProgram:()=>{let e=v(),t=Ee(()=>false);return re(),g({type:"Program",sourceType:"module",body:t,...W.length?{typeRefs:W}:{},...a.length?{comments:a}:{},...c.length?{parseDiagnostics:c}:{}},e,C()??e)},eof:$,fail:j,recordError:Y,settleGrammar:re,diagnostics:c}}function et(n){let c=Ae(n),s=c.parseProgram(),a=s.comments;return a?.length&&Le(s,a,n),{ast:s,diagnostics:c.diagnostics}}function Zt(n){let{ast:c,diagnostics:s}=et(n),a=s[0];if(a){let y=a.code==="lex-error"?ie:le;throw new y(a.message,a.position,a.index,a.loc,a.end)}return c}function en(n){let c=Ae(n),s=c.parseExpr();c.eof()||c.fail("Unexpected token after expression"),c.settleGrammar();let a=c.diagnostics[0];if(a){let y=a.code==="lex-error"?ie:le;throw new y(a.message,a.position,a.index,a.loc,a.end)}return s}function tn(n){let c=Ae(n),s;try{s=c.parseExpr(),c.eof()||c.recordError("Unexpected token after expression");}catch(a){if(!(a instanceof le)&&!(a instanceof ie))throw a}return c.settleGrammar(),{ast:s,diagnostics:c.diagnostics}}var nn="1.9.0";exports.KEYWORDS=qe;exports.LexError=ie;exports.ParseError=le;exports.attachComments=Le;exports.nodeIsMissing=Gt;exports.parse=Zt;exports.parseExpression=en;exports.parseExpressionTolerant=tn;exports.parseTolerant=et;exports.tokenize=Jt;exports.version=nn;
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.9.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.9.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(s,a,y,m,E){super("lex-error",`${s} (${a.line}:${a.column})`,{position:a,index:y,loc:m,end:E});this.position=a;this.index=y;this.loc=m;this.end=E;this.name="LexError";}},qe=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"]),Rt=["...","===","!==","=>","?.","??=","&&=","||=","**=","??","==","!=","<=",">=","&&","||","|","&","++","--","+=","-=","*=","/=","%=","**","<<","+","-","*","/","%","<",">","!","?",":",".",",",";","=","^","~","(",")","[","]","{","}"],be=n=>n>="a"&&n<="z"||n>="A"&&n<="Z"||n==="_"||n==="$",ve=n=>be(n)||n>="0"&&n<="9",ae=n=>n>="0"&&n<="9",Ve=n=>ae(n)||n>="a"&&n<="f"||n>="A"&&n<="F",Lt=n=>ve(n)||n==="-",ye=n=>n===`
2
+ `||n==="\r"||n==="\u2028"||n==="\u2029",Te=(n,c)=>{let s=c;for(;;){let a=n[s]??"";if(a===" "||a===" "||a==="\f"||a==="\v"||ye(a))s++;else if(a==="/"&&n[s+1]==="/")for(s+=2;s<n.length&&!ye(n[s]??"");)s++;else if(a==="/"&&n[s+1]==="*"){for(s+=2;s<n.length&&!(n[s]==="*"&&n[s+1]==="/");)s++;s+=2;}else return s}},jt=(n,c)=>{if(!be(n[c]??""))return c;let s=c+1;for(;ve(n[s]??"");)s++;return s},Ge=(n,c,s)=>n.startsWith(s,c)&&!ve(n[c+s.length]??""),At=(n,c)=>{let s=Te(n,c);Ge(n,s,"const")&&(s=Te(n,s+5));let a=jt(n,s);if(a===s)return false;if(s=Te(n,a),Ge(n,s,"extends")){let y=Te(n,s+7),m=n[y]??"";return !(m==="="||m===">"||m==="/")}return n[s]===","?true:n[s]==="="&&n[s+1]!==">"},Ot=new Set(["(","[","{",",",";",":","?","=>","...","=","+","-","*","/","%","<","<=",">",">=","==","===","!=","!==","&&","||","??","!","+=","-=","*=","/=","%=","??=","&&=","||=","**="]),Dt=new Set(["return","typeof","await","delete","void","in","instanceof","else","case","yield","throw"]);function Jt(n,c,s){return Ie(n,c,s).scan()}function Ie(n,c,s){let a=[],y=0,m=1,E=0,X=()=>({line:m,column:E}),h=(k=0)=>n[y+k]??"",_=k=>{let x=X(),K={start:x,end:{line:m,column:E+1}};if(s){s({message:k,position:x,index:y,loc:K,end:y+1});return}throw new ie(k,x,y,K,y+1)},P=()=>{let k=n[y++];return k==="\r"?(n[y]===`
3
+ `&&y++,m++,E=0):k===`
4
+ `||k==="\u2028"||k==="\u2029"?(m++,E=0):E++,k},W=()=>{for(;;){let k=h();if(k===" "||k===" "||k==="\f"||k==="\v"||ye(k))P();else if(k==="/"&&h(1)==="/"){let x=y,K=X();P(),P();let i=y;for(;y<n.length&&!ye(h());)P();c?.({type:"Line",value:n.slice(i,y),start:x,end:y,loc:{start:K,end:X()}});}else if(k==="/"&&h(1)==="*"){let x=y,K=X();P(),P();let i=y,p=y;for(;;){if(y>=n.length){_("Unterminated block comment"),p=y;break}if(h()==="*"&&h(1)==="/"){p=y,P(),P();break}P();}c?.({type:"Block",value:n.slice(i,p),start:x,end:y,loc:{start:K,end:X()}});}else break}},A=(k,x,K,i)=>{a.push({type:k,value:x,start:K,end:y,loc:{start:i,end:X()}}),u=k==="Punctuator"?Ot.has(x):k==="Keyword"?Dt.has(x):k==="TemplateHead"||k==="TemplateMiddle";},Q=k=>{for(P();y<n.length;){let x=h();if(x===k)return P(),n.slice(C,y);if(ye(x))return _("Unterminated string literal"),n.slice(C,y);if(x==="\\"){if(P(),y>=n.length)return _("Unterminated string literal"),n.slice(C,y);P();continue}P();}return _("Unterminated string literal"),n.slice(C,y)},v=()=>{if(h()==="0"&&(h(1)==="x"||h(1)==="X")){if(P(),P(),!Ve(h()))return _("Invalid hexadecimal literal");for(;Ve(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 k=y;for(;y<n.length;){let x=h();if(x==="`"){let K=n.slice(k,y);return P(),{raw:K,interp:false}}if(x==="$"&&h(1)==="{"){let K=n.slice(k,y);return P(),P(),{raw:K,interp:true}}if(x==="\\"){if(P(),y>=n.length)break;P();continue}P();}return _("Unterminated template literal"),{raw:n.slice(k,y),interp:false}},C=0,G=0,$=[],u=true,w="js",B=[],j=[],Y=new Map,ee=-1,re=()=>({i:y,line:m,col:E,mode:w,braceDepth:G,tmplStack:[...$],jsxParent:[...B],jsxExpr:j.map(k=>({...k}))}),N=k=>{y=k.i,m=k.line,E=k.col,w=k.mode,G=k.braceDepth,$=[...k.tmplStack],B=[...k.jsxParent],j=k.jsxExpr.map(x=>({...x}));},O=()=>(a=[],g(),a),g=()=>{for(;;){if(w==="jsxChildren"){C=y;let i=X();if(y>=n.length){A("EOF","",C,i);break}let p=h();if(p==="<"){h(1)==="/"?(P(),P(),A("Punctuator","</",C,i),w="jsxCloseTag"):(P(),A("Punctuator","<",C,i),B.push("jsxChildren"),w="jsxOpenTag");continue}if(p==="{"){P(),A("Punctuator","{",C,i),j.push({level:G,restore:"jsxChildren"}),w="js";continue}for(;y<n.length&&h()!=="<"&&h()!=="{";)P();A("JSXText",n.slice(C,y),C,i);continue}if(w==="jsxOpenTag"||w==="jsxCloseTag"){W(),C=y;let i=X();if(y>=n.length){A("EOF","",C,i);break}let p=h();if(be(p)){for(P();Lt(h());)P();A("Identifier",n.slice(C,y),C,i);continue}if(p==="/"&&h(1)===">"){P(),P(),A("Punctuator","/>",C,i),w=B.pop()??"js";continue}if(p===">"){P(),A("Punctuator",">",C,i),w=w==="jsxCloseTag"?B.pop()??"js":"jsxChildren";continue}if(p==="{"){P(),A("Punctuator","{",C,i),j.push({level:G,restore:w}),w="js";continue}if(p==='"'||p==="'"){A("String",Q(p),C,i);continue}if(p==="="||p==="."||p===":"){P(),A("Punctuator",p,C,i);continue}if(p==="<"&&w==="jsxOpenTag"){P(),A("Punctuator","<",C,i),B.push("jsxOpenTag");continue}_(`Unexpected character '${p}' in JSX tag`),P(),A("Unknown",p,C,i);continue}W(),C=y;let k=X();if(y>=n.length){A("EOF","",C,k);break}let x=h();if(be(x)){for(;ve(h());)P();let i=n.slice(C,y);A(qe.has(i)?"Keyword":"Identifier",i,C,k);continue}if(ae(x)||x==="."&&ae(h(1))){v(),A("Number",n.slice(C,y),C,k);continue}if(x==='"'||x==="'"){let i=Q(x);A("String",i,C,k);continue}if(x==="`"){P();let{raw:i,interp:p}=o();p?(A("TemplateHead",i,C,k),$.push(G)):A("Template",i,C,k);continue}if(x==="<"&&y===ee){ee=-1,P(),A("Punctuator","<",C,k);continue}if(x==="<"&&u&&!At(n,y+1)){Y.set(y,re()),P(),A("Punctuator","<",C,k),B.push("js"),w="jsxOpenTag";continue}if(x==="{"){P(),A("Punctuator","{",C,k),G++;continue}if(x==="}"){if($.length>0&&G===$[$.length-1]){$.pop(),P();let{raw:i,interp:p}=o();A(p?"TemplateMiddle":"TemplateTail",i,C,k),p&&$.push(G);continue}if(j.length>0&&G===j[j.length-1].level){let{restore:i}=j.pop();P(),A("Punctuator","}",C,k),w=i;continue}P(),A("Punctuator","}",C,k),G--;continue}if(x==="?"&&h(1)==="."&&ae(h(2))){P(),A("Punctuator","?",C,k);continue}let K=Rt.find(i=>n.startsWith(i,y));if(K){for(let i=0;i<K.length;i++)P();A("Punctuator",K,C,k);continue}_(`Unexpected character '${x}'`),P(),A("Unknown",x,C,k);}};return {scan:O,opensJsx:k=>Y.has(k),rescanLessThan:k=>{let x=Y.get(k);return x?(N(x),ee=k,O()):null}}}var Ft=new Set(["leadingComments","trailingComments","innerComments","comments"]),ze=n=>typeof n=="object"&&n!==null&&typeof n.type=="string"&&n.loc!=null&&typeof n.start=="number",We=new WeakMap;function Xt(n){let c=We.get(n);if(c)return c;let s=[];for(let a of Object.keys(n)){if(Ft.has(a))continue;let y=n[a];if(ze(y))s.push(y);else if(Array.isArray(y))for(let m of y)ze(m)&&s.push(m);}return s.sort((a,y)=>a.start-y.start),We.set(n,s),s}function Kt(n,c){let s=n,a,y;for(;;){let m=Xt(s);a=void 0,y=void 0;let E;for(let X of m){if(X.start<=c.start&&c.end<=X.end){E=X;break}if(X.end<=c.start)a=X;else if(c.end<=X.start){y=X;break}}if(!E)break;s=E;}return {enclosing:s,preceding:a,following:y}}var Ce=(n,c)=>{(n.leadingComments??(n.leadingComments=[])).push(c);},xe=(n,c)=>{(n.trailingComments??(n.trailingComments=[])).push(c);},Re=(n,c)=>{(n.innerComments??(n.innerComments=[])).push(c);};function Mt(n,c){for(let s=c;s<n.length;s++){let a=n[s];if(a!==" "&&a!==" "&&a!=="\r"&&a!==`
5
+ `&&a!=="\f")return a}return ""}var Ut=new Set([")","]","}",","]);function Le(n,c,s=""){for(let a of c){let{enclosing:y,preceding:m,following:E}=Kt(n,a),X=m==null||m.loc.end.line<a.loc.start.line,h=!X&&(E==null||a.loc.end.line<E.loc.start.line);if(X)E?Ce(E,a):m?xe(m,a):Re(y,a);else if(h)m?xe(m,a):E?Ce(E,a):Re(y,a);else {let _=Ut.has(Mt(s,a.end));m&&_?xe(m,a):E?Ce(E,a):m?xe(m,a):Re(y,a);}}}var $t=Object.prototype.hasOwnProperty,Se=(n,c)=>$t.call(n,c)?n[c]:void 0;function He(n,c,s){c==="__proto__"?Object.defineProperty(n,c,{value:s,enumerable:true,writable:true,configurable:true}):n[c]=s;}var Bt=(n=[])=>({vars:new Set(n),bounds:new Map,noCond:false,inferSink:null}),ue=(n,c)=>{let s=new Set(n.vars),a=new Map(n.bounds);for(let y of c)s.add(y.name),y.bound?a.set(y.name,{bound:y.bound}):a.delete(y.name);return {vars:s,bounds:a,noCond:n.noCond,inferSink:n.inferSink}},je=n=>({t:"var",name:n.name,...n.bound?{bound:n.bound}:{},...n.default?{default:n.default}:{}}),_t=(n,c)=>{let s=n.bounds.get(c)?.bound;return s?{t:"var",name:c,bound:s}:{t:"var",name:c}},Qe=n=>{let{peek:c,next:s,isP:a,isK:y,expectP:m,fail:E,unescape:X}=n,h=(i,p)=>{let d=n.tokens[n.pos()-1]??p;return Object.assign(i,{start:p.start,end:d.end,loc:{start:p.loc.start,end:d.loc.end}})},_=()=>{let i=n.pos(),p=n.tokens[i],d=n.tokens[i-1];return !!d&&!!p&&p.loc.start.line>d.loc.end.line},P=()=>{let i=b=>n.tokens[n.pos()+b],p=(b,...S)=>b?.type==="Punctuator"&&S.includes(b.value),d=i(1);if(p(d,")","..."))return true;if(d?.type!=="Identifier")return false;let T=i(2);return p(T,":",",","?","=")?true:p(T,")")&&p(i(3),"=>")},W=()=>{let i=n.tokens,p=[],d=0,T=false;for(let b=n.pos();b<i.length;b++){let S=i[b];if(S.type==="EOF")break;if(S.type==="Punctuator"){if(S.value==="<")d++,d===1&&(T=true);else if(S.value===">"){if(d--,d===0)break}else S.value==="("||S.value==="["||S.value==="{"?(d++,T=false):S.value===")"||S.value==="]"||S.value==="}"?(d--,T=false):S.value===","&&d===1?T=true:T=false;continue}if(d===1&&T){if(S.type==="Keyword"&&S.value==="const")continue;if(S.type==="Identifier"){p.push(S.value),T=false;continue}}T=false;}return p},A=i=>{let p=ue(i,W().map(T=>({name:T})));m("<");let d=[];for(;!a(">");){let T=c();y("const")&&E("'const' type parameters are not supported in this language; a constraint keeps the literal: '<T extends string>'");let b=c();b.type!=="Identifier"&&E("Expected type parameter name"),s();let S,D;if(y("extends")){s();let I=o(p);S=I.schema,D=I.node;}let F,M;if(a("=")){s();let I=o(p);F=I.schema,M=I.node;}d.push(h({type:"TSTypeParameter",name:b.value,...S?{bound:S}:{},...D?{boundNode:D}:{},...F?{default:F}:{},...M?{defaultNode:M}:{}},T)),a(">")||m(",");}return m(">"),d},Q=i=>{n.splitShiftLeft(),m("<");let p=[];for(;!a(">");)p.push(o(i)),a(">")||m(",");return m(">"),p},v=i=>{let p=c();return p.type==="Identifier"&&p.value===i},o=i=>{let p=c(),d=C(i);if(i.noCond||!y("extends")||_())return d;s();let T=[],b=C({...i,noCond:true,inferSink:T});m("?");let S=ue(i,T.map(M=>({name:M}))),D=o(S);m(":");let F=o(S);return {node:h({type:"TSConditionalType",checkType:d.node,extendsType:b.node,trueType:D.node,falseType:F.node},p),schema:{t:"conditional",check:d.schema,extends:b.schema,then:D.schema,else:F.schema,...T.length?{infer:T.map(M=>je({name:M}))}:{}}}},C=i=>{let p=c();a("|")&&s();let d=G(i);if(!a("|"))return d;let T=[d.node],b=[d.schema];for(;a("|");){s();let S=G(i);T.push(S.node),b.push(S.schema);}return {node:h({type:"TSUnionType",types:T},p),schema:{t:"union",of:b}}},G=i=>{let p=c();a("&")&&s();let d=$(i);if(!a("&"))return d;let T=[d.node],b=[d.schema];for(;a("&");){s();let S=$(i);T.push(S.node),b.push(S.schema);}return {node:h({type:"TSIntersectionType",types:T},p),schema:{t:"intersection",of:b}}},$=i=>{let p=c();if(v("keyof")){s();let d=$(i);return {node:h({type:"TSTypeOperator",operator:"keyof",typeAnnotation:d.node},p),schema:{t:"keyof",of:d.schema}}}if(v("readonly")){s();let d=$(i);return d.schema.t!=="array"&&d.schema.t!=="tuple"&&E("'readonly' only applies to array and tuple types"),{node:h({...d.node,readonly:true},p),schema:{...d.schema,readonly:true}}}if(v("infer")){s();let d=c();d.type!=="Identifier"&&E("Expected 'infer' variable name"),s();let T=i.inferSink;return T?(T.push(d.value),{node:h({type:"TSInferType",name:d.value},p),schema:{t:"var",name:d.value}}):E("'infer' is only allowed in the 'extends' clause of a conditional")}return u(i)},u=i=>{let p=c(),d=Y(i);for(;a("[")&&!_();)if(s(),a("]"))s(),d={node:h({type:"TSArrayType",elementType:d.node},p),schema:{t:"array",items:d.schema}};else {let T=o(i);m("]"),d={node:h({type:"TSIndexedAccessType",objectType:d.node,indexType:T.node},p),schema:{t:"index",obj:d.schema,key:T.schema}};}return d},w=(i,p,d)=>({node:h({type:"TSKeywordType",kind:p},i),schema:d}),B=i=>{let p=n.namespace?.()??null;n.typeRefs?.push(p===null?i:{...i,namespace:p});},j=(i,p,d)=>{let T=[{name:i.value,loc:i.loc}];for(;a(".");){s();let I=c();I.type!=="Identifier"&&I.type!=="Keyword"&&E("Expected a name after '.' in a qualified type name"),s(),T.push({name:I.value,loc:I.loc});}let b=T.map(I=>I.name).join("."),S=a("<")||a("<<")?Q(d):[],D=S.map(I=>I.schema),F=h({type:"TSTypeReference",typeName:b,...S.length?{typeArguments:S.map(I=>I.node)}:{}},p),M=T[T.length-1];return B({name:b,loc:{start:i.loc.start,end:M.loc.end},args:D,segments:T}),{node:F,schema:{t:"apply",name:b,args:D}}},Y=i=>{let p=c();if(y("typeof")){s();let b=c();b.type!=="Identifier"&&E("Expected a name after 'typeof' in type position"),s();let S=[b.value];for(;a(".");){s();let D=c();D.type!=="Identifier"&&D.type!=="Keyword"&&E("Expected a property name after '.' in 'typeof'"),s(),S.push(D.value);}return {node:h({type:"TSTypeQuery",exprName:S},p),schema:{t:"typeQuery",path:S}}}if(a("<")){n.rescanTypeLessThan();let b=A(i),S=ue(i,b);return N(S,p,b)}if(a("(")){if(P())return N(i,p);s();let b=o(i.noCond?{...i,noCond:false}:i);return m(")"),b}if(a("{"))return g()?k(i):x(i);if(a("["))return O(i);let d=c();if(d.type==="String"){s();let b=X(d.value.slice(1,-1));return {node:h({type:"TSLiteralType",literal:b},p),schema:{t:"literal",value:b}}}if(d.type==="Number"){s();let b=Number(d.value);return {node:h({type:"TSLiteralType",literal:b},p),schema:{t:"literal",value:b}}}if(y("true"))return s(),{node:h({type:"TSLiteralType",literal:true},p),schema:{t:"literal",value:true}};if(y("false"))return s(),{node:h({type:"TSLiteralType",literal:false},p),schema:{t:"literal",value:false}};if(y("null"))return s(),w(p,"null",{t:"null"});if(y("void"))return s(),w(p,"void",{t:"void"});if(d.type==="Identifier"){if(s(),a("."))return j(d,p,i);switch(d.value){case "string":return w(p,"string",{t:"string"});case "number":return w(p,"number",{t:"number"});case "boolean":return w(p,"boolean",{t:"boolean"});case "any":return w(p,"any",{t:"any"});case "unknown":return w(p,"unknown",{t:"unknown"});case "undefined":return w(p,"undefined",{t:"undefined"});case "never":return w(p,"never",{t:"union",of:[]});case "object":return w(p,"object",{t:"nonPrimitive"})}let b=a("<")||a("<<")?Q(i):[],S=b.map(M=>M.schema),D=b.length?b.map(M=>M.node):void 0,F=h({type:"TSTypeReference",typeName:d.value,...D?{typeArguments:D}:{}},p);return i.vars.has(d.value)&&S.length===0?{node:F,schema:_t(i,d.value)}:(B({name:d.value,loc:d.loc,args:S}),{node:F,schema:{t:"apply",name:d.value,args:S}})}n.recordError(`Expected a type but got '${d.value||d.type}'`,d);let T=n.createMissingNode({type:"TSTypeReference",typeName:""},d);return B({name:"",loc:T.loc,args:[]}),{node:T,schema:{t:"unknown"}}},ee=i=>{m("(");let p=[];for(;!a(")");){let d=c(),T=a("...");T&&s();let b=c();b.type!=="Identifier"&&E("Expected parameter name in function type"),s();let S=!T&&a("?");S&&s(),m(":");let D=o(i),F=h({type:"Identifier",name:b.value,typeAnnotationNode:D.node,...S?{optional:true}:{}},b);p.push({node:T?h({type:"RestElement",argument:F},d):F,schema:{name:b.value,type:D.schema,...S?{optional:true}:{},...T?{variadic:true}:{}}}),T&&!a(")")&&E("A rest parameter must be last in a parameter list"),a(")")||m(",");}return m(")"),p},re=(i,p)=>{let d=c(),T=n.tokens[n.pos()+1];if(!(d.type==="Identifier"&&T?.type==="Identifier"&&T.value==="is"))return o(i);let S=p.indexOf(d.value);S<0&&E(`Cannot find parameter '${d.value}' for the type predicate`),s(),s();let D=o(i);return {node:h({type:"TSTypePredicate",parameterName:d.value,typeAnnotation:D.node},d),schema:{t:"boolean"},guard:{param:S,type:D.schema}}},N=(i,p,d)=>{let T=ee(i);m("=>");let b=re(i,T.map(S=>S.schema.name));return {node:h({type:"TSFunctionType",params:T.map(S=>S.node),returnType:b.node,...d?.length?{typeParameters:[...d]}:{}},p),schema:{t:"fn",params:T.map(S=>S.schema),returns:b.schema,...b.guard?{guard:b.guard}:{},...d?.length?{typeParams:d.map(je)}:{}}}},O=i=>{let p=c();m("[");let d=[],T=[],b=[],S=[],D=()=>{let I=n.tokens[n.pos()],J=n.tokens[n.pos()+1],V=n.tokens[n.pos()+2];if(I?.type==="Identifier"&&J?.type==="Punctuator"&&(J.value===":"||J.value==="?"&&V?.type==="Punctuator"&&V.value===":"))return s(),I.value};for(;!a("]");){if(b[b.length-1]==="rest"&&E("A rest element must be last in a tuple type"),a("...")){s();let I=D();I!==void 0&&m(":"),S.push(I);let J=o(i);J.schema.t!=="array"&&E("A rest element type must be written as an array type ('...T[]')"),T.push(J.schema.items),d.push(J.node.elementType),b.push("rest");}else {let I=D(),J=false;I!==void 0&&(a("?")&&(s(),J=true),m(":")),S.push(I);let V=o(i);!J&&a("?")&&(s(),J=true),T.push(V.schema),d.push(V.node),b.push(J?"optional":"req");}a("]")||m(",");}m("]");let F=b.some(I=>I!=="req"),M=S.some(I=>I!==void 0);return {node:h({type:"TSTupleType",elementTypes:d,...F?{flags:b}:{},...M?{labels:S}:{}},p),schema:F?{t:"tuple",elements:T,flags:b}:{t:"tuple",elements:T}}},g=()=>{let i=n.tokens,p=n.pos()+1;return i[p]?.type==="Punctuator"&&(i[p]?.value==="+"||i[p]?.value==="-")&&(p++,!(i[p]?.type==="Identifier"&&i[p]?.value==="readonly"))?false:(i[p]?.type==="Identifier"&&i[p]?.value==="readonly"&&p++,i[p]?.type==="Punctuator"&&i[p]?.value==="["&&i[p+1]?.type==="Identifier"&&i[p+2]?.type==="Keyword"&&i[p+2]?.value==="in")},k=i=>{let p=c();m("{");let d=a("+")||a("-")?s().value:null,T;v("readonly")&&(s(),T=d==="+"?"+":d==="-"?"-":true),m("[");let b=c();b.type!=="Identifier"&&E("Expected mapped type key name"),s(),y("in")||E("Expected 'in' in mapped type"),s();let S=o(i);v("as")&&E("Key remapping ('as') in mapped types is not supported"),m("]");let D=a("+")||a("-")?s().value:null,F;D!==null&&!a("?")&&E("'?' expected"),a("?")&&(s(),F=D==="+"?"+":D==="-"?"-":true),m(":");let M=o(ue(i,[{name:b.value}]));return (a(";")||a(","))&&s(),m("}"),{node:h({type:"TSMappedType",key:b.value,constraint:S.node,typeAnnotation:M.node,...T!==void 0?{readonly:T}:{},...F!==void 0?{optional:F}:{}},p),schema:{t:"mapped",key:b.value,over:S.schema,body:M.schema,...F===true||F==="+"?{optional:true}:{},...F==="-"?{excludeOptional:true}:{},...T===true||T==="+"?{readonly:true}:{},...T==="-"?{excludeReadonly:true}:{}}}},x=i=>{let p=c();m("{");let d=[],T={},b,S=[];for(;!a("}");){let F=c(),M=v("readonly")&&n.tokens[n.pos()+1]?.value==="[";if(M&&s(),!M&&(a("(")||a("<"))){a("<")&&n.rescanTypeLessThan();let I=a("<")?A(i):[],J=I.length?ue(i,I):i,V=ee(J);m(":");let H=re(J,V.map(Z=>Z.schema.name));S.push({t:"fn",params:V.map(Z=>Z.schema),returns:H.schema,...H.guard?{guard:H.guard}:{},...I.length?{typeParams:I.map(je)}:{}}),d.push(h({type:"TSCallSignatureDeclaration",params:V.map(Z=>Z.node),returnType:H.node,...I.length?{typeParameters:I}:{}},F));}else if(a("[")){s(),c().type!=="Identifier"&&E("Expected index signature parameter name"),s(),m(":");let I=c();(I.type!=="Identifier"||I.value!=="string"&&I.value!=="number")&&E("Index signature parameter type must be 'string' or 'number'"),s(),m("]"),m(":");let J=o(i);b={key:I.value,value:J.schema,...M?{readonly:true}:{}},d.push(h({type:"TSIndexSignature",keyType:I.value,typeAnnotation:J.node,...M?{readonly:true}:{}},F));}else {let I=false;if(v("readonly")){let ce=n.tokens[n.pos()+1];ce&&(ce.type==="Identifier"||ce.type==="Keyword"||ce.type==="String"||ce.type==="Number")&&(s(),I=true);}let J=c(),V;if(J.type==="Identifier"||J.type==="Keyword")s(),V=J.value;else if(J.type==="String")s(),V=X(J.value.slice(1,-1));else if(J.type==="Number")s(),V=J.value;else return E("Expected property name in object type");let H=a("?");H&&s(),m(":");let Z=o(i);He(T,V,{type:Z.schema,...H?{optional:true}:{},...I?{readonly:true}:{}}),d.push(h({type:"TSPropertySignature",key:V,typeAnnotation:Z.node,...H?{optional:true}:{},...I?{readonly:true}:{}},F));}if(a(";")||a(","))s();else break}m("}");let D=h({type:"TSTypeLiteral",members:d},p);return S.length>0?Object.keys(T).length>0||b?E("Callable object types (call signatures mixed with members) are not supported"):{node:D,schema:S.length===1?S[0]:{t:"overload",signatures:S}}:{node:D,schema:{t:"object",props:T,...b?{index:b}:{}}}},K=Bt();return {parseType:()=>o(K),parseReturnType:i=>re(K,i),parseTypeParamList:()=>A(K),parseTypeInScope:i=>o(ue(K,i)),withTypeParams:(i,p)=>{let d=K;K=ue(d,i);try{return p()}finally{K=d;}}}};var le=class extends TSLiteError{constructor(s,a,y,m,E){super("parse-error",`${s} (${a.line}:${a.column})`,{position:a,index:y,loc:m,end:E});this.position=a;this.index=y;this.loc=m;this.end=E;this.name="ParseError";}},Gt=n=>{let c=n;return c!=null&&typeof c.start=="number"&&c.start===c.end&&c.start>=0},Ye=(n,c)=>Object.assign(n,{start:c.start,end:c.start,loc:{start:c.loc.start,end:c.loc.start}}),qt={"??":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(["??","||","&&"]),Wt=new Set(["class","debugger","with","enum","interface"]),Ht={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",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"},Qt={module:(n,c)=>n.type==="Identifier"&&c.type==="Punctuator"&&c.value==="{",declare:n=>n.type==="Keyword"&&["const","let","var","function","class","enum","interface"].includes(n.value)||n.type==="Identifier"&&["type","module"].includes(n.value),abstract:n=>n.type==="Keyword"&&n.value==="class"},Yt=new Set(["=","+=","-=","*=","/=","%=","**=","??=","&&=","||="]),Ze=(n,c)=>{let s=0;for(let a of n)c(a)&&(n[s++]=a);n.length=s;};function Ae(n){let c=[],s=[],a=[],y=Ie(n,e=>a.push(e),e=>c.push({code:"lex-error",...e})),m=y.scan(),E=0,X=[],h=e=>{for(;X.length>e;)X.pop()();},_=(e=E)=>{let t=m[e];if(t?.type!=="Punctuator"||t.value!=="<"||!y.opensJsx(t.start))return;let r=m.slice(e),l=c.slice(),f=a.slice();Ze(c,L=>L.code!=="lex-error"||L.index<t.start),Ze(a,L=>L.start<t.start);let R=y.rescanLessThan(t.start);m.splice(e,m.length-e,...R),X.push(()=>{m.splice(e,m.length-e,...r),c.splice(0,c.length,...l),a.splice(0,a.length,...f);});},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},r=E;m.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}}),X.push(()=>m.splice(r,2,e));},W=[],A=[],Q=false,v=(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},$=()=>v().type==="EOF",u=e=>v().type==="Punctuator"&&v().value===e,w=e=>v().type==="Keyword"&&v().value===e,B=e=>v().type==="Identifier"&&v().value===e,j=(e,t=v())=>{throw Y(e,t),new le(e,t.loc.start,t.start,t.loc,t.end)},Y=(e,t=v())=>{let r=c[c.length-1];r&&r.index===t.start||c.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},ee=(e,t)=>{s.push({code:"parse-error",message:e,position:t.loc.start,index:t.start,loc:t.loc,end:t.end});},re=()=>{c.length||c.push(...s),s.length=0;},N=e=>(u(e)||j(`Expected '${e}' but got '${v().value||v().type}'`),o()),O=(e,t)=>{let r=C()??t;return Object.assign(e,{start:t.start,end:r.end,loc:{start:t.loc.start,end:r.loc.end}})},g=(e,t,r)=>Object.assign(e,{start:t.start,end:r.end,loc:{start:t.loc.start,end:r.loc.end}}),k=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 f=e.indexOf("}",r);t+=String.fromCodePoint(parseInt(e.slice(r+2,f),16)),r=f;}else t+=String.fromCharCode(parseInt(e.slice(r+1,r+5),16)),r+=4;break;default:t+=l;}}return t},x=(e=false)=>K(e),K=(e=false)=>{let t=i(e),r=v();if(r.type==="Punctuator"&&Yt.has(r.value)){o();let l=K();return g({type:"AssignmentExpression",operator:r.value,left:t,right:l},t,l)}return t},i=(e=false)=>{let t=d(0,e);if(!u("?"))return t;o();let r=x();N(":");let l=x();return g({type:"ConditionalExpression",test:t,consequent:r,alternate:l},t,l)},p=()=>{let e=v();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=v(1);if(t.type==="Punctuator"&&t.value===">"&&e.end===t.start){let r=v(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}},d=(e,t=false)=>{let r=T();for(;;){let l=p();if(!l)break;let{op:f,consume:R}=l;if(f==="in"&&t)break;let L=Se(qt,f);if(!L||L<=e)break;if(f==="satisfies"){if(G())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(f==="as"){if(G())break;o();let U=ge();r=g({type:"TSAsExpression",expression:r,typeAnnotation:U.schema,typeAnnotationNode:U.node},r,C());continue}for(let U=0;U<R;U++)o();let q=d(f==="**"?L-1:L,t);r=g({type:zt.has(f)?"LogicalExpression":"BinaryExpression",operator:f,left:r,right:q},r,q);}return r},T=()=>{let e=v();return e.type==="Punctuator"&&(e.value==="++"||e.value==="--")?(o(),O({type:"UpdateExpression",operator:e.value,prefix:true,argument:T()},e)):w("await")?(o(),O({type:"AwaitExpression",argument:T()},e)):w("typeof")||w("void")||w("delete")||e.type==="Punctuator"&&(e.value==="!"||e.value==="-"||e.value==="+"||e.value==="~")?b(e):D()},b=e=>{o();let t=T();return u("**")&&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.`),O({type:"UnaryExpression",operator:e.value,prefix:true,argument:t},e)},S=()=>{let e=E,t=X.length,r=c.length,l=W.length,f=()=>(h(t),E=e,c.length=r,W.length=l,void 0);try{if(P(),o(),u(">"))return f();let R=[];for(;R.push(ge().schema),!!u(",");)o();return u(">")?(o(),u("(")?R:f()):f()}catch{return f()}},D=()=>{let e=pt(),t=false;for(;;)if((v().type==="Template"||v().type==="TemplateHead")&&j("Tagged templates are not supported in this language"),u("?."))if(o(),t=true,u("(")){let{args:r,close:l}=F();e=g({type:"CallExpression",callee:e,arguments:r,optional:true},e,l);}else if(u("[")){o();let r=x(),l=N("]");e=g({type:"MemberExpression",object:e,property:r,computed:true,optional:true},e,l);}else {let r=v();r.type!=="Identifier"&&r.type!=="Keyword"&&j("Expected property name after '?.'"),o();let l=O({type:"Identifier",name:r.value},r);e=g({type:"MemberExpression",object:e,property:l,computed:false,optional:true},e,l);}else if(u(".")){o();let r=v(),l;r.type==="Identifier"||r.type==="Keyword"?(o(),l=O({type:"Identifier",name:r.value},r)):(Y("Expected property name"),l=Ye({type:"Identifier",name:""},r)),e=g({type:"MemberExpression",object:e,property:l,computed:false,optional:false},e,l);}else if(u("[")){o();let r=x(),l=N("]");e=g({type:"MemberExpression",object:e,property:r,computed:true,optional:false},e,l);}else if(u("(")){let{args:r,close:l}=F();e=g({type:"CallExpression",callee:e,arguments:r,optional:false},e,l);}else if(u("<")||u("<<")){let r=S();if(!r)break;let{args:l,close:f}=F();e=g({type:"CallExpression",callee:e,arguments:l,optional:false,typeArguments:r},e,f);}else if(u("++")||u("--")){let r=o();e=g({type:"UpdateExpression",operator:r.value,prefix:false,argument:e},e,r);}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=x();return g({type:"SpreadElement",argument:t},e,t)}return x()},I=()=>{let e=v();return e.type!=="Identifier"&&j("Expected identifier"),o(),O({type:"Identifier",name:e.value},e)},J=(e=false)=>{let t=u("{")?V():u("[")?H():I();if(e&&u("?")&&(t.type!=="Identifier"&&j("A binding pattern parameter cannot be optional"),o(),t.optional=true),u(":")){o();let r=ge();t.typeAnnotation=r.schema,t.typeAnnotationNode=r.node;}return t},V=()=>{let e=N("{"),t=[];for(;!u("}");){if(u("...")){let l=o(),f=J();t.push(g({type:"RestElement",argument:f},l,f));}else {let l=I(),f,R=false;if(u(":")?(o(),f=J()):(f={...l},R=true),u("=")){o();let L=x();f=g({type:"AssignmentPattern",left:f,right:L},f,L);}t.push(g({type:"Property",key:l,value:f,kind:"init",shorthand:R,computed:false},l,f));}u("}")||N(",");}let r=N("}");return g({type:"ObjectPattern",properties:t},e,r)},H=()=>{let e=N("["),t=[];for(;!u("]");){if(u(",")){t.push(null),o();continue}if(u("...")){let l=o(),f=J();t.push(g({type:"RestElement",argument:f},l,f));}else {let l=J();if(u("=")){o();let f=x();l=g({type:"AssignmentPattern",left:l,right:f},l,f);}t.push(l);}u("]")||N(",");}let r=N("]");return g({type:"ArrayPattern",elements:t},e,r)},Z=()=>{let e=X.length,t=ce();return t||h(e),t},ce=()=>{let e=0,t="name";for(let r=E;r<m.length;r++){let l=m[r];if(l.type==="EOF")return false;if(l.type==="Punctuator"){if(l.value==="<"&&t==="type"){_(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 f=m[r+1];return !f||f.type!=="Punctuator"?false:f.value==="=>"?true:f.value===":"?tt(r+2):false}}}return false},tt=e=>{let t=0;for(let r=e;r<m.length;r++){let l=m[r];if(l.type==="EOF")return false;if(l.type==="Punctuator")if(l.value==="<"&&_(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},nt=()=>{N("(");let e=[];for(;!u(")");){if(u("...")){let t=o(),r=J();e.push(g({type:"RestElement",argument:r},t,r));}else {let t=J(true);if(u("=")){t.optional&&j("Parameter cannot have question mark and initializer"),o();let r=x();t=g({type:"AssignmentPattern",left:t,right:r},t,r);}e.push(t);}u(")")||N(",");}return N(")"),e},rt=e=>{if(e.type==="Identifier")return e.name;let t=e.left;return e.type==="AssignmentPattern"&&t?.type==="Identifier"?t.name:null},me=(e,t,r=[])=>ft(r,()=>ot(e,t,r)),ot=(e,t,r)=>{let l=u("(")?nt():[I()],f,R,L;if(u(":")){o();let U=ut(l.map(rt));f=U.schema,R=U.node,L=U.guard;}N("=>");let q=u("{")?fe():x();return O({type:"ArrowFunctionExpression",params:l,body:q,async:e,expression:q.type!=="BlockStatement",generator:false,...f?{returnType:f,returnTypeNode:R}:{},...L?{returnGuard:L}:{},...r.length?{typeParameters:[...r]}:{}},t)},st=()=>{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("]"))},at=()=>{let e=N("{"),t=[];for(;!u("}");){if(u("...")){let r=o(),l=x();t.push(g({type:"SpreadElement",argument:l},r,l));}else {let r=v(),l,f=false;if(u("["))f=true,o(),l=x(),N("]");else if(r.type==="String")o(),l=O({type:"Literal",value:k(r.value.slice(1,-1)),raw:r.value},r);else if(r.type==="Number")o(),l=O({type:"Literal",value:Number(r.value),raw:r.value},r);else if(r.type==="Identifier"||r.type==="Keyword")o(),l=O({type:"Identifier",name:r.value},r);else return j("Invalid property key");if(u(":")){o();let R=x();t.push(g({type:"Property",key:l,value:R,kind:"init",shorthand:false,computed:f},r,R));}else t.push(g({type:"Property",key:l,value:l,kind:"init",shorthand:true,computed:false},r,l));}u("}")||N(",");}return g({type:"ObjectExpression",properties:t},e,N("}"))},he=(e,t)=>({type:"TemplateElement",value:{raw:e,cooked:k(e)},tail:t}),it=e=>{o();let t=[he(e.value,false)],r=[];for(;;){r.push(x());let l=v();if(l.type==="TemplateMiddle")o(),t.push(he(l.value,false));else if(l.type==="TemplateTail"){o(),t.push(he(l.value,true));break}else j("Expected `}` to close template interpolation");}return O({type:"TemplateLiteral",quasis:t,expressions:r},e)},de=()=>{let e=v();return e.type!=="Identifier"&&j(`Expected JSX identifier but got '${e.value||e.type}'`),O({type:"JSXIdentifier",name:o().value},e)},Oe=()=>{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)}`,lt=()=>{let e=v();if(e.type==="String")return o(),O({type:"Literal",value:k(e.value.slice(1,-1)),raw:e.value},e);if(u("{")){let t=o(),r=K(),l=N("}");return g({type:"JSXExpressionContainer",expression:r},t,l)}return u("<")?ke():j(`Invalid JSX attribute value '${e.value||e.type}'`)},ct=()=>{let e=[];for(;!u(">")&&!u("/>")&&!$();){if(u("{")){let l=o();N("...");let f=K(),R=N("}");e.push(g({type:"JSXSpreadAttribute",argument:f},l,R));continue}let t=de();if(u(":")){o();let l=de();t=g({type:"JSXNamespacedName",namespace:t,name:l},t,l);}let r=null;u("=")&&(o(),r=lt()),e.push(g({type:"JSXAttribute",name:t,value:r},t,r??t));}return e},De=()=>{let e=[];for(;!(u("</")||$());){let t=v();if(t.type==="JSXText")o(),e.push(O({type:"JSXText",value:t.value,raw:t.value},t));else if(u("{")){let r=o();if(u("}")){let l=o(),f=O({type:"JSXEmptyExpression"},r);e.push(g({type:"JSXExpressionContainer",expression:f},r,l));}else if(u("...")){o();let l=K(),f=N("}");e.push(g({type:"JSXSpreadChild",expression:l},r,f));}else {let l=K(),f=N("}");e.push(g({type:"JSXExpressionContainer",expression:l},r,f));}}else u("<")?e.push(ke()):j(`Unexpected token in JSX children '${t.value||t.type}'`);}return e},ke=()=>{let e=N("<");if(u(">")){let ne=o(),pe=g({type:"JSXOpeningFragment"},e,ne),Nt=De(),Et=N("</"),_e=N(">"),It=g({type:"JSXClosingFragment"},Et,_e);return g({type:"JSXFragment",openingFragment:pe,children:Nt,closingFragment:It},e,_e)}let t=Oe(),r=ct();if(u("/>")){let ne=o(),pe=g({type:"JSXOpeningElement",name:t,attributes:r,selfClosing:true},e,ne);return g({type:"JSXElement",openingElement:pe,children:[],closingElement:null},e,ne)}let l=N(">"),f=g({type:"JSXOpeningElement",name:t,attributes:r,selfClosing:false},e,l),R=De(),L=N("</"),q=v(),U=Oe();oe(U)!==oe(t)&&j(`JSX closing tag </${oe(U)}> does not match opening <${oe(t)}>`,q);let z=N(">"),te=g({type:"JSXClosingElement",name:U},L,z);return g({type:"JSXElement",openingElement:f,children:R,closingElement:te},e,z)},pt=()=>{let e=v();if(w("async")){let t=v(1);if(t.value==="("||t.type==="Identifier")return o(),me(true,e);if(t.value==="<"){o();let r=Je(e,true);if(r)return r}return j("Unexpected 'async'")}if(u("(")&&Z()||e.type==="Identifier"&&v(1).type==="Punctuator"&&v(1).value==="=>")return me(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:k(e.value.slice(1,-1)),raw:e.value},e);if(e.type==="Template")return o(),O({type:"TemplateLiteral",expressions:[],quasis:[he(e.value,true)]},e);if(e.type==="TemplateHead")return it(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"?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(),O({type:"Identifier",name:e.value},e);if(u("(")){o();let t=x();return N(")"),t}return u("[")?st():u("{")?at():u("<")?Je(e)??ke():j(`Unexpected token '${e.value||e.type}'`)},Je=(e,t=false)=>{let r=E,l=X.length,f=c.length,R=s.length,L=W.length,q=()=>(h(l),E=r,c.length=f,s.length=R,W.length=L,void 0),U=v(1);U.type==="Keyword"&&U.value==="const"&&we();try{let z=we();return !z.length||!u("(")?q():me(t,e,z)}catch{return q()}},{parseType:ge,parseReturnType:ut,parseTypeParamList:we,parseTypeInScope:dt,withTypeParams:ft}=Qe({rescanTypeLessThan:_,splitShiftLeft:P,tokens:m,pos:()=>E,peek:v,next:o,isP:u,isK:w,expectP:N,fail:j,recordError:Y,createMissingNode:Ye,unescape:k,typeRefs:W,namespace:()=>A.length?A.join("."):null}),Fe=()=>{let e=o(),t=I(),r=[];u("<")&&(r=we()),N("=");let l=dt(r),f=g({type:"TSTypeAliasDeclaration",id:t,...r.length?{typeParameters:[...r]}:{},typeAnnotation:l.schema,typeNode:l.node},e,C());return u(";")&&o(),f},Xe=(e,t)=>t.loc.start.line===e.loc.end.line,Pe=(e=0)=>v(e).type==="Identifier"&&v(e).value==="namespace"&&v(e+1).type==="Identifier"&&Xe(v(e),v(e+1)),Ke=()=>B("declare")&&Xe(v(),v(1))&&Pe(1),Me=()=>{let e=v(),t=B("declare");return t&&o(),o(),Ue(e,t)},Ue=(e,t)=>{let r=I();A.push(r.name);let l=Q;t&&(Q=true);try{let f;if(u("."))o(),f=Ue(v(),!1);else {let R=N("{"),L=Ee(()=>u("}"));f=g({type:"TSModuleBlock",body:L},R,N("}"));}return g({type:"TSModuleDeclaration",id:r,body:f,...t?{declare:!0}:{}},e,f)}finally{Q=l,A.pop();}},se=()=>{let e=v();if(e.type==="Identifier"&&e.value==="type"&&v(1).type==="Identifier"&&v(2).type==="Punctuator"&&(v(2).value==="="||v(2).value==="<"))return Fe();if(Pe()||Ke())return Me();if(w("const")||w("let")||w("var")){let f=$e();return u(";")&&o(),f}if(w("if"))return xt();if(w("for"))return gt();if(w("while"))return vt();if(w("do"))return Tt();if(w("break")||w("continue"))return bt();if(w("return"))return St();if(w("throw"))return kt();if(w("try"))return wt();if(w("switch"))return Pt();if(w("import"))return mt();if(w("export"))return ht();if(u("{"))return fe();if((w("function")||w("async")&&v(1).type==="Keyword"&&v(1).value==="function")&&j("Function declarations are not supported \u2014 use 'const fn = () => \u2026'"),u(";"))return o(),O({type:"EmptyStatement"},e);if(e.type==="Keyword"&&Wt.has(e.value)||e.type==="Identifier"&&Se(Qt,e.value)?.(v(1),v(2))===true){let f=Se(Ht,e.value);j(`'${e.value}' is not supported in this language`+(f?` \u2014 ${f}`:""));}let r=x(),l=u(";")?o():C();return g({type:"ExpressionStatement",expression:r},r,l)},$e=()=>{let e=o(),t=e.value,r=()=>{let f=J(),R=null;return u("=")?(o(),R=x()):t==="const"&&!Q&&ee("'const' declarations must be initialized",f),g({type:"VariableDeclarator",id:f,init:R},f,R??f)},l=[r()];for(;u(",");)o(),l.push(r());return g({type:"VariableDeclaration",kind:t,declarations:l},e,l[l.length-1])},yt=()=>{let e=v();return e.type!=="String"&&j("Expected module specifier string"),o(),O({type:"Literal",value:k(e.value.slice(1,-1)),raw:e.value},e)},mt=()=>{let e=o(),t=[],r;if(B("type")){let f=v(1);(f.type==="Punctuator"&&(f.value==="{"||f.value==="*")||f.type==="Identifier"&&f.value!=="from")&&(o(),r="type");}if(v().type!=="String"){if(v().type==="Identifier"){let f=I();t.push(g({type:"ImportDefaultSpecifier",local:f},f,f)),u(",")&&o();}if(u("*")){let f=o();B("as")||j("Expected 'as' after '*' in import"),o();let R=I();t.push(g({type:"ImportNamespaceSpecifier",local:R},f,R));}else if(u("{")){for(o();!u("}")&&!$();){let f;B("type")&&v(1).type==="Identifier"&&v(1).value!=="as"&&(o(),f="type");let R=I(),L=R;if(B("as")&&(o(),L=I()),t.push(g({type:"ImportSpecifier",imported:R,local:L,...f?{importKind:f}:{}},R,L)),u(","))o();else break}N("}");}B("from")||j("Expected 'from' in import declaration"),o();}let l=yt();return u(";")&&o(),O({type:"ImportDeclaration",specifiers:t,source:l,...r?{importKind:r}:{}},e)},ht=()=>{let e=o();if(B("type")&&v(1).type==="Identifier"){let t=Fe();return O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(Pe()||Ke()){let t=Me();return O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(w("default")){o();let t=x();return u(";")&&o(),O({type:"ExportDefaultDeclaration",declaration:t},e)}if(w("const")||w("let")||w("var")){let t=$e();return u(";")&&o(),O({type:"ExportNamedDeclaration",declaration:t,specifiers:[],source:null},e)}if(u("{")){o();let t=[];for(;!u("}")&&!$();){let r=I(),l=r;if(B("as")&&(o(),l=I()),t.push(g({type:"ExportSpecifier",local:r,exported:l},r,l)),u(","))o();else break}return N("}"),u(";")&&o(),O({type:"ExportNamedDeclaration",declaration:null,specifiers:t,source:null},e)}return j("Expected 'const', 'type', 'namespace', '{', or 'default' after 'export'")},Be=()=>v().type==="Identifier"&&v().value==="of",Ne=()=>w("in"),gt=()=>{let e=o();N("(");let t=null,r=null;if(!u(";"))if(w("const")||w("let")||w("var")){let L=o(),q=()=>{let z=I();if(u(":")){o();let te=ge();z.typeAnnotation=te.schema,z.typeAnnotationNode=te.node;}return z},U=q();if(Be()||Ne()){let z=g({type:"VariableDeclarator",id:U,init:null},U,U);r=g({type:"VariableDeclaration",kind:L.value,declarations:[z]},L,U);}else {let z=ne=>{let pe=null;return u("=")?(o(),pe=x(true)):L.value==="const"&&ee("'const' declarations must be initialized",ne),g({type:"VariableDeclarator",id:ne,init:pe},ne,pe??ne)},te=[z(U)];for(;u(",");)o(),te.push(z(q()));t=g({type:"VariableDeclaration",kind:L.value,declarations:te},L,te[te.length-1]);}}else {let L=x(true);Be()||Ne()?r=L:t=L;}if(r){let L=Ne();o();let q=x();N(")");let U=se();return g(L?{type:"ForInStatement",left:r,right:q,body:U}:{type:"ForOfStatement",left:r,right:q,body:U,await:false},e,U)}N(";");let l=u(";")?null:x();N(";");let f=u(")")?null:x();N(")");let R=se();return g({type:"ForStatement",init:t,test:l,update:f,body:R},e,R)},Tt=()=>{let e=o(),t=se();w("while")||j("Expected 'while' after the 'do' body"),o(),N("(");let r=x(),l=N(")");return u(";")&&o(),g({type:"DoWhileStatement",body:t,test:r},e,l)},bt=()=>{let e=o(),t=e.value==="break"?"BreakStatement":"ContinueStatement",r=u(";")?o():C();return g({type:t,label:null},e,r)},vt=()=>{let e=o();N("(");let t=x();N(")");let r=se();return g({type:"WhileStatement",test:t,body:r},e,r)},xt=()=>{let e=o();N("(");let t=x();N(")");let r=se(),l=null;return w("else")&&(o(),l=se()),g({type:"IfStatement",test:t,consequent:r,alternate:l},e,l??r)},St=()=>{let e=o(),t=null;!u(";")&&!u("}")&&!$()&&(t=x());let r=u(";")?o():C();return g({type:"ReturnStatement",argument:t},e,r)},kt=()=>{let e=o(),t=x(),r=u(";")?o():C();return g({type:"ThrowStatement",argument:t},e,r)},wt=()=>{let e=o(),t=fe(),r=null,l=null;if(w("catch")){let f=o(),R=null;u("(")&&(o(),R=I(),N(")"));let L=fe();r=g({type:"CatchClause",param:R,body:L},f,L);}return w("finally")&&(o(),l=fe()),!r&&!l&&j("'try' requires a 'catch' or 'finally' clause"),g({type:"TryStatement",block:t,handler:r,finalizer:l},e,l??r??t)},Pt=()=>{let e=o();N("(");let t=x();N(")"),N("{");let r=[];for(;!u("}")&&!$();){let f=v(),R=null;w("case")?(o(),R=x()):w("default")?o():j("Expected 'case' or 'default' in switch"),N(":");let L=[];for(;!u("}")&&!w("case")&&!w("default")&&!$();)L.push(se());r.push(g({type:"SwitchCase",test:R,consequent:L},f,C()??f));}let l=N("}");return g({type:"SwitchStatement",discriminant:t,cases:r},e,l)},fe=()=>{let e=N("{"),t=Ee(()=>u("}"));return g({type:"BlockStatement",body:t},e,N("}"))},Ee=e=>{let t=[];for(;!e()&&!$();){if(v().type==="Unknown"){o();continue}try{t.push(se());}catch(r){if(!(r instanceof le))throw r;$()||o();}}return t};return {parseExpr:x,parseProgram:()=>{let e=v(),t=Ee(()=>false);return re(),g({type:"Program",sourceType:"module",body:t,...W.length?{typeRefs:W}:{},...a.length?{comments:a}:{},...c.length?{parseDiagnostics:c}:{}},e,C()??e)},eof:$,fail:j,recordError:Y,settleGrammar:re,diagnostics:c}}function et(n){let c=Ae(n),s=c.parseProgram(),a=s.comments;return a?.length&&Le(s,a,n),{ast:s,diagnostics:c.diagnostics}}function Zt(n){let{ast:c,diagnostics:s}=et(n),a=s[0];if(a){let y=a.code==="lex-error"?ie:le;throw new y(a.message,a.position,a.index,a.loc,a.end)}return c}function en(n){let c=Ae(n),s=c.parseExpr();c.eof()||c.fail("Unexpected token after expression"),c.settleGrammar();let a=c.diagnostics[0];if(a){let y=a.code==="lex-error"?ie:le;throw new y(a.message,a.position,a.index,a.loc,a.end)}return s}function tn(n){let c=Ae(n),s;try{s=c.parseExpr(),c.eof()||c.recordError("Unexpected token after expression");}catch(a){if(!(a instanceof le)&&!(a instanceof ie))throw a}return c.settleGrammar(),{ast:s,diagnostics:c.diagnostics}}var nn="1.9.0";export{qe as KEYWORDS,ie as LexError,le as ParseError,Le as attachComments,Gt as nodeIsMissing,Zt as parse,en as parseExpression,tn as parseExpressionTolerant,et as parseTolerant,Jt as tokenize,nn 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.9.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.4.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/capability": "1.4.0",
47
+ "@tslite/checker": "1.8.0",
48
+ "@tslite/codegen": "1.4.0",
49
+ "@tslite/interpret": "1.4.0"
50
50
  },
51
51
  "scripts": {
52
52
  "build": "tsup",