@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{parse as De}from"@babel/parser";import{parseTemplate as Me}from"@fluixi/template-parser";var L="@fluixi/reactive/signal",W={$signal:{export:"signal",module:L,returns:"signal-handle"},$memo:{export:"memo",module:L,returns:"memo-handle"},$effect:{export:"effect",module:L,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:L,returns:"resource-handle"},$selector:{export:"createSelector",module:L,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:L,returns:"memo-accessor"},$untrack:{export:"untrack",module:L,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}},de={signal:"signal-handle",memo:"memo-handle",effect:"effect",store:"store-handle",createSignal:["signal-accessor","signal-setter"],createMemo:"memo-accessor",createEffect:"effect",createRenderEffect:"effect",createStore:"reactive-object",resource:"resource-handle",createResource:"reactive-object",createSelector:"memo-accessor",createDeferred:"memo-accessor"},Re=["@fluixi/reactive","@fluixi/reactive/signal","@fluixi/reactive/store","@fluixi/core"],Ve=new RegExp(`\\$(?:${Object.keys(W).map(t=>t.slice(1)).join("|")})\\s*\\(`);function ue(t){return Object.prototype.hasOwnProperty.call(W,t)}function le(t){return Re.includes(t)}function T(t,i){if(t)switch(t.type){case"Identifier":i.add(t.name);return;case"ObjectPattern":for(let r of t.properties??[])r.type==="RestElement"?T(r.argument,i):T(r.value,i);return;case"ArrayPattern":for(let r of t.elements??[])T(r,i);return;case"AssignmentPattern":T(t.left,i);return;case"RestElement":T(t.argument,i);return}}function G(t,i){if(!(!t||typeof t!="object"||typeof t.type!="string")){i(t);for(let r of Object.keys(t)){if(r==="loc"||r==="leadingComments"||r==="trailingComments")continue;let e=t[r];if(Array.isArray(e))for(let o of e)G(o,i);else e&&typeof e=="object"&&G(e,i)}}}function we(t,i){if(t.type!=="CallExpression")return;let r=t.callee;if(r?.type!=="Identifier")return;let e=r.name,o=i.primitives.get(e);if(o)return o;let a=W[e];if(a&&!i.shadowed.has(e))return a.returns}function ke(t,i,r){if(Array.isArray(i)){t.type==="ArrayPattern"&&t.elements.forEach((e,o)=>{let a=i[o];e?.type==="Identifier"&&a&&r.set(e.name,a)});return}t.type==="Identifier"&&r.set(t.name,i)}function fe(t){let i={kinds:new Map,primitives:new Map,shadowed:new Set},r=t;G(r,e=>{let o=new Set;if(e.type==="VariableDeclarator")T(e.id,o);else if(e.type==="FunctionDeclaration"||e.type==="ClassDeclaration")T(e.id,o);else if(e.type==="ImportDefaultSpecifier"||e.type==="ImportNamespaceSpecifier")T(e.local,o);else if(e.type==="ImportSpecifier")T(e.local,o);else if(e.type==="FunctionExpression"||e.type==="ArrowFunctionExpression"||e.type==="FunctionDeclaration")for(let a of e.params??[])T(a,o);for(let a of o)W[a]&&i.shadowed.add(a)});for(let e of r.body??[])if(e.type==="ImportDeclaration"&&le(e.source?.value))for(let o of e.specifiers??[]){if(o.type!=="ImportSpecifier")continue;let a=o.imported,I=a.type==="Identifier"?a.name:a.value,D=de[I];D&&i.primitives.set(o.local.name,D)}return G(r,e=>{if(e.type!=="VariableDeclarator"||!e.init)return;let o=we(e.init,i);o&&ke(e.id,o,i.kinds)}),i}var H=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],q=["Suspense","SuspenseList","Await"],z=["Router","Outlet","Redirect","Link"],Xe=[...H,...q,...z],We=new Set([...H,...q]);var Oe={signal:"state",createSignal:"state",memo:"memo",createMemo:"memo",effect:"effect",createEffect:"effect",store:"store",createStore:"store",resource:"resource",createResource:"resource"},Te=new Set(["memo","effect","resource"]),pe=new Set([...H,...q,...z]),me={Router:"routes",Link:"href",Redirect:"to",Show:"when",Match:"when",For:"each",Index:"each",Dynamic:"component",Portal:"mount",Await:"value"},Ce=new Set(z),ge=t=>Ce.has(t)?"router":"control",Pe=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]);function Ae(t){return t.replace(/\\/g,"/").replace(/^\.?\/+/,"")}function M(t,i,r=[]){if(!(!t||typeof t.type!="string")){i(t,r),r.push(t);for(let e of Object.keys(t)){if(e==="loc"||e==="parent")continue;let o=t[e];if(Array.isArray(o))for(let a of o)M(a,i,r);else o&&typeof o.type=="string"&&M(o,i,r)}r.pop()}}function $e(t){let r=[...t].reverse().find(e=>e.type==="VariableDeclarator")?.id;if(r?.type==="Identifier")return r.name;if(r?.type==="ArrayPattern"){let e=r.elements?.[0];if(e?.type==="Identifier")return e.name}}function je(t){if(t.type==="FunctionDeclaration"){let i=t.id?.name;return i&&i[0]===i[0]?.toUpperCase()?i:void 0}if(t.type==="VariableDeclarator"){let i=t.id,r=t.init;if(i?.type!=="Identifier"||!r||r.type!=="ArrowFunctionExpression"&&r.type!=="FunctionExpression")return;let e=i.name;return e[0]===e[0]?.toUpperCase()?e:void 0}}function B(t){let i=new Set;return M(t,(r,e)=>{if(r.type!=="Identifier")return;let o=e[e.length-1];o?.type==="MemberExpression"&&o.property===r&&!o.computed||o?.type==="ObjectProperty"&&o.key===r&&!o.computed||i.add(r.name)}),i}function Fe(t){let i=[],r=t.quasis??[],e=t.expressions??[];return r.forEach((o,a)=>{let I=o.value;if(i.push({kind:"static",text:I?.cooked??I?.raw??"",start:o.start??0}),a<e.length){let D=e[a];i.push({kind:"hole",index:a,start:D.start??0,end:D.end??0})}}),i}function _e(t){let i=[0];for(let r=0;r<t.length;r++)t.charCodeAt(r)===10&&i.push(r+1);return r=>{let e=0,o=i.length-1;for(;e<o;){let a=e+o+1>>1;i[a]<=r?e=a:o=a-1}return{line:e+1,column:r-i[e]}}}function he(t){let i="",r=[];for(let e of t.attributes)e.kind!=="Attribute"||e.value?.kind!=="static"||(e.name==="id"?i=`#${e.value.value}`:e.name==="class"&&r.push(...String(e.value.value).split(/\s+/).filter(Boolean).slice(0,2)));return`${t.tag}${i}${r.map(e=>`.${e}`).join("")}`}function Ne(t){return t?t.kind==="hole"?[t.hole]:t.kind==="mixed"?t.parts.flatMap(i=>"hole"in i?[i.hole]:[]):[]:[]}function ye(t){let i=t.name?.name??"element",r="",e=[];for(let o of t.attributes??[]){if(o.type!=="JSXAttribute")continue;let a=o.name?.name,I=o.value;I?.type==="StringLiteral"&&(a==="id"?r=`#${I.value}`:(a==="class"||a==="className")&&e.push(...String(I.value).split(/\s+/).filter(Boolean).slice(0,2)))}return`${i}${r}${e.map(o=>`.${o}`).join("")}`}function Le(t,i){for(let r of t.attributes??[]){if(r.type!=="JSXAttribute"||r.name?.name!==i)continue;let e=r.value;return e?.type==="JSXExpressionContainer"?e.expression:void 0}}function et(t,i={}){let r=(i.routesDir??"src/routes").replace(/^\.?\/+|\/+$/g,""),e=(i.apiDir??"src/api").replace(/^\.?\/+|\/+$/g,""),o=[],a=[],I=new Map,D=new Map,F=new Map,Q=[],te=[],Y=[],Z=new Map,ne=[],re=new Map,J=0;for(let n of t){if(!/\.(tsx?|jsx?)$/.test(n.path))continue;let s;try{s=De(n.code,{sourceType:"module",plugins:["jsx","typescript"],errorRecovery:!0}).program}catch{continue}let{primitives:g,shadowed:R}=fe(s),w=new Map,A=new Map,x=new Map;D.set(n.path,w),I.set(n.path,A),F.set(n.path,x);let Se=Ae(n.path).startsWith(`${r}/`),_=new Map,xe=null,ve=()=>xe??=_e(n.code);M(s,(c,f)=>{let d=je(c),u=c.loc?.start;if(!d||!u)return;let N=J++;_.set(c,N),w.set(d,N),re.set(N,B(c)),Se&&o.push(N),a.push({node:{id:N,label:d,kind:Pe.has(d)?"handler":"component",deps:[],writes:[],runs:0,lastPulse:0,source:{file:n.path,line:u.line,column:u.column}},reads:new Set,file:n.path})}),M(s,(c,f)=>{if(c.type==="ImportDeclaration"){let k=c.source?.value;for(let V of c.specifiers??[]){let $=V.local?.name;$&&k?.startsWith(".")&&x.set($,k)}return}if(c.type!=="CallExpression")return;let d=c.callee;if(d?.type!=="Identifier")return;let u=d.name,N=u.startsWith("$")&&ue(u)&&!R.has(u);if(!N&&!g.has(u))return;let l=Oe[N?u.slice(1):u],p=c.loc?.start;if(!l||!p)return;let y=J++,C=$e(f)??`${l}${y}`;w.set(C,y);let E;for(let k=f.length-1;k>=0;k--){let V=_.get(f[k]);if(V!==void 0){E=V;break}}a.push({node:{id:y,label:C,kind:l,deps:[],writes:[],runs:0,lastPulse:0,source:{file:n.path,line:p.line,column:p.column},...E!==void 0?{createdIn:E}:{}},reads:Te.has(l)?B(c.arguments?.[0]):new Set,file:n.path})}),M(s,(c,f)=>{if(c.type!=="JSXOpeningElement")return;let d=c.name?.name;if(!d||d[0]!==d[0]?.toUpperCase())return;let u;for(let l=f.length-1;l>=0;l--){let p=_.get(f[l]);if(p!==void 0){u=p;break}}if(!(w.has(d)||x.has(d))&&pe.has(d)){let l=c.loc?.start;if(!l)return;let p=J++,y=me[d],C=y?Le(c,y):void 0,E=f[f.length-1];E?.type==="JSXElement"&&_.set(E,p),a.push({node:{id:p,label:d,kind:ge(d),deps:[],writes:[],runs:0,lastPulse:0,source:{file:n.path,line:l.line,column:l.column},...u!==void 0?{createdIn:u}:{}},reads:C?B(C):new Set,file:n.path});return}u!==void 0&&Q.push({tag:d,file:n.path,owner:u})}),M(s,(c,f)=>{if(c.type!=="JSXExpressionContainer")return;let d=c.expression;if(!d||d.type==="JSXEmptyExpression")return;let u=d.loc?.start;if(!u)return;let N=f[f.length-1],l=N?.type==="JSXAttribute"?N.name?.name:void 0,p=[...f].reverse().find(E=>E.type==="JSXElement"||E.type==="JSXOpeningElement"),y=p?.type==="JSXOpeningElement"?p:p?.openingElement;if(!y)return;let C={kind:l?"attribute":"content",...l?{name:l}:{},element:ye(y),source:{file:n.path,line:u.line,column:u.column}};for(let E of B(d))Y.push({file:n.path,name:E,target:C})});let se=c=>{let f=c.openingElement??void 0,d=f?.name?.name;if(!f||!d)return;let u=c.loc?.start,N=u?{file:n.path,line:u.line,column:u.column}:void 0,l=[];for(let p of c.children??[]){if(p?.type!=="JSXElement")continue;let y=se(p);y&&l.push(y)}if(d[0]===d[0]?.toUpperCase()){let p={label:d,children:l,...N?{at:N}:{}},y=_.get(c)??w.get(d);return y!==void 0?p.owner=y:ne.push({node:p,tag:d,file:n.path}),p}return{label:ye(f),children:l,...N?{at:N}:{}}};M(s,(c,f)=>{if(c.type!=="JSXElement")return;let d;for(let l=f.length-1;l>=0;l--){let p=f[l];if(p.type==="JSXElement")return;let y=_.get(p);if(y!==void 0){d=y;break}}if(d===void 0)return;let u=se(c);if(!u)return;let N=Z.get(d);N?N.push(u):Z.set(d,[u])}),M(s,(c,f)=>{if(c.type!=="TaggedTemplateExpression")return;let d=c.tag?.name;if(d!=="html"&&d!=="svg")return;let u=c.quasi,N=u?.expressions??[],l=ve(),p;try{p=Me(Fe(u),{svg:d==="svg"}).root.children}catch{return}let y=v=>v==null?void 0:N[v],C=v=>{let m=y(v);return m?B(m):new Set},E=(v,m,b,h)=>{let S=m!==void 0?l(m):y(b)?.loc?.start??c.loc?.start;if(!S)return;let P=J++;return a.push({node:{id:P,label:v,kind:ge(v),deps:[],writes:[],runs:0,lastPulse:0,source:{file:n.path,line:S.line,column:S.column},...h!==void 0?{createdIn:h}:{}},reads:C(b),file:n.path}),P},k=(v,m,b)=>{let h=y(v),S=h?.loc?.start;if(!h||!S)return;let P={kind:b?"attribute":"content",...b?{name:b}:{},element:m,source:{file:n.path,line:S.line,column:S.column}};for(let j of B(h))Y.push({file:n.path,name:j,target:P})},V=v=>{let m=he(v);for(let b of v.attributes)switch(b.kind){case"Attribute":for(let h of Ne(b.value))k(h,m,b.name);break;case"PropertyBinding":case"BindDirective":k(b.hole,m,b.name);break;case"ClassDirective":k(b.hole,m,"class");break;case"StyleDirective":k(b.hole,m,"style");break;default:break}},$=(v,m,b)=>{for(let h of v)switch(h.kind){case"Element":{let S=h.attributes.find(O=>O.kind==="IfDirective"),P=h.attributes.find(O=>O.kind==="EachDirective"),j=m;S?.kind==="IfDirective"?j=E("Show",h.loc?.start,S.hole,m)??m:P?.kind==="EachDirective"&&(j=E("For",h.loc?.start,P.hole,m)??m),V(h),$(h.children,j,he(h));break}case"Component":{let S=h.tag,P=w.has(S)||x.has(S);if(S&&!P&&pe.has(S)){let j=me[S],O=j?h.attributes.find(ce=>"name"in ce&&ce.name===j):void 0,Ie=O&&"hole"in O?O.hole:O&&"value"in O?Ne(O.value)[0]:void 0,Ee=E(S,h.loc?.start,Ie,m);$(h.children,Ee??m,b);break}S&&m!==void 0&&Q.push({tag:S,file:n.path,owner:m}),$(h.children,m,b);break}case"Fragment":$(h.children,m,b);break;case"Expression":k(h.hole,b,void 0);break;default:break}},ae;for(let v=f.length-1;v>=0;v--){let m=_.get(f[v]);if(m!==void 0){ae=m;break}}$(p,ae,"template")}),M(s,(c,f)=>{if(c.type!=="ObjectProperty"||c.computed)return;let d=c.key?.name??c.key?.value;if(d!=="component"&&d!=="Component")return;let u=c.value;if(u?.type!=="Identifier")return;let l=[...f].reverse().find(p=>p.type==="VariableDeclarator")?.id?.name;l&&te.push({via:l,tag:u.name,file:n.path})}),M(s,c=>{if(!(c.type!=="ExportNamedDeclaration"&&c.type!=="ExportDefaultDeclaration"))for(let f of w.keys())A.set(f,w.get(f))})}let U=(n,s)=>{let g=D.get(n)?.get(s);if(g!==void 0)return g;let R=F.get(n)?.get(s);if(R)for(let[w,A]of I){if(!Ke(n,R,w))continue;let x=A.get(s);if(x!==void 0)return x}};for(let n of a){let s=new Set;for(let g of n.reads){let R=U(n.file,g);R!==void 0&&R!==n.node.id&&s.add(R)}n.node.deps=[...s]}let X=new Map;for(let n of I.values())for(let[s,g]of n)X.set(s,X.has(s)?null:g);let K=new Map(a.map(n=>[n.node.id,n.node]));for(let n of ne){let s=U(n.file,n.tag)??X.get(n.tag)??void 0;s!==void 0&&K.get(s)?.kind==="component"&&(n.node.owner=s)}for(let[n,s]of Z){let g=K.get(n);g&&s.length&&(g.dom=s)}for(let n of Y){let s=U(n.file,n.name),g=s!==void 0?K.get(s):void 0;!g||g.kind==="component"||(g.targets??=[]).push(n.target)}for(let n of te){let s=U(n.file,n.tag)??X.get(n.tag)??void 0;if(s===void 0)continue;let g=a.find(x=>x.file===n.file&&x.node.kind==="router"&&x.node.id!==s&&x.reads.has(n.via))?.node.id,R=a.find(x=>x.file===n.file&&(x.node.kind==="component"||x.node.kind==="handler")&&x.node.id!==s&&re.get(x.node.id)?.has(n.via))?.node.id,w=g??R,A=K.get(s);A&&A.createdIn===void 0&&w!==void 0&&(A.createdIn=w)}for(let n of Q){let s=U(n.file,n.tag)??X.get(n.tag)??void 0;if(s===void 0||s===n.owner)continue;let g=K.get(s);g&&g.kind==="component"&&g.createdIn===void 0&&(g.createdIn=n.owner)}let ie=(n,s)=>{let g=a.filter(R=>R.node.kind===n&&R.node.label===s);return g.length===1?g[0].node.id:void 0},ee=ie("router","Outlet")??ie("router","Router");if(ee!==void 0)for(let n of o){let s=K.get(n);s&&s.kind==="component"&&s.createdIn===void 0&&n!==ee&&(s.createdIn=ee)}let oe=a.filter(n=>n.node.kind==="handler"&&n.node.createdIn===void 0);if(oe.length>0){let n=J++;a.push({node:{id:n,label:"api",kind:"handler",deps:[],writes:[],runs:0,lastPulse:0,source:{file:e,line:1,column:0}},reads:new Set,file:e});for(let s of oe)s.node.createdIn=n}return{t:Date.now(),nodes:a.map(n=>n.node),static:!0}}var be=t=>t.replace(/\.(tsx?|jsx?|mts|cts|mjs|cjs)$/,"");function Ke(t,i,r){let e=t.includes("/")?t.slice(0,t.lastIndexOf("/")):"",o=(e?e.split("/"):[]).concat(i.split("/")),a=[];for(let F of o)F==="."||F===""||(F===".."?a.pop():a.push(F));let I=be(a.join("/")),D=be(r);return D===I||D===`${I}/index`}export{et as analyzeReactiveGraph};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as B,b as L,c as F,d as j,e as C,f as $,g as V,h as W,i as G,j as U}from"./chunk-PVR2SN3B.mjs";import{a as _,c as A,d as z}from"./chunk-YR3SAEO7.mjs";import"./chunk-3SAEGOMQ.mjs";import{declare as ge}from"@babel/helper-plugin-utils";import{types as t,template as oe}from"@babel/core";import{types as w,traverse as me,template as de}from"@babel/core";import K from"@babel/generator";import{types as D}from"@babel/core";import Y from"@babel/generator";var ae=Y.default??Y;function le(e){return ae(e,{concise:!0}).code}function pe(e,o,r){let i={code:k(e,o,r),reactive:J(e)};if(D.isArrowFunctionExpression(e)&&!D.isBlockStatement(e.body)){let n=e.body;i.arrow={params:e.params.map(c=>le(c)),body:k(n,o,r),bodyReactive:J(n)}}return D.isObjectExpression(e)&&(i.object=!0),i}function q(e,o,r={}){let i=e.quasi,n=i.expressions.map(c=>pe(c,o,r.onNested));return $(ce(i),n,o,r)}function ce(e){let o=[];return e.quasis.forEach((r,i)=>{let n=r.value.cooked??r.value.raw;if(o.push({kind:"static",text:n,start:r.start??0}),i<e.expressions.length){let c=e.expressions[i];o.push({kind:"hole",index:i,start:c.start??0,end:c.end??0})}}),o}function O(e,o=new Set,r={}){let i=q(e,o,r);return V(i),i}var fe=K.default??K;function Z(e){return fe(e,{concise:!0}).code}function ue(e,o,r){let i=w.cloneNode(e,!0),n=w.file(w.program([w.expressionStatement(i)])),c=!1,l=(a,m,g)=>{for(let h of g)o.add(h);a.replaceWith(de.expression(m,{placeholderPattern:!1,plugins:["typescript"]})()),a.skip(),c=!0};return me(n,{"JSXElement|JSXFragment"(a){let m=a.node,g=X(m,o,r);r?.(g);let{code:h,imports:R,templates:E}=C.emit(g,{});l(a,j(h,E),R)},TaggedTemplateExpression(a){let m=a.node.tag;if(!w.isIdentifier(m)||m.name!=="html"&&m.name!=="svg")return;let g=O(a.node,o,{svg:m.name==="svg",onNested:r});r?.(g);let{code:h,imports:R,templates:E}=C.emit(g,{});l(a,j(h,E),R)}}),c?n.program.body[0].expression:e}function k(e,o,r){return Z(ue(e,o,r))}function J(e){return W(G(e))}function X(e,o=new Set,r){return U(e,{code:n=>n.type==="JSXMemberExpression"?Z(n):k(n,o,r),used:o})}var Q=new Set(A),ee=new Set(z),I=ge((e,o={})=>{e.assertVersion(7);let{delegateEvents:r=!0,signalModule:i="@fluixi/dom",controlFlowModule:n="@fluixi/dom",routerModule:c="@fluixi/core/router",reactiveModule:l="@fluixi/reactive/signal",templateClone:a=!0,partialTemplates:m=!0,format:g="both",litTag:h="html",resolve:R=[]}=o,E=_(R),ie=g==="lit"||g==="both",se={irImports:new Set,libModule:"@fluixi/core",controlFlowModule:n,routerModule:c,templateClone:a,partialTemplates:m,hasJSX:!1,hasLitHTML:!1,needsControlFlowImport:!1,needsCreateMemo:!1,controlFlowComponents:new Set,resolvedComponents:new Map,deferredComponents:new Map,componentResolver:E,delegatedEvents:new Set,staticTemplates:new Map,staticCounter:0};return{name:"@fluixi/babel-plugin-jsx",manipulateOptions(p,s){s.plugins.push("jsx","typescript")},pre(p){Object.assign(p,se)},visitor:{Program:{enter(p,s){Object.assign(s,{hasJSX:!1,hasLitHTML:!1,hasLitIR:!1,needsControlFlowImport:!1,needsCreateMemo:!1,controlFlowComponents:new Set,resolvedComponents:new Map,deferredComponents:new Map,componentResolver:E,delegatedEvents:new Set,staticTemplates:new Map,staticCounter:0,libModule:"@fluixi/core",controlFlowModule:n,routerModule:c,templateClone:a,partialTemplates:m,irImports:new Set,needsCreateNativeElement:!1,needsInsert:!1,needsSpread:!1,needsCreateComponent:!1,needsMergeProps:!1})},exit(p,s){let b=[];if(s.hasJSX||s.hasLitIR){if(s.irImports.size>0){let f=new Set(["Show","For","Index","Switch","Match","Dynamic","ErrorBoundary","Portal","Suspense"]),d=new Set(["createMemo","createEffect","createRenderEffect","createRoot","createSignal","onCleanup","batch","untrack"]),y=Array.from(s.irImports),v=u=>t.importSpecifier(t.identifier(u),t.identifier(u)),x=u=>!p.scope.hasBinding(u),M=y.filter(u=>d.has(u)&&x(u)),S=y.filter(u=>!f.has(u)&&!d.has(u)&&x(u)),T=y.filter(u=>f.has(u)&&x(u));M.length>0&&b.push(t.importDeclaration(M.map(v),t.stringLiteral(l))),S.length>0&&b.push(t.importDeclaration(S.map(v),t.stringLiteral(i))),T.length>0&&b.push(t.importDeclaration(T.map(v),t.stringLiteral(n)))}if(s.needsCreateMemo&&!p.scope.hasBinding("createMemo")&&b.push(t.importDeclaration([t.importSpecifier(t.identifier("createMemo"),t.identifier("createMemo"))],t.stringLiteral(l))),s.needsControlFlowImport&&s.controlFlowComponents.size>0){let f=Array.from(s.controlFlowComponents).filter(S=>!p.scope.hasBinding(S)),d=s.libModule??"@fluixi/core",y=f.filter(S=>ee.has(S)),v=f.filter(S=>Q.has(S)),x=f.filter(S=>!Q.has(S)&&!ee.has(S)),M=(S,T)=>t.importDeclaration(S.map(u=>t.importSpecifier(t.identifier(u),t.identifier(u))),t.stringLiteral(T));x.length>0&&b.push(M(x,n)),v.length>0&&b.push(M(v,d)),y.length>0&&b.push(M(y,c))}let N=[];if(s.deferredComponents.size>0){for(let[f,d]of s.deferredComponents)p.scope.hasBinding(f)||N.push(t.variableDeclaration("const",[t.variableDeclarator(t.identifier(f),t.callExpression(t.identifier("deferred"),[t.arrowFunctionExpression([],t.callExpression(t.import(),[t.stringLiteral(d.module)])),t.objectExpression([t.objectProperty(t.identifier("strategy"),ye(d.strategy)),t.objectProperty(t.identifier("export"),t.stringLiteral(d.export))])]))]));N.length>0&&!p.scope.hasBinding("deferred")&&b.push(t.importDeclaration([t.importSpecifier(t.identifier("deferred"),t.identifier("deferred"))],t.stringLiteral(s.libModule??"@fluixi/core")))}if(s.resolvedComponents.size>0){let f=new Map;for(let[d,y]of s.resolvedComponents){if(p.scope.hasBinding(d))continue;let v=f.get(y.module)??[];v.push({local:d,exported:y.export}),f.set(y.module,v)}for(let[d,y]of f)b.push(t.importDeclaration(y.map(({local:v,exported:x})=>x==="default"?t.importDefaultSpecifier(t.identifier(v)):t.importSpecifier(t.identifier(v),t.identifier(x))),t.stringLiteral(d)))}if(r&&s.delegatedEvents.size>0){b.push(t.importDeclaration([t.importSpecifier(t.identifier("delegateEvents"),t.identifier("delegateEvents"))],t.stringLiteral(i)));let f=t.arrayExpression(Array.from(s.delegatedEvents).map(y=>t.stringLiteral(y))),d=t.expressionStatement(t.callExpression(t.identifier("delegateEvents"),[f]));p.node.body.unshift(d)}if(N.length>0&&p.node.body.unshift(...N),s.staticTemplates.size>0){let f=[];for(let[d,y]of s.staticTemplates){let x=d.startsWith("svg:")?d.slice(4):d;f.push(t.variableDeclaration("const",[t.variableDeclarator(t.identifier(y),t.stringLiteral(x))]))}p.node.body.unshift(...f)}}b.length>0&&p.node.body.unshift(...ve(b))}},JSXElement(p,s){s.hasJSX=!0,p.replaceWith(te(p.node,s))},JSXFragment(p,s){s.hasJSX=!0,p.replaceWith(te(p.node,s))},TaggedTemplateExpression(p,s){ie&&t.isIdentifier(p.node.tag)&&(p.node.tag.name===h||p.node.tag.name==="svg")&&p.replaceWith(Se(p.node,s))}}}});function re(e){return o=>{L(o,{resolver:e.componentResolver,modules:{controlFlowModule:e.controlFlowModule,coreModule:e.libModule,routerModule:e.routerModule},strategyFor:r=>r.load}),F(o),P(o,e)}}function ye(e){let o=[t.objectProperty(t.identifier("kind"),t.stringLiteral(e.kind))];return e.kind==="visible"&&e.rootMargin&&o.push(t.objectProperty(t.identifier("rootMargin"),t.stringLiteral(e.rootMargin))),e.kind==="interaction"&&o.push(t.objectProperty(t.identifier("events"),t.arrayExpression(e.events.map(r=>t.stringLiteral(r))))),e.kind==="media"&&o.push(t.objectProperty(t.identifier("query"),t.stringLiteral(e.query))),t.objectExpression(o)}function ne(e,o,r){if(!o||o.length===0)return e;let i=new Map;for(let n of o){let c=`${n.svg?"svg:":""}${n.html}`,l=r.staticTemplates.get(c);l||(l=`_tmpl$${r.staticTemplates.size}`,r.staticTemplates.set(c,l)),i.set(n.id,l)}return e.replace(/_tmpl\$\d+/g,n=>i.get(n)??n)}function te(e,o){let r=new Set,i=X(e,r,re(o));L(i,{resolver:o.componentResolver,modules:{controlFlowModule:o.controlFlowModule,coreModule:o.libModule,routerModule:o.routerModule},strategyFor:m=>m.load}),F(i);let{code:n,imports:c,templates:l}=C.emit(i,{templateClone:o.templateClone,partialTemplates:o.partialTemplates});for(let m of c)r.add(m);for(let m of r)o.irImports.add(m);P(i,o);let a=ne(n,l,o);return oe.expression(a,{placeholderPattern:!1,plugins:["typescript"]})()}function ve(e){let o=new Map,r=[];for(let i of e){let n=i.source.value;if(!i.specifiers.every(a=>t.isImportSpecifier(a))){r.push(i);continue}let l=o.get(n);if(!l){let a=new Set(i.specifiers.map(m=>m.local.name));o.set(n,{decl:i,names:a}),r.push(i);continue}for(let a of i.specifiers)l.names.has(a.local.name)||(l.names.add(a.local.name),l.decl.specifiers.push(a))}return r}function Se(e,o){let r=new Set,i=t.isIdentifier(e.tag)&&e.tag.name==="svg",n=O(e,r,{svg:i,onNested:re(o)});L(n,{resolver:o.componentResolver,modules:{controlFlowModule:o.controlFlowModule,coreModule:o.libModule,routerModule:o.routerModule},strategyFor:g=>g.load}),F(n);let{code:c,imports:l,templates:a}=C.emit(n,{templateClone:o.templateClone,partialTemplates:o.partialTemplates});for(let g of l)r.add(g);for(let g of r)o.irImports.add(g);P(n,o),o.hasLitIR=!0;let m=oe.expression(ne(c,a,o),{placeholderPattern:!1,plugins:["typescript"]})();return be(m,e),m}function be(e,o){if(!o.loc)return;let r=new Set,i=n=>{if(!r.has(n)){r.add(n),n.loc||(n.loc=o.loc,n.start=o.start,n.end=o.end);for(let c of t.VISITOR_KEYS[n.type]??[]){let l=n[c];if(Array.isArray(l))for(let a of l)a&&typeof a=="object"&&"type"in a&&i(a);else l&&typeof l=="object"&&"type"in l&&i(l)}}};i(e)}function P(e,o){if(e.kind==="component"&&e.source&&(e.source.origin==="builtin"?(o.controlFlowComponents.add(e.name),o.needsControlFlowImport=!0):B(e.source.loading)&&!o.resolvedComponents.has(e.name)?o.deferredComponents.set(e.name,{module:e.source.module,export:e.source.export,strategy:e.source.loading}):(o.deferredComponents.delete(e.name),o.resolvedComponents.set(e.name,{module:e.source.module,export:e.source.export}))),(e.kind==="element"||e.kind==="component"||e.kind==="control")&&"props"in e)for(let r of e.props)r.kind==="event"&&r.event?.delegated&&o.delegatedEvents.add(r.event.name);if("children"in e&&e.children)for(let r of e.children)P(r,o)}var Ue=I;function Ye(e){return[I,e]}function H(e={}){return{plugins:[[I,{runtime:"automatic",importSource:"@fluixi/jsx",development:!1,detectReactivity:!0,useLitHTML:!0,hoistStatics:!0,delegateEvents:!0,optimizeControlFlow:!0,sourceMaps:!0,...e}]]}}var qe={production:H({development:!1,hoistStatics:!0,delegateEvents:!0,optimizeControlFlow:!0}),development:H({development:!0,hoistStatics:!1,sourceMaps:!0}),minimal:H({detectReactivity:!1,useLitHTML:!1,hoistStatics:!1,delegateEvents:!1,optimizeControlFlow:!1})};export{Ue as babelPluginReactiveJSX,Ye as createPlugin,H as createPreset,I as default,qe as presets};
|
|
1
|
+
import{a as B,b as L,c as F,h as j,i as C,j as $,k as V,l as W,m as G,n as U}from"./chunk-YKZ54NVE.mjs";import{a as _,c as A,d as z}from"./chunk-5KMMN5QP.mjs";import"./chunk-3SAEGOMQ.mjs";import{declare as ge}from"@babel/helper-plugin-utils";import{types as t,template as oe}from"@babel/core";import{types as w,traverse as me,template as de}from"@babel/core";import K from"@babel/generator";import{types as D}from"@babel/core";import Y from"@babel/generator";var ae=Y.default??Y;function le(e){return ae(e,{concise:!0}).code}function pe(e,o,r){let i={code:k(e,o,r),reactive:J(e)};if(D.isArrowFunctionExpression(e)&&!D.isBlockStatement(e.body)){let n=e.body;i.arrow={params:e.params.map(c=>le(c)),body:k(n,o,r),bodyReactive:J(n)}}return D.isObjectExpression(e)&&(i.object=!0),i}function q(e,o,r={}){let i=e.quasi,n=i.expressions.map(c=>pe(c,o,r.onNested));return $(ce(i),n,o,r)}function ce(e){let o=[];return e.quasis.forEach((r,i)=>{let n=r.value.cooked??r.value.raw;if(o.push({kind:"static",text:n,start:r.start??0}),i<e.expressions.length){let c=e.expressions[i];o.push({kind:"hole",index:i,start:c.start??0,end:c.end??0})}}),o}function O(e,o=new Set,r={}){let i=q(e,o,r);return V(i),i}var fe=K.default??K;function Z(e){return fe(e,{concise:!0}).code}function ue(e,o,r){let i=w.cloneNode(e,!0),n=w.file(w.program([w.expressionStatement(i)])),c=!1,l=(a,m,g)=>{for(let h of g)o.add(h);a.replaceWith(de.expression(m,{placeholderPattern:!1,plugins:["typescript"]})()),a.skip(),c=!0};return me(n,{"JSXElement|JSXFragment"(a){let m=a.node,g=X(m,o,r);r?.(g);let{code:h,imports:R,templates:E}=C.emit(g,{});l(a,j(h,E),R)},TaggedTemplateExpression(a){let m=a.node.tag;if(!w.isIdentifier(m)||m.name!=="html"&&m.name!=="svg")return;let g=O(a.node,o,{svg:m.name==="svg",onNested:r});r?.(g);let{code:h,imports:R,templates:E}=C.emit(g,{});l(a,j(h,E),R)}}),c?n.program.body[0].expression:e}function k(e,o,r){return Z(ue(e,o,r))}function J(e){return W(G(e))}function X(e,o=new Set,r){return U(e,{code:n=>n.type==="JSXMemberExpression"?Z(n):k(n,o,r),used:o})}var Q=new Set(A),ee=new Set(z),I=ge((e,o={})=>{e.assertVersion(7);let{delegateEvents:r=!0,signalModule:i="@fluixi/dom",controlFlowModule:n="@fluixi/dom",routerModule:c="@fluixi/core/router",reactiveModule:l="@fluixi/reactive/signal",templateClone:a=!0,partialTemplates:m=!0,format:g="both",litTag:h="html",resolve:R=[]}=o,E=_(R),ie=g==="lit"||g==="both",se={irImports:new Set,libModule:"@fluixi/core",controlFlowModule:n,routerModule:c,templateClone:a,partialTemplates:m,hasJSX:!1,hasLitHTML:!1,needsControlFlowImport:!1,needsCreateMemo:!1,controlFlowComponents:new Set,resolvedComponents:new Map,deferredComponents:new Map,componentResolver:E,delegatedEvents:new Set,staticTemplates:new Map,staticCounter:0};return{name:"@fluixi/babel-plugin-jsx",manipulateOptions(p,s){s.plugins.push("jsx","typescript")},pre(p){Object.assign(p,se)},visitor:{Program:{enter(p,s){Object.assign(s,{hasJSX:!1,hasLitHTML:!1,hasLitIR:!1,needsControlFlowImport:!1,needsCreateMemo:!1,controlFlowComponents:new Set,resolvedComponents:new Map,deferredComponents:new Map,componentResolver:E,delegatedEvents:new Set,staticTemplates:new Map,staticCounter:0,libModule:"@fluixi/core",controlFlowModule:n,routerModule:c,templateClone:a,partialTemplates:m,irImports:new Set,needsCreateNativeElement:!1,needsInsert:!1,needsSpread:!1,needsCreateComponent:!1,needsMergeProps:!1})},exit(p,s){let b=[];if(s.hasJSX||s.hasLitIR){if(s.irImports.size>0){let f=new Set(["Show","For","Index","Switch","Match","Dynamic","ErrorBoundary","Portal","Suspense"]),d=new Set(["createMemo","createEffect","createRenderEffect","createRoot","createSignal","onCleanup","batch","untrack"]),y=Array.from(s.irImports),v=u=>t.importSpecifier(t.identifier(u),t.identifier(u)),x=u=>!p.scope.hasBinding(u),M=y.filter(u=>d.has(u)&&x(u)),S=y.filter(u=>!f.has(u)&&!d.has(u)&&x(u)),T=y.filter(u=>f.has(u)&&x(u));M.length>0&&b.push(t.importDeclaration(M.map(v),t.stringLiteral(l))),S.length>0&&b.push(t.importDeclaration(S.map(v),t.stringLiteral(i))),T.length>0&&b.push(t.importDeclaration(T.map(v),t.stringLiteral(n)))}if(s.needsCreateMemo&&!p.scope.hasBinding("createMemo")&&b.push(t.importDeclaration([t.importSpecifier(t.identifier("createMemo"),t.identifier("createMemo"))],t.stringLiteral(l))),s.needsControlFlowImport&&s.controlFlowComponents.size>0){let f=Array.from(s.controlFlowComponents).filter(S=>!p.scope.hasBinding(S)),d=s.libModule??"@fluixi/core",y=f.filter(S=>ee.has(S)),v=f.filter(S=>Q.has(S)),x=f.filter(S=>!Q.has(S)&&!ee.has(S)),M=(S,T)=>t.importDeclaration(S.map(u=>t.importSpecifier(t.identifier(u),t.identifier(u))),t.stringLiteral(T));x.length>0&&b.push(M(x,n)),v.length>0&&b.push(M(v,d)),y.length>0&&b.push(M(y,c))}let N=[];if(s.deferredComponents.size>0){for(let[f,d]of s.deferredComponents)p.scope.hasBinding(f)||N.push(t.variableDeclaration("const",[t.variableDeclarator(t.identifier(f),t.callExpression(t.identifier("deferred"),[t.arrowFunctionExpression([],t.callExpression(t.import(),[t.stringLiteral(d.module)])),t.objectExpression([t.objectProperty(t.identifier("strategy"),ye(d.strategy)),t.objectProperty(t.identifier("export"),t.stringLiteral(d.export))])]))]));N.length>0&&!p.scope.hasBinding("deferred")&&b.push(t.importDeclaration([t.importSpecifier(t.identifier("deferred"),t.identifier("deferred"))],t.stringLiteral(s.libModule??"@fluixi/core")))}if(s.resolvedComponents.size>0){let f=new Map;for(let[d,y]of s.resolvedComponents){if(p.scope.hasBinding(d))continue;let v=f.get(y.module)??[];v.push({local:d,exported:y.export}),f.set(y.module,v)}for(let[d,y]of f)b.push(t.importDeclaration(y.map(({local:v,exported:x})=>x==="default"?t.importDefaultSpecifier(t.identifier(v)):t.importSpecifier(t.identifier(v),t.identifier(x))),t.stringLiteral(d)))}if(r&&s.delegatedEvents.size>0){b.push(t.importDeclaration([t.importSpecifier(t.identifier("delegateEvents"),t.identifier("delegateEvents"))],t.stringLiteral(i)));let f=t.arrayExpression(Array.from(s.delegatedEvents).map(y=>t.stringLiteral(y))),d=t.expressionStatement(t.callExpression(t.identifier("delegateEvents"),[f]));p.node.body.unshift(d)}if(N.length>0&&p.node.body.unshift(...N),s.staticTemplates.size>0){let f=[];for(let[d,y]of s.staticTemplates){let x=d.startsWith("svg:")?d.slice(4):d;f.push(t.variableDeclaration("const",[t.variableDeclarator(t.identifier(y),t.stringLiteral(x))]))}p.node.body.unshift(...f)}}b.length>0&&p.node.body.unshift(...ve(b))}},JSXElement(p,s){s.hasJSX=!0,p.replaceWith(te(p.node,s))},JSXFragment(p,s){s.hasJSX=!0,p.replaceWith(te(p.node,s))},TaggedTemplateExpression(p,s){ie&&t.isIdentifier(p.node.tag)&&(p.node.tag.name===h||p.node.tag.name==="svg")&&p.replaceWith(Se(p.node,s))}}}});function re(e){return o=>{L(o,{resolver:e.componentResolver,modules:{controlFlowModule:e.controlFlowModule,coreModule:e.libModule,routerModule:e.routerModule},strategyFor:r=>r.load}),F(o),P(o,e)}}function ye(e){let o=[t.objectProperty(t.identifier("kind"),t.stringLiteral(e.kind))];return e.kind==="visible"&&e.rootMargin&&o.push(t.objectProperty(t.identifier("rootMargin"),t.stringLiteral(e.rootMargin))),e.kind==="interaction"&&o.push(t.objectProperty(t.identifier("events"),t.arrayExpression(e.events.map(r=>t.stringLiteral(r))))),e.kind==="media"&&o.push(t.objectProperty(t.identifier("query"),t.stringLiteral(e.query))),t.objectExpression(o)}function ne(e,o,r){if(!o||o.length===0)return e;let i=new Map;for(let n of o){let c=`${n.svg?"svg:":""}${n.html}`,l=r.staticTemplates.get(c);l||(l=`_tmpl$${r.staticTemplates.size}`,r.staticTemplates.set(c,l)),i.set(n.id,l)}return e.replace(/_tmpl\$\d+/g,n=>i.get(n)??n)}function te(e,o){let r=new Set,i=X(e,r,re(o));L(i,{resolver:o.componentResolver,modules:{controlFlowModule:o.controlFlowModule,coreModule:o.libModule,routerModule:o.routerModule},strategyFor:m=>m.load}),F(i);let{code:n,imports:c,templates:l}=C.emit(i,{templateClone:o.templateClone,partialTemplates:o.partialTemplates});for(let m of c)r.add(m);for(let m of r)o.irImports.add(m);P(i,o);let a=ne(n,l,o);return oe.expression(a,{placeholderPattern:!1,plugins:["typescript"]})()}function ve(e){let o=new Map,r=[];for(let i of e){let n=i.source.value;if(!i.specifiers.every(a=>t.isImportSpecifier(a))){r.push(i);continue}let l=o.get(n);if(!l){let a=new Set(i.specifiers.map(m=>m.local.name));o.set(n,{decl:i,names:a}),r.push(i);continue}for(let a of i.specifiers)l.names.has(a.local.name)||(l.names.add(a.local.name),l.decl.specifiers.push(a))}return r}function Se(e,o){let r=new Set,i=t.isIdentifier(e.tag)&&e.tag.name==="svg",n=O(e,r,{svg:i,onNested:re(o)});L(n,{resolver:o.componentResolver,modules:{controlFlowModule:o.controlFlowModule,coreModule:o.libModule,routerModule:o.routerModule},strategyFor:g=>g.load}),F(n);let{code:c,imports:l,templates:a}=C.emit(n,{templateClone:o.templateClone,partialTemplates:o.partialTemplates});for(let g of l)r.add(g);for(let g of r)o.irImports.add(g);P(n,o),o.hasLitIR=!0;let m=oe.expression(ne(c,a,o),{placeholderPattern:!1,plugins:["typescript"]})();return be(m,e),m}function be(e,o){if(!o.loc)return;let r=new Set,i=n=>{if(!r.has(n)){r.add(n),n.loc||(n.loc=o.loc,n.start=o.start,n.end=o.end);for(let c of t.VISITOR_KEYS[n.type]??[]){let l=n[c];if(Array.isArray(l))for(let a of l)a&&typeof a=="object"&&"type"in a&&i(a);else l&&typeof l=="object"&&"type"in l&&i(l)}}};i(e)}function P(e,o){if(e.kind==="component"&&e.source&&(e.source.origin==="builtin"?(o.controlFlowComponents.add(e.name),o.needsControlFlowImport=!0):B(e.source.loading)&&!o.resolvedComponents.has(e.name)?o.deferredComponents.set(e.name,{module:e.source.module,export:e.source.export,strategy:e.source.loading}):(o.deferredComponents.delete(e.name),o.resolvedComponents.set(e.name,{module:e.source.module,export:e.source.export}))),(e.kind==="element"||e.kind==="component"||e.kind==="control")&&"props"in e)for(let r of e.props)r.kind==="event"&&r.event?.delegated&&o.delegatedEvents.add(r.event.name);if("children"in e&&e.children)for(let r of e.children)P(r,o)}var Ue=I;function Ye(e){return[I,e]}function H(e={}){return{plugins:[[I,{runtime:"automatic",importSource:"@fluixi/jsx",development:!1,detectReactivity:!0,useLitHTML:!0,hoistStatics:!0,delegateEvents:!0,optimizeControlFlow:!0,sourceMaps:!0,...e}]]}}var qe={production:H({development:!1,hoistStatics:!0,delegateEvents:!0,optimizeControlFlow:!0}),development:H({development:!0,hoistStatics:!1,sourceMaps:!0}),minimal:H({detectReactivity:!1,useLitHTML:!1,hoistStatics:!1,delegateEvents:!1,optimizeControlFlow:!1})};export{Ue as babelPluginReactiveJSX,Ye as createPlugin,H as createPreset,I as default,qe as presets};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var v=e=>"components"in e;function g(e,o){return e.replace(/\$(\d+)/g,(c,u)=>o[Number(u)]??c)}function M(e,o){return typeof o=="string"?{module:o,export:e}:o}function O(e=[]){let o=new Map,c=[],u=[];for(let t of e){if(!v(t)){u.push(t);continue}for(let[n,i]of Object.entries(t.components)){let s=M(n,i),p=o.get(n);if(p&&p.module!==s.module){let f=c.find(C=>C.name===n);f?f.modules.push(s.module):c.push({name:n,modules:[p.module,s.module]});continue}o.set(n,s)}}let r=new Map;return{resolve:t=>{if(r.has(t))return r.get(t);let n=o.get(t);if(!n)for(let i of u){let s=t.match(new RegExp(i.match.source,i.match.flags.replace("g","")));if(s){n={module:g(i.module,s),export:i.export?g(i.export,s):t};break}}return r.set(t,n),n},names:()=>[...o.keys()],conflicts:()=>c}}var m=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],d=["Suspense","SuspenseList","Await"],R=["Router","Outlet","Redirect","Link"],S=[...m,...d,...R],y=new Set([...m,...d]);function N(e={}){let{controlFlowModule:o="@fluixi/dom",coreModule:c="@fluixi/core",routerModule:u="@fluixi/core/router"}=e,r={};for(let a of m)r[a]=o;for(let a of d)r[a]=c;for(let a of R)r[a]=u;return r}var l="@fluixi/reactive/signal",x={$signal:{export:"signal",module:l,returns:"signal-handle"},$memo:{export:"memo",module:l,returns:"memo-handle"},$effect:{export:"effect",module:l,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:l,returns:"resource-handle"},$selector:{export:"createSelector",module:l,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:l,returns:"memo-accessor"},$untrack:{export:"untrack",module:l,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}},T={signal:"signal-handle",memo:"memo-handle",effect:"effect",store:"store-handle",createSignal:["signal-accessor","signal-setter"],createMemo:"memo-accessor",createEffect:"effect",createRenderEffect:"effect",createStore:"reactive-object",resource:"resource-handle",createResource:"reactive-object",createSelector:"memo-accessor",createDeferred:"memo-accessor"},h=["@fluixi/reactive","@fluixi/reactive/signal","@fluixi/reactive/store","@fluixi/core"],E=new RegExp(`\\$(?:${Object.keys(x).map(e=>e.slice(1)).join("|")})\\s*\\(`);function $(e){return E.test(e)}function w(e){return Object.prototype.hasOwnProperty.call(x,e)}function L(e){return h.includes(e)}export{O as a,m as b,d as c,R as d,y as e,N as f,x as g,T as h,$ as i,w as j,L as k};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as te,e as j,f as ne,g as R,h as re,j as ie,k as oe}from"./chunk-5KMMN5QP.mjs";var De=new Set(["CallExpression","OptionalCallExpression"]),Le=new Set(["MemberExpression","OptionalMemberExpression"]);function F(e){if(!e)return{kind:"opaque"};if(De.has(e.type))return{kind:"call"};if(Le.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(k)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(k)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(k)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>k(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(k)}:{kind:"opaque"}}var k=e=>F(e);var A={kind:"eager"},Je=["pointerdown","focusin","keydown"],se=new Set(["eager","idle","visible","interaction","media","never"]),y=class extends Error{};function B(e){return e.startsWith("load:")}function P(e,t){let n=e.slice(5);if(!se.has(n))throw new y(`Unknown load strategy 'load:${n}'. Expected one of ${[...se].join(", ")}.`);switch(n){case"eager":return A;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?Me(t):[...Je]};case"media":if(!t)throw new y(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new y(`Unhandled load strategy '${n}'.`)}}function Me(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new y("'load:interaction' was given no event names.");return t}function ae(e){return e.kind!=="eager"&&e.kind!=="never"}function $t(e,t={}){let{resolver:n,isBound:r,modules:i,strategyFor:o}=t,a=ne(i),s=new Map,c=new Set,p=u=>{let{name:d}=u;if(!d||d.includes(".")||r?.(d))return;let h=l(d);if(!h){c.add(d);return}let g=h.origin==="builtin"&&j.has(d)?A:o?.(u)??A;u.source={...h,loading:g},s.set(d,u.source)},l=u=>{if(j.has(u))return{module:a[u],export:u,origin:"builtin"};let d=n?.resolve(u);if(d)return{module:d.module,export:d.export,origin:"rule"};if(te.includes(u))return{module:a[u],export:u,origin:"builtin"}};return O(e,u=>{u.kind==="component"&&p(u)}),{resolved:s,unresolved:[...c]}}function O(e,t){let n=Array.isArray(e)?e:[e];for(let r of n){t(r);let i=r.children;i&&O(i,t)}}function At(e){let t=[];O(e,o=>{o.kind==="component"&&o.source&&t.push(o)});let n=new Set,r=new Set;for(let o of t){let{module:a,loading:s}=o.source;s.kind==="eager"&&n.add(a),s.kind==="never"&&r.add(a)}let i=new Map;for(let o of t){let a=o.source;ae(a.loading)&&n.has(a.module)&&(a.loading={kind:"eager"},i.set(a.module,(i.get(a.module)??0)+1))}return{collapsed:i,conflicted:[...r].filter(o=>n.has(o))}}function m(e,t){if(e)switch(e.type){case"Identifier":t.add(e.name);return;case"ObjectPattern":for(let n of e.properties??[])n.type==="RestElement"?m(n.argument,t):m(n.value,t);return;case"ArrayPattern":for(let n of e.elements??[])m(n,t);return;case"AssignmentPattern":m(e.left,t);return;case"RestElement":m(e.argument,t);return}}function x(e,t){if(!(!e||typeof e!="object"||typeof e.type!="string")){t(e);for(let n of Object.keys(e)){if(n==="loc"||n==="leadingComments"||n==="trailingComments")continue;let r=e[n];if(Array.isArray(r))for(let i of r)x(i,t);else r&&typeof r=="object"&&x(r,t)}}}function _e(e,t){if(e.type!=="CallExpression")return;let n=e.callee;if(n?.type!=="Identifier")return;let r=n.name,i=t.primitives.get(r);if(i)return i;let o=R[r];if(o&&!t.shadowed.has(r))return o.returns}function je(e,t,n){if(Array.isArray(t)){e.type==="ArrayPattern"&&e.elements.forEach((r,i)=>{let o=t[i];r?.type==="Identifier"&&o&&n.set(r.name,o)});return}e.type==="Identifier"&&n.set(e.name,t)}function Dt(e){let t=new Set;return x(e,n=>{switch(n.type){case"VariableDeclarator":m(n.id,t);return;case"FunctionDeclaration":case"FunctionExpression":case"ArrowFunctionExpression":m(n.id,t);for(let r of n.params??[])m(r,t);return;case"ClassDeclaration":case"ClassExpression":m(n.id,t);return;case"ImportSpecifier":case"ImportDefaultSpecifier":case"ImportNamespaceSpecifier":m(n.local,t);return;case"CatchClause":m(n.param,t);return}}),t}function le(e){let t={kinds:new Map,primitives:new Map,shadowed:new Set},n=e;x(n,r=>{let i=new Set;if(r.type==="VariableDeclarator")m(r.id,i);else if(r.type==="FunctionDeclaration"||r.type==="ClassDeclaration")m(r.id,i);else if(r.type==="ImportDefaultSpecifier"||r.type==="ImportNamespaceSpecifier")m(r.local,i);else if(r.type==="ImportSpecifier")m(r.local,i);else if(r.type==="FunctionExpression"||r.type==="ArrowFunctionExpression"||r.type==="FunctionDeclaration")for(let o of r.params??[])m(o,i);for(let o of i)R[o]&&t.shadowed.add(o)});for(let r of n.body??[])if(r.type==="ImportDeclaration"&&oe(r.source?.value))for(let i of r.specifiers??[]){if(i.type!=="ImportSpecifier")continue;let o=i.imported,a=o.type==="Identifier"?o.name:o.value,s=re[a];s&&t.primitives.set(i.local.name,s)}return x(n,r=>{if(r.type!=="VariableDeclarator"||!r.init)return;let i=_e(r.init,t);i&&je(r.id,i,t.kinds)}),t}var X="__fx_source",Fe="__fx_component",Be="__fx_hole",b=(e,t,n,r)=>`(globalThis.${Be} ?? ((f) => f))(${e},${t},${n}${r===void 0?"":`,${JSON.stringify(r)}`})`,He="__fx_props",pe=(e,t)=>`(globalThis.${He} ?? ((p) => p))(${e},${JSON.stringify(t)})`,ue=new Set(["signal","memo","effect","store","resource","watch","createSignal","createMemo","createEffect","createStore","createResource"]);function _t(e){for(let t of ue)if(e.includes(t))return!0;return e.includes("$signal")||e.includes("$memo")||e.includes("$effect")||e.includes("$store")}var Xe=new Set(["IfStatement","ForStatement","ForInStatement","ForOfStatement","WhileStatement","DoWhileStatement","LabeledStatement","WithStatement"]);function Ve(e,t){return!t||e.type==="BlockStatement"?!1:Xe.has(t.type)}function ce(e){return e.type==="ExportNamedDeclaration"||e.type==="ExportDefaultDeclaration"}function Ue(e){return e.type.endsWith("Statement")||e.type==="VariableDeclaration"}function H(e,t,n=[]){if(!(!e||typeof e.type!="string")){t(e,n),n.push(e);for(let r of Object.keys(e)){if(r==="loc"||r==="parent")continue;let i=e[r];if(Array.isArray(i))for(let o of i)H(o,t,n);else i&&typeof i.type=="string"&&H(i,t,n)}n.pop()}}function Ke(e){let t=e[e.length-1];if(t?.type!=="VariableDeclarator")return;let n=t.id;if(n?.type==="Identifier")return n.name;if(n?.type==="ArrayPattern"){let r=n.elements?.[0];if(r?.type==="Identifier")return r.name}}function ze(e){if(e.type==="FunctionDeclaration"){let t=e.id?.name;return t&&t[0]===t[0]?.toUpperCase()?t:void 0}if(e.type==="VariableDeclarator"){let t=e.id,n=e.init;if(t?.type!=="Identifier"||!n||n.type!=="ArrowFunctionExpression"&&n.type!=="FunctionExpression")return;let r=t.name;return r[0]===r[0]?.toUpperCase()?r:void 0}}function jt(e,t){let n=[],r=new Set,{primitives:i,shadowed:o}=le(e);return H(e,(a,s)=>{let c=ze(a);if(c){let f=a.loc?.start,M=a.end;for(let _=s.length-1;_>=0;_--){let T=s[_];if(T.type!=="VariableDeclaration"&&T.type!=="ExportNamedDeclaration"&&T.type!=="ExportDefaultDeclaration")break;M=T.end}f&&n.push({start:M,end:M,code:`;globalThis.${Fe}?.(${JSON.stringify(c)},${JSON.stringify(t)},${f.line},${f.column});`})}if(a.type!=="CallExpression")return;let p=a.callee;if(p?.type!=="Identifier")return;let l=p.name,u=ie(l)&&!o.has(l)?R[l]:void 0,d=i.has(l)||ue.has(l);if(!u&&!d)return;let h=a.loc?.start;if(!h)return;let g,N,Y=-1;for(let f=s.length-1;f>=0;f--)if(Ue(s[f])||ce(s[f])){g=s[f],N=s[f-1],Y=f;break}if(!g)return;let v=g.start,J=g.end;for(let f=Y-1;f>=0&&ce(s[f]);f--)v=s[f].start,J=s[f].end,N=s[f-1];if(r.has(v))return;r.add(v);let Q=Ke(s),Oe=[JSON.stringify(t),String(h.line),String(h.column),Q?JSON.stringify(Q):void 0].filter(f=>f!==void 0).join(","),ee=`globalThis.${X}?.(${Oe});`;if(Ve(g,N)){n.push({start:v,end:v,code:`{${ee}`}),n.push({start:J,end:J,code:"}"});return}n.push({start:v,end:v,code:ee})}),{edits:n,marked:n.length}}var We=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),de={className:"class",htmlFor:"for"},qe=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),Ge=new Set(["script","style","textarea","title"]);function V(e){return Ge.has(e)}function fe(e){return de[e]??e}function E(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!qe.has(e.name)}function U(e){if(!e.static||V(e.tag))return!1;for(let t of e.props)if(!E(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&U(t)))return!1;return!0}function S(e){let t=e.props.map(Ye).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return We.has(e.tag)?n:`${n}${e.children.map(Ze).join("")}</${e.tag}>`}function Ze(e){if(e.kind==="text")return et(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return S(e)}function Ye(e){let t=de[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${Qe(String(n))}"`}function Qe(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function et(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function K(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 tt="<!--fx-->",nt="<!--fx/-->";function L(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function rt(e){return e.kind==="text"||e.kind==="element"&&me(e)}function me(e){return e.svg||V(e.tag)||!e.props.every(t=>E(t))?!1:e.children.every(t=>rt(t)||L(t))}function D(e){if(L(e))return!0;let t=e.children;return t?t.some(D):!1}function he(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"||he(t))}function ge(e){if(!me(e)||!he(e)||!e.children.some(D))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:it(e),tag:e.tag,steps:t,holes:n};function o(a,s){let c=-1;a.children.forEach((l,u)=>{D(l)&&(c=u)});let p=null;for(let l=0;l<=c;l++){let u=a.children[l],d=p?`${p}.nextSibling`:`${s}.firstChild`;if(L(u)){let g=i(d),N=i(`holeEnd(${g})`);n.push({parentRef:s,startRef:g,endRef:N,node:u}),p=N;continue}let h=i(d);u.kind==="element"&&D(u)&&o(u,h),p=h}}}function it(e){return S(Ne(e)).split(ye).join(tt+nt)}function Ne(e){return{...e,children:e.children.map(t=>L(t)?{kind:"text",value:ye}:t.kind==="element"?Ne(t):t)}}var ye="\0fx-hole\0";var z={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},Vt={version:2,module:"@fluixi/dom",symbols:[...z.symbols,"template","cloneTemplate","walk"]};var ot={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function st(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function ke(e){return st(e)?e:JSON.stringify(e)}function at(e){if(e.expr!==void 0){if(e.name==="ref"&&e.at)return b(`(${e.expr})`,e.at.line,e.at.column,e.expr);if(!e.reactive)return`(${e.expr})`;let t=`() => (${e.expr})`;return e.at?b(t,e.at.line,e.at.column,e.directive):t}return JSON.stringify(e.literal??!0)}function lt(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function ct(e,t,n){let r=e.filter(s=>s.kind==="spread"),o=e.filter(s=>s.kind!=="spread").map(s=>`${ke(s.name)}: ${at(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 ve(e,t){return t?b(e,t.line,t.column):e}function xe(e,t,n){return e.length===1?I(e[0],t,n):`[${e.map(r=>I(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"),c=s.map(d=>`get ${ke(d.name)}() { return ${lt(d)}; }`);n.length>0&&c.push(`get children() { return ${xe(n,r,i)}; }`);let p=`{ ${c.join(", ")} }`;a.length>0&&(r.add("mergeProps"),p=`mergeProps(${a.map(d=>d.expr).join(", ")}, ${p})`);let l={};for(let d of s)d.at&&(l[d.name]=[d.at.line,d.at.column]);return Object.keys(l).length&&(p=pe(p,l)),`createMemo((${o?`globalThis.${X}?.(${JSON.stringify(o.file)},${o.line},${o.column},${JSON.stringify(e)}), `:""}() => createComponent(${e}, ${p})))`}function pt(e,t){let n=fe(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 be=!1;function I(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?b(r,e.at.line,e.at.column):r}case"fragment":return e.children.length===0?"null":xe(e.children,t,n);case"component":return ve(Re(e.name,e.props,e.children,t,n,e.at),e.bindAt??e.at);case"control":{let r=ot[e.control]??e.control;return t.add(r),ve(Re(r,e.props,e.children,t,n),e.bindAt)}case"element":{if(n&&e.static&&!e.svg&&U(e)){t.add("templateNode");let s=`_tmpl$${n.length}`;n.push({id:s,html:S(e),tag:e.tag,svg:!1});let c=K(e);return c?`templateNode(${s}, ${JSON.stringify(e.tag)}, false, false, ${JSON.stringify(c)})`:`templateNode(${s}, ${JSON.stringify(e.tag)})`}if(n&&be){let s=ge(e);if(s){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let c=`_tmpl$${n.length}`;n.push({id:c,html:s.html,tag:s.tag,svg:!1});let p=K(e),l=[`const _el$ = templateNode(${c}, ${JSON.stringify(s.tag)}, true${p?`, false, ${JSON.stringify(p)}`:""});`];for(let u of s.steps)l.push(`const ${u.ref} = ${u.expr};`);for(let u of s.holes)l.push(`insert(${u.parentRef}, holeScope(${u.startRef}, () => (${I(u.node,t,n)})), ${u.endRef}, holeContent(${u.startRef}, ${u.endRef}));`);return l.push("return _el$;"),`(() => { ${l.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(E))for(let s of e.props)o.push(pt(i,s));else{t.add("spread");let s=e.svg?", isSVG: true":"";o.push(`spread({ element: ${i}, props: ${ct(e.props,null,t)}${s} });`)}for(let s of e.children){t.add("insert");let c=I(s,t,n),p=s.kind==="expr"&&s.reactive||s.kind==="component"||s.kind==="control";o.push(p?`insert(${i}, ${c}, null);`:`insert(${i}, ${c});`)}return o.push(`return ${i};`),`(() => { ${o.join(" ")} })()`}}}function Ee(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 Se={name:"imperative",contract:z,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return be=t?.partialTemplates===!0,{code:I(e,n,r),imports:Array.from(n),templates:r}}};function ut(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 Ie(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=ut(s),a)break;return!a&&!o&&(a=dt(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 dt(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 ft="children";function W(e){switch(e.kind){case"call":return!0;case"member":return e.property!==ft;case"compound":return e.parts.some(W);case"opaque":return!1}}function $(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 mt=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),ht=/^on[A-Z]/,gt=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),Ce=e=>W(F(e)),w=(e,t)=>{if(!t.sourceFile)return;let n=e.loc?.start;return n?{line:n.line,column:n.column}:void 0};function C(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 q=e=>!!e&&typeof C(e)=="string";function Nt(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 G(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function yt(e,t){let n=G(e.name),r=ht.test(n),i=r||n.startsWith("on:")||n==="ref",a={name:n,kind:r?"event":"attr"};if(r){let c=n.slice(2).toLowerCase();a.event={name:c,delegated:gt.has(c)}}let s=e.value;if(s==null)return a.literal=!0,a.at=w(e,t),a;if(q(s))return a.literal=C(s),a.at=w(s,t),a;if(s.type==="JSXExpressionContainer"&&s.expression?.type!=="JSXEmptyExpression"){let c=s.expression,p=C(c);return p!==void 0?(a.literal=p,a.at=w(c,t),a):(a.expr=t.code(c),a.reactive=i?!1:Ce(c),a.at=w(c,t),(c.type==="JSXElement"||c.type==="JSXFragment")&&(a.jsxElement=!0),a)}return a.literal=!0,a}function $e(e,t){let n=e.value;return n==null?null:q(n)?JSON.stringify(C(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function vt(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"||B(G(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=$e(i,t);r.push(s!=null?`[${a}, () => (${s})]`:`[${a}]`);continue}if(o==="oncapture"){let a=i.name.name.name.toLowerCase(),s=$e(i,t)??"undefined";n.push({name:"on:"+a,kind:"attr",expr:`[${s}, { capture: true }]`});continue}n.push(yt(i,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function we(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let i=$(r.value);i&&n.push({kind:"text",value:i})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let i=r.expression,o=Ce(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(Te(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function Rt(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=G(t.name);if(B(n)){if(t.value&&!q(t.value))throw new y(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return P(n,t.value?C(t.value):null)}}}function Te(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:we(e.children,t)};let{tag:n,component:r}=Nt(e.openingElement.name,t),i=vt(e.openingElement.attributes,t),o=we(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=Rt(e.openingElement.attributes);return{kind:"component",name:n,props:i,children:o,...s?{load:s}:{},...a?{at:a}:{}}}return{kind:"element",tag:n,svg:mt.has(n),props:i,children:o,static:!1,...a?{at:a}:{}}}function sn(e,t){let n=Te(e,t);return Ie(n),n}import{parseTemplate as kt}from"@fluixi/template-parser";var Ae=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function xt(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function Pe(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Z=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}=Se.emit(t,{});for(let o of r)this.used.add(o);return Ee(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 c=t[s],p=c&&(c.kind==="Element"||c.kind==="Component")&&c.attributes.some(l=>l.kind==="ElseDirective");n.push(this.lowerIf(i,a.hole,p?c: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&&$(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=$(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[l,u]of i){let d=u.length===1?u[0]:{kind:"fragment",children:u},h={name:l,kind:"attr",expr:this.emit(d),jsxElement:!0},g=r.findIndex(N=>N.name===l);g>=0?r[g]=h:r.push(h)}let a=t.attributes.find(l=>l.kind==="LoadDirective"),s=a?P(`load:${a.strategy}`,a.modifier):void 0,c=r.find(l=>l.at&&l.reactive)?.at,p=this.tagAt(t);return{kind:"component",name:n,props:r,children:this.lowerChildren(o),...p?{at:p}:{},...c?{bindAt:c}:{},...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),c=n.get(o.value.value)??[];c.push(s),n.set(o.value.value,c);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 c=this.stripAndLower(r,p=>p.kind==="ElseDirective");o.push({name:"fallback",kind:"attr",expr:this.emit(c),jsxElement:!0})}let a=this.stripAndLower(t,c=>c.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},l=this.rebuildWithChildren(t,[p]);a=`(${o.params.join(", ")}) => (${this.emit(l)})`}else{let p=this.stripAndLower(t,l=>l.kind==="EachDirective");a=`() => (${this.emit(p)})`}let s=[{kind:"expr",code:a,reactive:!1}],c=this.tagAt(t);return{kind:"component",name:"For",props:i,children:s,...c?{at:c}:{},...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,c,p=[];for(let l of t)switch(l.kind){case"IfDirective":case"EachDirective":case"ElseDirective":break;case"Attribute":n.push(this.plainAttr(l));break;case"PropertyBinding":n.push({name:l.name,kind:"prop",expr:this.hole(l.hole).code,reactive:this.hole(l.hole).reactive,...this.hole(l.hole).at?{at:this.hole(l.hole).at}:{}});break;case"EventBinding":n.push(this.eventProp(l));break;case"RefBinding":n.push({name:"ref",kind:"ref",expr:this.hole(l.hole).code,reactive:this.hole(l.hole).reactive,...this.hole(l.hole).at?{at:this.hole(l.hole).at}:{}});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(l.hole).code});break;case"ClassDirective":{let u=this.hole(l.hole);r.push(`${JSON.stringify(l.name)}: ${u.code}`),i=i||u.reactive,o??=u.at;break}case"StyleDirective":{let u=this.hole(l.hole);a.push(`${JSON.stringify(l.name)}: ${u.code}`),s=s||u.reactive,c??=u.at;break}case"BindDirective":n.push(...this.bindProps(l.name,this.hole(l.hole)));break;case"UseDirective":{let u=l.name??(l.hole!=null?this.hole(l.hole).code:null);if(!u)break;p.push(l.name!=null&&l.hole!=null?`[${u}, () => (${this.hole(l.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,...c?{at:c}:{}}),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"+Pe(t.name),kind:"event",event:{name:n,delegated:Ae.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"+Pe(o),kind:"event",event:{name:o,delegated:Ae.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,c=n.parts.map(p=>{if("text"in p)return xt(p.text);let l=this.hole(p.hole);return a=a||l.reactive,s??=l.at,"${"+l.code+"}"}).join("");return o.expr="`"+c+"`",o.reactive=a,s&&(o.at=s),o}};function dn(e,t,n,r={}){let{root:i}=kt(e,{svg:r.svg});return new Z(t,n,r.sourceFile,r.positionAt).lowerRoot(i.children)}export{ae as a,$t as b,At as c,Dt as d,le as e,_t as f,jt as g,Ee as h,Se as i,dn as j,Ie as k,W as l,F as m,sn as n};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var $=Object.defineProperty;var
|
|
1
|
+
"use strict";var $=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var z=(e,t)=>{for(var n in t)$(e,n,{get:t[n],enumerable:!0})},W=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of K(t))!U.call(e,s)&&s!==n&&$(e,s,{get:()=>t[s],enumerable:!(r=B(t,s))||r.enumerable});return e};var G=e=>W($({},"__esModule",{value:!0}),e);var Ne={};z(Ne,{imperativeBackend:()=>ge,inlineTemplates:()=>de});module.exports=G(Ne);var Y=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),C={className:"class",htmlFor:"for"},Z=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),q=new Set(["script","style","textarea","title"]);function S(e){return q.has(e)}function O(e){return C[e]??e}function d(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!Z.has(e.name)}function x(e){if(!e.static||S(e.tag))return!1;for(let t of e.props)if(!d(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&x(t)))return!1;return!0}function g(e){let t=e.props.map(Q).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return Y.has(e.tag)?n:`${n}${e.children.map(X).join("")}</${e.tag}>`}function X(e){if(e.kind==="text")return te(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return g(e)}function Q(e){let t=C[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${ee(String(n))}"`}function ee(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function te(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function I(e){let t=[],n,r=s=>{n??=s.at?.file,t.push(s.at?.line??0,s.at?.column??0);for(let o of s.children)o.kind==="element"&&r(o)};return r(e),n&&t.some(s=>s!==0)?{file:n,pos:t}:void 0}var ne="<!--fx-->",re="<!--fx/-->";function R(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function ie(e){return e.kind==="text"||e.kind==="element"&&P(e)}function P(e){return e.svg||S(e.tag)||!e.props.every(t=>d(t))?!1:e.children.every(t=>ie(t)||R(t))}function y(e){if(R(e))return!0;let t=e.children;return t?t.some(y):!1}function w(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"||w(t))}function _(e){if(!P(e)||!w(e)||!e.children.some(y))return null;let t=[],n=[],r=0,s=p=>{let i=`_n$${r++}`;return t.push({ref:i,expr:p}),i};return o(e,"_el$"),{html:se(e),tag:e.tag,steps:t,holes:n};function o(p,i){let f=-1;p.children.forEach((u,a)=>{y(u)&&(f=a)});let l=null;for(let u=0;u<=f;u++){let a=p.children[u],c=l?`${l}.nextSibling`:`${i}.firstChild`;if(R(a)){let T=s(c),k=s(`holeEnd(${T})`);n.push({parentRef:i,startRef:T,endRef:k,node:a}),l=k;continue}let v=s(c);a.kind==="element"&&y(a)&&o(a,v),l=v}}}function se(e){return g(A(e)).split(M).join(ne+re)}function A(e){return{...e,children:e.children.map(t=>R(t)?{kind:"text",value:M}:t.kind==="element"?A(t):t)}}var M="\0fx-hole\0";var E={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},Se={version:2,module:"@fluixi/dom",symbols:[...E.symbols,"template","cloneTemplate","walk"]};var m="@fluixi/reactive/signal",b={$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 Ie=new RegExp(`\\$(?:${Object.keys(b).map(e=>e.slice(1)).join("|")})\\s*\\(`);var D="__fx_source";var oe="__fx_hole",N=(e,t,n,r)=>`(globalThis.${oe} ?? ((f) => f))(${e},${t},${n}${r===void 0?"":`,${JSON.stringify(r)}`})`,ae="__fx_props",j=(e,t)=>`(globalThis.${ae} ?? ((p) => p))(${e},${JSON.stringify(t)})`;var ce={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function le(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function V(e){return le(e)?e:JSON.stringify(e)}function fe(e){if(e.expr!==void 0){if(e.name==="ref"&&e.at)return N(`(${e.expr})`,e.at.line,e.at.column,e.expr);if(!e.reactive)return`(${e.expr})`;let t=`() => (${e.expr})`;return e.at?N(t,e.at.line,e.at.column,e.directive):t}return JSON.stringify(e.literal??!0)}function ue(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function pe(e,t,n){let r=e.filter(i=>i.kind==="spread"),o=e.filter(i=>i.kind!=="spread").map(i=>`${V(i.name)}: ${fe(i)}`);t!=null&&o.push(`children: ${t}`);let p=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(i=>i.expr).join(", ")}, ${p})`):p}function J(e,t){return t?N(e,t.line,t.column):e}function F(e,t,n){return e.length===1?h(e[0],t,n):`[${e.map(r=>h(r,t,n)).join(", ")}]`}function L(e,t,n,r,s,o){r.add("createMemo"),r.add("createComponent");let p=t.filter(c=>c.kind==="spread"),i=t.filter(c=>c.kind!=="spread"),f=i.map(c=>`get ${V(c.name)}() { return ${ue(c)}; }`);n.length>0&&f.push(`get children() { return ${F(n,r,s)}; }`);let l=`{ ${f.join(", ")} }`;p.length>0&&(r.add("mergeProps"),l=`mergeProps(${p.map(c=>c.expr).join(", ")}, ${l})`);let u={};for(let c of i)c.at&&(u[c.name]=[c.at.line,c.at.column]);return Object.keys(u).length&&(l=j(l,u)),`createMemo((${o?`globalThis.${D}?.(${JSON.stringify(o.file)},${o.line},${o.column},${JSON.stringify(e)}), `:""}() => createComponent(${e}, ${l})))`}function me(e,t){let n=O(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 H=!1;function h(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?N(r,e.at.line,e.at.column):r}case"fragment":return e.children.length===0?"null":F(e.children,t,n);case"component":return J(L(e.name,e.props,e.children,t,n,e.at),e.bindAt??e.at);case"control":{let r=ce[e.control]??e.control;return t.add(r),J(L(r,e.props,e.children,t,n),e.bindAt)}case"element":{if(n&&e.static&&!e.svg&&x(e)){t.add("templateNode");let i=`_tmpl$${n.length}`;n.push({id:i,html:g(e),tag:e.tag,svg:!1});let f=I(e);return f?`templateNode(${i}, ${JSON.stringify(e.tag)}, false, false, ${JSON.stringify(f)})`:`templateNode(${i}, ${JSON.stringify(e.tag)})`}if(n&&H){let i=_(e);if(i){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let f=`_tmpl$${n.length}`;n.push({id:f,html:i.html,tag:i.tag,svg:!1});let l=I(e),u=[`const _el$ = templateNode(${f}, ${JSON.stringify(i.tag)}, true${l?`, false, ${JSON.stringify(l)}`:""});`];for(let a of i.steps)u.push(`const ${a.ref} = ${a.expr};`);for(let a of i.holes)u.push(`insert(${a.parentRef}, holeScope(${a.startRef}, () => (${h(a.node,t,n)})), ${a.endRef}, holeContent(${a.startRef}, ${a.endRef}));`);return u.push("return _el$;"),`(() => { ${u.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),s="_el$",o=[],p=e.at?`${r}, ${e.svg}, ${JSON.stringify(e.at)}`:e.svg?`${r}, true`:r;if(o.push(`const ${s} = createNativeElement(${p});`),e.props.length>0)if(!e.svg&&e.props.every(d))for(let i of e.props)o.push(me(s,i));else{t.add("spread");let i=e.svg?", isSVG: true":"";o.push(`spread({ element: ${s}, props: ${pe(e.props,null,t)}${i} });`)}for(let i of e.children){t.add("insert");let f=h(i,t,n),l=i.kind==="expr"&&i.reactive||i.kind==="component"||i.kind==="control";o.push(l?`insert(${s}, ${f}, null);`:`insert(${s}, ${f});`)}return o.push(`return ${s};`),`(() => { ${o.join(" ")} })()`}}}function de(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 ge={name:"imperative",contract:E,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return H=t?.partialTemplates===!0,{code:h(e,n,r),imports:Array.from(n),templates:r}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imperative.d.ts","sourceRoot":"","sources":["../../../src/codegen/backends/imperative.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAiB,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"imperative.d.ts","sourceRoot":"","sources":["../../../src/codegen/backends/imperative.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAiB,cAAc,EAAE,MAAM,eAAe,CAAC;AAwTnF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,SAAS,GAAG,MAAM,CAK7F;AAED,eAAO,MAAM,iBAAiB,EAAE,cAgB/B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { planPartialTemplate } from '../partial-template.js';
|
|
2
|
-
import { isSerializable, serializeStatic, isPlainLiteralAttr, htmlAttrName, } from '../serialize-static.js';
|
|
2
|
+
import { isSerializable, serializeStatic, templatePositions, isPlainLiteralAttr, htmlAttrName, } from '../serialize-static.js';
|
|
3
3
|
import { RUNTIME_CONTRACT_V1 } from '../contract.js';
|
|
4
|
+
import { markHole, markProps, SOURCE_MARKER } from '../../transform/source-locations.js';
|
|
4
5
|
/**
|
|
5
6
|
* Imperative fine-grained backend — emits createNativeElement/insert/spread/
|
|
6
7
|
* createComponent (RUNTIME_CONTRACT_V1), the runtime proven by the @fluixi/dom
|
|
@@ -34,9 +35,17 @@ function propKey(name) {
|
|
|
34
35
|
}
|
|
35
36
|
function propValue(p) {
|
|
36
37
|
if (p.expr !== undefined) {
|
|
38
|
+
// A ref is not reactive, but which variable ends up holding the element is worth
|
|
39
|
+
// saying, so it carries its own text and position.
|
|
40
|
+
if (p.name === 'ref' && p.at)
|
|
41
|
+
return markHole(`(${p.expr})`, p.at.line, p.at.column, p.expr);
|
|
37
42
|
// Events and non-reactive expressions pass through; reactive ones become thunks
|
|
38
43
|
// so the runtime (spread/insert) can wire a render effect.
|
|
39
|
-
|
|
44
|
+
if (!p.reactive)
|
|
45
|
+
return `(${p.expr})`;
|
|
46
|
+
const accessor = `() => (${p.expr})`;
|
|
47
|
+
// `at` is the gate: a production build carries no marker.
|
|
48
|
+
return p.at ? markHole(accessor, p.at.line, p.at.column, p.directive) : accessor;
|
|
40
49
|
}
|
|
41
50
|
return JSON.stringify(p.literal ?? true);
|
|
42
51
|
}
|
|
@@ -67,12 +76,20 @@ function emitProps(props, childrenExpr, used) {
|
|
|
67
76
|
}
|
|
68
77
|
return obj;
|
|
69
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* The memo a component lowers to is an accessor, so it takes the same hole mark as any
|
|
81
|
+
* other reactive binding. Without it, the insert that places the subtree reports whatever
|
|
82
|
+
* the runtime stack says — a position in the compiled file.
|
|
83
|
+
*/
|
|
84
|
+
function markBind(code, at) {
|
|
85
|
+
return at ? markHole(code, at.line, at.column) : code;
|
|
86
|
+
}
|
|
70
87
|
function emitChildren(children, used, templates) {
|
|
71
88
|
if (children.length === 1)
|
|
72
89
|
return emitNode(children[0], used, templates);
|
|
73
90
|
return `[${children.map((c) => emitNode(c, used, templates)).join(', ')}]`;
|
|
74
91
|
}
|
|
75
|
-
function emitComponent(name, props, children, used, templates) {
|
|
92
|
+
function emitComponent(name, props, children, used, templates, at) {
|
|
76
93
|
used.add('createMemo');
|
|
77
94
|
used.add('createComponent');
|
|
78
95
|
const spreads = props.filter((p) => p.kind === 'spread');
|
|
@@ -95,6 +112,14 @@ function emitComponent(name, props, children, used, templates) {
|
|
|
95
112
|
used.add('mergeProps');
|
|
96
113
|
obj = `mergeProps(${spreads.map((s) => s.expr).join(', ')}, ${obj})`;
|
|
97
114
|
}
|
|
115
|
+
// Every prop is a getter, so none of them can carry a position. The map rides alongside,
|
|
116
|
+
// and a build that recorded no locations emits nothing.
|
|
117
|
+
const propAt = {};
|
|
118
|
+
for (const p of normal)
|
|
119
|
+
if (p.at)
|
|
120
|
+
propAt[p.name] = [p.at.line, p.at.column];
|
|
121
|
+
if (Object.keys(propAt).length)
|
|
122
|
+
obj = markProps(obj, propAt);
|
|
98
123
|
// The memo never recomputes — every prop is a getter, so this callback reads nothing
|
|
99
124
|
// reactive. It is here for what it makes `insert` do, and it cannot be elided.
|
|
100
125
|
//
|
|
@@ -115,7 +140,12 @@ function emitComponent(name, props, children, used, templates) {
|
|
|
115
140
|
// Control flow does use a bare arrow, and that is not a counter-example: control flow
|
|
116
141
|
// is the reactive boundary and is *meant* to re-run. A user component is meant to run
|
|
117
142
|
// once.
|
|
118
|
-
|
|
143
|
+
// The mark goes inside the call, where it runs before createMemo makes the node and so
|
|
144
|
+
// is the one the node takes. Devtools installs the global; without it this is a no-op.
|
|
145
|
+
const mark = at
|
|
146
|
+
? `globalThis.${SOURCE_MARKER}?.(${JSON.stringify(at.file)},${at.line},${at.column},${JSON.stringify(name)}), `
|
|
147
|
+
: '';
|
|
148
|
+
return `createMemo((${mark}() => createComponent(${name}, ${obj})))`;
|
|
119
149
|
}
|
|
120
150
|
/** `el.setAttribute("class", "card")` for a compile-time constant. */
|
|
121
151
|
function staticAttrAssignment(el, prop) {
|
|
@@ -133,18 +163,25 @@ function emitNode(node, used, templates) {
|
|
|
133
163
|
switch (node.kind) {
|
|
134
164
|
case 'text':
|
|
135
165
|
return JSON.stringify(node.value);
|
|
136
|
-
case 'expr':
|
|
137
|
-
|
|
166
|
+
case 'expr': {
|
|
167
|
+
if (!node.reactive)
|
|
168
|
+
return `(${node.code})`;
|
|
169
|
+
const accessor = `() => (${node.code})`;
|
|
170
|
+
return node.at ? markHole(accessor, node.at.line, node.at.column) : accessor;
|
|
171
|
+
}
|
|
138
172
|
case 'fragment':
|
|
139
173
|
if (node.children.length === 0)
|
|
140
174
|
return 'null';
|
|
141
175
|
return emitChildren(node.children, used, templates);
|
|
142
176
|
case 'component':
|
|
143
|
-
|
|
177
|
+
// No reactive prop means no `bindAt`, which is most tags. The insert that places the
|
|
178
|
+
// subtree still has to report somewhere, and the tag itself is where it was written —
|
|
179
|
+
// without this it reports whatever the runtime stack says, a line in the compiled file.
|
|
180
|
+
return markBind(emitComponent(node.name, node.props, node.children, used, templates, node.at), node.bindAt ?? node.at);
|
|
144
181
|
case 'control': {
|
|
145
182
|
const name = CONTROL_COMPONENT[node.control] ?? node.control;
|
|
146
183
|
used.add(name);
|
|
147
|
-
return emitComponent(name, node.props, node.children, used, templates);
|
|
184
|
+
return markBind(emitComponent(name, node.props, node.children, used, templates), node.bindAt);
|
|
148
185
|
}
|
|
149
186
|
case 'element': {
|
|
150
187
|
// A static subtree is parsed once into a <template> and cloned per instance:
|
|
@@ -157,7 +194,12 @@ function emitNode(node, used, templates) {
|
|
|
157
194
|
used.add('templateNode');
|
|
158
195
|
const id = `_tmpl$${templates.length}`;
|
|
159
196
|
templates.push({ id, html: serializeStatic(node), tag: node.tag, svg: false });
|
|
160
|
-
|
|
197
|
+
// The positions ride along so devtools can name the line each element was written
|
|
198
|
+
// on; the template string itself maps back to the root and nothing finer.
|
|
199
|
+
const at = templatePositions(node);
|
|
200
|
+
return at
|
|
201
|
+
? `templateNode(${id}, ${JSON.stringify(node.tag)}, false, false, ${JSON.stringify(at)})`
|
|
202
|
+
: `templateNode(${id}, ${JSON.stringify(node.tag)})`;
|
|
161
203
|
}
|
|
162
204
|
// Structure static, contents dynamic — the common shape. One template for the
|
|
163
205
|
// structure, then each hole filled through a reference into the clone. Every
|
|
@@ -172,7 +214,10 @@ function emitNode(node, used, templates) {
|
|
|
172
214
|
used.add('holeScope');
|
|
173
215
|
const id = `_tmpl$${templates.length}`;
|
|
174
216
|
templates.push({ id, html: plan.html, tag: plan.tag, svg: false });
|
|
175
|
-
const
|
|
217
|
+
const at = templatePositions(node);
|
|
218
|
+
const lines = [
|
|
219
|
+
`const _el$ = templateNode(${id}, ${JSON.stringify(plan.tag)}, true${at ? `, false, ${JSON.stringify(at)}` : ''});`,
|
|
220
|
+
];
|
|
176
221
|
// Every reference first: inserting shifts what follows, so the walk has to be
|
|
177
222
|
// complete before any content goes in.
|
|
178
223
|
for (const step of plan.steps)
|
|
@@ -195,7 +240,13 @@ function emitNode(node, used, templates) {
|
|
|
195
240
|
const tag = JSON.stringify(node.tag);
|
|
196
241
|
const el = '_el$';
|
|
197
242
|
const parts = [];
|
|
198
|
-
|
|
243
|
+
// The third argument is where the tag was written. An element built this way is not
|
|
244
|
+
// in a template, so nothing else records it.
|
|
245
|
+
const createArgs = node.at
|
|
246
|
+
? `${tag}, ${node.svg}, ${JSON.stringify(node.at)}`
|
|
247
|
+
: node.svg
|
|
248
|
+
? `${tag}, true`
|
|
249
|
+
: tag;
|
|
199
250
|
parts.push(`const ${el} = createNativeElement(${createArgs});`);
|
|
200
251
|
if (node.props.length > 0) {
|
|
201
252
|
// Literal attributes are written straight on. `spread` is a generic helper that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var H=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),k={className:"class",htmlFor:"for"},B=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),K=new Set(["script","style","textarea","title"]);function $(e){return K.has(e)}function C(e){return k[e]??e}function d(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!B.has(e.name)}function S(e){if(!e.static||$(e.tag))return!1;for(let t of e.props)if(!d(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&S(t)))return!1;return!0}function g(e){let t=e.props.map(z).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return H.has(e.tag)?n:`${n}${e.children.map(U).join("")}</${e.tag}>`}function U(e){if(e.kind==="text")return G(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return g(e)}function z(e){let t=k[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${W(String(n))}"`}function W(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function G(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function x(e){let t=[],n,r=s=>{n??=s.at?.file,t.push(s.at?.line??0,s.at?.column??0);for(let o of s.children)o.kind==="element"&&r(o)};return r(e),n&&t.some(s=>s!==0)?{file:n,pos:t}:void 0}var Y="<!--fx-->",Z="<!--fx/-->";function R(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function q(e){return e.kind==="text"||e.kind==="element"&&O(e)}function O(e){return e.svg||$(e.tag)||!e.props.every(t=>d(t))?!1:e.children.every(t=>q(t)||R(t))}function y(e){if(R(e))return!0;let t=e.children;return t?t.some(y):!1}function P(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"||P(t))}function w(e){if(!O(e)||!P(e)||!e.children.some(y))return null;let t=[],n=[],r=0,s=p=>{let i=`_n$${r++}`;return t.push({ref:i,expr:p}),i};return o(e,"_el$"),{html:X(e),tag:e.tag,steps:t,holes:n};function o(p,i){let f=-1;p.children.forEach((u,a)=>{y(u)&&(f=a)});let l=null;for(let u=0;u<=f;u++){let a=p.children[u],c=l?`${l}.nextSibling`:`${i}.firstChild`;if(R(a)){let v=s(c),T=s(`holeEnd(${v})`);n.push({parentRef:i,startRef:v,endRef:T,node:a}),l=T;continue}let b=s(c);a.kind==="element"&&y(a)&&o(a,b),l=b}}}function X(e){return g(_(e)).split(A).join(Y+Z)}function _(e){return{...e,children:e.children.map(t=>R(t)?{kind:"text",value:A}:t.kind==="element"?_(t):t)}}var A="\0fx-hole\0";var I={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},fe={version:2,module:"@fluixi/dom",symbols:[...I.symbols,"template","cloneTemplate","walk"]};var m="@fluixi/reactive/signal",E={$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 pe=new RegExp(`\\$(?:${Object.keys(E).map(e=>e.slice(1)).join("|")})\\s*\\(`);var M="__fx_source";var Q="__fx_hole",N=(e,t,n,r)=>`(globalThis.${Q} ?? ((f) => f))(${e},${t},${n}${r===void 0?"":`,${JSON.stringify(r)}`})`,ee="__fx_props",D=(e,t)=>`(globalThis.${ee} ?? ((p) => p))(${e},${JSON.stringify(t)})`;var te={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function ne(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function L(e){return ne(e)?e:JSON.stringify(e)}function re(e){if(e.expr!==void 0){if(e.name==="ref"&&e.at)return N(`(${e.expr})`,e.at.line,e.at.column,e.expr);if(!e.reactive)return`(${e.expr})`;let t=`() => (${e.expr})`;return e.at?N(t,e.at.line,e.at.column,e.directive):t}return JSON.stringify(e.literal??!0)}function ie(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function se(e,t,n){let r=e.filter(i=>i.kind==="spread"),o=e.filter(i=>i.kind!=="spread").map(i=>`${L(i.name)}: ${re(i)}`);t!=null&&o.push(`children: ${t}`);let p=`{ ${o.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(i=>i.expr).join(", ")}, ${p})`):p}function j(e,t){return t?N(e,t.line,t.column):e}function V(e,t,n){return e.length===1?h(e[0],t,n):`[${e.map(r=>h(r,t,n)).join(", ")}]`}function J(e,t,n,r,s,o){r.add("createMemo"),r.add("createComponent");let p=t.filter(c=>c.kind==="spread"),i=t.filter(c=>c.kind!=="spread"),f=i.map(c=>`get ${L(c.name)}() { return ${ie(c)}; }`);n.length>0&&f.push(`get children() { return ${V(n,r,s)}; }`);let l=`{ ${f.join(", ")} }`;p.length>0&&(r.add("mergeProps"),l=`mergeProps(${p.map(c=>c.expr).join(", ")}, ${l})`);let u={};for(let c of i)c.at&&(u[c.name]=[c.at.line,c.at.column]);return Object.keys(u).length&&(l=D(l,u)),`createMemo((${o?`globalThis.${M}?.(${JSON.stringify(o.file)},${o.line},${o.column},${JSON.stringify(e)}), `:""}() => createComponent(${e}, ${l})))`}function oe(e,t){let n=C(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 F=!1;function h(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?N(r,e.at.line,e.at.column):r}case"fragment":return e.children.length===0?"null":V(e.children,t,n);case"component":return j(J(e.name,e.props,e.children,t,n,e.at),e.bindAt??e.at);case"control":{let r=te[e.control]??e.control;return t.add(r),j(J(r,e.props,e.children,t,n),e.bindAt)}case"element":{if(n&&e.static&&!e.svg&&S(e)){t.add("templateNode");let i=`_tmpl$${n.length}`;n.push({id:i,html:g(e),tag:e.tag,svg:!1});let f=x(e);return f?`templateNode(${i}, ${JSON.stringify(e.tag)}, false, false, ${JSON.stringify(f)})`:`templateNode(${i}, ${JSON.stringify(e.tag)})`}if(n&&F){let i=w(e);if(i){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let f=`_tmpl$${n.length}`;n.push({id:f,html:i.html,tag:i.tag,svg:!1});let l=x(e),u=[`const _el$ = templateNode(${f}, ${JSON.stringify(i.tag)}, true${l?`, false, ${JSON.stringify(l)}`:""});`];for(let a of i.steps)u.push(`const ${a.ref} = ${a.expr};`);for(let a of i.holes)u.push(`insert(${a.parentRef}, holeScope(${a.startRef}, () => (${h(a.node,t,n)})), ${a.endRef}, holeContent(${a.startRef}, ${a.endRef}));`);return u.push("return _el$;"),`(() => { ${u.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),s="_el$",o=[],p=e.at?`${r}, ${e.svg}, ${JSON.stringify(e.at)}`:e.svg?`${r}, true`:r;if(o.push(`const ${s} = createNativeElement(${p});`),e.props.length>0)if(!e.svg&&e.props.every(d))for(let i of e.props)o.push(oe(s,i));else{t.add("spread");let i=e.svg?", isSVG: true":"";o.push(`spread({ element: ${s}, props: ${se(e.props,null,t)}${i} });`)}for(let i of e.children){t.add("insert");let f=h(i,t,n),l=i.kind==="expr"&&i.reactive||i.kind==="component"||i.kind==="control";o.push(l?`insert(${s}, ${f}, null);`:`insert(${s}, ${f});`)}return o.push(`return ${s};`),`(() => { ${o.join(" ")} })()`}}}function Te(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 ke={name:"imperative",contract:I,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return F=t?.partialTemplates===!0,{code:h(e,n,r),imports:Array.from(n),templates:r}}};export{ke as imperativeBackend,Te as inlineTemplates};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var
|
|
1
|
+
"use strict";var p=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var H=(e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})},_=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of w(t))!L.call(e,r)&&r!==n&&p(e,r,{get:()=>t[r],enumerable:!(a=v(t,r))||a.enumerable});return e};var z=e=>_(p({},"__esModule",{value:!0}),e);var B={};H(B,{HOLE_END:()=>N,HOLE_START:()=>T,planPartialTemplate:()=>Y});module.exports=z(B);var A=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),M={className:"class",htmlFor:"for"},y=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),C=new Set(["script","style","textarea","title"]);function I(e){return C.has(e)}function k(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!y.has(e.name)}function m(e){let t=e.props.map(O).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return A.has(e.tag)?n:`${n}${e.children.map(j).join("")}</${e.tag}>`}function j(e){if(e.kind==="text")return D(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return m(e)}function O(e){let t=M[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${W(String(n))}"`}function W(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function D(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var T="<!--fx-->",N="<!--fx/-->";function c(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function V(e){return e.kind==="text"||e.kind==="element"&&b(e)}function b(e){return e.svg||I(e.tag)||!e.props.every(t=>k(t))?!1:e.children.every(t=>V(t)||c(t))}function u(e){if(c(e))return!0;let t=e.children;return t?t.some(u):!1}function S(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"||S(t))}function Y(e){if(!b(e)||!S(e)||!e.children.some(u))return null;let t=[],n=[],a=0,r=o=>{let l=`_n$${a++}`;return t.push({ref:l,expr:o}),l};return d(e,"_el$"),{html:q(e),tag:e.tag,steps:t,holes:n};function d(o,l){let g=-1;o.children.forEach((s,i)=>{u(s)&&(g=i)});let f=null;for(let s=0;s<=g;s++){let i=o.children[s],h=f?`${f}.nextSibling`:`${l}.firstChild`;if(c(i)){let x=r(h),E=r(`holeEnd(${x})`);n.push({parentRef:l,startRef:x,endRef:E,node:i}),f=E;continue}let R=r(h);i.kind==="element"&&u(i)&&d(i,R),f=R}}}function q(e){return m($(e)).split(P).join(T+N)}function $(e){return{...e,children:e.children.map(t=>c(t)?{kind:"text",value:P}:t.kind==="element"?$(t):t)}}var P="\0fx-hole\0";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var S=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),$={className:"class",htmlFor:"for"},P=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),v=new Set(["script","style","textarea","title"]);function x(e){return v.has(e)}function E(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!P.has(e.name)}function c(e){let t=e.props.map(L).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return S.has(e.tag)?n:`${n}${e.children.map(w).join("")}</${e.tag}>`}function w(e){if(e.kind==="text")return _(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return c(e)}function L(e){let t=$[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${H(String(n))}"`}function H(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function _(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var z="<!--fx-->",A="<!--fx/-->";function f(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function M(e){return e.kind==="text"||e.kind==="element"&&I(e)}function I(e){return e.svg||x(e.tag)||!e.props.every(t=>E(t))?!1:e.children.every(t=>M(t)||f(t))}function o(e){if(f(e))return!0;let t=e.children;return t?t.some(o):!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 O(e){if(!I(e)||!k(e)||!e.children.some(o))return null;let t=[],n=[],b=0,u=s=>{let i=`_n$${b++}`;return t.push({ref:i,expr:s}),i};return p(e,"_el$"),{html:y(e),tag:e.tag,steps:t,holes:n};function p(s,i){let m=-1;s.children.forEach((l,r)=>{o(l)&&(m=r)});let a=null;for(let l=0;l<=m;l++){let r=s.children[l],d=a?`${a}.nextSibling`:`${i}.firstChild`;if(f(r)){let h=u(d),R=u(`holeEnd(${h})`);n.push({parentRef:i,startRef:h,endRef:R,node:r}),a=R;continue}let g=u(d);r.kind==="element"&&o(r)&&p(r,g),a=g}}}function y(e){return c(T(e)).split(N).join(z+A)}function T(e){return{...e,children:e.children.map(t=>f(t)?{kind:"text",value:N}:t.kind==="element"?T(t):t)}}var N="\0fx-hole\0";export{A as HOLE_END,z as HOLE_START,O as planPartialTemplate};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var a=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var d=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},E=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of p(t))!g.call(e,r)&&r!==n&&a(e,r,{get:()=>t[r],enumerable:!(i=m(t,r))||i.enumerable});return e};var x=e=>E(a({},"__esModule",{value:!0}),e);var N={};d(N,{htmlAttrName:()=>I,isPlainLiteralAttr:()=>u,isRawTextElement:()=>o,isSerializable:()=>c,serializeStatic:()=>f,templatePositions:()=>w});module.exports=x(N);var R=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),l={className:"class",htmlFor:"for"},h=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),k=new Set(["script","style","textarea","title"]);function o(e){return k.has(e)}function I(e){return l[e]??e}function u(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!h.has(e.name)}function c(e){if(!e.static||o(e.tag))return!1;for(let t of e.props)if(!u(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&c(t)))return!1;return!0}function f(e){let t=e.props.map(b).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return R.has(e.tag)?n:`${n}${e.children.map(T).join("")}</${e.tag}>`}function T(e){if(e.kind==="text")return $(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return f(e)}function b(e){let t=l[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${S(String(n))}"`}function S(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function $(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function w(e){let t=[],n,i=r=>{n??=r.at?.file,t.push(r.at?.line??0,r.at?.column??0);for(let s of r.children)s.kind==="element"&&i(s)};return i(e),n&&t.some(r=>r!==0)?{file:n,pos:t}:void 0}
|
|
@@ -20,4 +20,20 @@ export declare function isPlainLiteralAttr(prop: IRProp): boolean;
|
|
|
20
20
|
export declare function isSerializable(node: IRElement): boolean;
|
|
21
21
|
/** The subtree as HTML. */
|
|
22
22
|
export declare function serializeStatic(node: IRElement): string;
|
|
23
|
+
/**
|
|
24
|
+
* Where each element of a template was written, in the order a clone walks them.
|
|
25
|
+
*
|
|
26
|
+
* A template is emitted as one string, so a source map traces everything in it back to the
|
|
27
|
+
* line the root opens at — every element in a component reports the same place. The order
|
|
28
|
+
* is pre-order over the elements the template contains, which is what
|
|
29
|
+
* `[root, ...root.querySelectorAll('*')]` gives back on the clone, since holes are filled
|
|
30
|
+
* only after it is built.
|
|
31
|
+
*
|
|
32
|
+
* Undefined when the transform was not asked for source locations, so a production build
|
|
33
|
+
* emits nothing and pays nothing.
|
|
34
|
+
*/
|
|
35
|
+
export declare function templatePositions(root: IRElement): {
|
|
36
|
+
file: string;
|
|
37
|
+
pos: number[];
|
|
38
|
+
} | undefined;
|
|
23
39
|
//# sourceMappingURL=serialize-static.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize-static.d.ts","sourceRoot":"","sources":["../../src/codegen/serialize-static.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,gBAAgB,CAAC;AA6DhE,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAgBvD;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAKvD"}
|
|
1
|
+
{"version":3,"file":"serialize-static.d.ts","sourceRoot":"","sources":["../../src/codegen/serialize-static.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,gBAAgB,CAAC;AA6DhE,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAgBvD;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAKvD;AAmCD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAU9F"}
|
|
@@ -138,3 +138,28 @@ function escapeAttr(value) {
|
|
|
138
138
|
function escapeText(value) {
|
|
139
139
|
return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
140
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Where each element of a template was written, in the order a clone walks them.
|
|
143
|
+
*
|
|
144
|
+
* A template is emitted as one string, so a source map traces everything in it back to the
|
|
145
|
+
* line the root opens at — every element in a component reports the same place. The order
|
|
146
|
+
* is pre-order over the elements the template contains, which is what
|
|
147
|
+
* `[root, ...root.querySelectorAll('*')]` gives back on the clone, since holes are filled
|
|
148
|
+
* only after it is built.
|
|
149
|
+
*
|
|
150
|
+
* Undefined when the transform was not asked for source locations, so a production build
|
|
151
|
+
* emits nothing and pays nothing.
|
|
152
|
+
*/
|
|
153
|
+
export function templatePositions(root) {
|
|
154
|
+
const pos = [];
|
|
155
|
+
let file;
|
|
156
|
+
const walk = (el) => {
|
|
157
|
+
file ??= el.at?.file;
|
|
158
|
+
pos.push(el.at?.line ?? 0, el.at?.column ?? 0);
|
|
159
|
+
for (const child of el.children)
|
|
160
|
+
if (child.kind === 'element')
|
|
161
|
+
walk(child);
|
|
162
|
+
};
|
|
163
|
+
walk(root);
|
|
164
|
+
return file && pos.some((n) => n !== 0) ? { file, pos } : undefined;
|
|
165
|
+
}
|