@tslite/parser 1.6.0 → 1.7.0

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