@xaendar/compiler 0.9.12 → 0.9.14
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/compiler.js +3 -2
- package/package.json +3 -3
package/dist/compiler.js
CHANGED
|
@@ -15,7 +15,8 @@ Found character ${e.currentChar.value}`}let s=i?39:34;for(;t;)e.peek()===s?(e.ad
|
|
|
15
15
|
`,"");return{node:o}}function xt(e,n,t){if(!ir(e))throw sr(e);if(or(e,r=>xt(r,n,t)),t.length)throw t[0].message}function ir(e){switch(e.kind){case m.StringLiteral:case m.NumericLiteral:case m.BigIntLiteral:case m.TrueKeyword:case m.FalseKeyword:case m.NullKeyword:case m.UndefinedKeyword:case m.Identifier:case m.PropertyAccessExpression:case m.ElementAccessExpression:case m.CallExpression:case m.BinaryExpression:case m.EqualsEqualsToken:case m.EqualsEqualsEqualsToken:case m.ExclamationEqualsToken:case m.ExclamationEqualsEqualsToken:case m.LessThanToken:case m.LessThanEqualsToken:case m.GreaterThanToken:case m.GreaterThanEqualsToken:case m.PlusToken:case m.MinusToken:case m.AsteriskToken:case m.SlashToken:case m.PercentToken:case m.AsteriskAsteriskToken:case m.AmpersandAmpersandToken:case m.BarBarToken:case m.QuestionQuestionToken:case m.QuestionDotToken:case m.QuestionToken:case m.ColonToken:case m.AmpersandToken:case m.BarToken:case m.CaretToken:case m.LessThanLessThanToken:case m.GreaterThanGreaterThanToken:case m.GreaterThanGreaterThanGreaterThanToken:case m.InstanceOfKeyword:case m.InKeyword:case m.PrefixUnaryExpression:case m.PostfixUnaryExpression:case m.TypeOfExpression:case m.VoidExpression:case m.ConditionalExpression:case m.ParenthesizedExpression:case m.TemplateExpression:case m.NoSubstitutionTemplateLiteral:case m.TemplateHead:case m.TemplateMiddle:case m.TemplateTail:case m.TemplateSpan:case m.ArrayLiteralExpression:case m.ObjectLiteralExpression:case m.PropertyAssignment:case m.ShorthandPropertyAssignment:case m.SpreadAssignment:case m.SpreadElement:case m.TaggedTemplateExpression:case m.SyntaxList:return!0;default:return!1}}function sr(e){switch(e.kind){case m.AwaitExpression:return"'await' is not allowed inside template expressions.";case m.YieldExpression:return"'yield' is not allowed inside template expressions.";case m.NewExpression:return"'new' is not allowed inside template expressions.";case m.ArrowFunction:case m.FunctionExpression:return"Function expressions are not allowed inside template expressions.";case m.BinaryExpression:return ar(e.operatorToken.kind)?"Assignments are not allowed inside template expressions. Use @const to declare local template variables instead.":`'${m[e.kind]}' is not allowed inside template expressions.`;default:return`'${m[e.kind]}' is not allowed inside template expressions.`}}function ar(e){return e>=m.FirstAssignment&&e<=m.LastAssignment}function ee(e,n,t){let r=t.span.start;return e.advance(),{type:4,expression:O(t.parts[0]).node,span:{start:r,end:e.getCurrentToken().value.span.end}}}function Et(e,n,t){let r=t.span.start;e.advance();let o=t.parts[0],i=e.peek();if(i.type===5||i.type===4||i.type===7)return{type:1,name:o,value:"true",span:{start:r,end:e.getCurrentToken().value.span.end}};if(i.type===11||i.type===10){let s=ee(e,n,i);return{type:1,name:o,value:s,span:{start:r,end:e.getCurrentToken().value.span.end}}}if(i.type!==6)throw`Attribute value missing for ${o} in: ${o}`;return e.advance(),{type:1,name:o,value:i.parts[0],span:{start:r,end:e.getCurrentToken().value.span.end}}}function Ct(e,n,t){let r=t.span.start;e.advance();let o=t.parts[0],i=e.peek();if(i.type!==8)throw`Invalid event format for ${o}`;e.advance();let s=e.getCurrentToken().value.span.end,a=new Array;for(;e.peek().type===9;)e.advance(),a.push(O(e.getCurrentToken().value.parts[0]).node),s=e.getCurrentToken().value.span.end;return{type:2,name:o,handler:i.parts[0],parameters:a,span:{start:r,end:s}}}function kt(e,n,t){e.advance();let r=t.parts[0],o=new Array,i=new Array,s=!0;for(;s;){let p=e.peek();switch(p.type){case 5:o.push(Et(e,n,p));break;case 7:i.push(Ct(e,n,p));break;default:s=!1}}let a=e.peek().type;switch(a){case 3:e.advance();break;case 2:return e.advance(),{type:0,tagName:r,attributes:o,events:i,children:[]};default:throw new Error(`Unexpected State ${a}`)}let c=new Array;for(;!pr(e,r);){let p=n();p&&c.push(p)}return e.advance(),{type:0,tagName:r,attributes:o,events:i,children:c}}function pr(e,n){let t=e.peek();switch(t.type){case 24:throw new Error(`Expected closing tag ${n}`);case 4:return t.parts[0]===n;default:return!1}}import{slice as te}from"@xaendar/common";import{createSourceFile as cr,isExpressionStatement as mr,isIdentifier as lr,ScriptTarget as fr}from"typescript";function D(e,n){let t=new Array;for(;e.peek().type!==21;){let r=n();r&&t.push(r)}return e.advance(),t}function gt(e,n,t){e.advance();let r=e.peek();if(r.type!==19)throw`Expected CONDITION after FOR, got ${T[r.type]}`;let o=ur(r.parts[0],0);e.advance(2);let i=D(e,n);return{type:8,...o,children:i}}function ur(e,n){let t=Tr(e);if(t.length<2)throw'@for requires at least "item of iterable; track expr".';let r=t[0].trim(),o=r.indexOf(" of ");if(o===-1)throw'@for expression must be in the form "item of iterable".';let i=te(r,0,o).trim(),s=te(r,o+4).trim();if(!Nt(i))throw`'${i}' is not a valid item alias.`;let a=O(s),c=t[1].trim();if(!c.startsWith("track "))throw'Second section of @for must start with "track".';let p=te(c,6).trim(),u=O(p),d=new Map;if(t.length>=3&&t[2]!==void 0){let f=t[2].trim(),N=n+e.indexOf(t[2]);dr(f,N,d)}return{itemAlias:i,iterableExpression:a.node,iterableSource:s,trackExpression:u.node,trackSource:p,implicitAliases:d}}function dr(e,n,t){let r=e.split(","),o=0,i=new Set(["$index","$last","$first","$even","$odd"]);for(let s=0;s<r.length;s++){let a=r[s],c=a.trim(),p=c.indexOf("=");if(p===-1)throw`Invalid alias declaration '${c}'. Expected '$implicit = alias'.`;o+=a.length+1;let u=te(c,0,p).trim(),d=te(c,p+1).trim();if(!(N=>i.has(N))(d))throw`'${d}' is not a known implicit variable. Known variables: ${[...i].join(", ")}.`;if(o+=a.length+1,!Nt(u))throw`'${u}' is not a valid alias identifier.`;if(o+=a.length+1,t.has(d))throw`'${d}' is already aliased in this @for expression.`;t.set(d,u),o+=a.length+1}}function Tr(e){let n=new Array,t="",r=0,o;for(let i=0;i<e.length;i++){let s=e[i];if(!(!t&&s===" ")){if(o){t+=s,s===o&&e[i-1]!=="\\"&&(o=null);continue}if(s==='"'||s==="'"||s==="`"){o=s,t+=s;continue}if(s==="("||s==="["||s==="{"){r++,t+=s;continue}if(s===")"||s==="]"||s==="}"){r--,t+=s;continue}if(s===";"&&r===0){n.push(t),t="";continue}t+=s}}return t.trim().length&&n.push(t),n}function Nt(e){if(!e.length)return!1;let t=cr("__id.ts",e,fr.ESNext,!1).statements[0];return!!t&&mr(t)&&lr(t.expression)&&t.expression.text===e}function Lt(e,n,t){return At(e,n,t)}function hr(e,n,t){switch(t.type){case 15:return At(e,n,t);case 14:let r=t.span.start;e.advance(2);let o=D(e,n);return{type:6,children:o,span:{start:r,end:e.getCurrentToken().value.span.end}}}}function At(e,n,t){let r=t.span.start;e.advance();let o=e.peek();if(o.type!==19)throw`Expected CONDITION after ${T[t.type]}, got ${T[o.type]}`;e.advance(2);let i=o.parts[0],s=O(i),a=D(e,n),c=null,p=e.peek();return(p.type===15||p.type===14)&&(c=hr(e,n,p)),{type:t.type===12?5:7,condition:i,conditionNode:s.node,children:a,alternate:c,span:{start:r,end:e.getCurrentToken().value.span.end}}}function It(e,n,t){let r=new Array;for(;e.peek().type===22;){e.advance();let o=e.getCurrentToken().value.parts[0],i=xr(o);r.push(i)}return e.advance(),{type:11,specifiers:r,path:e.getCurrentToken().value.parts[0]}}function xr(e){let n=e.trim(),t=n.match(/^\*\s+as\s+([A-Za-z_$][\w$]*)$/);if(t)return{imported:"*",local:t[1]};let r=n.match(/^default\s+as\s+([A-Za-z_$][\w$]*)$/);if(r)return{imported:"default",local:r[1]};let o=n.match(/^([A-Za-z_$][\w$]*)(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);if(o)return{imported:o[1],local:o[2]??o[1]};throw`Invalid import specifier "${e}".`}function yt(e,n,t){e.advance();let r=e.peek();if(r.type!==19)throw`Expected CONDITION after SWITCH, got ${T[r.type]}`;let o=O(r.parts[0]).node;e.advance(2);let i=new Array;for(;e.peek().type!==21;){let s=e.peek();switch(s.type){case 17:let a=s.span.start,c=new Array;do{e.advance();let f=e.peek();if(f.type!==19)throw"Expected CONDITION after CASE";c.push(f.parts[0]),e.advance()}while(e.peek().type!==20);e.advance();let p=D(e,n);i.push({type:10,condition:c,children:p,span:{start:a,end:e.getCurrentToken().value.span.end}});break;case 18:let u=s.span.start;e.advance(2);let d=D(e,n);i.push({type:10,condition:null,children:d,span:{start:u,end:e.getCurrentToken().value.span.end}});break}}return e.advance(),{type:9,expression:o,children:i}}function vt(e,n,t){return e.advance(),{type:3,value:t.parts[0]}}var le=class{constructor(n,t){this._input=n;this._cursor=new me(this._input,t)}_input;_cursor;_states={0:vt,11:ee,10:ee,1:kt,12:Lt,13:gt,16:yt,22:It};parse(){let n=new Array;for(;this._cursor.peek().type!==24;){let t=this.parseNode();t&&n.push(t)}return n}parseNode(){let n=this._cursor.peek();if(n.type===24)return;let t=n.span.start;try{let r=this._states[n.type];if(!r)throw`No transition function for token type ${T[n.type]}`;let o=r(this._cursor,this.parseNode.bind(this),n),i=this._cursor.getCurrentToken().value,s="span"in i?i.span.end:n.span.end;return{...o,span:o.span??{start:t,end:s}}}catch(r){let o=r instanceof Error?r.message:r,i=this._cursor.peek(),s=i.type!==24?i.span.end:void 0;throw`${this._cursor.getPositionFromCharacterIndex(t+1)} - ${o}
|
|
16
16
|
---> ${Er(this._input,t,s)}`}}};import{slice as Gr}from"@xaendar/common";var Y=class extends g{_imports=new Array;addImport(n){this._imports.push(n)}getImportBySelector(n){return this._imports.find(t=>t.type==="component"&&t.selectors.includes(n))}};function A(e,n){return{text:e,span:n}}function I(...e){let n="",t=new Array;for(let r of e)if(typeof r=="string")n=`${n}${r}`;else{let o=n.length;n=`${n}${r.text}`,t.push({columnStart:o,columnEnd:n.length,original:r.span})}return t.length?{text:n,mappings:t}:{text:n}}function h(e){return{text:e}}function y(e){return e.map(n=>({text:" ".repeat(2)+n.text,mappings:n.mappings?.map(t=>({...t,columnStart:t.columnStart+2,columnEnd:t.columnEnd+2}))}))}function St(e,n,t){let r=new Array;if(gr(e.tagName)){let i=t.getImportBySelector(e.tagName);if(!i)throw new Error(`${e.tagName} selector is not associated to any WebComponent imported in the template`,{cause:e.span});r.push(...Cr(e,i,t))}else r.push(...kr(e,t));let o=e.children;for(let i=0;i<o.length;i++)r.push(...n(o[i],t));return r}function Cr(e,n,t){let r=new Array,o=new Set(n.properties.entries().filter(([a,c])=>c.required).map(([a])=>a)),i=e.attributes;for(let a=0;a<i.length;a++){let{name:c,value:p}=i[a],u=n.properties.get(c);u&&(o.delete(c),r.push(h("{"),...y(typeof p=="object"?[I("(",A(x(p.expression,t,{resolver:"root"}),p.span),`) satisfies ${u.type};`)]:[h("let x!: string"),h(`x satisfies ${u.type};`)]),h("}")))}if(o.size)throw new Error(`${e.tagName} is missing the following required properties:
|
|
17
17
|
\u25CF ${Array.from(o.values()).join(`
|
|
18
|
-
\u25CF `)}`,{cause:e.span});let s=e.events;for(let a=0;a<s.length;a++){let{name:c,handler:p,parameters:u}=s[a],d=n.events.get(c);if(!d)throw new Error(`Unknown event "${c}" on <${e.tagName}> (${n.className} has no @Event with this name).`,{cause:e.span});let f=new g([],t);f.addUnresolvableIdentifier("$event");let N=u.map(v=>x(v,f,{resolver:"root"})).join(", ");r.push(h("{")),d.type!=="void"&&r.push(...y([h(`let $event!: CustomEvent<${d.type}>;`)])),r.push(...y([I(A(`root.${p}(${N});`,s[a].span))])),r.push(h("}"))}return r}function kr(e,n){let t=new Array,r=e.attributes;for(let i=0;i<r.length;i++){let{value:s}=r[i];typeof s!="string"&&t.push(I(A(`${x(s.expression,n,{resolver:"root"})};`,s.span)))}let o=e.events;for(let i=0;i<o.length;i++){let{handler:s,parameters:a}=o[i],c=new g([],n);c.addUnresolvableIdentifier("$event");let p=a.map(u=>x(u,c,{resolver:"root"})).join(", ");t.push(I(A(`root.${s}(${p});`,o[i].span)))}return t}function gr(e){return/^[a-z][a-z0-9._\-]*-[a-z0-9._\-]*$/.test(e)}function _t(e,n,t){let r=new Y([],t),o=re(e,"$index"),i=re(e,"$first"),s=re(e,"$last"),a=re(e,"$even"),c=re(e,"$odd"),p=[o,i,s,a,c,e.itemAlias];for(let d=0;d<p.length;d++)r.addUnresolvableIdentifier(p[d]);let u=new Array;return u.push(I(`for (const ${e.itemAlias} of root.`,A(e.iterableSource,e.span),") {")),u.push(...y([h(`let ${o}!: number;`),h(`let ${i}!: boolean;`),h(`let ${s}!: boolean;`),h(`let ${a}!: boolean;`),h(`let ${c}!: boolean;`),I(A(`${x(e.trackExpression,t,{skipResolution:!0})};`,e.span)),...e.children.flatMap(d=>n(d,r))])),u.push(h("}")),u}function re(e,n){return e.implicitAliases.get(n)??n}function bt(e,n,t){let r=new Array,o=x(e.conditionNode,t,{resolver:"root"});r.push(I("if (",A(o,e.span),") {")),r.push(...y(e.children.flatMap(s=>n(s,t)))),r.push(h("}"));let i=e.alternate;for(;i?.type===7;){let s=x(i.conditionNode,t,{resolver:"root"});r.push(I("else if (",A(s,i.span),") {")),r.push(...y(i.children.flatMap(a=>n(a,t)))),r.push(h("}")),i=i.alternate}return i&&(r.push(h("else {")),r.push(...y(i.children.flatMap(s=>n(s,t)))),r.push(h("}"))),r}function Rt(e,n,t){let r=e.path,o=Ot(r),i=new Array;for(let s=0;s<e.specifiers.length;s++){let{imported:a,local:c}=e.specifiers[s];switch(a){case"*":i.push(h(`let ${c}!: typeof import('${o}');`));break;case"default":i.push(h(`let ${c}!: typeof import('${o}')['default'];`));break;default:let p=Ot(a);i.push(h(`let ${c}!: typeof import('${o}')['${p}'];`));break}}return i}function Ot(e){return e.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}function Ft(e,n,t){let r=x(e.expression,t,{resolver:"root"}),o=[I("switch (",A(r,e.span),") {")],i=e.children;for(let s=0;s<i.length;s++){let a=i[s],c=a.condition;if(c?.length)for(let p=0;p<c.length;p++)o.push(h(` case ${c[p]}:`));else o.push(h(" default:"));o.push(...y(y([...a.children.flatMap(p=>n(p,t)),h("break;")])))}return o.push(h("}")),o}function Ie(e,n,t){return e.type===4?[I(A(`${x(e.expression,t,{resolver:"root"})};`,e.span))]:[]}import{existsSync as ye}from"fs";import{readFile as Nr}from"fs/promises";import{resolve as Lr}from"path";import{createSourceFile as Ar,getNameOfDeclaration as wt,isArrayLiteralExpression as Ir,isCallExpression as ne,isClassDeclaration as yr,isDecorator as vr,isIdentifier as B,isObjectLiteralExpression as $t,isPropertyAccessExpression as Sr,isPropertyAssignment as Pt,isPropertyDeclaration as Se,isStringLiteral as ve,isTypeReferenceNode as _r,ScriptTarget as br,SyntaxKind as Mt}from"typescript";import{slice as Or}from"@xaendar/common";async function Dt(e,n,t=process.cwd()){let r=Rr(e,t);if(!r)return;let o=await Nr(r,"utf8"),i=Ar(r,o,br.Latest,!0),s,a=i.statements;for(let c=0;c<a.length;c++){let p=a[c];if(!s&&yr(p)){let u=p.name?.text;if(u!==n)continue;let d=p.modifiers??[],f=Array.from(d).find(G=>Fr(G));if(!f)continue;let N=Pr(f);if(!N?.length)continue;let v=new Map,_=new Map,W=p.members;for(let G=0;G<W.length;G++){let $=W[G];if(!Se($))continue;let _e=$.modifiers??[],be=!1,Oe=Array.from(_e).find(S=>{let l=wr(S);return be=!!l.required,l.decorator});if(Oe){let S=wt($);if(S&&B(S)){let l=S.text,K=Dr(S,l,Oe,be);if(K){let ue=K.alias??l,Fe=v.get(ue);if(!Fe)v.set(ue,K);else{let{start:we,end:Gt}=Fe.span,{line:Ut,character:$e}=i.getLineAndCharacterOfPosition(we);throw`
|
|
19
|
-
|
|
18
|
+
\u25CF `)}`,{cause:e.span});let s=e.events;for(let a=0;a<s.length;a++){let{name:c,handler:p,parameters:u}=s[a],d=n.events.get(c);if(!d)throw new Error(`Unknown event "${c}" on <${e.tagName}> (${n.className} has no @Event with this name).`,{cause:e.span});let f=new g([],t);f.addUnresolvableIdentifier("$event");let N=u.map(v=>x(v,f,{resolver:"root"})).join(", ");r.push(h("{")),d.type!=="void"&&r.push(...y([h(`let $event!: CustomEvent<${d.type}>;`)])),r.push(...y([I(A(`root.${p}(${N});`,s[a].span))])),r.push(h("}"))}return r}function kr(e,n){let t=new Array,r=e.attributes;for(let i=0;i<r.length;i++){let{value:s}=r[i];typeof s!="string"&&t.push(I(A(`${x(s.expression,n,{resolver:"root"})};`,s.span)))}let o=e.events;for(let i=0;i<o.length;i++){let{handler:s,parameters:a}=o[i],c=new g([],n);c.addUnresolvableIdentifier("$event");let p=a.map(u=>x(u,c,{resolver:"root"})).join(", ");t.push(I(A(`root.${s}(${p});`,o[i].span)))}return t}function gr(e){return/^[a-z][a-z0-9._\-]*-[a-z0-9._\-]*$/.test(e)}function _t(e,n,t){let r=new Y([],t),o=re(e,"$index"),i=re(e,"$first"),s=re(e,"$last"),a=re(e,"$even"),c=re(e,"$odd"),p=[o,i,s,a,c,e.itemAlias];for(let d=0;d<p.length;d++)r.addUnresolvableIdentifier(p[d]);let u=new Array;return u.push(I(`for (const ${e.itemAlias} of root.`,A(e.iterableSource,e.span),") {")),u.push(...y([h(`let ${o}!: number;`),h(`let ${i}!: boolean;`),h(`let ${s}!: boolean;`),h(`let ${a}!: boolean;`),h(`let ${c}!: boolean;`),I(A(`${x(e.trackExpression,t,{skipResolution:!0})};`,e.span)),...e.children.flatMap(d=>n(d,r))])),u.push(h("}")),u}function re(e,n){return e.implicitAliases.get(n)??n}function bt(e,n,t){let r=new Array,o=x(e.conditionNode,t,{resolver:"root"});r.push(I("if (",A(o,e.span),") {")),r.push(...y(e.children.flatMap(s=>n(s,t)))),r.push(h("}"));let i=e.alternate;for(;i?.type===7;){let s=x(i.conditionNode,t,{resolver:"root"});r.push(I("else if (",A(s,i.span),") {")),r.push(...y(i.children.flatMap(a=>n(a,t)))),r.push(h("}")),i=i.alternate}return i&&(r.push(h("else {")),r.push(...y(i.children.flatMap(s=>n(s,t)))),r.push(h("}"))),r}function Rt(e,n,t){let r=e.path,o=Ot(r),i=new Array;for(let s=0;s<e.specifiers.length;s++){let{imported:a,local:c}=e.specifiers[s];switch(a){case"*":i.push(h(`let ${c}!: typeof import('${o}');`));break;case"default":i.push(h(`let ${c}!: typeof import('${o}')['default'];`));break;default:let p=Ot(a);i.push(h(`let ${c}!: typeof import('${o}')['${p}'];`));break}}return i}function Ot(e){return e.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}function Ft(e,n,t){let r=x(e.expression,t,{resolver:"root"}),o=[I("switch (",A(r,e.span),") {")],i=e.children;for(let s=0;s<i.length;s++){let a=i[s],c=a.condition;if(c?.length)for(let p=0;p<c.length;p++)o.push(h(` case ${c[p]}:`));else o.push(h(" default:"));o.push(...y(y([...a.children.flatMap(p=>n(p,t)),h("break;")])))}return o.push(h("}")),o}function Ie(e,n,t){return e.type===4?[I(A(`${x(e.expression,t,{resolver:"root"})};`,e.span))]:[]}import{existsSync as ye}from"fs";import{readFile as Nr}from"fs/promises";import{resolve as Lr}from"path";import{createSourceFile as Ar,getNameOfDeclaration as wt,isArrayLiteralExpression as Ir,isCallExpression as ne,isClassDeclaration as yr,isDecorator as vr,isIdentifier as B,isObjectLiteralExpression as $t,isPropertyAccessExpression as Sr,isPropertyAssignment as Pt,isPropertyDeclaration as Se,isStringLiteral as ve,isTypeReferenceNode as _r,ScriptTarget as br,SyntaxKind as Mt}from"typescript";import{slice as Or}from"@xaendar/common";async function Dt(e,n,t=process.cwd()){let r=Rr(e,t);if(!r)return;let o=await Nr(r,"utf8"),i=Ar(r,o,br.Latest,!0),s,a=i.statements;for(let c=0;c<a.length;c++){let p=a[c];if(!s&&yr(p)){let u=p.name?.text;if(u!==n)continue;let d=p.modifiers??[],f=Array.from(d).find(G=>Fr(G));if(!f)continue;let N=Pr(f);if(!N?.length)continue;let v=new Map,_=new Map,W=p.members;for(let G=0;G<W.length;G++){let $=W[G];if(!Se($))continue;let _e=$.modifiers??[],be=!1,Oe=Array.from(_e).find(S=>{let l=wr(S);return be=!!l.required,l.decorator});if(Oe){let S=wt($);if(S&&B(S)){let l=S.text,K=Dr(S,l,Oe,be);if(K){let ue=K.alias??l,Fe=v.get(ue);if(!Fe)v.set(ue,K);else{let{start:we,end:Gt}=Fe.span,{line:Ut,character:$e}=i.getLineAndCharacterOfPosition(we);throw`Failed to extract metadata from an imported component in the template - ${r}
|
|
19
|
+
[Ln ${Ut+1}, Col ${$e+1}] - A property identified by name ${ue} was already defined
|
|
20
|
+
---> ${Or(o,we-$e,Gt)}`}}}continue}let Re=Array.from(_e).find(S=>$r(S));if(Re){let S=wt($),l=S&&B(S)?S.text:void 0;if(l){let K=Br(Re);K&&_.set(l,K)}}}let R=new Map;v.entries().forEach(([G,$])=>R.set(G,{name:$.name,required:$.required,type:$.type,alias:$.alias})),s={type:"component",className:u,selectors:N,properties:R,events:_}}}return s}function Rr(e,n){if(e.startsWith(".")){let t=Lr(n,e);if(ye(`${t}.ts`))return t+".ts";if(ye(`${t}/index.ts`))return`${t}/index.ts`;if(ye(t))return t}}function Fr(e){if(e.kind!==Mt.Decorator)return!1;let n=ne(e.expression)?e.expression.expression:e.expression;return B(n)&&n.text==="WebComponent"}function wr(e){if(!vr(e))return{decorator:!1};let n=e.expression;if(!ne(n))return{decorator:!1};let t=n.expression;return B(t)&&t.text==="Property"?{decorator:!0}:Sr(t)&&B(t.expression)&&t.expression.text==="Property"&&t.name.text==="required"?{decorator:!0,required:!0}:{decorator:!1}}function $r(e){if(e.kind!==Mt.Decorator)return!1;let n=ne(e.expression)?e.expression.expression:e.expression;return B(n)&&n.text==="Event"}function Pr(e){try{let n=e.expression;if(!ne(n))return[];let t=n.arguments;if(t.length===0)return[];let r=t[0];if(!r||!$t(r))return[];let o=Array.from(r.properties).find(i=>Pt(i)&&B(i.name)&&i.name.text==="selector");return Mr(o.initializer)}catch{return[]}}function Mr(e){return ve(e)?[e.text]:Ir(e)?e.elements?.filter(n=>ve(n)).map(n=>n.text):[]}function Dr(e,n,t,r){let o=t.expression,i={name:n,required:r,type:Se(t.parent)?Bt(t.parent.type):"any",span:{start:e.getStart(),end:e.getEnd()}};if(ne(o)){let s=o.arguments,c=(s.length?s.find(p=>$t(p)):void 0)?.properties?.find(p=>Pt(p)&&B(p.name)&&p.name.text==="alias");if(c&&ve(c.initializer)){let p=c.initializer;i.alias=p.text,i.span={start:p.getStart(),end:p.getEnd()}}}return i}function Br(e){let n={type:"void"};return Se(e.parent)&&(n.type=Bt(e.parent.type,!0)),n}function Bt(e,n=!1){let t=n?"void":"any";if(!e||!_r(e))return t;let r=e.typeArguments;return!r||r.length===0?t:r[0].getText()}var fe=class{constructor(n,t){this._input=n;this._ast=t}_input;_ast;_context=new Y;_states={3:Ie,4:Ie,0:St,5:bt,8:_t,9:Ft,11:Rt};async populateImportMetadata(n){let t=this._ast.filter(r=>r.type===11);await Promise.all(t.flatMap(r=>r.specifiers.filter(({imported:o})=>o!=="*").map(async({imported:o,local:i})=>{let s=o==="default"?i:o,a=await Dt(r.path,s,n);a&&this._context.addImport(a)})))}async generate(n){try{await this.populateImportMetadata(n);let t=this._ast.flatMap(o=>this._processNode(o,this._context)),r=[h("function typeCheck() {"),...y(t),h("}")];return{text:r.map(o=>o.text).join(`
|
|
20
21
|
`),mappingTable:this.buildMappingTable(r)}}catch(t){let r,o;if(t instanceof Error){let i=t.cause;o=i&&typeof i=="object"&&"start"in i&&"end"in i?i:void 0,r=t.message}else r=t;throw o?`${new M(this._input).getPositionFromCharacterIndex(o.start+1)} - ${r}
|
|
21
22
|
---> ${Gr(this._input,o.start,o.end)}}`:r}}buildMappingTable(n){let t=new Map;return n.forEach((r,o)=>{r.mappings&&t.set(o,r.mappings)}),t}_processNode=(n,t)=>{let r=this._states[n.type];if(!r)throw new Error(`No transition function for token type ${C[n.type]}`,{cause:n.span});return r(n,this._processNode,t)}};async function Va(e,n,t){let r=new ce(e).tokenize(),o=new le(e,r).parse();return{javascript:new oe(e,o).generate(t),typescript:await new fe(e,o).generate(n)}}function Wa(e,n){let t=e.get(n.line);if(t){let r=t.find(o=>n.character>=o.columnStart&&n.character<o.columnEnd);return r?r.original:t.reduce((o,i)=>{let s=Math.min(Math.abs(n.character-i.columnStart),Math.abs(n.character-i.columnEnd)),a=Math.min(Math.abs(n.character-o.columnStart),Math.abs(n.character-o.columnEnd));return s<a?i:o}).original}}export{M as Cursor,Va as compile,Wa as resolveTemplateSpan};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xaendar/compiler",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.14",
|
|
4
4
|
"description": "A library for transpiling Xaendar Templates into JavaScript code",
|
|
5
5
|
"author": "Kaitenjo",
|
|
6
6
|
"license": "MIT",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
},
|
|
14
14
|
"main": "./dist/compiler.js",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@xaendar/common": "0.9.
|
|
17
|
-
"@xaendar/types": "0.9.
|
|
16
|
+
"@xaendar/common": "0.9.14",
|
|
17
|
+
"@xaendar/types": "0.9.14",
|
|
18
18
|
"typescript": "^6.0.3"
|
|
19
19
|
}
|
|
20
20
|
}
|