@tslite/parser 1.9.0 → 1.10.0

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