@tslite/parser 1.5.0 → 1.5.1

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