@xaendar/compiler 0.9.29 → 0.9.30

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.
Files changed (2) hide show
  1. package/dist/compiler.js +2 -2
  2. package/package.json +3 -3
package/dist/compiler.js CHANGED
@@ -1,11 +1,11 @@
1
- import{indent as U,slice as mr}from"@xaendar/common";var g=(f=>(f[f.Element=0]="Element",f[f.Attribute=1]="Attribute",f[f.Event=2]="Event",f[f.Text=3]="Text",f[f.Interpolation=4]="Interpolation",f[f.If=5]="If",f[f.Else=6]="Else",f[f.ElseIf=7]="ElseIf",f[f.For=8]="For",f[f.Switch=9]="Switch",f[f.Case=10]="Case",f[f.Import=11]="Import",f))(g||{});var N=class e{parent;_identifiers=new Map;_unresolvableIdentifiers=new Map;constructor(n,t){if(n instanceof e?this.parent=n:t=n,t?.length)for(let r=0;r<t.length;r++){let o=t[r];typeof o=="string"?this._identifiers.set(o,"value"):this._identifiers.set(o[0],o[1])}}addIdentifier(n,t="value"){if(this.hasIdentifier(n))throw new Error(`Identifier "${n}" is already declared in this scope.`);this._identifiers.set(n,t)}addUnresolvableIdentifier(n,t="value"){if(this.hasIdentifier(n))throw new Error(`Identifier "${n}" is already declared in this scope.`);this._unresolvableIdentifiers.set(n,t)}removeIdentifier(n){this._identifiers.delete(n)}removeUnresolvabledIdentifier(n){this._unresolvableIdentifiers.delete(n)}hasIdentifier(n){return this._identifiers.has(n)||(this.parent?.hasIdentifier(n)??!1)}getIdentifierKind(n){return this._identifiers.get(n)??this.parent?.getIdentifierKind(n)}hasUnresolvableIdentifier(n){return this._unresolvableIdentifiers.has(n)||(this.parent?.hasUnresolvableIdentifier(n)??!1)}getUnresolvableIdentifierKind(n){return this._unresolvableIdentifiers.get(n)??this.parent?.getUnresolvableIdentifierKind(n)}};import{indent as G}from"@xaendar/common";import{slice as Ge}from"@xaendar/common";import{forEachChild as Ue,isIdentifier as Ve,isPropertyAccessExpression as nr,isPropertyAssignment as or}from"typescript";var ir=new Set(["undefined","NaN","Infinity","globalThis","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape","Object","Function","Boolean","Symbol","Error","AggregateError","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","SuppressedError","InternalError","Number","BigInt","Math","Date","Temporal","String","RegExp","Array","TypedArray","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","BigInt64Array","BigUint64Array","Float16Array","Float32Array","Float64Array","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Atomics","JSON","WeakRef","FinalizationRegistry","Iterator","AsyncIterator","Promise","GeneratorFunction","AsyncGeneratorFunction","Generator","AsyncGenerator","AsyncFunction","DisposableStack","AsyncDisposableStack","Reflect","Proxy","Intl","WebAssembly","window","document","navigator","location","history","screen","console","performance","crypto","fetch","alert","confirm","prompt","setTimeout","setInterval","clearTimeout","clearInterval","requestAnimationFrame","cancelAnimationFrame","queueMicrotask","structuredClone","URL","URLSearchParams","FormData","Headers","Request","Response","AbortController","AbortSignal","CustomEvent","Event","EventTarget","MutationObserver","IntersectionObserver","ResizeObserver","PerformanceObserver","Worker","SharedWorker","ServiceWorker","Blob","File","FileReader","ReadableStream","WritableStream","TransformStream","TextEncoder","TextDecoder","ImageData","Canvas","Storage","localStorage","sessionStorage","indexedDB","WebSocket","XMLHttpRequest","HTMLElement","HTMLInputElement","HTMLButtonElement","HTMLFormElement","HTMLAnchorElement","HTMLImageElement","HTMLVideoElement","HTMLAudioElement","HTMLCanvasElement","HTMLSelectElement","HTMLTextAreaElement","HTMLDivElement","HTMLSpanElement","HTMLParagraphElement","HTMLHeadingElement","HTMLTableElement","HTMLTableRowElement","HTMLTableCellElement","HTMLUListElement","HTMLOListElement","HTMLLIElement","HTMLLabelElement","HTMLDialogElement","HTMLDetailsElement","HTMLSlotElement","HTMLTemplateElement","SVGElement","SVGSVGElement","Element","Node","NodeList","DocumentFragment","ShadowRoot","Document","Window"]),Z="root";function x(e,n,t){return He(e,e,n,ar(t))}function He(e,n,t,r){if(Ve(e)&&Ke(e,n)){let a=e.text;if(t.hasUnresolvableIdentifier(a))return{expression:a,reactive:t.getUnresolvableIdentifierKind(a)==="signal"};let c=sr(a,t);return c||(r.resolver?{expression:`${r.resolver}.${a}`}:{expression:a})}if(!We(e,n))return{expression:e.getText()};let o=e.getSourceFile().text,i={expression:""},s=e.getStart();return Ue(e,a=>{let{expression:c,reactive:p}=He(a,e,t,r);i={expression:`${i.expression}${Ge(o,s,a.getStart())}${c}`,reactive:i.reactive||p},s=a.getEnd()}),{expression:`${i.expression}${Ge(o,s,e.getEnd())}`,reactive:i.reactive}}function sr(e,n){if(n.hasIdentifier(e)){let t=n.getIdentifierKind(e),r=`context.get('${e}')`;return t==="signal"?{expression:`${r}()`,reactive:!0}:{expression:r,reactive:!1}}}function We(e,n){if(Ve(e)&&Ke(e,n))return!0;let t=!1;return Ue(e,r=>{t||(t=We(r,e))}),t}function Ke(e,n){return!(nr(n)&&n.name===e||or(n)&&n.name===e||ir.has(e.text)||!e.text)}function qe(e,n,t){return xe(e.tagName,n,t)}function he(e="text",n,t){return xe(e,n,t)}function P(e,n,t){return xe(e,n,t)}function xe(e,n,t){return(n!==Z?`${n}__${e}${t}`:`${e}${t}`).replace(/-/g,"_")}function ar(e){return{resolver:e?.resolver??"this",emitReactive:e?.emitReactive??!1}}function Qe(e,n,t,r,o){let i=pr(e.attributes,r),s=cr(e.events,r),a=qe(e,n,t),c=e.tagName,p={code:[],functionsToProcess:new Map};switch(c){case"svg":p.code.push("context.createElement = createSVGElement");break;case"math":p.code.push("context.createElement = createMATHMLElement")}switch(p.code.push(`const ${a} = _renderElement(${n}, context, ${o}, '${c}',`),i.length?p.code.push(...G(["[",...G(i),"],"])):p.code[p.code.length-1]=`${p.code[p.code.length-1]} [],`,s.length?p.code.push(...G(["[",...G(s),"]"]),");"):p.code[p.code.length-1]=`${p.code[p.code.length-1]} []);`,c){case"svg":case"math":p.code.push("context.createElement = createElement")}return e.children.length&&(p.functionsToProcess.set(`${a}Children`,{fn:{node:e,parentNode:a,context:r,precode:lr(c)},args:[a,"parentContext"]}),p.code.push(`this.${a}Children(${a}, context);`)),p}function pr(e,n){return e?.map(({name:t,value:r})=>{if(typeof r=="string")return`{ name: '${t}', value: () => '${r}', setter: bindAttribute },`;{let{expression:o,reactive:i}=x(r.expression,n);return`{ name: '${t}', value: () => ${o}, setter: ${i?"bindReactiveAttribute":"bindAttribute"} },`}})}function cr(e,n){n.addUnresolvableIdentifier("$event");let t=e.map(r=>{let o=!1,i=r.parameters.map(a=>{let c=x(a,n).expression;return!o&&c==="$event"?(o=!0,`($event) => ${c},`):`() => ${c},`}),s=["{",...G([`name: '${r.name}',`,`handler: '${r.handler}',`,"parameters: ["])];return i.length?s.push(...G([...G(i),"]"]),"},"):(s[s.length-1]=`${s[s.length-1]}]`,s.push("},")),s}).flat();return n.removeIdentifier("$event"),t}function lr(e){switch(e){case"svg":return"context.createElement = createSVGElement;";case"math":return"context.createElement = createMATHMLElement;";default:return""}}function Xe(e,n,t,r){let o={code:[],functionsToProcess:new Map},i=e.iterableSource,s=r.hasIdentifier(i)?i:`this.${i}`,a=he("items",n,t),c=he("i",n,t),p=ee(e,"$index"),u=ee(e,"$first"),d=ee(e,"$last"),f=ee(e,"$even"),y=ee(e,"$odd"),b=new N(r);b.addUnresolvableIdentifier(e.itemAlias);let w=[p,u,d,f,y];for(let E=0;E<w.length;E++)b.addUnresolvableIdentifier(w[E],"signal");let S=P("for",n,t);return o.functionsToProcess.set(S,{fn:{precode:`const { vars, update } = _iterationVariables(context, ${a}, ${c}, '${e.itemAlias}', {
1
+ import{indent as U,slice as mr}from"@xaendar/common";var g=(f=>(f[f.Element=0]="Element",f[f.Attribute=1]="Attribute",f[f.Event=2]="Event",f[f.Text=3]="Text",f[f.Interpolation=4]="Interpolation",f[f.If=5]="If",f[f.Else=6]="Else",f[f.ElseIf=7]="ElseIf",f[f.For=8]="For",f[f.Switch=9]="Switch",f[f.Case=10]="Case",f[f.Import=11]="Import",f))(g||{});var N=class e{parent;_identifiers=new Map;_unresolvableIdentifiers=new Map;constructor(n,t){if(n instanceof e?this.parent=n:t=n,t?.length)for(let r=0;r<t.length;r++){let o=t[r];typeof o=="string"?this._identifiers.set(o,"value"):this._identifiers.set(o[0],o[1])}}addIdentifier(n,t="value"){if(this.hasIdentifier(n))throw new Error(`Identifier "${n}" is already declared in this scope.`);this._identifiers.set(n,t)}addUnresolvableIdentifier(n,t="value"){if(this.hasIdentifier(n))throw new Error(`Identifier "${n}" is already declared in this scope.`);this._unresolvableIdentifiers.set(n,t)}removeIdentifier(n){this._identifiers.delete(n)}removeUnresolvabledIdentifier(n){this._unresolvableIdentifiers.delete(n)}hasIdentifier(n){return this._identifiers.has(n)||(this.parent?.hasIdentifier(n)??!1)}getIdentifierKind(n){return this._identifiers.get(n)??this.parent?.getIdentifierKind(n)}hasUnresolvableIdentifier(n){return this._unresolvableIdentifiers.has(n)||(this.parent?.hasUnresolvableIdentifier(n)??!1)}getUnresolvableIdentifierKind(n){return this._unresolvableIdentifiers.get(n)??this.parent?.getUnresolvableIdentifierKind(n)}};import{indent as G}from"@xaendar/common";import{slice as Ge}from"@xaendar/common";import{forEachChild as Ue,isIdentifier as Ve,isPropertyAccessExpression as nr,isPropertyAssignment as or}from"typescript";var ir=new Set(["undefined","NaN","Infinity","globalThis","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape","Object","Function","Boolean","Symbol","Error","AggregateError","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","SuppressedError","InternalError","Number","BigInt","Math","Date","Temporal","String","RegExp","Array","TypedArray","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","BigInt64Array","BigUint64Array","Float16Array","Float32Array","Float64Array","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Atomics","JSON","WeakRef","FinalizationRegistry","Iterator","AsyncIterator","Promise","GeneratorFunction","AsyncGeneratorFunction","Generator","AsyncGenerator","AsyncFunction","DisposableStack","AsyncDisposableStack","Reflect","Proxy","Intl","WebAssembly","window","document","navigator","location","history","screen","console","performance","crypto","fetch","alert","confirm","prompt","setTimeout","setInterval","clearTimeout","clearInterval","requestAnimationFrame","cancelAnimationFrame","queueMicrotask","structuredClone","URL","URLSearchParams","FormData","Headers","Request","Response","AbortController","AbortSignal","CustomEvent","Event","EventTarget","MutationObserver","IntersectionObserver","ResizeObserver","PerformanceObserver","Worker","SharedWorker","ServiceWorker","Blob","File","FileReader","ReadableStream","WritableStream","TransformStream","TextEncoder","TextDecoder","ImageData","Canvas","Storage","localStorage","sessionStorage","indexedDB","WebSocket","XMLHttpRequest","HTMLElement","HTMLInputElement","HTMLButtonElement","HTMLFormElement","HTMLAnchorElement","HTMLImageElement","HTMLVideoElement","HTMLAudioElement","HTMLCanvasElement","HTMLSelectElement","HTMLTextAreaElement","HTMLDivElement","HTMLSpanElement","HTMLParagraphElement","HTMLHeadingElement","HTMLTableElement","HTMLTableRowElement","HTMLTableCellElement","HTMLUListElement","HTMLOListElement","HTMLLIElement","HTMLLabelElement","HTMLDialogElement","HTMLDetailsElement","HTMLSlotElement","HTMLTemplateElement","SVGElement","SVGSVGElement","Element","Node","NodeList","DocumentFragment","ShadowRoot","Document","Window"]),Z="root";function x(e,n,t){return He(e,e,n,ar(t))}function He(e,n,t,r){if(Ve(e)&&Ke(e,n)){let a=e.text;if(t.hasUnresolvableIdentifier(a)||r.skipResolution)return{expression:a,reactive:t.getUnresolvableIdentifierKind(a)==="signal"};let c=sr(a,t);return c||(r.resolver?{expression:`${r.resolver}.${a}`}:{expression:a})}if(!We(e,n))return{expression:e.getText()};let o=e.getSourceFile().text,i={expression:""},s=e.getStart();return Ue(e,a=>{let{expression:c,reactive:p}=He(a,e,t,r);i={expression:`${i.expression}${Ge(o,s,a.getStart())}${c}`,reactive:i.reactive||p},s=a.getEnd()}),{expression:`${i.expression}${Ge(o,s,e.getEnd())}`,reactive:i.reactive}}function sr(e,n){if(n.hasIdentifier(e)){let t=n.getIdentifierKind(e),r=`context.get('${e}')`;return t==="signal"?{expression:`${r}()`,reactive:!0}:{expression:r,reactive:!1}}}function We(e,n){if(Ve(e)&&Ke(e,n))return!0;let t=!1;return Ue(e,r=>{t||(t=We(r,e))}),t}function Ke(e,n){return!(nr(n)&&n.name===e||or(n)&&n.name===e||ir.has(e.text)||!e.text)}function qe(e,n,t){return xe(e.tagName,n,t)}function he(e="text",n,t){return xe(e,n,t)}function P(e,n,t){return xe(e,n,t)}function xe(e,n,t){return(n!==Z?`${n}__${e}${t}`:`${e}${t}`).replace(/-/g,"_")}function ar(e){return{resolver:e?.resolver??"this",skipResolution:e?.skipResolution??!1}}function Qe(e,n,t,r,o){let i=pr(e.attributes,r),s=cr(e.events,r),a=qe(e,n,t),c=e.tagName,p={code:[],functionsToProcess:new Map};switch(c){case"svg":p.code.push("context.createElement = createSVGElement");break;case"math":p.code.push("context.createElement = createMATHMLElement")}switch(p.code.push(`const ${a} = _renderElement(${n}, context, ${o}, '${c}',`),i.length?p.code.push(...G(["[",...G(i),"],"])):p.code[p.code.length-1]=`${p.code[p.code.length-1]} [],`,s.length?p.code.push(...G(["[",...G(s),"]"]),");"):p.code[p.code.length-1]=`${p.code[p.code.length-1]} []);`,c){case"svg":case"math":p.code.push("context.createElement = createElement")}return e.children.length&&(p.functionsToProcess.set(`${a}Children`,{fn:{node:e,parentNode:a,context:r,precode:lr(c)},args:[a,"parentContext"]}),p.code.push(`this.${a}Children(${a}, context);`)),p}function pr(e,n){return e?.map(({name:t,value:r})=>{if(typeof r=="string")return`{ name: '${t}', value: () => '${r}', setter: bindAttribute },`;{let{expression:o,reactive:i}=x(r.expression,n);return`{ name: '${t}', value: () => ${o}, setter: ${i?"bindReactiveAttribute":"bindAttribute"} },`}})}function cr(e,n){n.addUnresolvableIdentifier("$event");let t=e.map(r=>{let o=!1,i=r.parameters.map(a=>{let c=x(a,n).expression;return!o&&c==="$event"?(o=!0,`($event) => ${c},`):`() => ${c},`}),s=["{",...G([`name: '${r.name}',`,`handler: '${r.handler}',`,"parameters: ["])];return i.length?s.push(...G([...G(i),"]"]),"},"):(s[s.length-1]=`${s[s.length-1]}]`,s.push("},")),s}).flat();return n.removeIdentifier("$event"),t}function lr(e){switch(e){case"svg":return"context.createElement = createSVGElement;";case"math":return"context.createElement = createMATHMLElement;";default:return""}}function Xe(e,n,t,r){let o={code:[],functionsToProcess:new Map},i=e.iterableSource,s=r.hasIdentifier(i)?i:`this.${i}`,a=he("items",n,t),c=he("i",n,t),p=ee(e,"$index"),u=ee(e,"$first"),d=ee(e,"$last"),f=ee(e,"$even"),y=ee(e,"$odd"),b=new N(r);b.addIdentifier(e.itemAlias);let w=[p,u,d,f,y];for(let E=0;E<w.length;E++)b.addUnresolvableIdentifier(w[E],"signal");let S=P("for",n,t);return o.functionsToProcess.set(S,{fn:{precode:`const { vars, update } = _iterationVariables(context, ${a}, ${c}, '${e.itemAlias}', {
2
2
  $index: '${p}',
3
3
  $first: '${u}',
4
4
  $last: '${d}',
5
5
  $even: '${f}',
6
6
  $odd: '${y}'
7
7
  });
8
- const { ${e.itemAlias}, ${p}, ${u}, ${d}, ${f}, ${y} } = vars;`,node:e,parentNode:S,context:b,anchor:"anchor",isForBody:!0},args:[S,"parentContext",a,c,"anchor"]}),o.code.push(`_for(${n}, context, () => ${s}, ${e.itemAlias} => ${x(e.trackExpression,b).expression}, this.${S}.bind(this));`),o}function ee(e,n){return e.implicitAliases.get(n)??n}import{indent as K}from"@xaendar/common";function je(e,n,t,r){let o=new N(r),i={code:[],functionsToProcess:new Map};i.code.push(`_if(${n}, context, [`);let s=P("if",n,t);i.code.push(...K(["{",...K([`condition: () => ${x(e.conditionNode,r).expression},`,`block: this.${s}.bind(this)`]),"},"])),i.functionsToProcess.set(s,{fn:{node:e,parentNode:s,context:o,anchor:"anchor"},args:[s,"parentContext","anchor"]});let a=e.alternate,c=0;for(;a?.type===7;){let p=new N(r),u=P("elseIf",n,`${t}_${c}`),d=a.conditionNode;i.code.push(...K(["{",...K([`condition: () => ${x(d,r).expression},`,`block: this.${u}.bind(this)`]),"},"])),i.functionsToProcess.set(u,{fn:{node:a,parentNode:n,context:p,anchor:"anchor"},args:[n,"parentContext","anchor"]}),a=a.alternate,c++}if(a){let p=new N(r),u=P("else",n,t);i.code.push(...K(["{",...K([`block: this.${u}.bind(this)`]),"},"])),i.functionsToProcess.set(u,{fn:{node:a,parentNode:n,context:p,anchor:"anchor"},args:[n,"parentContext","anchor"]})}return i.code.push("]);"),i}import{indent as ze}from"@xaendar/common";function Ye(e,n,t,r){let o={code:[],functionsToProcess:new Map};o.code.push(`_switch(${n}, context, () => ${x(e.expression,r).expression}, [`);let i=e.children;for(let s=0;s<i.length;s++){let a=i[s],c=new N(r),p=a.condition?P("case",n,`${t}_${s}`):P("default",n,t);o.functionsToProcess.set(p,{fn:{node:a,parentNode:p,context:c},args:[p,"parentContext","anchor"]});let u=`this.${p}.bind(this)`;o.code.push(...ze(["{",...ze([`condition: ${a.condition?`[${a.condition.join(", ")}]`:"null"},`,`block: ${u}`]),"},"]))}return o.code.push("])"),o}function Ee(e,n,t,r){return{code:[`${e.type===3?`_renderLiteralText(${n}, context, '${e.value}');`:`_renderText(${n}, context, () => ${x(e.expression,r).expression});`}`]}}function Je(e,n,t,r){}var oe=class{constructor(n,t){this._input=n;this._ast=t}_input;_ast;_nodeToProcess=new Map;_states={3:Ee,4:Ee,0:Qe,5:je,8:Xe,9:Ye,11:Je};generate(n,t){let r=o=>{if(o)for(let[i,s]of o.entries())this._nodeToProcess.set(i,s)};try{this._nodeToProcess.clear();let o=new N;for(let s=0;s<t.length;s++)o.addUnresolvableIdentifier(t[s],"signal");let i=["_render() {",...U([`const ${Z} = this._root;`,"const context = new Context(this, { createElement: document.createElement.bind(document), get: () => undefined });"])];n&&i.push(U(`${Z}.adoptedStyleSheets = [${n}];`));for(let s=0;s<this._ast.length;s++){let a=this._processNode(this._ast[s],Z,s.toString(),o,null);if(a){let{code:c,functionsToProcess:p}=a;r(p),i.push(...U(c))}}i.push(...U(["return context;"]),"}");for(let[s,a]of this._nodeToProcess.entries()){let{node:c,parentNode:p,context:u,precode:d,anchor:f}=a.fn;i.push(`
8
+ const { ${e.itemAlias}, ${p}, ${u}, ${d}, ${f}, ${y} } = vars;`,node:e,parentNode:S,context:b,anchor:"anchor",isForBody:!0},args:[S,"parentContext",a,c,"anchor"]}),o.code.push(`_for(${n}, context, () => ${s}, (${e.itemAlias}, ${p}) => ${x(e.trackExpression,b,{skipResolution:!0}).expression}, this.${S}.bind(this));`),o}function ee(e,n){return e.implicitAliases.get(n)??n}import{indent as K}from"@xaendar/common";function je(e,n,t,r){let o=new N(r),i={code:[],functionsToProcess:new Map};i.code.push(`_if(${n}, context, [`);let s=P("if",n,t);i.code.push(...K(["{",...K([`condition: () => ${x(e.conditionNode,r).expression},`,`block: this.${s}.bind(this)`]),"},"])),i.functionsToProcess.set(s,{fn:{node:e,parentNode:s,context:o,anchor:"anchor"},args:[s,"parentContext","anchor"]});let a=e.alternate,c=0;for(;a?.type===7;){let p=new N(r),u=P("elseIf",n,`${t}_${c}`),d=a.conditionNode;i.code.push(...K(["{",...K([`condition: () => ${x(d,r).expression},`,`block: this.${u}.bind(this)`]),"},"])),i.functionsToProcess.set(u,{fn:{node:a,parentNode:n,context:p,anchor:"anchor"},args:[n,"parentContext","anchor"]}),a=a.alternate,c++}if(a){let p=new N(r),u=P("else",n,t);i.code.push(...K(["{",...K([`block: this.${u}.bind(this)`]),"},"])),i.functionsToProcess.set(u,{fn:{node:a,parentNode:n,context:p,anchor:"anchor"},args:[n,"parentContext","anchor"]})}return i.code.push("]);"),i}import{indent as ze}from"@xaendar/common";function Ye(e,n,t,r){let o={code:[],functionsToProcess:new Map};o.code.push(`_switch(${n}, context, () => ${x(e.expression,r).expression}, [`);let i=e.children;for(let s=0;s<i.length;s++){let a=i[s],c=new N(r),p=a.condition?P("case",n,`${t}_${s}`):P("default",n,t);o.functionsToProcess.set(p,{fn:{node:a,parentNode:p,context:c},args:[p,"parentContext","anchor"]});let u=`this.${p}.bind(this)`;o.code.push(...ze(["{",...ze([`condition: ${a.condition?`[${a.condition.join(", ")}]`:"null"},`,`block: ${u}`]),"},"]))}return o.code.push("])"),o}function Ee(e,n,t,r){return{code:[`${e.type===3?`_renderLiteralText(${n}, context, '${e.value}');`:`_renderText(${n}, context, () => ${x(e.expression,r).expression});`}`]}}function Je(e,n,t,r){}var oe=class{constructor(n,t){this._input=n;this._ast=t}_input;_ast;_nodeToProcess=new Map;_states={3:Ee,4:Ee,0:Qe,5:je,8:Xe,9:Ye,11:Je};generate(n,t){let r=o=>{if(o)for(let[i,s]of o.entries())this._nodeToProcess.set(i,s)};try{this._nodeToProcess.clear();let o=new N;for(let s=0;s<t.length;s++)o.addUnresolvableIdentifier(t[s],"signal");let i=["_render() {",...U([`const ${Z} = this._root;`,"const context = new Context(this, { createElement: document.createElement.bind(document), get: () => undefined });"])];n&&i.push(U(`${Z}.adoptedStyleSheets = [${n}];`));for(let s=0;s<this._ast.length;s++){let a=this._processNode(this._ast[s],Z,s.toString(),o,null);if(a){let{code:c,functionsToProcess:p}=a;r(p),i.push(...U(c))}}i.push(...U(["return context;"]),"}");for(let[s,a]of this._nodeToProcess.entries()){let{node:c,parentNode:p,context:u,precode:d,anchor:f}=a.fn;i.push(`
9
9
  ${s}(${a.args?.join(", ")}) {`,...U(["const context = new Context(this, parentContext);"])),d&&i.push(U(d)),i.push(...U([...c.children.map((y,b)=>{let w=this._processNode(y,p,b.toString(),u,f??null);if(w){let{code:S,functionsToProcess:E}=w;return r(E),S}return""}).flat(),a.fn.isForBody?"return { context, update };":"return context;"]),"}")}return i.join(`
10
10
  `)}catch(o){let i=o,{start:s,end:a}=i.cause;throw new Error(`[Generator] ${i.message}
11
11
  ----> ${mr(this._input,s,a)}`)}}_processNode(n,t,r,o,i){let s=this._states[n.type];if(!s)throw new Error(`No transition function for ASTNode of type ${g[n.type]}`,{cause:n.span});return s(n,t,r,o,i)}};import{slice as Le,Stack as hr}from"@xaendar/common";var T=(m=>(m[m.TEXT=0]="TEXT",m[m.TAG_OPEN_NAME=1]="TAG_OPEN_NAME",m[m.TAG_SELF_CLOSE=2]="TAG_SELF_CLOSE",m[m.TAG_OPEN_END=3]="TAG_OPEN_END",m[m.TAG_CLOSE_NAME=4]="TAG_CLOSE_NAME",m[m.ATTRIBUTE=5]="ATTRIBUTE",m[m.ATTRIBUTE_VALUE=6]="ATTRIBUTE_VALUE",m[m.EVENT=7]="EVENT",m[m.EVENT_HANDLER=8]="EVENT_HANDLER",m[m.EVENT_PARAMETER=9]="EVENT_PARAMETER",m[m.INTERPOLATION_LITERAL=10]="INTERPOLATION_LITERAL",m[m.INTERPOLATION_EXPRESSION=11]="INTERPOLATION_EXPRESSION",m[m.IF=12]="IF",m[m.FOR=13]="FOR",m[m.ELSE=14]="ELSE",m[m.ELSE_IF=15]="ELSE_IF",m[m.SWITCH=16]="SWITCH",m[m.CASE=17]="CASE",m[m.DEFAULT=18]="DEFAULT",m[m.CONDITION=19]="CONDITION",m[m.BLOCK_OPEN=20]="BLOCK_OPEN",m[m.BLOCK_CLOSE=21]="BLOCK_CLOSE",m[m.IMPORT=22]="IMPORT",m[m.IMPORT_PATH=23]="IMPORT_PATH",m[m.EOF=24]="EOF",m))(T||{});function Ze(e,n){let t=!0,r="",o;for(;t;)e.peek()===34?(e.advance(),t=!1,o={state:"tag-body",tokens:[{type:6,parts:[r]}],popState:!0}):(e.advance(),r=`${r}${e.currentChar.value}`);return o}function et(e,n){let t=!0,r="",o;for(;t;)switch(e.peek()){case 32:e.advance(),t=!1,o={state:"tag-body",tokens:[{type:5,parts:[r]}]};break;case 62:case 47:t=!1,o={state:"tag-body",tokens:[{type:5,parts:[r]}]};break;case 61:if(!r)throw new Error("Attribute cannot start with '='");if(e.advance(),e.peek()!==34)throw`Attribute value must start with double quotes '"'`;e.advance(),t=!1,o={state:e.peek()===123?"interpolation":"attribute-value",pushState:!0,tokens:[{type:5,parts:[r]}]};break;case 34:case 39:if(!r)throw new Error(`Attribute cannot start with ' or "`);default:e.advance(),r=`${r}${e.currentChar.value}`}return o}function ie(e,n){if(e.skipSpaces(),e.peek()!==40)throw`Expected '(' but got '${String.fromCharCode(e.peek())}'`;e.advance();let t="",r=1;for(;r>0;)switch(e.peek()){case 40:r++,t=ge(e,t);break;case 41:if(r--,!r){e.advance();break}t=ge(e,t);break;default:t=ge(e,t)}return t}function ge(e,n){return e.advance(),`${n}${e.currentChar.value}`}function tt(e,n){let t=ie(e,n);return e.skipSpaces(),{state:e.peekMatch("@case")?"flow-control":"flow-control-block",tokens:[{type:19,parts:[t]}],popState:!0}}function rt(e,n){return{state:"flow-control-block",tokens:[{type:19,parts:[ie(e,n)]}],popState:!0}}function nt(e,n){let t=!0,r="",o;for(;t;)switch(e.peek()){case 32:throw"No spaces are allowed in event handler name";case 40:if(!r)throw"Event handler cannot be empty";let i="parameter";e.advance(),e.peekMatch(')"')&&(i="tag-body",e.advance(2)),o={state:i,tokens:[{type:8,parts:[r]}]},t=!1;break;default:e.advance(),r=`${r}${e.currentChar.value}`}return o}function ot(e,n){let t=!0,r="",o="",i=e.currentChar.index+1,s={state:"tag-body",tokens:[]};for(;t;)switch(e.peek()){case 91:case 93:case 123:case 125:case 34:case 39:case 40:r=Ne(e,r),o?(o===e.currentChar.value||o==="["&&e.currentChar.value==="]"||o==="{"&&e.currentChar.value==="}")&&(o=""):o=e.currentChar.value;break;case 44:if(o)r=Ne(e,r);else{let a=e.currentChar.index+1;s.tokens.push({type:9,parts:[r],span:{start:i,end:a}}),e.advance(),e.skipSpaces(),r="",i=e.currentChar.index+1}break;case 41:if(e.advance(),e.peek()!==34)throw"Event must be included in Double Quotes";if(e.advance(),!o){let a=e.currentChar.index+1;s.tokens.push({type:9,parts:[r],span:{start:i,end:a}}),t=!1;break}r=`${r}${e.currentChar.value}`;break;default:r=Ne(e,r)}return s}function Ne(e,n){return e.advance(),`${n}${e.currentChar.value}`}function it(e,n){let t=!0,r="",o;for(e.advance();t;)switch(e.peek()){case 32:throw"No spaces are allowed in event name";case 61:if(!r)throw"Event name cannot be empty";if(e.advance(),e.peek()!==34)throw"Event handler must be included in Double Quotes";e.advance(),o={state:"event-handler",tokens:[{type:7,parts:[r]}]},t=!1;break;default:e.advance(),r=`${r}${e.currentChar.value}`}return o}function st(e,n){let t;if(e.advance(),e.peekMatch("for "))e.advance(4),t={state:"flow-control-condition",tokens:[{type:13}],pushState:!0};else if(e.peekMatch("if "))e.advance(2),t={state:"flow-control-condition",tokens:[{type:12}],pushState:!0};else if(e.peekMatch("else if "))e.advance(8),t={state:"flow-control-condition",tokens:[{type:15}],pushState:!0};else if(e.peekMatch("else "))e.advance(5),t={state:"flow-control-block",tokens:[{type:14}]};else if(e.peekMatch("switch "))e.advance(7),t={state:"flow-control-condition",tokens:[{type:16}],pushState:!0};else if(e.peekMatch("case "))e.advance(5),t={state:"case-flow-control-condition",tokens:[{type:17}],pushState:!0};else if(e.peekMatch("default "))e.advance(8),t={state:"flow-control-block",tokens:[{type:18}]};else if(e.peekMatch("import "))e.advance(7),t={state:"import"};else throw"Unknown flow-control keyword";return t}function at(e,n){if(e.skipSpaces(),e.peek()!==123)throw`Expected '{' but got '${String.fromCharCode(e.peek())}'`;return e.advance(),{state:"text",tokens:[{type:20}],pushState:!0}}function pt(e,n){let t=!0,r="",o,i=!1;if(e.skipSpaces(),!e.peekMatch("from"))throw"Expected 'from' keyword after import list";switch(e.advance(4),e.skipSpaces(),e.advance(),e.currentChar.code){case 39:i=!0;break;case 34:break;default:throw`Import statement must start with ' or ".
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xaendar/compiler",
3
- "version": "0.9.29",
3
+ "version": "0.9.30",
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.29",
17
- "@xaendar/types": "0.9.29",
16
+ "@xaendar/common": "0.9.30",
17
+ "@xaendar/types": "0.9.30",
18
18
  "typescript": "^6.0.3",
19
19
  "type-fest": "^5.9.0"
20
20
  }