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