@fluixi/compiler 1.0.0-alpha.82 → 1.0.0-alpha.83
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/analyze/static-graph.cjs +1 -0
- package/dist/analyze/static-graph.d.ts +103 -0
- package/dist/analyze/static-graph.d.ts.map +1 -0
- package/dist/analyze/static-graph.js +869 -0
- package/dist/analyze/static-graph.mjs +1 -0
- package/dist/{babel-4JUDAR2G.mjs → babel-VXKH6MRQ.mjs} +1 -1
- package/dist/chunk-5KMMN5QP.mjs +1 -0
- package/dist/chunk-YKZ54NVE.mjs +1 -0
- package/dist/codegen/backends/imperative.cjs +1 -1
- package/dist/codegen/backends/imperative.d.ts.map +1 -1
- package/dist/codegen/backends/imperative.js +62 -11
- package/dist/codegen/backends/imperative.mjs +1 -1
- package/dist/codegen/partial-template.cjs +1 -1
- package/dist/codegen/partial-template.mjs +1 -1
- package/dist/codegen/serialize-static.cjs +1 -1
- package/dist/codegen/serialize-static.d.ts +16 -0
- package/dist/codegen/serialize-static.d.ts.map +1 -1
- package/dist/codegen/serialize-static.js +25 -0
- package/dist/codegen/serialize-static.mjs +1 -1
- package/dist/frontend/babel/build-ir-lit.cjs +1 -1
- package/dist/frontend/babel/build-ir-lit.mjs +1 -1
- package/dist/frontend/babel/build-ir.cjs +1 -1
- package/dist/frontend/babel/build-ir.mjs +1 -1
- package/dist/frontend/babel/index.cjs +1 -1
- package/dist/frontend/babel/index.mjs +1 -1
- package/dist/frontend/babel/lower-template.cjs +1 -1
- package/dist/frontend/babel/lower-template.mjs +1 -1
- package/dist/frontend/babel/plugin.cjs +1 -1
- package/dist/frontend/babel/plugin.mjs +1 -1
- package/dist/index.cjs +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.mjs +8 -8
- package/dist/integrations.cjs +18 -18
- package/dist/integrations.d.ts +16 -0
- package/dist/integrations.d.ts.map +1 -1
- package/dist/integrations.js +21 -2
- package/dist/integrations.mjs +5 -5
- package/dist/ir/nodes.cjs +1 -1
- package/dist/ir/nodes.d.ts +46 -0
- package/dist/ir/nodes.d.ts.map +1 -1
- package/dist/lower/compile-template.cjs +1 -1
- package/dist/lower/compile-template.d.ts +12 -0
- package/dist/lower/compile-template.d.ts.map +1 -1
- package/dist/lower/compile-template.js +5 -1
- package/dist/lower/compile-template.mjs +1 -1
- package/dist/lower/jsx.cjs +1 -1
- package/dist/lower/jsx.d.ts +2 -0
- package/dist/lower/jsx.d.ts.map +1 -1
- package/dist/lower/jsx.js +25 -3
- package/dist/lower/jsx.mjs +1 -1
- package/dist/lower/template.cjs +1 -1
- package/dist/lower/template.d.ts +14 -1
- package/dist/lower/template.d.ts.map +1 -1
- package/dist/lower/template.js +101 -15
- package/dist/lower/template.mjs +1 -1
- package/dist/transform/index.cjs +5 -5
- package/dist/transform/index.mjs +12 -12
- package/dist/transform/source-locations.cjs +1 -0
- package/dist/transform/source-locations.d.ts +44 -0
- package/dist/transform/source-locations.d.ts.map +1 -0
- package/dist/transform/source-locations.js +238 -0
- package/dist/transform/source-locations.mjs +1 -0
- package/dist/transform/templates.cjs +4 -4
- package/dist/transform/templates.d.ts +12 -4
- package/dist/transform/templates.d.ts.map +1 -1
- package/dist/transform/templates.js +72 -7
- package/dist/transform/templates.mjs +11 -11
- package/dist/transform-C4ZXRVGP.mjs +8 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/chunk-PVR2SN3B.mjs +0 -1
- package/dist/chunk-QUIYULS2.mjs +0 -1
- package/dist/chunk-YR3SAEO7.mjs +0 -1
- package/dist/transform-5WC4FWJE.mjs +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var l=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),s={className:"class",htmlFor:"for"},o=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),u=new Set(["script","style","textarea","title"]);function c(e){return u.has(e)}function R(e){return s[e]??e}function f(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!o.has(e.name)}function m(e){if(!e.static||c(e.tag))return!1;for(let t of e.props)if(!f(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&m(t)))return!1;return!0}function p(e){let t=e.props.map(d).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return l.has(e.tag)?n:`${n}${e.children.map(g).join("")}</${e.tag}>`}function g(e){if(e.kind==="text")return x(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return p(e)}function d(e){let t=s[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${E(String(n))}"`}function E(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function x(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function h(e){let t=[],n,i=r=>{n??=r.at?.file,t.push(r.at?.line??0,r.at?.column??0);for(let a of r.children)a.kind==="element"&&i(a)};return i(e),n&&t.some(r=>r!==0)?{file:n,pos:t}:void 0}export{R as htmlAttrName,f as isPlainLiteralAttr,c as isRawTextElement,m as isSerializable,p as serializeStatic,h as templatePositions};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var ve=Object.create;var I=Object.defineProperty;var ke=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var ye=Object.getPrototypeOf,Ne=Object.prototype.hasOwnProperty;var Ee=(e,t)=>{for(var n in t)I(e,n,{get:t[n],enumerable:!0})},G=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of xe(t))!Ne.call(e,i)&&i!==n&&I(e,i,{get:()=>t[i],enumerable:!(r=ke(t,i))||r.enumerable});return e};var W=(e,t,n)=>(n=e!=null?ve(ye(e)):{},G(t||!e||!e.__esModule?I(n,"default",{value:e,enumerable:!0}):n,e)),Re=e=>G(I({},"__esModule",{value:!0}),e);var pt={};Ee(pt,{buildIRFromLit:()=>B});module.exports=Re(pt);var A=require("@babel/core"),F=W(require("@babel/generator"),1);var le=require("@fluixi/template-parser");var be={kind:"eager"},Se=["pointerdown","focusin","keydown"],q=new Set(["eager","idle","visible","interaction","media","never"]),f=class extends Error{};function J(e){return e.startsWith("load:")}function $(e,t){let n=e.slice(5);if(!q.has(n))throw new f(`Unknown load strategy 'load:${n}'. Expected one of ${[...q].join(", ")}.`);switch(n){case"eager":return be;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return t?{kind:"visible",rootMargin:t}:{kind:"visible"};case"interaction":return{kind:"interaction",events:t?Ie(t):[...Se]};case"media":if(!t)throw new f(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new f(`Unhandled load strategy '${n}'.`)}}function Ie(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new f("'load:interaction' was given no event names.");return t}var $e=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),U={className:"class",htmlFor:"for"},we=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),Te=new Set(["script","style","textarea","title"]);function L(e){return Te.has(e)}function K(e){return U[e]??e}function h(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!we.has(e.name)}function D(e){if(!e.static||L(e.tag))return!1;for(let t of e.props)if(!h(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&D(t)))return!1;return!0}function g(e){let t=e.props.map(Pe).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return $e.has(e.tag)?n:`${n}${e.children.map(Ce).join("")}</${e.tag}>`}function Ce(e){if(e.kind==="text")return Je(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return g(e)}function Pe(e){let t=U[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${Ae(String(n))}"`}function Ae(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Je(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var Le="<!--fx-->",De="<!--fx/-->";function T(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function je(e){return e.kind==="text"||e.kind==="element"&&Z(e)}function Z(e){return e.svg||L(e.tag)||!e.props.every(t=>h(t))?!1:e.children.every(t=>je(t)||T(t))}function w(e){if(T(e))return!0;let t=e.children;return t?t.some(w):!1}function Y(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||Y(t))}function Q(e){if(!Z(e)||!Y(e)||!e.children.some(w))return null;let t=[],n=[],r=0,i=l=>{let s=`_n$${r++}`;return t.push({ref:s,expr:l}),s};return o(e,"_el$"),{html:Oe(e),tag:e.tag,steps:t,holes:n};function o(l,s){let a=-1;l.children.forEach((p,d)=>{w(p)&&(a=d)});let c=null;for(let p=0;p<=a;p++){let d=l.children[p],m=c?`${c}.nextSibling`:`${s}.firstChild`;if(T(d)){let z=i(m),V=i(`holeEnd(${z})`);n.push({parentRef:s,startRef:z,endRef:V,node:d}),c=V;continue}let S=i(m);d.kind==="element"&&w(d)&&o(d,S),c=S}}}function Oe(e){return g(ee(e)).split(te).join(Le+De)}function ee(e){return{...e,children:e.children.map(t=>T(t)?{kind:"text",value:te}:t.kind==="element"?ee(t):t)}}var te="\0fx-hole\0";var j={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},gt={version:2,module:"@fluixi/dom",symbols:[...j.symbols,"template","cloneTemplate","walk"]};var Xe={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function Me(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function re(e){return Me(e)?e:JSON.stringify(e)}function He(e){return e.expr!==void 0?e.reactive?`() => (${e.expr})`:`(${e.expr})`:JSON.stringify(e.literal??!0)}function _e(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function Be(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${re(s.name)}: ${He(s)}`);t!=null&&o.push(`children: ${t}`);let l=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(s=>s.expr).join(", ")}, ${l})`):l}function ie(e,t,n){return e.length===1?v(e[0],t,n):`[${e.map(r=>v(r,t,n)).join(", ")}]`}function ne(e,t,n,r,i){r.add("createMemo"),r.add("createComponent");let o=t.filter(c=>c.kind==="spread"),s=t.filter(c=>c.kind!=="spread").map(c=>`get ${re(c.name)}() { return ${_e(c)}; }`);n.length>0&&s.push(`get children() { return ${ie(n,r,i)}; }`);let a=`{ ${s.join(", ")} }`;return o.length>0&&(r.add("mergeProps"),a=`mergeProps(${o.map(c=>c.expr).join(", ")}, ${a})`),`createMemo(() => createComponent(${e}, ${a}))`}function Fe(e,t){let n=K(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var oe=!1;function v(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":return e.reactive?`() => (${e.code})`:`(${e.code})`;case"fragment":return e.children.length===0?"null":ie(e.children,t,n);case"component":return ne(e.name,e.props,e.children,t,n);case"control":{let r=Xe[e.control]??e.control;return t.add(r),ne(r,e.props,e.children,t,n)}case"element":{if(n&&e.static&&!e.svg&&D(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;return n.push({id:s,html:g(e),tag:e.tag,svg:!1}),`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&oe){let s=Q(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let a=`_tmpl$${n.length}`;n.push({id:a,html:s.html,tag:s.tag,svg:!1});let c=[`const _el$ = templateNode(${a}, ${JSON.stringify(s.tag)}, true);`];for(let p of s.steps)c.push(`const ${p.ref} = ${p.expr};`);for(let p of s.holes)c.push(`insert(${p.parentRef}, holeScope(${p.startRef}, () => (${v(p.node,t,n)})), ${p.endRef}, holeContent(${p.startRef}, ${p.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",o=[],l=e.svg?`${r}, true`:r;if(o.push(`const ${i} = createNativeElement(${l});`),e.props.length>0)if(!e.svg&&e.props.every(h))for(let s of e.props)o.push(Fe(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${Be(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let a=v(s,t,n),c=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(c?`insert(${i}, ${a}, null);`:`insert(${i}, ${a});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function k(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(r=>[r.id,JSON.stringify(r.html)]));return e.replace(/_tmpl\$\d+/g,r=>n.get(r)??r)}var x={name:"imperative",contract:j,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return oe=t?.partialTemplates===!0,{code:v(e,n,r),imports:Array.from(n),templates:r}}};function y(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let i=0;i<t.length;i++)/[^ \t]/.test(t[i])&&(n=i);let r="";for(let i=0;i<t.length;i++){let o=t[i].replace(/\t/g," ");i!==0&&(o=o.replace(/^ +/,"")),i!==t.length-1&&(o=o.replace(/ +$/,"")),o&&(i!==n&&(o+=" "),r+=o)}return r}var se=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function ze(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function ae(e){return e.charAt(0).toUpperCase()+e.slice(1)}var O=class{constructor(t,n){this.holes=t;this.used=n}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:i}=x.emit(t,{});for(let o of r)this.used.add(o);return k(n,i)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.kind==="Element"||i.kind==="Component"){let l=i.attributes.find(s=>s.kind==="IfDirective");if(l&&l.kind==="IfDirective"){let s=r+1;s<t.length&&this.isBlankText(t[s])&&s++;let a=t[s],c=a&&(a.kind==="Element"||a.kind==="Component")&&a.attributes.some(p=>p.kind==="ElseDirective");n.push(this.lowerIf(i,l.hole,c?a:null)),c&&(r=s);continue}if(i.attributes.some(s=>s.kind==="EachDirective")){n.push(this.lowerEach(i));continue}}let o=this.lowerNode(i);o&&n.push(o)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&y(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=y(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(r=>r.kind==="Attribute"&&r.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let r=t.attributes.filter(o=>o!==n),i=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:r});return i.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),i}return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:i,rest:o}=this.partitionSlots(t.children);for(let[a,c]of i){let p=c.length===1?c[0]:{kind:"fragment",children:c},d={name:a,kind:"attr",expr:this.emit(p),jsxElement:!0},m=r.findIndex(S=>S.name===a);m>=0?r[m]=d:r.push(d)}let l=t.attributes.find(a=>a.kind==="LoadDirective"),s=l?$(`load:${l.strategy}`,l.modifier):void 0;return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...s?{load:s}:{}}}partitionSlots(t){let n=new Map,r=[];for(let i of t){if(i.kind==="Element"||i.kind==="Component"){let o=i.attributes.find(l=>l.kind==="Attribute"&&l.name==="slot");if(o&&o.value&&o.value.kind==="static"){let l={...i,attributes:i.attributes.filter(c=>c!==o)},s=l.kind==="Element"?this.lowerElement(l):this.lowerComponent(l),a=n.get(o.value.value)??[];a.push(s),n.set(o.value.value,a);continue}}r.push(i)}return{slots:n,rest:r}}lowerIf(t,n,r){let i=this.hole(n),o=[{name:"when",kind:"attr",expr:i.code,reactive:i.reactive}];if(r){let s=this.stripAndLower(r,a=>a.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(s),jsxElement:!0})}let l=this.stripAndLower(t,s=>s.kind==="IfDirective");return{kind:"component",name:"Show",props:o,children:[l]}}lowerEach(t){let n=t.attributes.find(a=>a.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),i=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive}];if(n.key){let a="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;i.push({name:"by",kind:"attr",expr:a})}let o=this.itemArrow(t),l;if(o){let a={kind:"expr",code:o.body,reactive:o.bodyReactive},c=this.rebuildWithChildren(t,[a]);l=`(${o.params.join(", ")}) => (${this.emit(c)})`}else{let a=this.stripAndLower(t,c=>c.kind==="EachDirective");l=`() => (${this.emit(a)})`}return{kind:"component",name:"For",props:i,children:[{kind:"expr",code:l,reactive:!1}]}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(i=>!n(i))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(i=>i.kind!=="EachDirective"));return t.kind==="Element"?{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1}:{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],i=!1,o=[],l=!1,s=[];for(let a of t)switch(a.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(a));break;case"PropertyBinding":n.push({name:a.name,kind:"prop",expr:this.hole(a.hole).code,reactive:this.hole(a.hole).reactive});break;case"EventBinding":n.push(this.eventProp(a));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(a.hole).code,reactive:this.hole(a.hole).reactive});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(a.hole).code});break;case"ClassDirective":{let c=this.hole(a.hole);r.push(`${JSON.stringify(a.name)}: ${c.code}`),i=i||c.reactive;break}case"StyleDirective":{let c=this.hole(a.hole);o.push(`${JSON.stringify(a.name)}: ${c.code}`),l=l||c.reactive;break}case"BindDirective":n.push(...this.bindProps(a.name,this.hole(a.hole).code));break;case"UseDirective":{let c=a.name??(a.hole!=null?this.hole(a.hole).code:null);if(!c)break;s.push(a.name!=null&&a.hole!=null?`[${c}, () => (${this.hole(a.hole).code})]`:`[${c}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:i}),o.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${o.join(", ")} }`,reactive:l}),s.length>0&&n.push({name:"use",kind:"attr",expr:`[${s.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),r=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+ae(t.name),kind:"event",event:{name:n,delegated:se.has(n)},expr:r};let o=this.wrapHandler(r,t.modifiers),l=this.eventOptions(t.modifiers),s=l?`[${o}, ${l}]`:o;return{name:"on:"+n,kind:"attr",expr:s}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",i=[];return n.includes("prevent")&&i.push("e.preventDefault();"),n.includes("stop")&&i.push("e.stopPropagation();"),!r&&i.length===0?t:`(e) => { ${r}${i.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=t==="checked",i=r?"change":"input",o=r?"checked":"value";this.used.add("bindPair");let l=`bindPair(${n})`;return[{name:t,kind:"attr",expr:`${l}[0]()`,reactive:!0},{name:"on"+ae(i),kind:"event",event:{name:i,delegated:se.has(i)},expr:`(e) => ${l}[1](e.target.${o})`}]}plainAttr(t){let n=t.value,r=t.name;t.name==="class"?r=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(r="innerHTML");let o={name:r,kind:"attr"};if(n==null)return o.literal=!0,o;if(n.kind==="static")return o.literal=n.value,o;if(n.kind==="hole"){let a=this.hole(n.hole);return o.expr=a.code,o.reactive=a.reactive,o}let l=!1,s=n.parts.map(a=>{if("text"in a)return ze(a.text);let c=this.hole(a.hole);return l=l||c.reactive,"${"+c.code+"}"}).join("");return o.expr="`"+s+"`",o.reactive=l,o}};function ce(e,t,n,r={}){let{root:i}=(0,le.parseTemplate)(e,{svg:r.svg});return new O(t,n).lowerRoot(i.children)}var u=require("@babel/core"),H=W(require("@babel/generator"),1);var Ve="children";function N(e){switch(e.kind){case"call":return!0;case"member":return e.property!==Ve;case"compound":return e.parts.some(N);case"opaque":return!1}}var Ge=new Set(["CallExpression","OptionalCallExpression"]),We=new Set(["MemberExpression","OptionalMemberExpression"]);function R(e){if(!e)return{kind:"opaque"};if(Ge.has(e.type))return{kind:"call"};if(We.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(E)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(E)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(E)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>E(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(E)}:{kind:"opaque"}}var E=e=>R(e);function qe(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function C(e){let t=[],n=new Map,r=i=>{switch(i.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let o of i.children)r(o);return!1;case"fragment":for(let o of i.children)r(o);return!1;case"element":{let o=!0;for(let s of i.children)r(s)||(o=!1);let l;for(let s of i.props)if(l=qe(s),l)break;return!l&&!o&&(l=Ue(i)),i.static=!l,l?n.set(i,l):t.push(i),i.static}default:return!1}};for(let i of Array.isArray(e)?e:[e])r(i);return{staticElements:t,reasons:n}}function Ue(e){for(let t of e.children){if(t.kind==="expr")return"expression-child";if(t.kind==="component")return"component-child";if(t.kind==="control")return"control-child";if(t.kind==="element"&&!t.static||t.kind==="fragment")return"expression-child"}return"expression-child"}var Ke=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),Ze=/^on[A-Z]/,Ye=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),ue=e=>N(R(e));function b(e){if(e.type==="StringLiteral"||e.type==="NumericLiteral"||e.type==="BooleanLiteral"||e.type==="Literal"&&(typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"))return e.value}var X=e=>!!e&&typeof b(e)=="string";function Qe(e,t){return e.type==="JSXIdentifier"?{tag:e.name,component:e.name[0]!==e.name[0].toLowerCase()}:e.type==="JSXMemberExpression"?{tag:t.code(e),component:!0}:e.type==="JSXNamespacedName"?{tag:`${e.namespace.name}:${e.name.name}`,component:!1}:{tag:"div",component:!1}}function M(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function et(e,t){let n=M(e.name),r=Ze.test(n),i=r||n.startsWith("on:")||n==="ref",l={name:n,kind:r?"event":"attr"};if(r){let a=n.slice(2).toLowerCase();l.event={name:a,delegated:Ye.has(a)}}let s=e.value;if(s==null)return l.literal=!0,l;if(X(s))return l.literal=b(s),l;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let a=s.expression,c=b(a);return c!==void 0?(l.literal=c,l):(l.expr=t.code(a),l.reactive=i?!1:ue(a),(a.type==="JSXElement"||a.type==="JSXFragment")&&(l.jsxElement=!0),l)}return l.literal=!0,l}function pe(e,t){let n=e.value;return n==null?null:X(n)?JSON.stringify(b(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function tt(e,t){let n=[],r=[];for(let i of e){if(i.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(i.argument)});continue}if(i.type!=="JSXAttribute"||J(M(i.name)))continue;let o=i.name.type==="JSXNamespacedName"?i.name.namespace.name:null;if(o==="use"){let l=i.name.name.name;t.used.add(l);let s=pe(i,t);r.push(s!=null?`[${l}, () => (${s})]`:`[${l}]`);continue}if(o==="oncapture"){let l=i.name.name.name.toLowerCase(),s=pe(i,t)??"undefined";n.push({name:"on:"+l,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(et(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function de(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=y(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression;n.push({kind:"expr",code:t.code(i),reactive:ue(i)})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(me(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function nt(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=M(t.name);if(J(n)){if(t.value&&!X(t.value))throw new f(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return $(n,t.value?b(t.value):null)}}}function me(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:de(e.children,t)};let{tag:n,component:r}=Qe(e.openingElement.name,t),i=tt(e.openingElement.attributes,t),o=de(e.children,t);if(r){let l=nt(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...l?{load:l}:{}}}return{kind:"element",tag:n,svg:Ke.has(n),props:i,children:o,static:!1}}function fe(e,t){let n=me(e,t);return C(n),n}var rt=H.default.default??H.default;function he(e){return rt(e,{concise:!0}).code}function it(e,t,n){let r=u.types.cloneNode(e,!0),i=u.types.file(u.types.program([u.types.expressionStatement(r)])),o=!1,l=(s,a,c)=>{for(let p of c)t.add(p);s.replaceWith(u.template.expression(a,{placeholderPattern:!1,plugins:["typescript"]})()),s.skip(),o=!0};return(0,u.traverse)(i,{"JSXElement|JSXFragment"(s){let a=s.node,c=ot(a,t,n);n?.(c);let{code:p,imports:d,templates:m}=x.emit(c,{});l(s,k(p,m),d)},TaggedTemplateExpression(s){let a=s.node.tag;if(!u.types.isIdentifier(a)||a.name!=="html"&&a.name!=="svg")return;let c=B(s.node,t,{svg:a.name==="svg",onNested:n});n?.(c);let{code:p,imports:d,templates:m}=x.emit(c,{});l(s,k(p,m),d)}}),o?i.program.body[0].expression:e}function P(e,t,n){return he(it(e,t,n))}function _(e){return N(R(e))}function ot(e,t=new Set,n){return fe(e,{code:i=>i.type==="JSXMemberExpression"?he(i):P(i,t,n),used:t})}var st=F.default.default??F.default;function at(e){return st(e,{concise:!0}).code}function lt(e,t,n){let r={code:P(e,t,n),reactive:_(e)};if(A.types.isArrowFunctionExpression(e)&&!A.types.isBlockStatement(e.body)){let i=e.body;r.arrow={params:e.params.map(o=>at(o)),body:P(i,t,n),bodyReactive:_(i)}}return A.types.isObjectExpression(e)&&(r.object=!0),r}function ge(e,t,n={}){let r=e.quasi,i=r.expressions.map(o=>lt(o,t,n.onNested));return ce(ct(r),i,t,n)}function ct(e){let t=[];return e.quasis.forEach((n,r)=>{let i=n.value.cooked??n.value.raw;if(t.push({kind:"static",text:i,start:n.start??0}),r<e.expressions.length){let o=e.expressions[r];t.push({kind:"hole",index:r,start:o.start??0,end:o.end??0})}}),t}function B(e,t=new Set,n={}){let r=ge(e,t,n);return C(r),r}
|
|
1
|
+
"use strict";var Se=Object.create;var C=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var Ae=(e,t)=>{for(var n in t)C(e,n,{get:t[n],enumerable:!0})},Z=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of $e(t))!Te.call(e,i)&&i!==n&&C(e,i,{get:()=>t[i],enumerable:!(r=Ie(t,i))||r.enumerable});return e};var Y=(e,t,n)=>(n=e!=null?Se(we(e)):{},Z(t||!e||!e.__esModule?C(n,"default",{value:e,enumerable:!0}):n,e)),Ce=e=>Z(C({},"__esModule",{value:!0}),e);var xt={};Ae(xt,{buildIRFromLit:()=>G});module.exports=Ce(xt);var M=require("@babel/core"),q=Y(require("@babel/generator"),1);var he=require("@fluixi/template-parser");var Pe={kind:"eager"},Je=["pointerdown","focusin","keydown"],Q=new Set(["eager","idle","visible","interaction","media","never"]),m=class extends Error{};function _(e){return e.startsWith("load:")}function P(e,t){let n=e.slice(5);if(!Q.has(n))throw new m(`Unknown load strategy 'load:${n}'. Expected one of ${[...Q].join(", ")}.`);switch(n){case"eager":return Pe;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return t?{kind:"visible",rootMargin:t}:{kind:"visible"};case"interaction":return{kind:"interaction",events:t?De(t):[...Je]};case"media":if(!t)throw new m(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new m(`Unhandled load strategy '${n}'.`)}}function De(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new m("'load:interaction' was given no event names.");return t}var Oe=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),ee={className:"class",htmlFor:"for"},Le=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),Me=new Set(["script","style","textarea","title"]);function j(e){return Me.has(e)}function te(e){return ee[e]??e}function N(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!Le.has(e.name)}function H(e){if(!e.static||j(e.tag))return!1;for(let t of e.props)if(!N(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&H(t)))return!1;return!0}function v(e){let t=e.props.map(je).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return Oe.has(e.tag)?n:`${n}${e.children.map(_e).join("")}</${e.tag}>`}function _e(e){if(e.kind==="text")return Fe(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return v(e)}function je(e){let t=ee[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${He(String(n))}"`}function He(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Fe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function F(e){let t=[],n,r=i=>{n??=i.at?.file,t.push(i.at?.line??0,i.at?.column??0);for(let o of i.children)o.kind==="element"&&r(o)};return r(e),n&&t.some(i=>i!==0)?{file:n,pos:t}:void 0}var Xe="<!--fx-->",Be="<!--fx/-->";function D(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Ve(e){return e.kind==="text"||e.kind==="element"&&ne(e)}function ne(e){return e.svg||j(e.tag)||!e.props.every(t=>N(t))?!1:e.children.every(t=>Ve(t)||D(t))}function J(e){if(D(e))return!0;let t=e.children;return t?t.some(J):!1}function re(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||re(t))}function ie(e){if(!ne(e)||!re(e)||!e.children.some(J))return null;let t=[],n=[],r=0,i=a=>{let s=`_n$${r++}`;return t.push({ref:s,expr:a}),s};return o(e,"_el$"),{html:Ke(e),tag:e.tag,steps:t,holes:n};function o(a,s){let l=-1;a.children.forEach((c,u)=>{J(c)&&(l=u)});let p=null;for(let c=0;c<=l;c++){let u=a.children[c],d=p?`${p}.nextSibling`:`${s}.firstChild`;if(D(u)){let y=i(d),A=i(`holeEnd(${y})`);n.push({parentRef:s,startRef:y,endRef:A,node:u}),p=A;continue}let h=i(d);u.kind==="element"&&J(u)&&o(u,h),p=h}}}function Ke(e){return v(oe(e)).split(se).join(Xe+Be)}function oe(e){return{...e,children:e.children.map(t=>D(t)?{kind:"text",value:se}:t.kind==="element"?oe(t):t)}}var se="\0fx-hole\0";var X={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},It={version:2,module:"@fluixi/dom",symbols:[...X.symbols,"template","cloneTemplate","walk"]};var g="@fluixi/reactive/signal",B={$signal:{export:"signal",module:g,returns:"signal-handle"},$memo:{export:"memo",module:g,returns:"memo-handle"},$effect:{export:"effect",module:g,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:g,returns:"resource-handle"},$selector:{export:"createSelector",module:g,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:g,returns:"memo-accessor"},$untrack:{export:"untrack",module:g,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}};var wt=new RegExp(`\\$(?:${Object.keys(B).map(e=>e.slice(1)).join("|")})\\s*\\(`);var ae="__fx_source";var Ue="__fx_hole",x=(e,t,n,r)=>`(globalThis.${Ue} ?? ((f) => f))(${e},${t},${n}${r===void 0?"":`,${JSON.stringify(r)}`})`,ze="__fx_props",ce=(e,t)=>`(globalThis.${ze} ?? ((p) => p))(${e},${JSON.stringify(t)})`;var We={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function Ge(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function ue(e){return Ge(e)?e:JSON.stringify(e)}function qe(e){if(e.expr!==void 0){if(e.name==="ref"&&e.at)return x(`(${e.expr})`,e.at.line,e.at.column,e.expr);if(!e.reactive)return`(${e.expr})`;let t=`() => (${e.expr})`;return e.at?x(t,e.at.line,e.at.column,e.directive):t}return JSON.stringify(e.literal??!0)}function Ze(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function Ye(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${ue(s.name)}: ${qe(s)}`);t!=null&&o.push(`children: ${t}`);let a=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(s=>s.expr).join(", ")}, ${a})`):a}function le(e,t){return t?x(e,t.line,t.column):e}function de(e,t,n){return e.length===1?k(e[0],t,n):`[${e.map(r=>k(r,t,n)).join(", ")}]`}function pe(e,t,n,r,i,o){r.add("createMemo"),r.add("createComponent");let a=t.filter(d=>d.kind==="spread"),s=t.filter(d=>d.kind!=="spread"),l=s.map(d=>`get ${ue(d.name)}() { return ${Ze(d)}; }`);n.length>0&&l.push(`get children() { return ${de(n,r,i)}; }`);let p=`{ ${l.join(", ")} }`;a.length>0&&(r.add("mergeProps"),p=`mergeProps(${a.map(d=>d.expr).join(", ")}, ${p})`);let c={};for(let d of s)d.at&&(c[d.name]=[d.at.line,d.at.column]);return Object.keys(c).length&&(p=ce(p,c)),`createMemo((${o?`globalThis.${ae}?.(${JSON.stringify(o.file)},${o.line},${o.column},${JSON.stringify(e)}), `:""}() => createComponent(${e}, ${p})))`}function Qe(e,t){let n=te(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var fe=!1;function k(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":{if(!e.reactive)return`(${e.code})`;let r=`() => (${e.code})`;return e.at?x(r,e.at.line,e.at.column):r}case"fragment":return e.children.length===0?"null":de(e.children,t,n);case"component":return le(pe(e.name,e.props,e.children,t,n,e.at),e.bindAt??e.at);case"control":{let r=We[e.control]??e.control;return t.add(r),le(pe(r,e.props,e.children,t,n),e.bindAt)}case"element":{if(n&&e.static&&!e.svg&&H(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;n.push({id:s,html:v(e),tag:e.tag,svg:!1});let l=F(e);return l?`templateNode(${s}, ${JSON.stringify(e.tag)}, false, false, ${JSON.stringify(l)})`:`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&fe){let s=ie(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let l=`_tmpl$${n.length}`;n.push({id:l,html:s.html,tag:s.tag,svg:!1});let p=F(e),c=[`const _el$ = templateNode(${l}, ${JSON.stringify(s.tag)}, true${p?`, false, ${JSON.stringify(p)}`:""});`];for(let u of s.steps)c.push(`const ${u.ref} = ${u.expr};`);for(let u of s.holes)c.push(`insert(${u.parentRef}, holeScope(${u.startRef}, () => (${k(u.node,t,n)})), ${u.endRef}, holeContent(${u.startRef}, ${u.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",o=[],a=e.at?`${r}, ${e.svg}, ${JSON.stringify(e.at)}`:e.svg?`${r}, true`:r;if(o.push(`const ${i} = createNativeElement(${a});`),e.props.length>0)if(!e.svg&&e.props.every(N))for(let s of e.props)o.push(Qe(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${Ye(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let l=k(s,t,n),p=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(p?`insert(${i}, ${l}, null);`:`insert(${i}, ${l});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function R(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(r=>[r.id,JSON.stringify(r.html)]));return e.replace(/_tmpl\$\d+/g,r=>n.get(r)??r)}var b={name:"imperative",contract:X,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return fe=t?.partialTemplates===!0,{code:k(e,n,r),imports:Array.from(n),templates:r}}};function E(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let i=0;i<t.length;i++)/[^ \t]/.test(t[i])&&(n=i);let r="";for(let i=0;i<t.length;i++){let o=t[i].replace(/\t/g," ");i!==0&&(o=o.replace(/^ +/,"")),i!==t.length-1&&(o=o.replace(/ +$/,"")),o&&(i!==n&&(o+=" "),r+=o)}return r}var me=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function et(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function ge(e){return e.charAt(0).toUpperCase()+e.slice(1)}var V=class{constructor(t,n,r,i){this.holes=t;this.used=n;this.sourceFile=r;this.positionAt=i}tagAt(t){let n=t.loc?.start;if(!this.sourceFile||!this.positionAt||n==null)return;let{line:r,column:i}=this.positionAt(n);return{file:this.sourceFile,line:r,column:i}}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:i}=b.emit(t,{});for(let o of r)this.used.add(o);return R(n,i)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.kind==="Element"||i.kind==="Component"){let a=i.attributes.find(s=>s.kind==="IfDirective");if(a&&a.kind==="IfDirective"){let s=r+1;s<t.length&&this.isBlankText(t[s])&&s++;let l=t[s],p=l&&(l.kind==="Element"||l.kind==="Component")&&l.attributes.some(c=>c.kind==="ElseDirective");n.push(this.lowerIf(i,a.hole,p?l:null)),p&&(r=s);continue}if(i.attributes.some(s=>s.kind==="EachDirective")){n.push(this.lowerEach(i));continue}}let o=this.lowerNode(i);o&&n.push(o)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&E(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=E(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive,...n.at?{at:n.at}:{}}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(i=>i.kind==="Attribute"&&i.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let i=t.attributes.filter(a=>a!==n),o=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:i});return o.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),o}let r=this.tagAt(t);return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1,...r?{at:r}:{}}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:i,rest:o}=this.partitionSlots(t.children);for(let[c,u]of i){let d=u.length===1?u[0]:{kind:"fragment",children:u},h={name:c,kind:"attr",expr:this.emit(d),jsxElement:!0},y=r.findIndex(A=>A.name===c);y>=0?r[y]=h:r.push(h)}let a=t.attributes.find(c=>c.kind==="LoadDirective"),s=a?P(`load:${a.strategy}`,a.modifier):void 0,l=r.find(c=>c.at&&c.reactive)?.at,p=this.tagAt(t);return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...p?{at:p}:{},...l?{bindAt:l}:{},...s?{load:s}:{}}}partitionSlots(t){let n=new Map,r=[];for(let i of t){if(i.kind==="Element"||i.kind==="Component"){let o=i.attributes.find(a=>a.kind==="Attribute"&&a.name==="slot");if(o&&o.value&&o.value.kind==="static"){let a={...i,attributes:i.attributes.filter(p=>p!==o)},s=a.kind==="Element"?this.lowerElement(a):this.lowerComponent(a),l=n.get(o.value.value)??[];l.push(s),n.set(o.value.value,l);continue}}r.push(i)}return{slots:n,rest:r}}lowerIf(t,n,r){let i=this.hole(n),o=[{name:"when",kind:"attr",expr:i.code,reactive:i.reactive,...i.at?{at:i.at}:{}}];if(r){let l=this.stripAndLower(r,p=>p.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(l),jsxElement:!0})}let a=this.stripAndLower(t,l=>l.kind==="IfDirective"),s=this.tagAt(t);return{kind:"component",name:"Show",props:o,children:[a],...s?{at:s}:{},...i.at?{bindAt:i.at}:{}}}lowerEach(t){let n=t.attributes.find(p=>p.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),i=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive,...r.at?{at:r.at}:{}}];if(n.key){let p="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;i.push({name:"by",kind:"attr",expr:p})}let o=this.itemArrow(t),a;if(o){let p={kind:"expr",code:o.body,reactive:o.bodyReactive},c=this.rebuildWithChildren(t,[p]);a=`(${o.params.join(", ")}) => (${this.emit(c)})`}else{let p=this.stripAndLower(t,c=>c.kind==="EachDirective");a=`() => (${this.emit(p)})`}let s=[{kind:"expr",code:a,reactive:!1}],l=this.tagAt(t);return{kind:"component",name:"For",props:i,children:s,...l?{at:l}:{},...r.at?{bindAt:r.at}:{}}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(i=>!n(i))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(i=>i.kind!=="EachDirective"));if(t.kind==="Element"){let i=this.tagAt(t);return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1,...i?{at:i}:{}}}return{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],i=!1,o,a=[],s=!1,l,p=[];for(let c of t)switch(c.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(c));break;case"PropertyBinding":n.push({name:c.name,kind:"prop",expr:this.hole(c.hole).code,reactive:this.hole(c.hole).reactive,...this.hole(c.hole).at?{at:this.hole(c.hole).at}:{}});break;case"EventBinding":n.push(this.eventProp(c));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(c.hole).code,reactive:this.hole(c.hole).reactive,...this.hole(c.hole).at?{at:this.hole(c.hole).at}:{}});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(c.hole).code});break;case"ClassDirective":{let u=this.hole(c.hole);r.push(`${JSON.stringify(c.name)}: ${u.code}`),i=i||u.reactive,o??=u.at;break}case"StyleDirective":{let u=this.hole(c.hole);a.push(`${JSON.stringify(c.name)}: ${u.code}`),s=s||u.reactive,l??=u.at;break}case"BindDirective":n.push(...this.bindProps(c.name,this.hole(c.hole)));break;case"UseDirective":{let u=c.name??(c.hole!=null?this.hole(c.hole).code:null);if(!u)break;p.push(c.name!=null&&c.hole!=null?`[${u}, () => (${this.hole(c.hole).code})]`:`[${u}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:i,...o?{at:o}:{}}),a.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${a.join(", ")} }`,reactive:s,...l?{at:l}:{}}),p.length>0&&n.push({name:"use",kind:"attr",expr:`[${p.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),r=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+ge(t.name),kind:"event",event:{name:n,delegated:me.has(n)},expr:r};let o=this.wrapHandler(r,t.modifiers),a=this.eventOptions(t.modifiers),s=a?`[${o}, ${a}]`:o;return{name:"on:"+n,kind:"attr",expr:s}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",i=[];return n.includes("prevent")&&i.push("e.preventDefault();"),n.includes("stop")&&i.push("e.stopPropagation();"),!r&&i.length===0?t:`(e) => { ${r}${i.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=n.code,i=t==="checked",o=i?"change":"input",a=i?"checked":"value";this.used.add("bindPair");let s=`bindPair(${r})`;return[{name:t,kind:"attr",expr:`${s}[0]()`,reactive:!0,directive:`bind:${t}`,...n.at?{at:n.at}:{}},{name:"on"+ge(o),kind:"event",event:{name:o,delegated:me.has(o)},expr:`(e) => ${s}[1](e.target.${a})`}]}plainAttr(t){let n=t.value,r=t.name;t.name==="class"?r=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(r="innerHTML");let o={name:r,kind:"attr"};if(n==null)return o.literal=!0,o;if(n.kind==="static")return o.literal=n.value,o;if(n.kind==="hole"){let p=this.hole(n.hole);return o.expr=p.code,o.reactive=p.reactive,p.at&&(o.at=p.at),o}let a=!1,s,l=n.parts.map(p=>{if("text"in p)return et(p.text);let c=this.hole(p.hole);return a=a||c.reactive,s??=c.at,"${"+c.code+"}"}).join("");return o.expr="`"+l+"`",o.reactive=a,s&&(o.at=s),o}};function ye(e,t,n,r={}){let{root:i}=(0,he.parseTemplate)(e,{svg:r.svg});return new V(t,n,r.sourceFile,r.positionAt).lowerRoot(i.children)}var f=require("@babel/core"),z=Y(require("@babel/generator"),1);var tt="children";function S(e){switch(e.kind){case"call":return!0;case"member":return e.property!==tt;case"compound":return e.parts.some(S);case"opaque":return!1}}var nt=new Set(["CallExpression","OptionalCallExpression"]),rt=new Set(["MemberExpression","OptionalMemberExpression"]);function $(e){if(!e)return{kind:"opaque"};if(nt.has(e.type))return{kind:"call"};if(rt.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(I)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(I)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(I)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>I(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(I)}:{kind:"opaque"}}var I=e=>$(e);function it(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function O(e){let t=[],n=new Map,r=i=>{switch(i.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let o of i.children)r(o);return!1;case"fragment":for(let o of i.children)r(o);return!1;case"element":{let o=!0;for(let s of i.children)r(s)||(o=!1);let a;for(let s of i.props)if(a=it(s),a)break;return!a&&!o&&(a=ot(i)),i.static=!a,a?n.set(i,a):t.push(i),i.static}default:return!1}};for(let i of Array.isArray(e)?e:[e])r(i);return{staticElements:t,reasons:n}}function ot(e){for(let t of e.children){if(t.kind==="expr")return"expression-child";if(t.kind==="component")return"component-child";if(t.kind==="control")return"control-child";if(t.kind==="element"&&!t.static||t.kind==="fragment")return"expression-child"}return"expression-child"}var st=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),at=/^on[A-Z]/,ct=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),xe=e=>S($(e)),w=(e,t)=>{if(!t.sourceFile)return;let n=e.loc?.start;return n?{line:n.line,column:n.column}:void 0};function T(e){if(e.type==="StringLiteral"||e.type==="NumericLiteral"||e.type==="BooleanLiteral"||e.type==="Literal"&&(typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"))return e.value}var K=e=>!!e&&typeof T(e)=="string";function lt(e,t){return e.type==="JSXIdentifier"?{tag:e.name,component:e.name[0]!==e.name[0].toLowerCase()}:e.type==="JSXMemberExpression"?{tag:t.code(e),component:!0}:e.type==="JSXNamespacedName"?{tag:`${e.namespace.name}:${e.name.name}`,component:!1}:{tag:"div",component:!1}}function U(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function pt(e,t){let n=U(e.name),r=at.test(n),i=r||n.startsWith("on:")||n==="ref",a={name:n,kind:r?"event":"attr"};if(r){let l=n.slice(2).toLowerCase();a.event={name:l,delegated:ct.has(l)}}let s=e.value;if(s==null)return a.literal=!0,a.at=w(e,t),a;if(K(s))return a.literal=T(s),a.at=w(s,t),a;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let l=s.expression,p=T(l);return p!==void 0?(a.literal=p,a.at=w(l,t),a):(a.expr=t.code(l),a.reactive=i?!1:xe(l),a.at=w(l,t),(l.type==="JSXElement"||l.type==="JSXFragment")&&(a.jsxElement=!0),a)}return a.literal=!0,a}function Ne(e,t){let n=e.value;return n==null?null:K(n)?JSON.stringify(T(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function ut(e,t){let n=[],r=[];for(let i of e){if(i.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(i.argument)});continue}if(i.type!=="JSXAttribute"||_(U(i.name)))continue;let o=i.name.type==="JSXNamespacedName"?i.name.namespace.name:null;if(o==="use"){let a=i.name.name.name;t.used.add(a);let s=Ne(i,t);r.push(s!=null?`[${a}, () => (${s})]`:`[${a}]`);continue}if(o==="oncapture"){let a=i.name.name.name.toLowerCase(),s=Ne(i,t)??"undefined";n.push({name:"on:"+a,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(pt(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function ve(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=E(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression,o=xe(i);n.push({kind:"expr",code:t.code(i),reactive:o,...o?{at:w(i,t)}:{}})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(ke(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function dt(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=U(t.name);if(_(n)){if(t.value&&!K(t.value))throw new m(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return P(n,t.value?T(t.value):null)}}}function ke(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:ve(e.children,t)};let{tag:n,component:r}=lt(e.openingElement.name,t),i=ut(e.openingElement.attributes,t),o=ve(e.children,t),a=t.sourceFile&&e.loc?.start?{file:t.sourceFile,line:e.loc.start.line,column:e.loc.start.column}:void 0;if(r){let s=dt(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...s?{load:s}:{},...a?{at:a}:{}}}return{kind:"element",tag:n,svg:st.has(n),props:i,children:o,static:!1,...a?{at:a}:{}}}function Re(e,t){let n=ke(e,t);return O(n),n}var ft=z.default.default??z.default;function be(e){return ft(e,{concise:!0}).code}function mt(e,t,n){let r=f.types.cloneNode(e,!0),i=f.types.file(f.types.program([f.types.expressionStatement(r)])),o=!1,a=(s,l,p)=>{for(let c of p)t.add(c);s.replaceWith(f.template.expression(l,{placeholderPattern:!1,plugins:["typescript"]})()),s.skip(),o=!0};return(0,f.traverse)(i,{"JSXElement|JSXFragment"(s){let l=s.node,p=gt(l,t,n);n?.(p);let{code:c,imports:u,templates:d}=b.emit(p,{});a(s,R(c,d),u)},TaggedTemplateExpression(s){let l=s.node.tag;if(!f.types.isIdentifier(l)||l.name!=="html"&&l.name!=="svg")return;let p=G(s.node,t,{svg:l.name==="svg",onNested:n});n?.(p);let{code:c,imports:u,templates:d}=b.emit(p,{});a(s,R(c,d),u)}}),o?i.program.body[0].expression:e}function L(e,t,n){return be(mt(e,t,n))}function W(e){return S($(e))}function gt(e,t=new Set,n){return Re(e,{code:i=>i.type==="JSXMemberExpression"?be(i):L(i,t,n),used:t})}var ht=q.default.default??q.default;function yt(e){return ht(e,{concise:!0}).code}function Nt(e,t,n){let r={code:L(e,t,n),reactive:W(e)};if(M.types.isArrowFunctionExpression(e)&&!M.types.isBlockStatement(e.body)){let i=e.body;r.arrow={params:e.params.map(o=>yt(o)),body:L(i,t,n),bodyReactive:W(i)}}return M.types.isObjectExpression(e)&&(r.object=!0),r}function Ee(e,t,n={}){let r=e.quasi,i=r.expressions.map(o=>Nt(o,t,n.onNested));return ye(vt(r),i,t,n)}function vt(e){let t=[];return e.quasis.forEach((n,r)=>{let i=n.value.cooked??n.value.raw;if(t.push({kind:"static",text:i,start:n.start??0}),r<e.expressions.length){let o=e.expressions[r];t.push({kind:"hole",index:r,start:o.start??0,end:o.end??0})}}),t}function G(e,t=new Set,n={}){let r=Ee(e,t,n);return O(r),r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{types as M}from"@babel/core";import de from"@babel/generator";import{parseTemplate as Je}from"@fluixi/template-parser";var me={kind:"eager"},fe=["pointerdown","focusin","keydown"],B=new Set(["eager","idle","visible","interaction","media","never"]),m=class extends Error{};function P(e){return e.startsWith("load:")}function I(e,t){let n=e.slice(5);if(!B.has(n))throw new m(`Unknown load strategy 'load:${n}'. Expected one of ${[...B].join(", ")}.`);switch(n){case"eager":return me;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return t?{kind:"visible",rootMargin:t}:{kind:"visible"};case"interaction":return{kind:"interaction",events:t?he(t):[...fe]};case"media":if(!t)throw new m(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new m(`Unhandled load strategy '${n}'.`)}}function he(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new m("'load:interaction' was given no event names.");return t}var ge=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),F={className:"class",htmlFor:"for"},ve=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),ke=new Set(["script","style","textarea","title"]);function A(e){return ke.has(e)}function z(e){return F[e]??e}function f(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!ve.has(e.name)}function J(e){if(!e.static||A(e.tag))return!1;for(let t of e.props)if(!f(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&J(t)))return!1;return!0}function h(e){let t=e.props.map(ye).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return ge.has(e.tag)?n:`${n}${e.children.map(xe).join("")}</${e.tag}>`}function xe(e){if(e.kind==="text")return Ee(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return h(e)}function ye(e){let t=F[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${Ne(String(n))}"`}function Ne(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Ee(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var Re="<!--fx-->",be="<!--fx/-->";function w(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Se(e){return e.kind==="text"||e.kind==="element"&&V(e)}function V(e){return e.svg||A(e.tag)||!e.props.every(t=>f(t))?!1:e.children.every(t=>Se(t)||w(t))}function $(e){if(w(e))return!0;let t=e.children;return t?t.some($):!1}function G(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||G(t))}function W(e){if(!V(e)||!G(e)||!e.children.some($))return null;let t=[],n=[],r=0,i=l=>{let s=`_n$${r++}`;return t.push({ref:s,expr:l}),s};return o(e,"_el$"),{html:Ie(e),tag:e.tag,steps:t,holes:n};function o(l,s){let a=-1;l.children.forEach((p,d)=>{$(p)&&(a=d)});let c=null;for(let p=0;p<=a;p++){let d=l.children[p],u=c?`${c}.nextSibling`:`${s}.firstChild`;if(w(d)){let H=i(u),_=i(`holeEnd(${H})`);n.push({parentRef:s,startRef:H,endRef:_,node:d}),c=_;continue}let S=i(u);d.kind==="element"&&$(d)&&o(d,S),c=S}}}function Ie(e){return h(q(e)).split(U).join(Re+be)}function q(e){return{...e,children:e.children.map(t=>w(t)?{kind:"text",value:U}:t.kind==="element"?q(t):t)}}var U="\0fx-hole\0";var L={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},st={version:2,module:"@fluixi/dom",symbols:[...L.symbols,"template","cloneTemplate","walk"]};var $e={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function we(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function Z(e){return we(e)?e:JSON.stringify(e)}function Te(e){return e.expr!==void 0?e.reactive?`() => (${e.expr})`:`(${e.expr})`:JSON.stringify(e.literal??!0)}function Ce(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function Pe(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${Z(s.name)}: ${Te(s)}`);t!=null&&o.push(`children: ${t}`);let l=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(s=>s.expr).join(", ")}, ${l})`):l}function Y(e,t,n){return e.length===1?g(e[0],t,n):`[${e.map(r=>g(r,t,n)).join(", ")}]`}function K(e,t,n,r,i){r.add("createMemo"),r.add("createComponent");let o=t.filter(c=>c.kind==="spread"),s=t.filter(c=>c.kind!=="spread").map(c=>`get ${Z(c.name)}() { return ${Ce(c)}; }`);n.length>0&&s.push(`get children() { return ${Y(n,r,i)}; }`);let a=`{ ${s.join(", ")} }`;return o.length>0&&(r.add("mergeProps"),a=`mergeProps(${o.map(c=>c.expr).join(", ")}, ${a})`),`createMemo(() => createComponent(${e}, ${a}))`}function Ae(e,t){let n=z(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var Q=!1;function g(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":return e.reactive?`() => (${e.code})`:`(${e.code})`;case"fragment":return e.children.length===0?"null":Y(e.children,t,n);case"component":return K(e.name,e.props,e.children,t,n);case"control":{let r=$e[e.control]??e.control;return t.add(r),K(r,e.props,e.children,t,n)}case"element":{if(n&&e.static&&!e.svg&&J(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;return n.push({id:s,html:h(e),tag:e.tag,svg:!1}),`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&Q){let s=W(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let a=`_tmpl$${n.length}`;n.push({id:a,html:s.html,tag:s.tag,svg:!1});let c=[`const _el$ = templateNode(${a}, ${JSON.stringify(s.tag)}, true);`];for(let p of s.steps)c.push(`const ${p.ref} = ${p.expr};`);for(let p of s.holes)c.push(`insert(${p.parentRef}, holeScope(${p.startRef}, () => (${g(p.node,t,n)})), ${p.endRef}, holeContent(${p.startRef}, ${p.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",o=[],l=e.svg?`${r}, true`:r;if(o.push(`const ${i} = createNativeElement(${l});`),e.props.length>0)if(!e.svg&&e.props.every(f))for(let s of e.props)o.push(Ae(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${Pe(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let a=g(s,t,n),c=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(c?`insert(${i}, ${a}, null);`:`insert(${i}, ${a});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function v(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(r=>[r.id,JSON.stringify(r.html)]));return e.replace(/_tmpl\$\d+/g,r=>n.get(r)??r)}var k={name:"imperative",contract:L,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return Q=t?.partialTemplates===!0,{code:g(e,n,r),imports:Array.from(n),templates:r}}};function x(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let i=0;i<t.length;i++)/[^ \t]/.test(t[i])&&(n=i);let r="";for(let i=0;i<t.length;i++){let o=t[i].replace(/\t/g," ");i!==0&&(o=o.replace(/^ +/,"")),i!==t.length-1&&(o=o.replace(/ +$/,"")),o&&(i!==n&&(o+=" "),r+=o)}return r}var ee=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function Le(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function te(e){return e.charAt(0).toUpperCase()+e.slice(1)}var D=class{constructor(t,n){this.holes=t;this.used=n}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:i}=k.emit(t,{});for(let o of r)this.used.add(o);return v(n,i)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.kind==="Element"||i.kind==="Component"){let l=i.attributes.find(s=>s.kind==="IfDirective");if(l&&l.kind==="IfDirective"){let s=r+1;s<t.length&&this.isBlankText(t[s])&&s++;let a=t[s],c=a&&(a.kind==="Element"||a.kind==="Component")&&a.attributes.some(p=>p.kind==="ElseDirective");n.push(this.lowerIf(i,l.hole,c?a:null)),c&&(r=s);continue}if(i.attributes.some(s=>s.kind==="EachDirective")){n.push(this.lowerEach(i));continue}}let o=this.lowerNode(i);o&&n.push(o)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&x(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=x(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(r=>r.kind==="Attribute"&&r.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let r=t.attributes.filter(o=>o!==n),i=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:r});return i.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),i}return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:i,rest:o}=this.partitionSlots(t.children);for(let[a,c]of i){let p=c.length===1?c[0]:{kind:"fragment",children:c},d={name:a,kind:"attr",expr:this.emit(p),jsxElement:!0},u=r.findIndex(S=>S.name===a);u>=0?r[u]=d:r.push(d)}let l=t.attributes.find(a=>a.kind==="LoadDirective"),s=l?I(`load:${l.strategy}`,l.modifier):void 0;return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...s?{load:s}:{}}}partitionSlots(t){let n=new Map,r=[];for(let i of t){if(i.kind==="Element"||i.kind==="Component"){let o=i.attributes.find(l=>l.kind==="Attribute"&&l.name==="slot");if(o&&o.value&&o.value.kind==="static"){let l={...i,attributes:i.attributes.filter(c=>c!==o)},s=l.kind==="Element"?this.lowerElement(l):this.lowerComponent(l),a=n.get(o.value.value)??[];a.push(s),n.set(o.value.value,a);continue}}r.push(i)}return{slots:n,rest:r}}lowerIf(t,n,r){let i=this.hole(n),o=[{name:"when",kind:"attr",expr:i.code,reactive:i.reactive}];if(r){let s=this.stripAndLower(r,a=>a.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(s),jsxElement:!0})}let l=this.stripAndLower(t,s=>s.kind==="IfDirective");return{kind:"component",name:"Show",props:o,children:[l]}}lowerEach(t){let n=t.attributes.find(a=>a.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),i=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive}];if(n.key){let a="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;i.push({name:"by",kind:"attr",expr:a})}let o=this.itemArrow(t),l;if(o){let a={kind:"expr",code:o.body,reactive:o.bodyReactive},c=this.rebuildWithChildren(t,[a]);l=`(${o.params.join(", ")}) => (${this.emit(c)})`}else{let a=this.stripAndLower(t,c=>c.kind==="EachDirective");l=`() => (${this.emit(a)})`}return{kind:"component",name:"For",props:i,children:[{kind:"expr",code:l,reactive:!1}]}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(i=>!n(i))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(i=>i.kind!=="EachDirective"));return t.kind==="Element"?{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1}:{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],i=!1,o=[],l=!1,s=[];for(let a of t)switch(a.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(a));break;case"PropertyBinding":n.push({name:a.name,kind:"prop",expr:this.hole(a.hole).code,reactive:this.hole(a.hole).reactive});break;case"EventBinding":n.push(this.eventProp(a));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(a.hole).code,reactive:this.hole(a.hole).reactive});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(a.hole).code});break;case"ClassDirective":{let c=this.hole(a.hole);r.push(`${JSON.stringify(a.name)}: ${c.code}`),i=i||c.reactive;break}case"StyleDirective":{let c=this.hole(a.hole);o.push(`${JSON.stringify(a.name)}: ${c.code}`),l=l||c.reactive;break}case"BindDirective":n.push(...this.bindProps(a.name,this.hole(a.hole).code));break;case"UseDirective":{let c=a.name??(a.hole!=null?this.hole(a.hole).code:null);if(!c)break;s.push(a.name!=null&&a.hole!=null?`[${c}, () => (${this.hole(a.hole).code})]`:`[${c}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:i}),o.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${o.join(", ")} }`,reactive:l}),s.length>0&&n.push({name:"use",kind:"attr",expr:`[${s.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),r=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+te(t.name),kind:"event",event:{name:n,delegated:ee.has(n)},expr:r};let o=this.wrapHandler(r,t.modifiers),l=this.eventOptions(t.modifiers),s=l?`[${o}, ${l}]`:o;return{name:"on:"+n,kind:"attr",expr:s}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",i=[];return n.includes("prevent")&&i.push("e.preventDefault();"),n.includes("stop")&&i.push("e.stopPropagation();"),!r&&i.length===0?t:`(e) => { ${r}${i.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=t==="checked",i=r?"change":"input",o=r?"checked":"value";this.used.add("bindPair");let l=`bindPair(${n})`;return[{name:t,kind:"attr",expr:`${l}[0]()`,reactive:!0},{name:"on"+te(i),kind:"event",event:{name:i,delegated:ee.has(i)},expr:`(e) => ${l}[1](e.target.${o})`}]}plainAttr(t){let n=t.value,r=t.name;t.name==="class"?r=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(r="innerHTML");let o={name:r,kind:"attr"};if(n==null)return o.literal=!0,o;if(n.kind==="static")return o.literal=n.value,o;if(n.kind==="hole"){let a=this.hole(n.hole);return o.expr=a.code,o.reactive=a.reactive,o}let l=!1,s=n.parts.map(a=>{if("text"in a)return Le(a.text);let c=this.hole(a.hole);return l=l||c.reactive,"${"+c.code+"}"}).join("");return o.expr="`"+s+"`",o.reactive=l,o}};function ne(e,t,n,r={}){let{root:i}=Je(e,{svg:r.svg});return new D(t,n).lowerRoot(i.children)}import{types as b,traverse as We,template as qe}from"@babel/core";import le from"@babel/generator";var De="children";function y(e){switch(e.kind){case"call":return!0;case"member":return e.property!==De;case"compound":return e.parts.some(y);case"opaque":return!1}}var je=new Set(["CallExpression","OptionalCallExpression"]),Oe=new Set(["MemberExpression","OptionalMemberExpression"]);function E(e){if(!e)return{kind:"opaque"};if(je.has(e.type))return{kind:"call"};if(Oe.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(N)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(N)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(N)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>N(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(N)}:{kind:"opaque"}}var N=e=>E(e);function Xe(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function T(e){let t=[],n=new Map,r=i=>{switch(i.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let o of i.children)r(o);return!1;case"fragment":for(let o of i.children)r(o);return!1;case"element":{let o=!0;for(let s of i.children)r(s)||(o=!1);let l;for(let s of i.props)if(l=Xe(s),l)break;return!l&&!o&&(l=Me(i)),i.static=!l,l?n.set(i,l):t.push(i),i.static}default:return!1}};for(let i of Array.isArray(e)?e:[e])r(i);return{staticElements:t,reasons:n}}function Me(e){for(let t of e.children){if(t.kind==="expr")return"expression-child";if(t.kind==="component")return"component-child";if(t.kind==="control")return"control-child";if(t.kind==="element"&&!t.static||t.kind==="fragment")return"expression-child"}return"expression-child"}var He=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),_e=/^on[A-Z]/,Be=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),oe=e=>y(E(e));function R(e){if(e.type==="StringLiteral"||e.type==="NumericLiteral"||e.type==="BooleanLiteral"||e.type==="Literal"&&(typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"))return e.value}var j=e=>!!e&&typeof R(e)=="string";function Fe(e,t){return e.type==="JSXIdentifier"?{tag:e.name,component:e.name[0]!==e.name[0].toLowerCase()}:e.type==="JSXMemberExpression"?{tag:t.code(e),component:!0}:e.type==="JSXNamespacedName"?{tag:`${e.namespace.name}:${e.name.name}`,component:!1}:{tag:"div",component:!1}}function O(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function ze(e,t){let n=O(e.name),r=_e.test(n),i=r||n.startsWith("on:")||n==="ref",l={name:n,kind:r?"event":"attr"};if(r){let a=n.slice(2).toLowerCase();l.event={name:a,delegated:Be.has(a)}}let s=e.value;if(s==null)return l.literal=!0,l;if(j(s))return l.literal=R(s),l;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let a=s.expression,c=R(a);return c!==void 0?(l.literal=c,l):(l.expr=t.code(a),l.reactive=i?!1:oe(a),(a.type==="JSXElement"||a.type==="JSXFragment")&&(l.jsxElement=!0),l)}return l.literal=!0,l}function re(e,t){let n=e.value;return n==null?null:j(n)?JSON.stringify(R(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function Ve(e,t){let n=[],r=[];for(let i of e){if(i.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(i.argument)});continue}if(i.type!=="JSXAttribute"||P(O(i.name)))continue;let o=i.name.type==="JSXNamespacedName"?i.name.namespace.name:null;if(o==="use"){let l=i.name.name.name;t.used.add(l);let s=re(i,t);r.push(s!=null?`[${l}, () => (${s})]`:`[${l}]`);continue}if(o==="oncapture"){let l=i.name.name.name.toLowerCase(),s=re(i,t)??"undefined";n.push({name:"on:"+l,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(ze(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function ie(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=x(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression;n.push({kind:"expr",code:t.code(i),reactive:oe(i)})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(se(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function Ge(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=O(t.name);if(P(n)){if(t.value&&!j(t.value))throw new m(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return I(n,t.value?R(t.value):null)}}}function se(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:ie(e.children,t)};let{tag:n,component:r}=Fe(e.openingElement.name,t),i=Ve(e.openingElement.attributes,t),o=ie(e.children,t);if(r){let l=Ge(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...l?{load:l}:{}}}return{kind:"element",tag:n,svg:He.has(n),props:i,children:o,static:!1}}function ae(e,t){let n=se(e,t);return T(n),n}var Ue=le.default??le;function ce(e){return Ue(e,{concise:!0}).code}function Ke(e,t,n){let r=b.cloneNode(e,!0),i=b.file(b.program([b.expressionStatement(r)])),o=!1,l=(s,a,c)=>{for(let p of c)t.add(p);s.replaceWith(qe.expression(a,{placeholderPattern:!1,plugins:["typescript"]})()),s.skip(),o=!0};return We(i,{"JSXElement|JSXFragment"(s){let a=s.node,c=Ze(a,t,n);n?.(c);let{code:p,imports:d,templates:u}=k.emit(c,{});l(s,v(p,u),d)},TaggedTemplateExpression(s){let a=s.node.tag;if(!b.isIdentifier(a)||a.name!=="html"&&a.name!=="svg")return;let c=pe(s.node,t,{svg:a.name==="svg",onNested:n});n?.(c);let{code:p,imports:d,templates:u}=k.emit(c,{});l(s,v(p,u),d)}}),o?i.program.body[0].expression:e}function C(e,t,n){return ce(Ke(e,t,n))}function X(e){return y(E(e))}function Ze(e,t=new Set,n){return ae(e,{code:i=>i.type==="JSXMemberExpression"?ce(i):C(i,t,n),used:t})}var Ye=de.default??de;function Qe(e){return Ye(e,{concise:!0}).code}function et(e,t,n){let r={code:C(e,t,n),reactive:X(e)};if(M.isArrowFunctionExpression(e)&&!M.isBlockStatement(e.body)){let i=e.body;r.arrow={params:e.params.map(o=>Qe(o)),body:C(i,t,n),bodyReactive:X(i)}}return M.isObjectExpression(e)&&(r.object=!0),r}function ue(e,t,n={}){let r=e.quasi,i=r.expressions.map(o=>et(o,t,n.onNested));return ne(tt(r),i,t,n)}function tt(e){let t=[];return e.quasis.forEach((n,r)=>{let i=n.value.cooked??n.value.raw;if(t.push({kind:"static",text:i,start:n.start??0}),r<e.expressions.length){let o=e.expressions[r];t.push({kind:"hole",index:r,start:o.start??0,end:o.end??0})}}),t}function pe(e,t=new Set,n={}){let r=ue(e,t,n);return T(r),r}export{pe as buildIRFromLit};
|
|
1
|
+
import{types as U}from"@babel/core";import ve from"@babel/generator";import{parseTemplate as Be}from"@fluixi/template-parser";var ke={kind:"eager"},Re=["pointerdown","focusin","keydown"],z=new Set(["eager","idle","visible","interaction","media","never"]),f=class extends Error{};function L(e){return e.startsWith("load:")}function C(e,t){let n=e.slice(5);if(!z.has(n))throw new f(`Unknown load strategy 'load:${n}'. Expected one of ${[...z].join(", ")}.`);switch(n){case"eager":return ke;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return t?{kind:"visible",rootMargin:t}:{kind:"visible"};case"interaction":return{kind:"interaction",events:t?be(t):[...Re]};case"media":if(!t)throw new f(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new f(`Unhandled load strategy '${n}'.`)}}function be(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new f("'load:interaction' was given no event names.");return t}var Ee=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),W={className:"class",htmlFor:"for"},Se=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),Ie=new Set(["script","style","textarea","title"]);function M(e){return Ie.has(e)}function G(e){return W[e]??e}function y(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!Se.has(e.name)}function _(e){if(!e.static||M(e.tag))return!1;for(let t of e.props)if(!y(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&_(t)))return!1;return!0}function N(e){let t=e.props.map(we).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return Ee.has(e.tag)?n:`${n}${e.children.map($e).join("")}</${e.tag}>`}function $e(e){if(e.kind==="text")return Ae(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return N(e)}function we(e){let t=W[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${Te(String(n))}"`}function Te(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Ae(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function j(e){let t=[],n,r=i=>{n??=i.at?.file,t.push(i.at?.line??0,i.at?.column??0);for(let o of i.children)o.kind==="element"&&r(o)};return r(e),n&&t.some(i=>i!==0)?{file:n,pos:t}:void 0}var Ce="<!--fx-->",Pe="<!--fx/-->";function J(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Je(e){return e.kind==="text"||e.kind==="element"&&q(e)}function q(e){return e.svg||M(e.tag)||!e.props.every(t=>y(t))?!1:e.children.every(t=>Je(t)||J(t))}function P(e){if(J(e))return!0;let t=e.children;return t?t.some(P):!1}function Z(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||Z(t))}function Y(e){if(!q(e)||!Z(e)||!e.children.some(P))return null;let t=[],n=[],r=0,i=a=>{let s=`_n$${r++}`;return t.push({ref:s,expr:a}),s};return o(e,"_el$"),{html:De(e),tag:e.tag,steps:t,holes:n};function o(a,s){let l=-1;a.children.forEach((c,u)=>{P(c)&&(l=u)});let p=null;for(let c=0;c<=l;c++){let u=a.children[c],d=p?`${p}.nextSibling`:`${s}.firstChild`;if(J(u)){let h=i(d),A=i(`holeEnd(${h})`);n.push({parentRef:s,startRef:h,endRef:A,node:u}),p=A;continue}let g=i(d);u.kind==="element"&&P(u)&&o(u,g),p=g}}}function De(e){return N(Q(e)).split(ee).join(Ce+Pe)}function Q(e){return{...e,children:e.children.map(t=>J(t)?{kind:"text",value:ee}:t.kind==="element"?Q(t):t)}}var ee="\0fx-hole\0";var H={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},ht={version:2,module:"@fluixi/dom",symbols:[...H.symbols,"template","cloneTemplate","walk"]};var m="@fluixi/reactive/signal",F={$signal:{export:"signal",module:m,returns:"signal-handle"},$memo:{export:"memo",module:m,returns:"memo-handle"},$effect:{export:"effect",module:m,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:m,returns:"resource-handle"},$selector:{export:"createSelector",module:m,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:m,returns:"memo-accessor"},$untrack:{export:"untrack",module:m,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}};var Nt=new RegExp(`\\$(?:${Object.keys(F).map(e=>e.slice(1)).join("|")})\\s*\\(`);var te="__fx_source";var Oe="__fx_hole",v=(e,t,n,r)=>`(globalThis.${Oe} ?? ((f) => f))(${e},${t},${n}${r===void 0?"":`,${JSON.stringify(r)}`})`,Le="__fx_props",ne=(e,t)=>`(globalThis.${Le} ?? ((p) => p))(${e},${JSON.stringify(t)})`;var Me={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function _e(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function oe(e){return _e(e)?e:JSON.stringify(e)}function je(e){if(e.expr!==void 0){if(e.name==="ref"&&e.at)return v(`(${e.expr})`,e.at.line,e.at.column,e.expr);if(!e.reactive)return`(${e.expr})`;let t=`() => (${e.expr})`;return e.at?v(t,e.at.line,e.at.column,e.directive):t}return JSON.stringify(e.literal??!0)}function He(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function Fe(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${oe(s.name)}: ${je(s)}`);t!=null&&o.push(`children: ${t}`);let a=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(s=>s.expr).join(", ")}, ${a})`):a}function re(e,t){return t?v(e,t.line,t.column):e}function se(e,t,n){return e.length===1?x(e[0],t,n):`[${e.map(r=>x(r,t,n)).join(", ")}]`}function ie(e,t,n,r,i,o){r.add("createMemo"),r.add("createComponent");let a=t.filter(d=>d.kind==="spread"),s=t.filter(d=>d.kind!=="spread"),l=s.map(d=>`get ${oe(d.name)}() { return ${He(d)}; }`);n.length>0&&l.push(`get children() { return ${se(n,r,i)}; }`);let p=`{ ${l.join(", ")} }`;a.length>0&&(r.add("mergeProps"),p=`mergeProps(${a.map(d=>d.expr).join(", ")}, ${p})`);let c={};for(let d of s)d.at&&(c[d.name]=[d.at.line,d.at.column]);return Object.keys(c).length&&(p=ne(p,c)),`createMemo((${o?`globalThis.${te}?.(${JSON.stringify(o.file)},${o.line},${o.column},${JSON.stringify(e)}), `:""}() => createComponent(${e}, ${p})))`}function Xe(e,t){let n=G(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var ae=!1;function x(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":{if(!e.reactive)return`(${e.code})`;let r=`() => (${e.code})`;return e.at?v(r,e.at.line,e.at.column):r}case"fragment":return e.children.length===0?"null":se(e.children,t,n);case"component":return re(ie(e.name,e.props,e.children,t,n,e.at),e.bindAt??e.at);case"control":{let r=Me[e.control]??e.control;return t.add(r),re(ie(r,e.props,e.children,t,n),e.bindAt)}case"element":{if(n&&e.static&&!e.svg&&_(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;n.push({id:s,html:N(e),tag:e.tag,svg:!1});let l=j(e);return l?`templateNode(${s}, ${JSON.stringify(e.tag)}, false, false, ${JSON.stringify(l)})`:`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&ae){let s=Y(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let l=`_tmpl$${n.length}`;n.push({id:l,html:s.html,tag:s.tag,svg:!1});let p=j(e),c=[`const _el$ = templateNode(${l}, ${JSON.stringify(s.tag)}, true${p?`, false, ${JSON.stringify(p)}`:""});`];for(let u of s.steps)c.push(`const ${u.ref} = ${u.expr};`);for(let u of s.holes)c.push(`insert(${u.parentRef}, holeScope(${u.startRef}, () => (${x(u.node,t,n)})), ${u.endRef}, holeContent(${u.startRef}, ${u.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",o=[],a=e.at?`${r}, ${e.svg}, ${JSON.stringify(e.at)}`:e.svg?`${r}, true`:r;if(o.push(`const ${i} = createNativeElement(${a});`),e.props.length>0)if(!e.svg&&e.props.every(y))for(let s of e.props)o.push(Xe(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${Fe(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let l=x(s,t,n),p=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(p?`insert(${i}, ${l}, null);`:`insert(${i}, ${l});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function k(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(r=>[r.id,JSON.stringify(r.html)]));return e.replace(/_tmpl\$\d+/g,r=>n.get(r)??r)}var R={name:"imperative",contract:H,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return ae=t?.partialTemplates===!0,{code:x(e,n,r),imports:Array.from(n),templates:r}}};function b(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let i=0;i<t.length;i++)/[^ \t]/.test(t[i])&&(n=i);let r="";for(let i=0;i<t.length;i++){let o=t[i].replace(/\t/g," ");i!==0&&(o=o.replace(/^ +/,"")),i!==t.length-1&&(o=o.replace(/ +$/,"")),o&&(i!==n&&(o+=" "),r+=o)}return r}var ce=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function Ve(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function le(e){return e.charAt(0).toUpperCase()+e.slice(1)}var X=class{constructor(t,n,r,i){this.holes=t;this.used=n;this.sourceFile=r;this.positionAt=i}tagAt(t){let n=t.loc?.start;if(!this.sourceFile||!this.positionAt||n==null)return;let{line:r,column:i}=this.positionAt(n);return{file:this.sourceFile,line:r,column:i}}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:i}=R.emit(t,{});for(let o of r)this.used.add(o);return k(n,i)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.kind==="Element"||i.kind==="Component"){let a=i.attributes.find(s=>s.kind==="IfDirective");if(a&&a.kind==="IfDirective"){let s=r+1;s<t.length&&this.isBlankText(t[s])&&s++;let l=t[s],p=l&&(l.kind==="Element"||l.kind==="Component")&&l.attributes.some(c=>c.kind==="ElseDirective");n.push(this.lowerIf(i,a.hole,p?l:null)),p&&(r=s);continue}if(i.attributes.some(s=>s.kind==="EachDirective")){n.push(this.lowerEach(i));continue}}let o=this.lowerNode(i);o&&n.push(o)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&b(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=b(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive,...n.at?{at:n.at}:{}}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(i=>i.kind==="Attribute"&&i.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let i=t.attributes.filter(a=>a!==n),o=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:i});return o.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),o}let r=this.tagAt(t);return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1,...r?{at:r}:{}}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:i,rest:o}=this.partitionSlots(t.children);for(let[c,u]of i){let d=u.length===1?u[0]:{kind:"fragment",children:u},g={name:c,kind:"attr",expr:this.emit(d),jsxElement:!0},h=r.findIndex(A=>A.name===c);h>=0?r[h]=g:r.push(g)}let a=t.attributes.find(c=>c.kind==="LoadDirective"),s=a?C(`load:${a.strategy}`,a.modifier):void 0,l=r.find(c=>c.at&&c.reactive)?.at,p=this.tagAt(t);return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...p?{at:p}:{},...l?{bindAt:l}:{},...s?{load:s}:{}}}partitionSlots(t){let n=new Map,r=[];for(let i of t){if(i.kind==="Element"||i.kind==="Component"){let o=i.attributes.find(a=>a.kind==="Attribute"&&a.name==="slot");if(o&&o.value&&o.value.kind==="static"){let a={...i,attributes:i.attributes.filter(p=>p!==o)},s=a.kind==="Element"?this.lowerElement(a):this.lowerComponent(a),l=n.get(o.value.value)??[];l.push(s),n.set(o.value.value,l);continue}}r.push(i)}return{slots:n,rest:r}}lowerIf(t,n,r){let i=this.hole(n),o=[{name:"when",kind:"attr",expr:i.code,reactive:i.reactive,...i.at?{at:i.at}:{}}];if(r){let l=this.stripAndLower(r,p=>p.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(l),jsxElement:!0})}let a=this.stripAndLower(t,l=>l.kind==="IfDirective"),s=this.tagAt(t);return{kind:"component",name:"Show",props:o,children:[a],...s?{at:s}:{},...i.at?{bindAt:i.at}:{}}}lowerEach(t){let n=t.attributes.find(p=>p.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),i=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive,...r.at?{at:r.at}:{}}];if(n.key){let p="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;i.push({name:"by",kind:"attr",expr:p})}let o=this.itemArrow(t),a;if(o){let p={kind:"expr",code:o.body,reactive:o.bodyReactive},c=this.rebuildWithChildren(t,[p]);a=`(${o.params.join(", ")}) => (${this.emit(c)})`}else{let p=this.stripAndLower(t,c=>c.kind==="EachDirective");a=`() => (${this.emit(p)})`}let s=[{kind:"expr",code:a,reactive:!1}],l=this.tagAt(t);return{kind:"component",name:"For",props:i,children:s,...l?{at:l}:{},...r.at?{bindAt:r.at}:{}}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(i=>!n(i))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(i=>i.kind!=="EachDirective"));if(t.kind==="Element"){let i=this.tagAt(t);return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1,...i?{at:i}:{}}}return{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],i=!1,o,a=[],s=!1,l,p=[];for(let c of t)switch(c.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(c));break;case"PropertyBinding":n.push({name:c.name,kind:"prop",expr:this.hole(c.hole).code,reactive:this.hole(c.hole).reactive,...this.hole(c.hole).at?{at:this.hole(c.hole).at}:{}});break;case"EventBinding":n.push(this.eventProp(c));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(c.hole).code,reactive:this.hole(c.hole).reactive,...this.hole(c.hole).at?{at:this.hole(c.hole).at}:{}});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(c.hole).code});break;case"ClassDirective":{let u=this.hole(c.hole);r.push(`${JSON.stringify(c.name)}: ${u.code}`),i=i||u.reactive,o??=u.at;break}case"StyleDirective":{let u=this.hole(c.hole);a.push(`${JSON.stringify(c.name)}: ${u.code}`),s=s||u.reactive,l??=u.at;break}case"BindDirective":n.push(...this.bindProps(c.name,this.hole(c.hole)));break;case"UseDirective":{let u=c.name??(c.hole!=null?this.hole(c.hole).code:null);if(!u)break;p.push(c.name!=null&&c.hole!=null?`[${u}, () => (${this.hole(c.hole).code})]`:`[${u}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:i,...o?{at:o}:{}}),a.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${a.join(", ")} }`,reactive:s,...l?{at:l}:{}}),p.length>0&&n.push({name:"use",kind:"attr",expr:`[${p.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),r=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+le(t.name),kind:"event",event:{name:n,delegated:ce.has(n)},expr:r};let o=this.wrapHandler(r,t.modifiers),a=this.eventOptions(t.modifiers),s=a?`[${o}, ${a}]`:o;return{name:"on:"+n,kind:"attr",expr:s}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",i=[];return n.includes("prevent")&&i.push("e.preventDefault();"),n.includes("stop")&&i.push("e.stopPropagation();"),!r&&i.length===0?t:`(e) => { ${r}${i.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=n.code,i=t==="checked",o=i?"change":"input",a=i?"checked":"value";this.used.add("bindPair");let s=`bindPair(${r})`;return[{name:t,kind:"attr",expr:`${s}[0]()`,reactive:!0,directive:`bind:${t}`,...n.at?{at:n.at}:{}},{name:"on"+le(o),kind:"event",event:{name:o,delegated:ce.has(o)},expr:`(e) => ${s}[1](e.target.${a})`}]}plainAttr(t){let n=t.value,r=t.name;t.name==="class"?r=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(r="innerHTML");let o={name:r,kind:"attr"};if(n==null)return o.literal=!0,o;if(n.kind==="static")return o.literal=n.value,o;if(n.kind==="hole"){let p=this.hole(n.hole);return o.expr=p.code,o.reactive=p.reactive,p.at&&(o.at=p.at),o}let a=!1,s,l=n.parts.map(p=>{if("text"in p)return Ve(p.text);let c=this.hole(p.hole);return a=a||c.reactive,s??=c.at,"${"+c.code+"}"}).join("");return o.expr="`"+l+"`",o.reactive=a,s&&(o.at=s),o}};function pe(e,t,n,r={}){let{root:i}=Be(e,{svg:r.svg});return new X(t,n,r.sourceFile,r.positionAt).lowerRoot(i.children)}import{types as T,traverse as rt,template as it}from"@babel/core";import he from"@babel/generator";var Ke="children";function E(e){switch(e.kind){case"call":return!0;case"member":return e.property!==Ke;case"compound":return e.parts.some(E);case"opaque":return!1}}var Ue=new Set(["CallExpression","OptionalCallExpression"]),ze=new Set(["MemberExpression","OptionalMemberExpression"]);function I(e){if(!e)return{kind:"opaque"};if(Ue.has(e.type))return{kind:"call"};if(ze.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(S)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(S)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(S)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>S(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(S)}:{kind:"opaque"}}var S=e=>I(e);function We(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function D(e){let t=[],n=new Map,r=i=>{switch(i.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let o of i.children)r(o);return!1;case"fragment":for(let o of i.children)r(o);return!1;case"element":{let o=!0;for(let s of i.children)r(s)||(o=!1);let a;for(let s of i.props)if(a=We(s),a)break;return!a&&!o&&(a=Ge(i)),i.static=!a,a?n.set(i,a):t.push(i),i.static}default:return!1}};for(let i of Array.isArray(e)?e:[e])r(i);return{staticElements:t,reasons:n}}function Ge(e){for(let t of e.children){if(t.kind==="expr")return"expression-child";if(t.kind==="component")return"component-child";if(t.kind==="control")return"control-child";if(t.kind==="element"&&!t.static||t.kind==="fragment")return"expression-child"}return"expression-child"}var qe=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),Ze=/^on[A-Z]/,Ye=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),fe=e=>E(I(e)),$=(e,t)=>{if(!t.sourceFile)return;let n=e.loc?.start;return n?{line:n.line,column:n.column}:void 0};function w(e){if(e.type==="StringLiteral"||e.type==="NumericLiteral"||e.type==="BooleanLiteral"||e.type==="Literal"&&(typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"))return e.value}var B=e=>!!e&&typeof w(e)=="string";function Qe(e,t){return e.type==="JSXIdentifier"?{tag:e.name,component:e.name[0]!==e.name[0].toLowerCase()}:e.type==="JSXMemberExpression"?{tag:t.code(e),component:!0}:e.type==="JSXNamespacedName"?{tag:`${e.namespace.name}:${e.name.name}`,component:!1}:{tag:"div",component:!1}}function V(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function et(e,t){let n=V(e.name),r=Ze.test(n),i=r||n.startsWith("on:")||n==="ref",a={name:n,kind:r?"event":"attr"};if(r){let l=n.slice(2).toLowerCase();a.event={name:l,delegated:Ye.has(l)}}let s=e.value;if(s==null)return a.literal=!0,a.at=$(e,t),a;if(B(s))return a.literal=w(s),a.at=$(s,t),a;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let l=s.expression,p=w(l);return p!==void 0?(a.literal=p,a.at=$(l,t),a):(a.expr=t.code(l),a.reactive=i?!1:fe(l),a.at=$(l,t),(l.type==="JSXElement"||l.type==="JSXFragment")&&(a.jsxElement=!0),a)}return a.literal=!0,a}function ue(e,t){let n=e.value;return n==null?null:B(n)?JSON.stringify(w(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function tt(e,t){let n=[],r=[];for(let i of e){if(i.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(i.argument)});continue}if(i.type!=="JSXAttribute"||L(V(i.name)))continue;let o=i.name.type==="JSXNamespacedName"?i.name.namespace.name:null;if(o==="use"){let a=i.name.name.name;t.used.add(a);let s=ue(i,t);r.push(s!=null?`[${a}, () => (${s})]`:`[${a}]`);continue}if(o==="oncapture"){let a=i.name.name.name.toLowerCase(),s=ue(i,t)??"undefined";n.push({name:"on:"+a,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(et(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function de(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=b(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression,o=fe(i);n.push({kind:"expr",code:t.code(i),reactive:o,...o?{at:$(i,t)}:{}})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(me(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function nt(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=V(t.name);if(L(n)){if(t.value&&!B(t.value))throw new f(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return C(n,t.value?w(t.value):null)}}}function me(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:de(e.children,t)};let{tag:n,component:r}=Qe(e.openingElement.name,t),i=tt(e.openingElement.attributes,t),o=de(e.children,t),a=t.sourceFile&&e.loc?.start?{file:t.sourceFile,line:e.loc.start.line,column:e.loc.start.column}:void 0;if(r){let s=nt(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...s?{load:s}:{},...a?{at:a}:{}}}return{kind:"element",tag:n,svg:qe.has(n),props:i,children:o,static:!1,...a?{at:a}:{}}}function ge(e,t){let n=me(e,t);return D(n),n}var ot=he.default??he;function ye(e){return ot(e,{concise:!0}).code}function st(e,t,n){let r=T.cloneNode(e,!0),i=T.file(T.program([T.expressionStatement(r)])),o=!1,a=(s,l,p)=>{for(let c of p)t.add(c);s.replaceWith(it.expression(l,{placeholderPattern:!1,plugins:["typescript"]})()),s.skip(),o=!0};return rt(i,{"JSXElement|JSXFragment"(s){let l=s.node,p=at(l,t,n);n?.(p);let{code:c,imports:u,templates:d}=R.emit(p,{});a(s,k(c,d),u)},TaggedTemplateExpression(s){let l=s.node.tag;if(!T.isIdentifier(l)||l.name!=="html"&&l.name!=="svg")return;let p=Ne(s.node,t,{svg:l.name==="svg",onNested:n});n?.(p);let{code:c,imports:u,templates:d}=R.emit(p,{});a(s,k(c,d),u)}}),o?i.program.body[0].expression:e}function O(e,t,n){return ye(st(e,t,n))}function K(e){return E(I(e))}function at(e,t=new Set,n){return ge(e,{code:i=>i.type==="JSXMemberExpression"?ye(i):O(i,t,n),used:t})}var ct=ve.default??ve;function lt(e){return ct(e,{concise:!0}).code}function pt(e,t,n){let r={code:O(e,t,n),reactive:K(e)};if(U.isArrowFunctionExpression(e)&&!U.isBlockStatement(e.body)){let i=e.body;r.arrow={params:e.params.map(o=>lt(o)),body:O(i,t,n),bodyReactive:K(i)}}return U.isObjectExpression(e)&&(r.object=!0),r}function xe(e,t,n={}){let r=e.quasi,i=r.expressions.map(o=>pt(o,t,n.onNested));return pe(ut(r),i,t,n)}function ut(e){let t=[];return e.quasis.forEach((n,r)=>{let i=n.value.cooked??n.value.raw;if(t.push({kind:"static",text:i,start:n.start??0}),r<e.expressions.length){let o=e.expressions[r];t.push({kind:"hole",index:r,start:o.start??0,end:o.end??0})}}),t}function Ne(e,t=new Set,n={}){let r=xe(e,t,n);return D(r),r}export{Ne as buildIRFromLit};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var ke=Object.create;var $=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Ne=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty;var Re=(e,t)=>{for(var n in t)$(e,n,{get:t[n],enumerable:!0})},V=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ye(t))!Ee.call(e,i)&&i!==n&&$(e,i,{get:()=>t[i],enumerable:!(r=xe(t,i))||r.enumerable});return e};var G=(e,t,n)=>(n=e!=null?ke(Ne(e)):{},V(t||!e||!e.__esModule?$(n,"default",{value:e,enumerable:!0}):n,e)),be=e=>V($({},"__esModule",{value:!0}),e);var dt={};Re(dt,{SVG_TAGS:()=>pt,buildIR:()=>ve,genExpr:()=>N,isReactiveExpr:()=>A});module.exports=be(dt);var u=require("@babel/core"),B=G(require("@babel/generator"),1);var Se=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),W={className:"class",htmlFor:"for"},Ie=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),$e=new Set(["script","style","textarea","title"]);function L(e){return $e.has(e)}function q(e){return W[e]??e}function h(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!Ie.has(e.name)}function D(e){if(!e.static||L(e.tag))return!1;for(let t of e.props)if(!h(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&D(t)))return!1;return!0}function g(e){let t=e.props.map(Te).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return Se.has(e.tag)?n:`${n}${e.children.map(we).join("")}</${e.tag}>`}function we(e){if(e.kind==="text")return Pe(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return g(e)}function Te(e){let t=W[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${Ce(String(n))}"`}function Ce(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Pe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var Ae="<!--fx-->",Je="<!--fx/-->";function T(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Le(e){return e.kind==="text"||e.kind==="element"&&U(e)}function U(e){return e.svg||L(e.tag)||!e.props.every(t=>h(t))?!1:e.children.every(t=>Le(t)||T(t))}function w(e){if(T(e))return!0;let t=e.children;return t?t.some(w):!1}function K(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||K(t))}function Z(e){if(!U(e)||!K(e)||!e.children.some(w))return null;let t=[],n=[],r=0,i=l=>{let s=`_n$${r++}`;return t.push({ref:s,expr:l}),s};return o(e,"_el$"),{html:De(e),tag:e.tag,steps:t,holes:n};function o(l,s){let a=-1;l.children.forEach((p,d)=>{w(p)&&(a=d)});let c=null;for(let p=0;p<=a;p++){let d=l.children[p],m=c?`${c}.nextSibling`:`${s}.firstChild`;if(T(d)){let F=i(m),z=i(`holeEnd(${F})`);n.push({parentRef:s,startRef:F,endRef:z,node:d}),c=z;continue}let I=i(m);d.kind==="element"&&w(d)&&o(d,I),c=I}}}function De(e){return g(Y(e)).split(Q).join(Ae+Je)}function Y(e){return{...e,children:e.children.map(t=>T(t)?{kind:"text",value:Q}:t.kind==="element"?Y(t):t)}}var Q="\0fx-hole\0";var j={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},gt={version:2,module:"@fluixi/dom",symbols:[...j.symbols,"template","cloneTemplate","walk"]};var je={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function Oe(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function te(e){return Oe(e)?e:JSON.stringify(e)}function Xe(e){return e.expr!==void 0?e.reactive?`() => (${e.expr})`:`(${e.expr})`:JSON.stringify(e.literal??!0)}function Me(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function He(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${te(s.name)}: ${Xe(s)}`);t!=null&&o.push(`children: ${t}`);let l=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(s=>s.expr).join(", ")}, ${l})`):l}function ne(e,t,n){return e.length===1?v(e[0],t,n):`[${e.map(r=>v(r,t,n)).join(", ")}]`}function ee(e,t,n,r,i){r.add("createMemo"),r.add("createComponent");let o=t.filter(c=>c.kind==="spread"),s=t.filter(c=>c.kind!=="spread").map(c=>`get ${te(c.name)}() { return ${Me(c)}; }`);n.length>0&&s.push(`get children() { return ${ne(n,r,i)}; }`);let a=`{ ${s.join(", ")} }`;return o.length>0&&(r.add("mergeProps"),a=`mergeProps(${o.map(c=>c.expr).join(", ")}, ${a})`),`createMemo(() => createComponent(${e}, ${a}))`}function _e(e,t){let n=q(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var re=!1;function v(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":return e.reactive?`() => (${e.code})`:`(${e.code})`;case"fragment":return e.children.length===0?"null":ne(e.children,t,n);case"component":return ee(e.name,e.props,e.children,t,n);case"control":{let r=je[e.control]??e.control;return t.add(r),ee(r,e.props,e.children,t,n)}case"element":{if(n&&e.static&&!e.svg&&D(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;return n.push({id:s,html:g(e),tag:e.tag,svg:!1}),`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&re){let s=Z(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let a=`_tmpl$${n.length}`;n.push({id:a,html:s.html,tag:s.tag,svg:!1});let c=[`const _el$ = templateNode(${a}, ${JSON.stringify(s.tag)}, true);`];for(let p of s.steps)c.push(`const ${p.ref} = ${p.expr};`);for(let p of s.holes)c.push(`insert(${p.parentRef}, holeScope(${p.startRef}, () => (${v(p.node,t,n)})), ${p.endRef}, holeContent(${p.startRef}, ${p.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",o=[],l=e.svg?`${r}, true`:r;if(o.push(`const ${i} = createNativeElement(${l});`),e.props.length>0)if(!e.svg&&e.props.every(h))for(let s of e.props)o.push(_e(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${He(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let a=v(s,t,n),c=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(c?`insert(${i}, ${a}, null);`:`insert(${i}, ${a});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function k(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(r=>[r.id,JSON.stringify(r.html)]));return e.replace(/_tmpl\$\d+/g,r=>n.get(r)??r)}var x={name:"imperative",contract:j,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return re=t?.partialTemplates===!0,{code:v(e,n,r),imports:Array.from(n),templates:r}}};var P=require("@babel/core"),M=G(require("@babel/generator"),1);var ae=require("@fluixi/template-parser");var Be={kind:"eager"},Fe=["pointerdown","focusin","keydown"],ie=new Set(["eager","idle","visible","interaction","media","never"]),f=class extends Error{};function O(e){return e.startsWith("load:")}function C(e,t){let n=e.slice(5);if(!ie.has(n))throw new f(`Unknown load strategy 'load:${n}'. Expected one of ${[...ie].join(", ")}.`);switch(n){case"eager":return Be;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return t?{kind:"visible",rootMargin:t}:{kind:"visible"};case"interaction":return{kind:"interaction",events:t?ze(t):[...Fe]};case"media":if(!t)throw new f(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new f(`Unhandled load strategy '${n}'.`)}}function ze(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new f("'load:interaction' was given no event names.");return t}function y(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let i=0;i<t.length;i++)/[^ \t]/.test(t[i])&&(n=i);let r="";for(let i=0;i<t.length;i++){let o=t[i].replace(/\t/g," ");i!==0&&(o=o.replace(/^ +/,"")),i!==t.length-1&&(o=o.replace(/ +$/,"")),o&&(i!==n&&(o+=" "),r+=o)}return r}var oe=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function Ve(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function se(e){return e.charAt(0).toUpperCase()+e.slice(1)}var X=class{constructor(t,n){this.holes=t;this.used=n}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:i}=x.emit(t,{});for(let o of r)this.used.add(o);return k(n,i)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.kind==="Element"||i.kind==="Component"){let l=i.attributes.find(s=>s.kind==="IfDirective");if(l&&l.kind==="IfDirective"){let s=r+1;s<t.length&&this.isBlankText(t[s])&&s++;let a=t[s],c=a&&(a.kind==="Element"||a.kind==="Component")&&a.attributes.some(p=>p.kind==="ElseDirective");n.push(this.lowerIf(i,l.hole,c?a:null)),c&&(r=s);continue}if(i.attributes.some(s=>s.kind==="EachDirective")){n.push(this.lowerEach(i));continue}}let o=this.lowerNode(i);o&&n.push(o)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&y(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=y(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(r=>r.kind==="Attribute"&&r.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let r=t.attributes.filter(o=>o!==n),i=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:r});return i.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),i}return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:i,rest:o}=this.partitionSlots(t.children);for(let[a,c]of i){let p=c.length===1?c[0]:{kind:"fragment",children:c},d={name:a,kind:"attr",expr:this.emit(p),jsxElement:!0},m=r.findIndex(I=>I.name===a);m>=0?r[m]=d:r.push(d)}let l=t.attributes.find(a=>a.kind==="LoadDirective"),s=l?C(`load:${l.strategy}`,l.modifier):void 0;return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...s?{load:s}:{}}}partitionSlots(t){let n=new Map,r=[];for(let i of t){if(i.kind==="Element"||i.kind==="Component"){let o=i.attributes.find(l=>l.kind==="Attribute"&&l.name==="slot");if(o&&o.value&&o.value.kind==="static"){let l={...i,attributes:i.attributes.filter(c=>c!==o)},s=l.kind==="Element"?this.lowerElement(l):this.lowerComponent(l),a=n.get(o.value.value)??[];a.push(s),n.set(o.value.value,a);continue}}r.push(i)}return{slots:n,rest:r}}lowerIf(t,n,r){let i=this.hole(n),o=[{name:"when",kind:"attr",expr:i.code,reactive:i.reactive}];if(r){let s=this.stripAndLower(r,a=>a.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(s),jsxElement:!0})}let l=this.stripAndLower(t,s=>s.kind==="IfDirective");return{kind:"component",name:"Show",props:o,children:[l]}}lowerEach(t){let n=t.attributes.find(a=>a.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),i=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive}];if(n.key){let a="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;i.push({name:"by",kind:"attr",expr:a})}let o=this.itemArrow(t),l;if(o){let a={kind:"expr",code:o.body,reactive:o.bodyReactive},c=this.rebuildWithChildren(t,[a]);l=`(${o.params.join(", ")}) => (${this.emit(c)})`}else{let a=this.stripAndLower(t,c=>c.kind==="EachDirective");l=`() => (${this.emit(a)})`}return{kind:"component",name:"For",props:i,children:[{kind:"expr",code:l,reactive:!1}]}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(i=>!n(i))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(i=>i.kind!=="EachDirective"));return t.kind==="Element"?{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1}:{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],i=!1,o=[],l=!1,s=[];for(let a of t)switch(a.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(a));break;case"PropertyBinding":n.push({name:a.name,kind:"prop",expr:this.hole(a.hole).code,reactive:this.hole(a.hole).reactive});break;case"EventBinding":n.push(this.eventProp(a));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(a.hole).code,reactive:this.hole(a.hole).reactive});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(a.hole).code});break;case"ClassDirective":{let c=this.hole(a.hole);r.push(`${JSON.stringify(a.name)}: ${c.code}`),i=i||c.reactive;break}case"StyleDirective":{let c=this.hole(a.hole);o.push(`${JSON.stringify(a.name)}: ${c.code}`),l=l||c.reactive;break}case"BindDirective":n.push(...this.bindProps(a.name,this.hole(a.hole).code));break;case"UseDirective":{let c=a.name??(a.hole!=null?this.hole(a.hole).code:null);if(!c)break;s.push(a.name!=null&&a.hole!=null?`[${c}, () => (${this.hole(a.hole).code})]`:`[${c}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:i}),o.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${o.join(", ")} }`,reactive:l}),s.length>0&&n.push({name:"use",kind:"attr",expr:`[${s.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),r=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+se(t.name),kind:"event",event:{name:n,delegated:oe.has(n)},expr:r};let o=this.wrapHandler(r,t.modifiers),l=this.eventOptions(t.modifiers),s=l?`[${o}, ${l}]`:o;return{name:"on:"+n,kind:"attr",expr:s}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",i=[];return n.includes("prevent")&&i.push("e.preventDefault();"),n.includes("stop")&&i.push("e.stopPropagation();"),!r&&i.length===0?t:`(e) => { ${r}${i.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=t==="checked",i=r?"change":"input",o=r?"checked":"value";this.used.add("bindPair");let l=`bindPair(${n})`;return[{name:t,kind:"attr",expr:`${l}[0]()`,reactive:!0},{name:"on"+se(i),kind:"event",event:{name:i,delegated:oe.has(i)},expr:`(e) => ${l}[1](e.target.${o})`}]}plainAttr(t){let n=t.value,r=t.name;t.name==="class"?r=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(r="innerHTML");let o={name:r,kind:"attr"};if(n==null)return o.literal=!0,o;if(n.kind==="static")return o.literal=n.value,o;if(n.kind==="hole"){let a=this.hole(n.hole);return o.expr=a.code,o.reactive=a.reactive,o}let l=!1,s=n.parts.map(a=>{if("text"in a)return Ve(a.text);let c=this.hole(a.hole);return l=l||c.reactive,"${"+c.code+"}"}).join("");return o.expr="`"+s+"`",o.reactive=l,o}};function le(e,t,n,r={}){let{root:i}=(0,ae.parseTemplate)(e,{svg:r.svg});return new X(t,n).lowerRoot(i.children)}var Ge=M.default.default??M.default;function We(e){return Ge(e,{concise:!0}).code}function qe(e,t,n){let r={code:N(e,t,n),reactive:A(e)};if(P.types.isArrowFunctionExpression(e)&&!P.types.isBlockStatement(e.body)){let i=e.body;r.arrow={params:e.params.map(o=>We(o)),body:N(i,t,n),bodyReactive:A(i)}}return P.types.isObjectExpression(e)&&(r.object=!0),r}function ce(e,t,n={}){let r=e.quasi,i=r.expressions.map(o=>qe(o,t,n.onNested));return le(Ue(r),i,t,n)}function Ue(e){let t=[];return e.quasis.forEach((n,r)=>{let i=n.value.cooked??n.value.raw;if(t.push({kind:"static",text:i,start:n.start??0}),r<e.expressions.length){let o=e.expressions[r];t.push({kind:"hole",index:r,start:o.start??0,end:o.end??0})}}),t}function Ke(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function J(e){let t=[],n=new Map,r=i=>{switch(i.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let o of i.children)r(o);return!1;case"fragment":for(let o of i.children)r(o);return!1;case"element":{let o=!0;for(let s of i.children)r(s)||(o=!1);let l;for(let s of i.props)if(l=Ke(s),l)break;return!l&&!o&&(l=Ze(i)),i.static=!l,l?n.set(i,l):t.push(i),i.static}default:return!1}};for(let i of Array.isArray(e)?e:[e])r(i);return{staticElements:t,reasons:n}}function Ze(e){for(let t of e.children){if(t.kind==="expr")return"expression-child";if(t.kind==="component")return"component-child";if(t.kind==="control")return"control-child";if(t.kind==="element"&&!t.static||t.kind==="fragment")return"expression-child"}return"expression-child"}function pe(e,t=new Set,n={}){let r=ce(e,t,n);return J(r),r}var Ye="children";function E(e){switch(e.kind){case"call":return!0;case"member":return e.property!==Ye;case"compound":return e.parts.some(E);case"opaque":return!1}}var Qe=new Set(["CallExpression","OptionalCallExpression"]),et=new Set(["MemberExpression","OptionalMemberExpression"]);function b(e){if(!e)return{kind:"opaque"};if(Qe.has(e.type))return{kind:"call"};if(et.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(R)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(R)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(R)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>R(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(R)}:{kind:"opaque"}}var R=e=>b(e);var tt=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),nt=/^on[A-Z]/,rt=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),me=e=>E(b(e));function S(e){if(e.type==="StringLiteral"||e.type==="NumericLiteral"||e.type==="BooleanLiteral"||e.type==="Literal"&&(typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"))return e.value}var H=e=>!!e&&typeof S(e)=="string";function it(e,t){return e.type==="JSXIdentifier"?{tag:e.name,component:e.name[0]!==e.name[0].toLowerCase()}:e.type==="JSXMemberExpression"?{tag:t.code(e),component:!0}:e.type==="JSXNamespacedName"?{tag:`${e.namespace.name}:${e.name.name}`,component:!1}:{tag:"div",component:!1}}function _(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function ot(e,t){let n=_(e.name),r=nt.test(n),i=r||n.startsWith("on:")||n==="ref",l={name:n,kind:r?"event":"attr"};if(r){let a=n.slice(2).toLowerCase();l.event={name:a,delegated:rt.has(a)}}let s=e.value;if(s==null)return l.literal=!0,l;if(H(s))return l.literal=S(s),l;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let a=s.expression,c=S(a);return c!==void 0?(l.literal=c,l):(l.expr=t.code(a),l.reactive=i?!1:me(a),(a.type==="JSXElement"||a.type==="JSXFragment")&&(l.jsxElement=!0),l)}return l.literal=!0,l}function de(e,t){let n=e.value;return n==null?null:H(n)?JSON.stringify(S(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function st(e,t){let n=[],r=[];for(let i of e){if(i.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(i.argument)});continue}if(i.type!=="JSXAttribute"||O(_(i.name)))continue;let o=i.name.type==="JSXNamespacedName"?i.name.namespace.name:null;if(o==="use"){let l=i.name.name.name;t.used.add(l);let s=de(i,t);r.push(s!=null?`[${l}, () => (${s})]`:`[${l}]`);continue}if(o==="oncapture"){let l=i.name.name.name.toLowerCase(),s=de(i,t)??"undefined";n.push({name:"on:"+l,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(ot(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function ue(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=y(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression;n.push({kind:"expr",code:t.code(i),reactive:me(i)})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(fe(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function at(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=_(t.name);if(O(n)){if(t.value&&!H(t.value))throw new f(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return C(n,t.value?S(t.value):null)}}}function fe(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:ue(e.children,t)};let{tag:n,component:r}=it(e.openingElement.name,t),i=st(e.openingElement.attributes,t),o=ue(e.children,t);if(r){let l=at(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...l?{load:l}:{}}}return{kind:"element",tag:n,svg:tt.has(n),props:i,children:o,static:!1}}function he(e,t){let n=fe(e,t);return J(n),n}var lt=B.default.default??B.default;function ge(e){return lt(e,{concise:!0}).code}function ct(e,t,n){let r=u.types.cloneNode(e,!0),i=u.types.file(u.types.program([u.types.expressionStatement(r)])),o=!1,l=(s,a,c)=>{for(let p of c)t.add(p);s.replaceWith(u.template.expression(a,{placeholderPattern:!1,plugins:["typescript"]})()),s.skip(),o=!0};return(0,u.traverse)(i,{"JSXElement|JSXFragment"(s){let a=s.node,c=ve(a,t,n);n?.(c);let{code:p,imports:d,templates:m}=x.emit(c,{});l(s,k(p,m),d)},TaggedTemplateExpression(s){let a=s.node.tag;if(!u.types.isIdentifier(a)||a.name!=="html"&&a.name!=="svg")return;let c=pe(s.node,t,{svg:a.name==="svg",onNested:n});n?.(c);let{code:p,imports:d,templates:m}=x.emit(c,{});l(s,k(p,m),d)}}),o?i.program.body[0].expression:e}function N(e,t,n){return ge(ct(e,t,n))}var pt=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]);function A(e){return E(b(e))}function ve(e,t=new Set,n){return he(e,{code:i=>i.type==="JSXMemberExpression"?ge(i):N(i,t,n),used:t})}
|
|
1
|
+
"use strict";var Ie=Object.create;var P=Object.defineProperty;var $e=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var Te=Object.getPrototypeOf,Ae=Object.prototype.hasOwnProperty;var Ce=(e,t)=>{for(var n in t)P(e,n,{get:t[n],enumerable:!0})},q=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of we(t))!Ae.call(e,i)&&i!==n&&P(e,i,{get:()=>t[i],enumerable:!(r=$e(t,i))||r.enumerable});return e};var Z=(e,t,n)=>(n=e!=null?Ie(Te(e)):{},q(t||!e||!e.__esModule?P(n,"default",{value:e,enumerable:!0}):n,e)),Pe=e=>q(P({},"__esModule",{value:!0}),e);var kt={};Ce(kt,{SVG_TAGS:()=>xt,buildIR:()=>Se,genExpr:()=>S,isReactiveExpr:()=>M});module.exports=Pe(kt);var f=require("@babel/core"),G=Z(require("@babel/generator"),1);var Je=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),Y={className:"class",htmlFor:"for"},De=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),Oe=new Set(["script","style","textarea","title"]);function j(e){return Oe.has(e)}function Q(e){return Y[e]??e}function N(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!De.has(e.name)}function H(e){if(!e.static||j(e.tag))return!1;for(let t of e.props)if(!N(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&H(t)))return!1;return!0}function v(e){let t=e.props.map(Me).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return Je.has(e.tag)?n:`${n}${e.children.map(Le).join("")}</${e.tag}>`}function Le(e){if(e.kind==="text")return je(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return v(e)}function Me(e){let t=Y[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${_e(String(n))}"`}function _e(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function je(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function F(e){let t=[],n,r=i=>{n??=i.at?.file,t.push(i.at?.line??0,i.at?.column??0);for(let o of i.children)o.kind==="element"&&r(o)};return r(e),n&&t.some(i=>i!==0)?{file:n,pos:t}:void 0}var He="<!--fx-->",Fe="<!--fx/-->";function D(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Xe(e){return e.kind==="text"||e.kind==="element"&&ee(e)}function ee(e){return e.svg||j(e.tag)||!e.props.every(t=>N(t))?!1:e.children.every(t=>Xe(t)||D(t))}function J(e){if(D(e))return!0;let t=e.children;return t?t.some(J):!1}function te(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||te(t))}function ne(e){if(!ee(e)||!te(e)||!e.children.some(J))return null;let t=[],n=[],r=0,i=a=>{let s=`_n$${r++}`;return t.push({ref:s,expr:a}),s};return o(e,"_el$"),{html:Be(e),tag:e.tag,steps:t,holes:n};function o(a,s){let l=-1;a.children.forEach((c,u)=>{J(c)&&(l=u)});let p=null;for(let c=0;c<=l;c++){let u=a.children[c],d=p?`${p}.nextSibling`:`${s}.firstChild`;if(D(u)){let y=i(d),C=i(`holeEnd(${y})`);n.push({parentRef:s,startRef:y,endRef:C,node:u}),p=C;continue}let h=i(d);u.kind==="element"&&J(u)&&o(u,h),p=h}}}function Be(e){return v(re(e)).split(ie).join(He+Fe)}function re(e){return{...e,children:e.children.map(t=>D(t)?{kind:"text",value:ie}:t.kind==="element"?re(t):t)}}var ie="\0fx-hole\0";var X={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},It={version:2,module:"@fluixi/dom",symbols:[...X.symbols,"template","cloneTemplate","walk"]};var g="@fluixi/reactive/signal",B={$signal:{export:"signal",module:g,returns:"signal-handle"},$memo:{export:"memo",module:g,returns:"memo-handle"},$effect:{export:"effect",module:g,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:g,returns:"resource-handle"},$selector:{export:"createSelector",module:g,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:g,returns:"memo-accessor"},$untrack:{export:"untrack",module:g,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}};var wt=new RegExp(`\\$(?:${Object.keys(B).map(e=>e.slice(1)).join("|")})\\s*\\(`);var oe="__fx_source";var Ve="__fx_hole",x=(e,t,n,r)=>`(globalThis.${Ve} ?? ((f) => f))(${e},${t},${n}${r===void 0?"":`,${JSON.stringify(r)}`})`,Ke="__fx_props",se=(e,t)=>`(globalThis.${Ke} ?? ((p) => p))(${e},${JSON.stringify(t)})`;var Ue={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function ze(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function le(e){return ze(e)?e:JSON.stringify(e)}function We(e){if(e.expr!==void 0){if(e.name==="ref"&&e.at)return x(`(${e.expr})`,e.at.line,e.at.column,e.expr);if(!e.reactive)return`(${e.expr})`;let t=`() => (${e.expr})`;return e.at?x(t,e.at.line,e.at.column,e.directive):t}return JSON.stringify(e.literal??!0)}function Ge(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function qe(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${le(s.name)}: ${We(s)}`);t!=null&&o.push(`children: ${t}`);let a=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(s=>s.expr).join(", ")}, ${a})`):a}function ae(e,t){return t?x(e,t.line,t.column):e}function pe(e,t,n){return e.length===1?k(e[0],t,n):`[${e.map(r=>k(r,t,n)).join(", ")}]`}function ce(e,t,n,r,i,o){r.add("createMemo"),r.add("createComponent");let a=t.filter(d=>d.kind==="spread"),s=t.filter(d=>d.kind!=="spread"),l=s.map(d=>`get ${le(d.name)}() { return ${Ge(d)}; }`);n.length>0&&l.push(`get children() { return ${pe(n,r,i)}; }`);let p=`{ ${l.join(", ")} }`;a.length>0&&(r.add("mergeProps"),p=`mergeProps(${a.map(d=>d.expr).join(", ")}, ${p})`);let c={};for(let d of s)d.at&&(c[d.name]=[d.at.line,d.at.column]);return Object.keys(c).length&&(p=se(p,c)),`createMemo((${o?`globalThis.${oe}?.(${JSON.stringify(o.file)},${o.line},${o.column},${JSON.stringify(e)}), `:""}() => createComponent(${e}, ${p})))`}function Ze(e,t){let n=Q(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var ue=!1;function k(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":{if(!e.reactive)return`(${e.code})`;let r=`() => (${e.code})`;return e.at?x(r,e.at.line,e.at.column):r}case"fragment":return e.children.length===0?"null":pe(e.children,t,n);case"component":return ae(ce(e.name,e.props,e.children,t,n,e.at),e.bindAt??e.at);case"control":{let r=Ue[e.control]??e.control;return t.add(r),ae(ce(r,e.props,e.children,t,n),e.bindAt)}case"element":{if(n&&e.static&&!e.svg&&H(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;n.push({id:s,html:v(e),tag:e.tag,svg:!1});let l=F(e);return l?`templateNode(${s}, ${JSON.stringify(e.tag)}, false, false, ${JSON.stringify(l)})`:`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&ue){let s=ne(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let l=`_tmpl$${n.length}`;n.push({id:l,html:s.html,tag:s.tag,svg:!1});let p=F(e),c=[`const _el$ = templateNode(${l}, ${JSON.stringify(s.tag)}, true${p?`, false, ${JSON.stringify(p)}`:""});`];for(let u of s.steps)c.push(`const ${u.ref} = ${u.expr};`);for(let u of s.holes)c.push(`insert(${u.parentRef}, holeScope(${u.startRef}, () => (${k(u.node,t,n)})), ${u.endRef}, holeContent(${u.startRef}, ${u.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",o=[],a=e.at?`${r}, ${e.svg}, ${JSON.stringify(e.at)}`:e.svg?`${r}, true`:r;if(o.push(`const ${i} = createNativeElement(${a});`),e.props.length>0)if(!e.svg&&e.props.every(N))for(let s of e.props)o.push(Ze(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${qe(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let l=k(s,t,n),p=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(p?`insert(${i}, ${l}, null);`:`insert(${i}, ${l});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function R(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(r=>[r.id,JSON.stringify(r.html)]));return e.replace(/_tmpl\$\d+/g,r=>n.get(r)??r)}var b={name:"imperative",contract:X,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return ue=t?.partialTemplates===!0,{code:k(e,n,r),imports:Array.from(n),templates:r}}};var L=require("@babel/core"),U=Z(require("@babel/generator"),1);var ge=require("@fluixi/template-parser");var Ye={kind:"eager"},Qe=["pointerdown","focusin","keydown"],de=new Set(["eager","idle","visible","interaction","media","never"]),m=class extends Error{};function V(e){return e.startsWith("load:")}function O(e,t){let n=e.slice(5);if(!de.has(n))throw new m(`Unknown load strategy 'load:${n}'. Expected one of ${[...de].join(", ")}.`);switch(n){case"eager":return Ye;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return t?{kind:"visible",rootMargin:t}:{kind:"visible"};case"interaction":return{kind:"interaction",events:t?et(t):[...Qe]};case"media":if(!t)throw new m(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new m(`Unhandled load strategy '${n}'.`)}}function et(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new m("'load:interaction' was given no event names.");return t}function E(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let i=0;i<t.length;i++)/[^ \t]/.test(t[i])&&(n=i);let r="";for(let i=0;i<t.length;i++){let o=t[i].replace(/\t/g," ");i!==0&&(o=o.replace(/^ +/,"")),i!==t.length-1&&(o=o.replace(/ +$/,"")),o&&(i!==n&&(o+=" "),r+=o)}return r}var fe=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function tt(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function me(e){return e.charAt(0).toUpperCase()+e.slice(1)}var K=class{constructor(t,n,r,i){this.holes=t;this.used=n;this.sourceFile=r;this.positionAt=i}tagAt(t){let n=t.loc?.start;if(!this.sourceFile||!this.positionAt||n==null)return;let{line:r,column:i}=this.positionAt(n);return{file:this.sourceFile,line:r,column:i}}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:i}=b.emit(t,{});for(let o of r)this.used.add(o);return R(n,i)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.kind==="Element"||i.kind==="Component"){let a=i.attributes.find(s=>s.kind==="IfDirective");if(a&&a.kind==="IfDirective"){let s=r+1;s<t.length&&this.isBlankText(t[s])&&s++;let l=t[s],p=l&&(l.kind==="Element"||l.kind==="Component")&&l.attributes.some(c=>c.kind==="ElseDirective");n.push(this.lowerIf(i,a.hole,p?l:null)),p&&(r=s);continue}if(i.attributes.some(s=>s.kind==="EachDirective")){n.push(this.lowerEach(i));continue}}let o=this.lowerNode(i);o&&n.push(o)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&E(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=E(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive,...n.at?{at:n.at}:{}}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(i=>i.kind==="Attribute"&&i.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let i=t.attributes.filter(a=>a!==n),o=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:i});return o.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),o}let r=this.tagAt(t);return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1,...r?{at:r}:{}}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:i,rest:o}=this.partitionSlots(t.children);for(let[c,u]of i){let d=u.length===1?u[0]:{kind:"fragment",children:u},h={name:c,kind:"attr",expr:this.emit(d),jsxElement:!0},y=r.findIndex(C=>C.name===c);y>=0?r[y]=h:r.push(h)}let a=t.attributes.find(c=>c.kind==="LoadDirective"),s=a?O(`load:${a.strategy}`,a.modifier):void 0,l=r.find(c=>c.at&&c.reactive)?.at,p=this.tagAt(t);return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...p?{at:p}:{},...l?{bindAt:l}:{},...s?{load:s}:{}}}partitionSlots(t){let n=new Map,r=[];for(let i of t){if(i.kind==="Element"||i.kind==="Component"){let o=i.attributes.find(a=>a.kind==="Attribute"&&a.name==="slot");if(o&&o.value&&o.value.kind==="static"){let a={...i,attributes:i.attributes.filter(p=>p!==o)},s=a.kind==="Element"?this.lowerElement(a):this.lowerComponent(a),l=n.get(o.value.value)??[];l.push(s),n.set(o.value.value,l);continue}}r.push(i)}return{slots:n,rest:r}}lowerIf(t,n,r){let i=this.hole(n),o=[{name:"when",kind:"attr",expr:i.code,reactive:i.reactive,...i.at?{at:i.at}:{}}];if(r){let l=this.stripAndLower(r,p=>p.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(l),jsxElement:!0})}let a=this.stripAndLower(t,l=>l.kind==="IfDirective"),s=this.tagAt(t);return{kind:"component",name:"Show",props:o,children:[a],...s?{at:s}:{},...i.at?{bindAt:i.at}:{}}}lowerEach(t){let n=t.attributes.find(p=>p.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),i=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive,...r.at?{at:r.at}:{}}];if(n.key){let p="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;i.push({name:"by",kind:"attr",expr:p})}let o=this.itemArrow(t),a;if(o){let p={kind:"expr",code:o.body,reactive:o.bodyReactive},c=this.rebuildWithChildren(t,[p]);a=`(${o.params.join(", ")}) => (${this.emit(c)})`}else{let p=this.stripAndLower(t,c=>c.kind==="EachDirective");a=`() => (${this.emit(p)})`}let s=[{kind:"expr",code:a,reactive:!1}],l=this.tagAt(t);return{kind:"component",name:"For",props:i,children:s,...l?{at:l}:{},...r.at?{bindAt:r.at}:{}}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(i=>!n(i))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(i=>i.kind!=="EachDirective"));if(t.kind==="Element"){let i=this.tagAt(t);return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1,...i?{at:i}:{}}}return{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],i=!1,o,a=[],s=!1,l,p=[];for(let c of t)switch(c.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(c));break;case"PropertyBinding":n.push({name:c.name,kind:"prop",expr:this.hole(c.hole).code,reactive:this.hole(c.hole).reactive,...this.hole(c.hole).at?{at:this.hole(c.hole).at}:{}});break;case"EventBinding":n.push(this.eventProp(c));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(c.hole).code,reactive:this.hole(c.hole).reactive,...this.hole(c.hole).at?{at:this.hole(c.hole).at}:{}});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(c.hole).code});break;case"ClassDirective":{let u=this.hole(c.hole);r.push(`${JSON.stringify(c.name)}: ${u.code}`),i=i||u.reactive,o??=u.at;break}case"StyleDirective":{let u=this.hole(c.hole);a.push(`${JSON.stringify(c.name)}: ${u.code}`),s=s||u.reactive,l??=u.at;break}case"BindDirective":n.push(...this.bindProps(c.name,this.hole(c.hole)));break;case"UseDirective":{let u=c.name??(c.hole!=null?this.hole(c.hole).code:null);if(!u)break;p.push(c.name!=null&&c.hole!=null?`[${u}, () => (${this.hole(c.hole).code})]`:`[${u}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:i,...o?{at:o}:{}}),a.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${a.join(", ")} }`,reactive:s,...l?{at:l}:{}}),p.length>0&&n.push({name:"use",kind:"attr",expr:`[${p.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),r=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+me(t.name),kind:"event",event:{name:n,delegated:fe.has(n)},expr:r};let o=this.wrapHandler(r,t.modifiers),a=this.eventOptions(t.modifiers),s=a?`[${o}, ${a}]`:o;return{name:"on:"+n,kind:"attr",expr:s}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",i=[];return n.includes("prevent")&&i.push("e.preventDefault();"),n.includes("stop")&&i.push("e.stopPropagation();"),!r&&i.length===0?t:`(e) => { ${r}${i.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=n.code,i=t==="checked",o=i?"change":"input",a=i?"checked":"value";this.used.add("bindPair");let s=`bindPair(${r})`;return[{name:t,kind:"attr",expr:`${s}[0]()`,reactive:!0,directive:`bind:${t}`,...n.at?{at:n.at}:{}},{name:"on"+me(o),kind:"event",event:{name:o,delegated:fe.has(o)},expr:`(e) => ${s}[1](e.target.${a})`}]}plainAttr(t){let n=t.value,r=t.name;t.name==="class"?r=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(r="innerHTML");let o={name:r,kind:"attr"};if(n==null)return o.literal=!0,o;if(n.kind==="static")return o.literal=n.value,o;if(n.kind==="hole"){let p=this.hole(n.hole);return o.expr=p.code,o.reactive=p.reactive,p.at&&(o.at=p.at),o}let a=!1,s,l=n.parts.map(p=>{if("text"in p)return tt(p.text);let c=this.hole(p.hole);return a=a||c.reactive,s??=c.at,"${"+c.code+"}"}).join("");return o.expr="`"+l+"`",o.reactive=a,s&&(o.at=s),o}};function he(e,t,n,r={}){let{root:i}=(0,ge.parseTemplate)(e,{svg:r.svg});return new K(t,n,r.sourceFile,r.positionAt).lowerRoot(i.children)}var nt=U.default.default??U.default;function rt(e){return nt(e,{concise:!0}).code}function it(e,t,n){let r={code:S(e,t,n),reactive:M(e)};if(L.types.isArrowFunctionExpression(e)&&!L.types.isBlockStatement(e.body)){let i=e.body;r.arrow={params:e.params.map(o=>rt(o)),body:S(i,t,n),bodyReactive:M(i)}}return L.types.isObjectExpression(e)&&(r.object=!0),r}function ye(e,t,n={}){let r=e.quasi,i=r.expressions.map(o=>it(o,t,n.onNested));return he(ot(r),i,t,n)}function ot(e){let t=[];return e.quasis.forEach((n,r)=>{let i=n.value.cooked??n.value.raw;if(t.push({kind:"static",text:i,start:n.start??0}),r<e.expressions.length){let o=e.expressions[r];t.push({kind:"hole",index:r,start:o.start??0,end:o.end??0})}}),t}function st(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function _(e){let t=[],n=new Map,r=i=>{switch(i.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let o of i.children)r(o);return!1;case"fragment":for(let o of i.children)r(o);return!1;case"element":{let o=!0;for(let s of i.children)r(s)||(o=!1);let a;for(let s of i.props)if(a=st(s),a)break;return!a&&!o&&(a=at(i)),i.static=!a,a?n.set(i,a):t.push(i),i.static}default:return!1}};for(let i of Array.isArray(e)?e:[e])r(i);return{staticElements:t,reasons:n}}function at(e){for(let t of e.children){if(t.kind==="expr")return"expression-child";if(t.kind==="component")return"component-child";if(t.kind==="control")return"control-child";if(t.kind==="element"&&!t.static||t.kind==="fragment")return"expression-child"}return"expression-child"}function Ne(e,t=new Set,n={}){let r=ye(e,t,n);return _(r),r}var ct="children";function I(e){switch(e.kind){case"call":return!0;case"member":return e.property!==ct;case"compound":return e.parts.some(I);case"opaque":return!1}}var lt=new Set(["CallExpression","OptionalCallExpression"]),pt=new Set(["MemberExpression","OptionalMemberExpression"]);function w(e){if(!e)return{kind:"opaque"};if(lt.has(e.type))return{kind:"call"};if(pt.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map($)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map($)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map($)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>$(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map($)}:{kind:"opaque"}}var $=e=>w(e);var ut=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),dt=/^on[A-Z]/,ft=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),ke=e=>I(w(e)),T=(e,t)=>{if(!t.sourceFile)return;let n=e.loc?.start;return n?{line:n.line,column:n.column}:void 0};function A(e){if(e.type==="StringLiteral"||e.type==="NumericLiteral"||e.type==="BooleanLiteral"||e.type==="Literal"&&(typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"))return e.value}var z=e=>!!e&&typeof A(e)=="string";function mt(e,t){return e.type==="JSXIdentifier"?{tag:e.name,component:e.name[0]!==e.name[0].toLowerCase()}:e.type==="JSXMemberExpression"?{tag:t.code(e),component:!0}:e.type==="JSXNamespacedName"?{tag:`${e.namespace.name}:${e.name.name}`,component:!1}:{tag:"div",component:!1}}function W(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function gt(e,t){let n=W(e.name),r=dt.test(n),i=r||n.startsWith("on:")||n==="ref",a={name:n,kind:r?"event":"attr"};if(r){let l=n.slice(2).toLowerCase();a.event={name:l,delegated:ft.has(l)}}let s=e.value;if(s==null)return a.literal=!0,a.at=T(e,t),a;if(z(s))return a.literal=A(s),a.at=T(s,t),a;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let l=s.expression,p=A(l);return p!==void 0?(a.literal=p,a.at=T(l,t),a):(a.expr=t.code(l),a.reactive=i?!1:ke(l),a.at=T(l,t),(l.type==="JSXElement"||l.type==="JSXFragment")&&(a.jsxElement=!0),a)}return a.literal=!0,a}function ve(e,t){let n=e.value;return n==null?null:z(n)?JSON.stringify(A(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function ht(e,t){let n=[],r=[];for(let i of e){if(i.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(i.argument)});continue}if(i.type!=="JSXAttribute"||V(W(i.name)))continue;let o=i.name.type==="JSXNamespacedName"?i.name.namespace.name:null;if(o==="use"){let a=i.name.name.name;t.used.add(a);let s=ve(i,t);r.push(s!=null?`[${a}, () => (${s})]`:`[${a}]`);continue}if(o==="oncapture"){let a=i.name.name.name.toLowerCase(),s=ve(i,t)??"undefined";n.push({name:"on:"+a,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(gt(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function xe(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=E(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression,o=ke(i);n.push({kind:"expr",code:t.code(i),reactive:o,...o?{at:T(i,t)}:{}})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(Re(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function yt(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=W(t.name);if(V(n)){if(t.value&&!z(t.value))throw new m(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return O(n,t.value?A(t.value):null)}}}function Re(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:xe(e.children,t)};let{tag:n,component:r}=mt(e.openingElement.name,t),i=ht(e.openingElement.attributes,t),o=xe(e.children,t),a=t.sourceFile&&e.loc?.start?{file:t.sourceFile,line:e.loc.start.line,column:e.loc.start.column}:void 0;if(r){let s=yt(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...s?{load:s}:{},...a?{at:a}:{}}}return{kind:"element",tag:n,svg:ut.has(n),props:i,children:o,static:!1,...a?{at:a}:{}}}function be(e,t){let n=Re(e,t);return _(n),n}var Nt=G.default.default??G.default;function Ee(e){return Nt(e,{concise:!0}).code}function vt(e,t,n){let r=f.types.cloneNode(e,!0),i=f.types.file(f.types.program([f.types.expressionStatement(r)])),o=!1,a=(s,l,p)=>{for(let c of p)t.add(c);s.replaceWith(f.template.expression(l,{placeholderPattern:!1,plugins:["typescript"]})()),s.skip(),o=!0};return(0,f.traverse)(i,{"JSXElement|JSXFragment"(s){let l=s.node,p=Se(l,t,n);n?.(p);let{code:c,imports:u,templates:d}=b.emit(p,{});a(s,R(c,d),u)},TaggedTemplateExpression(s){let l=s.node.tag;if(!f.types.isIdentifier(l)||l.name!=="html"&&l.name!=="svg")return;let p=Ne(s.node,t,{svg:l.name==="svg",onNested:n});n?.(p);let{code:c,imports:u,templates:d}=b.emit(p,{});a(s,R(c,d),u)}}),o?i.program.body[0].expression:e}function S(e,t,n){return Ee(vt(e,t,n))}var xt=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]);function M(e){return I(w(e))}function Se(e,t=new Set,n){return be(e,{code:i=>i.type==="JSXMemberExpression"?Ee(i):S(i,t,n),used:t})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{types as b,traverse as Ze,template as Ye}from"@babel/core";import de from"@babel/generator";var me=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),B={className:"class",htmlFor:"for"},fe=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),he=new Set(["script","style","textarea","title"]);function P(e){return he.has(e)}function F(e){return B[e]??e}function f(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!fe.has(e.name)}function A(e){if(!e.static||P(e.tag))return!1;for(let t of e.props)if(!f(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&A(t)))return!1;return!0}function h(e){let t=e.props.map(ve).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return me.has(e.tag)?n:`${n}${e.children.map(ge).join("")}</${e.tag}>`}function ge(e){if(e.kind==="text")return xe(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return h(e)}function ve(e){let t=B[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${ke(String(n))}"`}function ke(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function xe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var ye="<!--fx-->",Ne="<!--fx/-->";function $(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Ee(e){return e.kind==="text"||e.kind==="element"&&z(e)}function z(e){return e.svg||P(e.tag)||!e.props.every(t=>f(t))?!1:e.children.every(t=>Ee(t)||$(t))}function I(e){if($(e))return!0;let t=e.children;return t?t.some(I):!1}function V(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||V(t))}function G(e){if(!z(e)||!V(e)||!e.children.some(I))return null;let t=[],n=[],r=0,i=l=>{let s=`_n$${r++}`;return t.push({ref:s,expr:l}),s};return o(e,"_el$"),{html:Re(e),tag:e.tag,steps:t,holes:n};function o(l,s){let a=-1;l.children.forEach((p,d)=>{I(p)&&(a=d)});let c=null;for(let p=0;p<=a;p++){let d=l.children[p],u=c?`${c}.nextSibling`:`${s}.firstChild`;if($(d)){let H=i(u),_=i(`holeEnd(${H})`);n.push({parentRef:s,startRef:H,endRef:_,node:d}),c=_;continue}let S=i(u);d.kind==="element"&&I(d)&&o(d,S),c=S}}}function Re(e){return h(W(e)).split(q).join(ye+Ne)}function W(e){return{...e,children:e.children.map(t=>$(t)?{kind:"text",value:q}:t.kind==="element"?W(t):t)}}var q="\0fx-hole\0";var J={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},ot={version:2,module:"@fluixi/dom",symbols:[...J.symbols,"template","cloneTemplate","walk"]};var be={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function Se(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function K(e){return Se(e)?e:JSON.stringify(e)}function Ie(e){return e.expr!==void 0?e.reactive?`() => (${e.expr})`:`(${e.expr})`:JSON.stringify(e.literal??!0)}function $e(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function we(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${K(s.name)}: ${Ie(s)}`);t!=null&&o.push(`children: ${t}`);let l=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(s=>s.expr).join(", ")}, ${l})`):l}function Z(e,t,n){return e.length===1?g(e[0],t,n):`[${e.map(r=>g(r,t,n)).join(", ")}]`}function U(e,t,n,r,i){r.add("createMemo"),r.add("createComponent");let o=t.filter(c=>c.kind==="spread"),s=t.filter(c=>c.kind!=="spread").map(c=>`get ${K(c.name)}() { return ${$e(c)}; }`);n.length>0&&s.push(`get children() { return ${Z(n,r,i)}; }`);let a=`{ ${s.join(", ")} }`;return o.length>0&&(r.add("mergeProps"),a=`mergeProps(${o.map(c=>c.expr).join(", ")}, ${a})`),`createMemo(() => createComponent(${e}, ${a}))`}function Te(e,t){let n=F(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var Y=!1;function g(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":return e.reactive?`() => (${e.code})`:`(${e.code})`;case"fragment":return e.children.length===0?"null":Z(e.children,t,n);case"component":return U(e.name,e.props,e.children,t,n);case"control":{let r=be[e.control]??e.control;return t.add(r),U(r,e.props,e.children,t,n)}case"element":{if(n&&e.static&&!e.svg&&A(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;return n.push({id:s,html:h(e),tag:e.tag,svg:!1}),`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&Y){let s=G(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let a=`_tmpl$${n.length}`;n.push({id:a,html:s.html,tag:s.tag,svg:!1});let c=[`const _el$ = templateNode(${a}, ${JSON.stringify(s.tag)}, true);`];for(let p of s.steps)c.push(`const ${p.ref} = ${p.expr};`);for(let p of s.holes)c.push(`insert(${p.parentRef}, holeScope(${p.startRef}, () => (${g(p.node,t,n)})), ${p.endRef}, holeContent(${p.startRef}, ${p.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",o=[],l=e.svg?`${r}, true`:r;if(o.push(`const ${i} = createNativeElement(${l});`),e.props.length>0)if(!e.svg&&e.props.every(f))for(let s of e.props)o.push(Te(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${we(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let a=g(s,t,n),c=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(c?`insert(${i}, ${a}, null);`:`insert(${i}, ${a});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function v(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(r=>[r.id,JSON.stringify(r.html)]));return e.replace(/_tmpl\$\d+/g,r=>n.get(r)??r)}var k={name:"imperative",contract:J,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return Y=t?.partialTemplates===!0,{code:g(e,n,r),imports:Array.from(n),templates:r}}};import{types as j}from"@babel/core";import re from"@babel/generator";import{parseTemplate as Je}from"@fluixi/template-parser";var Ce={kind:"eager"},Pe=["pointerdown","focusin","keydown"],Q=new Set(["eager","idle","visible","interaction","media","never"]),m=class extends Error{};function L(e){return e.startsWith("load:")}function w(e,t){let n=e.slice(5);if(!Q.has(n))throw new m(`Unknown load strategy 'load:${n}'. Expected one of ${[...Q].join(", ")}.`);switch(n){case"eager":return Ce;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return t?{kind:"visible",rootMargin:t}:{kind:"visible"};case"interaction":return{kind:"interaction",events:t?Ae(t):[...Pe]};case"media":if(!t)throw new m(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new m(`Unhandled load strategy '${n}'.`)}}function Ae(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new m("'load:interaction' was given no event names.");return t}function x(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let i=0;i<t.length;i++)/[^ \t]/.test(t[i])&&(n=i);let r="";for(let i=0;i<t.length;i++){let o=t[i].replace(/\t/g," ");i!==0&&(o=o.replace(/^ +/,"")),i!==t.length-1&&(o=o.replace(/ +$/,"")),o&&(i!==n&&(o+=" "),r+=o)}return r}var ee=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function Le(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function te(e){return e.charAt(0).toUpperCase()+e.slice(1)}var D=class{constructor(t,n){this.holes=t;this.used=n}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:i}=k.emit(t,{});for(let o of r)this.used.add(o);return v(n,i)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.kind==="Element"||i.kind==="Component"){let l=i.attributes.find(s=>s.kind==="IfDirective");if(l&&l.kind==="IfDirective"){let s=r+1;s<t.length&&this.isBlankText(t[s])&&s++;let a=t[s],c=a&&(a.kind==="Element"||a.kind==="Component")&&a.attributes.some(p=>p.kind==="ElseDirective");n.push(this.lowerIf(i,l.hole,c?a:null)),c&&(r=s);continue}if(i.attributes.some(s=>s.kind==="EachDirective")){n.push(this.lowerEach(i));continue}}let o=this.lowerNode(i);o&&n.push(o)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&x(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=x(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(r=>r.kind==="Attribute"&&r.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let r=t.attributes.filter(o=>o!==n),i=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:r});return i.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),i}return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:i,rest:o}=this.partitionSlots(t.children);for(let[a,c]of i){let p=c.length===1?c[0]:{kind:"fragment",children:c},d={name:a,kind:"attr",expr:this.emit(p),jsxElement:!0},u=r.findIndex(S=>S.name===a);u>=0?r[u]=d:r.push(d)}let l=t.attributes.find(a=>a.kind==="LoadDirective"),s=l?w(`load:${l.strategy}`,l.modifier):void 0;return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...s?{load:s}:{}}}partitionSlots(t){let n=new Map,r=[];for(let i of t){if(i.kind==="Element"||i.kind==="Component"){let o=i.attributes.find(l=>l.kind==="Attribute"&&l.name==="slot");if(o&&o.value&&o.value.kind==="static"){let l={...i,attributes:i.attributes.filter(c=>c!==o)},s=l.kind==="Element"?this.lowerElement(l):this.lowerComponent(l),a=n.get(o.value.value)??[];a.push(s),n.set(o.value.value,a);continue}}r.push(i)}return{slots:n,rest:r}}lowerIf(t,n,r){let i=this.hole(n),o=[{name:"when",kind:"attr",expr:i.code,reactive:i.reactive}];if(r){let s=this.stripAndLower(r,a=>a.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(s),jsxElement:!0})}let l=this.stripAndLower(t,s=>s.kind==="IfDirective");return{kind:"component",name:"Show",props:o,children:[l]}}lowerEach(t){let n=t.attributes.find(a=>a.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),i=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive}];if(n.key){let a="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;i.push({name:"by",kind:"attr",expr:a})}let o=this.itemArrow(t),l;if(o){let a={kind:"expr",code:o.body,reactive:o.bodyReactive},c=this.rebuildWithChildren(t,[a]);l=`(${o.params.join(", ")}) => (${this.emit(c)})`}else{let a=this.stripAndLower(t,c=>c.kind==="EachDirective");l=`() => (${this.emit(a)})`}return{kind:"component",name:"For",props:i,children:[{kind:"expr",code:l,reactive:!1}]}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(i=>!n(i))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(i=>i.kind!=="EachDirective"));return t.kind==="Element"?{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1}:{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],i=!1,o=[],l=!1,s=[];for(let a of t)switch(a.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(a));break;case"PropertyBinding":n.push({name:a.name,kind:"prop",expr:this.hole(a.hole).code,reactive:this.hole(a.hole).reactive});break;case"EventBinding":n.push(this.eventProp(a));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(a.hole).code,reactive:this.hole(a.hole).reactive});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(a.hole).code});break;case"ClassDirective":{let c=this.hole(a.hole);r.push(`${JSON.stringify(a.name)}: ${c.code}`),i=i||c.reactive;break}case"StyleDirective":{let c=this.hole(a.hole);o.push(`${JSON.stringify(a.name)}: ${c.code}`),l=l||c.reactive;break}case"BindDirective":n.push(...this.bindProps(a.name,this.hole(a.hole).code));break;case"UseDirective":{let c=a.name??(a.hole!=null?this.hole(a.hole).code:null);if(!c)break;s.push(a.name!=null&&a.hole!=null?`[${c}, () => (${this.hole(a.hole).code})]`:`[${c}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:i}),o.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${o.join(", ")} }`,reactive:l}),s.length>0&&n.push({name:"use",kind:"attr",expr:`[${s.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),r=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+te(t.name),kind:"event",event:{name:n,delegated:ee.has(n)},expr:r};let o=this.wrapHandler(r,t.modifiers),l=this.eventOptions(t.modifiers),s=l?`[${o}, ${l}]`:o;return{name:"on:"+n,kind:"attr",expr:s}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",i=[];return n.includes("prevent")&&i.push("e.preventDefault();"),n.includes("stop")&&i.push("e.stopPropagation();"),!r&&i.length===0?t:`(e) => { ${r}${i.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=t==="checked",i=r?"change":"input",o=r?"checked":"value";this.used.add("bindPair");let l=`bindPair(${n})`;return[{name:t,kind:"attr",expr:`${l}[0]()`,reactive:!0},{name:"on"+te(i),kind:"event",event:{name:i,delegated:ee.has(i)},expr:`(e) => ${l}[1](e.target.${o})`}]}plainAttr(t){let n=t.value,r=t.name;t.name==="class"?r=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(r="innerHTML");let o={name:r,kind:"attr"};if(n==null)return o.literal=!0,o;if(n.kind==="static")return o.literal=n.value,o;if(n.kind==="hole"){let a=this.hole(n.hole);return o.expr=a.code,o.reactive=a.reactive,o}let l=!1,s=n.parts.map(a=>{if("text"in a)return Le(a.text);let c=this.hole(a.hole);return l=l||c.reactive,"${"+c.code+"}"}).join("");return o.expr="`"+s+"`",o.reactive=l,o}};function ne(e,t,n,r={}){let{root:i}=Je(e,{svg:r.svg});return new D(t,n).lowerRoot(i.children)}var De=re.default??re;function je(e){return De(e,{concise:!0}).code}function Oe(e,t,n){let r={code:T(e,t,n),reactive:O(e)};if(j.isArrowFunctionExpression(e)&&!j.isBlockStatement(e.body)){let i=e.body;r.arrow={params:e.params.map(o=>je(o)),body:T(i,t,n),bodyReactive:O(i)}}return j.isObjectExpression(e)&&(r.object=!0),r}function ie(e,t,n={}){let r=e.quasi,i=r.expressions.map(o=>Oe(o,t,n.onNested));return ne(Xe(r),i,t,n)}function Xe(e){let t=[];return e.quasis.forEach((n,r)=>{let i=n.value.cooked??n.value.raw;if(t.push({kind:"static",text:i,start:n.start??0}),r<e.expressions.length){let o=e.expressions[r];t.push({kind:"hole",index:r,start:o.start??0,end:o.end??0})}}),t}function Me(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function C(e){let t=[],n=new Map,r=i=>{switch(i.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let o of i.children)r(o);return!1;case"fragment":for(let o of i.children)r(o);return!1;case"element":{let o=!0;for(let s of i.children)r(s)||(o=!1);let l;for(let s of i.props)if(l=Me(s),l)break;return!l&&!o&&(l=He(i)),i.static=!l,l?n.set(i,l):t.push(i),i.static}default:return!1}};for(let i of Array.isArray(e)?e:[e])r(i);return{staticElements:t,reasons:n}}function He(e){for(let t of e.children){if(t.kind==="expr")return"expression-child";if(t.kind==="component")return"component-child";if(t.kind==="control")return"control-child";if(t.kind==="element"&&!t.static||t.kind==="fragment")return"expression-child"}return"expression-child"}function oe(e,t=new Set,n={}){let r=ie(e,t,n);return C(r),r}var _e="children";function y(e){switch(e.kind){case"call":return!0;case"member":return e.property!==_e;case"compound":return e.parts.some(y);case"opaque":return!1}}var Be=new Set(["CallExpression","OptionalCallExpression"]),Fe=new Set(["MemberExpression","OptionalMemberExpression"]);function E(e){if(!e)return{kind:"opaque"};if(Be.has(e.type))return{kind:"call"};if(Fe.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(N)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(N)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(N)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>N(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(N)}:{kind:"opaque"}}var N=e=>E(e);var ze=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),Ve=/^on[A-Z]/,Ge=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),le=e=>y(E(e));function R(e){if(e.type==="StringLiteral"||e.type==="NumericLiteral"||e.type==="BooleanLiteral"||e.type==="Literal"&&(typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"))return e.value}var X=e=>!!e&&typeof R(e)=="string";function We(e,t){return e.type==="JSXIdentifier"?{tag:e.name,component:e.name[0]!==e.name[0].toLowerCase()}:e.type==="JSXMemberExpression"?{tag:t.code(e),component:!0}:e.type==="JSXNamespacedName"?{tag:`${e.namespace.name}:${e.name.name}`,component:!1}:{tag:"div",component:!1}}function M(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function qe(e,t){let n=M(e.name),r=Ve.test(n),i=r||n.startsWith("on:")||n==="ref",l={name:n,kind:r?"event":"attr"};if(r){let a=n.slice(2).toLowerCase();l.event={name:a,delegated:Ge.has(a)}}let s=e.value;if(s==null)return l.literal=!0,l;if(X(s))return l.literal=R(s),l;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let a=s.expression,c=R(a);return c!==void 0?(l.literal=c,l):(l.expr=t.code(a),l.reactive=i?!1:le(a),(a.type==="JSXElement"||a.type==="JSXFragment")&&(l.jsxElement=!0),l)}return l.literal=!0,l}function se(e,t){let n=e.value;return n==null?null:X(n)?JSON.stringify(R(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function Ue(e,t){let n=[],r=[];for(let i of e){if(i.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(i.argument)});continue}if(i.type!=="JSXAttribute"||L(M(i.name)))continue;let o=i.name.type==="JSXNamespacedName"?i.name.namespace.name:null;if(o==="use"){let l=i.name.name.name;t.used.add(l);let s=se(i,t);r.push(s!=null?`[${l}, () => (${s})]`:`[${l}]`);continue}if(o==="oncapture"){let l=i.name.name.name.toLowerCase(),s=se(i,t)??"undefined";n.push({name:"on:"+l,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(qe(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function ae(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=x(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression;n.push({kind:"expr",code:t.code(i),reactive:le(i)})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(ce(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function Ke(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=M(t.name);if(L(n)){if(t.value&&!X(t.value))throw new m(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return w(n,t.value?R(t.value):null)}}}function ce(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:ae(e.children,t)};let{tag:n,component:r}=We(e.openingElement.name,t),i=Ue(e.openingElement.attributes,t),o=ae(e.children,t);if(r){let l=Ke(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...l?{load:l}:{}}}return{kind:"element",tag:n,svg:ze.has(n),props:i,children:o,static:!1}}function pe(e,t){let n=ce(e,t);return C(n),n}var Qe=de.default??de;function ue(e){return Qe(e,{concise:!0}).code}function et(e,t,n){let r=b.cloneNode(e,!0),i=b.file(b.program([b.expressionStatement(r)])),o=!1,l=(s,a,c)=>{for(let p of c)t.add(p);s.replaceWith(Ye.expression(a,{placeholderPattern:!1,plugins:["typescript"]})()),s.skip(),o=!0};return Ze(i,{"JSXElement|JSXFragment"(s){let a=s.node,c=tt(a,t,n);n?.(c);let{code:p,imports:d,templates:u}=k.emit(c,{});l(s,v(p,u),d)},TaggedTemplateExpression(s){let a=s.node.tag;if(!b.isIdentifier(a)||a.name!=="html"&&a.name!=="svg")return;let c=oe(s.node,t,{svg:a.name==="svg",onNested:n});n?.(c);let{code:p,imports:d,templates:u}=k.emit(c,{});l(s,v(p,u),d)}}),o?i.program.body[0].expression:e}function T(e,t,n){return ue(et(e,t,n))}var Bt=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]);function O(e){return y(E(e))}function tt(e,t=new Set,n){return pe(e,{code:i=>i.type==="JSXMemberExpression"?ue(i):T(i,t,n),used:t})}export{Bt as SVG_TAGS,tt as buildIR,T as genExpr,O as isReactiveExpr};
|
|
1
|
+
import{types as T,traverse as at,template as ct}from"@babel/core";import ve from"@babel/generator";var ke=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),z={className:"class",htmlFor:"for"},Re=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),be=new Set(["script","style","textarea","title"]);function L(e){return be.has(e)}function W(e){return z[e]??e}function y(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!Re.has(e.name)}function M(e){if(!e.static||L(e.tag))return!1;for(let t of e.props)if(!y(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&M(t)))return!1;return!0}function N(e){let t=e.props.map(Se).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return ke.has(e.tag)?n:`${n}${e.children.map(Ee).join("")}</${e.tag}>`}function Ee(e){if(e.kind==="text")return $e(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return N(e)}function Se(e){let t=z[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${Ie(String(n))}"`}function Ie(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function $e(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function _(e){let t=[],n,r=i=>{n??=i.at?.file,t.push(i.at?.line??0,i.at?.column??0);for(let o of i.children)o.kind==="element"&&r(o)};return r(e),n&&t.some(i=>i!==0)?{file:n,pos:t}:void 0}var we="<!--fx-->",Te="<!--fx/-->";function P(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Ae(e){return e.kind==="text"||e.kind==="element"&&G(e)}function G(e){return e.svg||L(e.tag)||!e.props.every(t=>y(t))?!1:e.children.every(t=>Ae(t)||P(t))}function C(e){if(P(e))return!0;let t=e.children;return t?t.some(C):!1}function q(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||q(t))}function Z(e){if(!G(e)||!q(e)||!e.children.some(C))return null;let t=[],n=[],r=0,i=a=>{let s=`_n$${r++}`;return t.push({ref:s,expr:a}),s};return o(e,"_el$"),{html:Ce(e),tag:e.tag,steps:t,holes:n};function o(a,s){let l=-1;a.children.forEach((c,u)=>{C(c)&&(l=u)});let p=null;for(let c=0;c<=l;c++){let u=a.children[c],d=p?`${p}.nextSibling`:`${s}.firstChild`;if(P(u)){let h=i(d),A=i(`holeEnd(${h})`);n.push({parentRef:s,startRef:h,endRef:A,node:u}),p=A;continue}let g=i(d);u.kind==="element"&&C(u)&&o(u,g),p=g}}}function Ce(e){return N(Y(e)).split(Q).join(we+Te)}function Y(e){return{...e,children:e.children.map(t=>P(t)?{kind:"text",value:Q}:t.kind==="element"?Y(t):t)}}var Q="\0fx-hole\0";var j={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},gt={version:2,module:"@fluixi/dom",symbols:[...j.symbols,"template","cloneTemplate","walk"]};var m="@fluixi/reactive/signal",H={$signal:{export:"signal",module:m,returns:"signal-handle"},$memo:{export:"memo",module:m,returns:"memo-handle"},$effect:{export:"effect",module:m,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:m,returns:"resource-handle"},$selector:{export:"createSelector",module:m,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:m,returns:"memo-accessor"},$untrack:{export:"untrack",module:m,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}};var yt=new RegExp(`\\$(?:${Object.keys(H).map(e=>e.slice(1)).join("|")})\\s*\\(`);var ee="__fx_source";var Pe="__fx_hole",v=(e,t,n,r)=>`(globalThis.${Pe} ?? ((f) => f))(${e},${t},${n}${r===void 0?"":`,${JSON.stringify(r)}`})`,Je="__fx_props",te=(e,t)=>`(globalThis.${Je} ?? ((p) => p))(${e},${JSON.stringify(t)})`;var De={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function Oe(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function ie(e){return Oe(e)?e:JSON.stringify(e)}function Le(e){if(e.expr!==void 0){if(e.name==="ref"&&e.at)return v(`(${e.expr})`,e.at.line,e.at.column,e.expr);if(!e.reactive)return`(${e.expr})`;let t=`() => (${e.expr})`;return e.at?v(t,e.at.line,e.at.column,e.directive):t}return JSON.stringify(e.literal??!0)}function Me(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function _e(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${ie(s.name)}: ${Le(s)}`);t!=null&&o.push(`children: ${t}`);let a=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(s=>s.expr).join(", ")}, ${a})`):a}function ne(e,t){return t?v(e,t.line,t.column):e}function oe(e,t,n){return e.length===1?x(e[0],t,n):`[${e.map(r=>x(r,t,n)).join(", ")}]`}function re(e,t,n,r,i,o){r.add("createMemo"),r.add("createComponent");let a=t.filter(d=>d.kind==="spread"),s=t.filter(d=>d.kind!=="spread"),l=s.map(d=>`get ${ie(d.name)}() { return ${Me(d)}; }`);n.length>0&&l.push(`get children() { return ${oe(n,r,i)}; }`);let p=`{ ${l.join(", ")} }`;a.length>0&&(r.add("mergeProps"),p=`mergeProps(${a.map(d=>d.expr).join(", ")}, ${p})`);let c={};for(let d of s)d.at&&(c[d.name]=[d.at.line,d.at.column]);return Object.keys(c).length&&(p=te(p,c)),`createMemo((${o?`globalThis.${ee}?.(${JSON.stringify(o.file)},${o.line},${o.column},${JSON.stringify(e)}), `:""}() => createComponent(${e}, ${p})))`}function je(e,t){let n=W(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var se=!1;function x(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":{if(!e.reactive)return`(${e.code})`;let r=`() => (${e.code})`;return e.at?v(r,e.at.line,e.at.column):r}case"fragment":return e.children.length===0?"null":oe(e.children,t,n);case"component":return ne(re(e.name,e.props,e.children,t,n,e.at),e.bindAt??e.at);case"control":{let r=De[e.control]??e.control;return t.add(r),ne(re(r,e.props,e.children,t,n),e.bindAt)}case"element":{if(n&&e.static&&!e.svg&&M(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;n.push({id:s,html:N(e),tag:e.tag,svg:!1});let l=_(e);return l?`templateNode(${s}, ${JSON.stringify(e.tag)}, false, false, ${JSON.stringify(l)})`:`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&se){let s=Z(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let l=`_tmpl$${n.length}`;n.push({id:l,html:s.html,tag:s.tag,svg:!1});let p=_(e),c=[`const _el$ = templateNode(${l}, ${JSON.stringify(s.tag)}, true${p?`, false, ${JSON.stringify(p)}`:""});`];for(let u of s.steps)c.push(`const ${u.ref} = ${u.expr};`);for(let u of s.holes)c.push(`insert(${u.parentRef}, holeScope(${u.startRef}, () => (${x(u.node,t,n)})), ${u.endRef}, holeContent(${u.startRef}, ${u.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",o=[],a=e.at?`${r}, ${e.svg}, ${JSON.stringify(e.at)}`:e.svg?`${r}, true`:r;if(o.push(`const ${i} = createNativeElement(${a});`),e.props.length>0)if(!e.svg&&e.props.every(y))for(let s of e.props)o.push(je(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${_e(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let l=x(s,t,n),p=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(p?`insert(${i}, ${l}, null);`:`insert(${i}, ${l});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function k(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(r=>[r.id,JSON.stringify(r.html)]));return e.replace(/_tmpl\$\d+/g,r=>n.get(r)??r)}var R={name:"imperative",contract:j,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return se=t?.partialTemplates===!0,{code:x(e,n,r),imports:Array.from(n),templates:r}}};import{types as B}from"@babel/core";import ue from"@babel/generator";import{parseTemplate as Be}from"@fluixi/template-parser";var He={kind:"eager"},Fe=["pointerdown","focusin","keydown"],ae=new Set(["eager","idle","visible","interaction","media","never"]),f=class extends Error{};function F(e){return e.startsWith("load:")}function J(e,t){let n=e.slice(5);if(!ae.has(n))throw new f(`Unknown load strategy 'load:${n}'. Expected one of ${[...ae].join(", ")}.`);switch(n){case"eager":return He;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return t?{kind:"visible",rootMargin:t}:{kind:"visible"};case"interaction":return{kind:"interaction",events:t?Xe(t):[...Fe]};case"media":if(!t)throw new f(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new f(`Unhandled load strategy '${n}'.`)}}function Xe(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new f("'load:interaction' was given no event names.");return t}function b(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let i=0;i<t.length;i++)/[^ \t]/.test(t[i])&&(n=i);let r="";for(let i=0;i<t.length;i++){let o=t[i].replace(/\t/g," ");i!==0&&(o=o.replace(/^ +/,"")),i!==t.length-1&&(o=o.replace(/ +$/,"")),o&&(i!==n&&(o+=" "),r+=o)}return r}var ce=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function Ve(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function le(e){return e.charAt(0).toUpperCase()+e.slice(1)}var X=class{constructor(t,n,r,i){this.holes=t;this.used=n;this.sourceFile=r;this.positionAt=i}tagAt(t){let n=t.loc?.start;if(!this.sourceFile||!this.positionAt||n==null)return;let{line:r,column:i}=this.positionAt(n);return{file:this.sourceFile,line:r,column:i}}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:i}=R.emit(t,{});for(let o of r)this.used.add(o);return k(n,i)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.kind==="Element"||i.kind==="Component"){let a=i.attributes.find(s=>s.kind==="IfDirective");if(a&&a.kind==="IfDirective"){let s=r+1;s<t.length&&this.isBlankText(t[s])&&s++;let l=t[s],p=l&&(l.kind==="Element"||l.kind==="Component")&&l.attributes.some(c=>c.kind==="ElseDirective");n.push(this.lowerIf(i,a.hole,p?l:null)),p&&(r=s);continue}if(i.attributes.some(s=>s.kind==="EachDirective")){n.push(this.lowerEach(i));continue}}let o=this.lowerNode(i);o&&n.push(o)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&b(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=b(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive,...n.at?{at:n.at}:{}}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(i=>i.kind==="Attribute"&&i.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let i=t.attributes.filter(a=>a!==n),o=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:i});return o.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),o}let r=this.tagAt(t);return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1,...r?{at:r}:{}}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:i,rest:o}=this.partitionSlots(t.children);for(let[c,u]of i){let d=u.length===1?u[0]:{kind:"fragment",children:u},g={name:c,kind:"attr",expr:this.emit(d),jsxElement:!0},h=r.findIndex(A=>A.name===c);h>=0?r[h]=g:r.push(g)}let a=t.attributes.find(c=>c.kind==="LoadDirective"),s=a?J(`load:${a.strategy}`,a.modifier):void 0,l=r.find(c=>c.at&&c.reactive)?.at,p=this.tagAt(t);return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...p?{at:p}:{},...l?{bindAt:l}:{},...s?{load:s}:{}}}partitionSlots(t){let n=new Map,r=[];for(let i of t){if(i.kind==="Element"||i.kind==="Component"){let o=i.attributes.find(a=>a.kind==="Attribute"&&a.name==="slot");if(o&&o.value&&o.value.kind==="static"){let a={...i,attributes:i.attributes.filter(p=>p!==o)},s=a.kind==="Element"?this.lowerElement(a):this.lowerComponent(a),l=n.get(o.value.value)??[];l.push(s),n.set(o.value.value,l);continue}}r.push(i)}return{slots:n,rest:r}}lowerIf(t,n,r){let i=this.hole(n),o=[{name:"when",kind:"attr",expr:i.code,reactive:i.reactive,...i.at?{at:i.at}:{}}];if(r){let l=this.stripAndLower(r,p=>p.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(l),jsxElement:!0})}let a=this.stripAndLower(t,l=>l.kind==="IfDirective"),s=this.tagAt(t);return{kind:"component",name:"Show",props:o,children:[a],...s?{at:s}:{},...i.at?{bindAt:i.at}:{}}}lowerEach(t){let n=t.attributes.find(p=>p.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),i=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive,...r.at?{at:r.at}:{}}];if(n.key){let p="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;i.push({name:"by",kind:"attr",expr:p})}let o=this.itemArrow(t),a;if(o){let p={kind:"expr",code:o.body,reactive:o.bodyReactive},c=this.rebuildWithChildren(t,[p]);a=`(${o.params.join(", ")}) => (${this.emit(c)})`}else{let p=this.stripAndLower(t,c=>c.kind==="EachDirective");a=`() => (${this.emit(p)})`}let s=[{kind:"expr",code:a,reactive:!1}],l=this.tagAt(t);return{kind:"component",name:"For",props:i,children:s,...l?{at:l}:{},...r.at?{bindAt:r.at}:{}}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(i=>!n(i))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(i=>i.kind!=="EachDirective"));if(t.kind==="Element"){let i=this.tagAt(t);return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1,...i?{at:i}:{}}}return{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],i=!1,o,a=[],s=!1,l,p=[];for(let c of t)switch(c.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(c));break;case"PropertyBinding":n.push({name:c.name,kind:"prop",expr:this.hole(c.hole).code,reactive:this.hole(c.hole).reactive,...this.hole(c.hole).at?{at:this.hole(c.hole).at}:{}});break;case"EventBinding":n.push(this.eventProp(c));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(c.hole).code,reactive:this.hole(c.hole).reactive,...this.hole(c.hole).at?{at:this.hole(c.hole).at}:{}});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(c.hole).code});break;case"ClassDirective":{let u=this.hole(c.hole);r.push(`${JSON.stringify(c.name)}: ${u.code}`),i=i||u.reactive,o??=u.at;break}case"StyleDirective":{let u=this.hole(c.hole);a.push(`${JSON.stringify(c.name)}: ${u.code}`),s=s||u.reactive,l??=u.at;break}case"BindDirective":n.push(...this.bindProps(c.name,this.hole(c.hole)));break;case"UseDirective":{let u=c.name??(c.hole!=null?this.hole(c.hole).code:null);if(!u)break;p.push(c.name!=null&&c.hole!=null?`[${u}, () => (${this.hole(c.hole).code})]`:`[${u}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:i,...o?{at:o}:{}}),a.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${a.join(", ")} }`,reactive:s,...l?{at:l}:{}}),p.length>0&&n.push({name:"use",kind:"attr",expr:`[${p.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),r=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+le(t.name),kind:"event",event:{name:n,delegated:ce.has(n)},expr:r};let o=this.wrapHandler(r,t.modifiers),a=this.eventOptions(t.modifiers),s=a?`[${o}, ${a}]`:o;return{name:"on:"+n,kind:"attr",expr:s}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",i=[];return n.includes("prevent")&&i.push("e.preventDefault();"),n.includes("stop")&&i.push("e.stopPropagation();"),!r&&i.length===0?t:`(e) => { ${r}${i.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=n.code,i=t==="checked",o=i?"change":"input",a=i?"checked":"value";this.used.add("bindPair");let s=`bindPair(${r})`;return[{name:t,kind:"attr",expr:`${s}[0]()`,reactive:!0,directive:`bind:${t}`,...n.at?{at:n.at}:{}},{name:"on"+le(o),kind:"event",event:{name:o,delegated:ce.has(o)},expr:`(e) => ${s}[1](e.target.${a})`}]}plainAttr(t){let n=t.value,r=t.name;t.name==="class"?r=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(r="innerHTML");let o={name:r,kind:"attr"};if(n==null)return o.literal=!0,o;if(n.kind==="static")return o.literal=n.value,o;if(n.kind==="hole"){let p=this.hole(n.hole);return o.expr=p.code,o.reactive=p.reactive,p.at&&(o.at=p.at),o}let a=!1,s,l=n.parts.map(p=>{if("text"in p)return Ve(p.text);let c=this.hole(p.hole);return a=a||c.reactive,s??=c.at,"${"+c.code+"}"}).join("");return o.expr="`"+l+"`",o.reactive=a,s&&(o.at=s),o}};function pe(e,t,n,r={}){let{root:i}=Be(e,{svg:r.svg});return new X(t,n,r.sourceFile,r.positionAt).lowerRoot(i.children)}var Ke=ue.default??ue;function Ue(e){return Ke(e,{concise:!0}).code}function ze(e,t,n){let r={code:D(e,t,n),reactive:V(e)};if(B.isArrowFunctionExpression(e)&&!B.isBlockStatement(e.body)){let i=e.body;r.arrow={params:e.params.map(o=>Ue(o)),body:D(i,t,n),bodyReactive:V(i)}}return B.isObjectExpression(e)&&(r.object=!0),r}function de(e,t,n={}){let r=e.quasi,i=r.expressions.map(o=>ze(o,t,n.onNested));return pe(We(r),i,t,n)}function We(e){let t=[];return e.quasis.forEach((n,r)=>{let i=n.value.cooked??n.value.raw;if(t.push({kind:"static",text:i,start:n.start??0}),r<e.expressions.length){let o=e.expressions[r];t.push({kind:"hole",index:r,start:o.start??0,end:o.end??0})}}),t}function Ge(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function O(e){let t=[],n=new Map,r=i=>{switch(i.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let o of i.children)r(o);return!1;case"fragment":for(let o of i.children)r(o);return!1;case"element":{let o=!0;for(let s of i.children)r(s)||(o=!1);let a;for(let s of i.props)if(a=Ge(s),a)break;return!a&&!o&&(a=qe(i)),i.static=!a,a?n.set(i,a):t.push(i),i.static}default:return!1}};for(let i of Array.isArray(e)?e:[e])r(i);return{staticElements:t,reasons:n}}function qe(e){for(let t of e.children){if(t.kind==="expr")return"expression-child";if(t.kind==="component")return"component-child";if(t.kind==="control")return"control-child";if(t.kind==="element"&&!t.static||t.kind==="fragment")return"expression-child"}return"expression-child"}function fe(e,t=new Set,n={}){let r=de(e,t,n);return O(r),r}var Ze="children";function E(e){switch(e.kind){case"call":return!0;case"member":return e.property!==Ze;case"compound":return e.parts.some(E);case"opaque":return!1}}var Ye=new Set(["CallExpression","OptionalCallExpression"]),Qe=new Set(["MemberExpression","OptionalMemberExpression"]);function I(e){if(!e)return{kind:"opaque"};if(Ye.has(e.type))return{kind:"call"};if(Qe.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(S)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(S)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(S)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>S(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(S)}:{kind:"opaque"}}var S=e=>I(e);var et=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),tt=/^on[A-Z]/,nt=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),he=e=>E(I(e)),$=(e,t)=>{if(!t.sourceFile)return;let n=e.loc?.start;return n?{line:n.line,column:n.column}:void 0};function w(e){if(e.type==="StringLiteral"||e.type==="NumericLiteral"||e.type==="BooleanLiteral"||e.type==="Literal"&&(typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"))return e.value}var K=e=>!!e&&typeof w(e)=="string";function rt(e,t){return e.type==="JSXIdentifier"?{tag:e.name,component:e.name[0]!==e.name[0].toLowerCase()}:e.type==="JSXMemberExpression"?{tag:t.code(e),component:!0}:e.type==="JSXNamespacedName"?{tag:`${e.namespace.name}:${e.name.name}`,component:!1}:{tag:"div",component:!1}}function U(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function it(e,t){let n=U(e.name),r=tt.test(n),i=r||n.startsWith("on:")||n==="ref",a={name:n,kind:r?"event":"attr"};if(r){let l=n.slice(2).toLowerCase();a.event={name:l,delegated:nt.has(l)}}let s=e.value;if(s==null)return a.literal=!0,a.at=$(e,t),a;if(K(s))return a.literal=w(s),a.at=$(s,t),a;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let l=s.expression,p=w(l);return p!==void 0?(a.literal=p,a.at=$(l,t),a):(a.expr=t.code(l),a.reactive=i?!1:he(l),a.at=$(l,t),(l.type==="JSXElement"||l.type==="JSXFragment")&&(a.jsxElement=!0),a)}return a.literal=!0,a}function me(e,t){let n=e.value;return n==null?null:K(n)?JSON.stringify(w(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function ot(e,t){let n=[],r=[];for(let i of e){if(i.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(i.argument)});continue}if(i.type!=="JSXAttribute"||F(U(i.name)))continue;let o=i.name.type==="JSXNamespacedName"?i.name.namespace.name:null;if(o==="use"){let a=i.name.name.name;t.used.add(a);let s=me(i,t);r.push(s!=null?`[${a}, () => (${s})]`:`[${a}]`);continue}if(o==="oncapture"){let a=i.name.name.name.toLowerCase(),s=me(i,t)??"undefined";n.push({name:"on:"+a,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(it(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function ge(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=b(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression,o=he(i);n.push({kind:"expr",code:t.code(i),reactive:o,...o?{at:$(i,t)}:{}})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(ye(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function st(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=U(t.name);if(F(n)){if(t.value&&!K(t.value))throw new f(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return J(n,t.value?w(t.value):null)}}}function ye(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:ge(e.children,t)};let{tag:n,component:r}=rt(e.openingElement.name,t),i=ot(e.openingElement.attributes,t),o=ge(e.children,t),a=t.sourceFile&&e.loc?.start?{file:t.sourceFile,line:e.loc.start.line,column:e.loc.start.column}:void 0;if(r){let s=st(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...s?{load:s}:{},...a?{at:a}:{}}}return{kind:"element",tag:n,svg:et.has(n),props:i,children:o,static:!1,...a?{at:a}:{}}}function Ne(e,t){let n=ye(e,t);return O(n),n}var lt=ve.default??ve;function xe(e){return lt(e,{concise:!0}).code}function pt(e,t,n){let r=T.cloneNode(e,!0),i=T.file(T.program([T.expressionStatement(r)])),o=!1,a=(s,l,p)=>{for(let c of p)t.add(c);s.replaceWith(ct.expression(l,{placeholderPattern:!1,plugins:["typescript"]})()),s.skip(),o=!0};return at(i,{"JSXElement|JSXFragment"(s){let l=s.node,p=ut(l,t,n);n?.(p);let{code:c,imports:u,templates:d}=R.emit(p,{});a(s,k(c,d),u)},TaggedTemplateExpression(s){let l=s.node.tag;if(!T.isIdentifier(l)||l.name!=="html"&&l.name!=="svg")return;let p=fe(s.node,t,{svg:l.name==="svg",onNested:n});n?.(p);let{code:c,imports:u,templates:d}=R.emit(p,{});a(s,k(c,d),u)}}),o?i.program.body[0].expression:e}function D(e,t,n){return xe(pt(e,t,n))}var un=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]);function V(e){return E(I(e))}function ut(e,t=new Set,n){return Ne(e,{code:i=>i.type==="JSXMemberExpression"?xe(i):D(i,t,n),used:t})}export{un as SVG_TAGS,ut as buildIR,D as genExpr,V as isReactiveExpr};
|