@fluixi/compiler 1.0.0-alpha.75 → 1.0.0-alpha.76
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/intrinsics.cjs +1 -0
- package/dist/analyze/intrinsics.d.ts +67 -0
- package/dist/analyze/intrinsics.d.ts.map +1 -0
- package/dist/analyze/intrinsics.js +91 -0
- package/dist/analyze/intrinsics.mjs +1 -0
- package/dist/analyze/props-destructure.cjs +1 -0
- package/dist/analyze/props-destructure.d.ts +84 -0
- package/dist/analyze/props-destructure.d.ts.map +1 -0
- package/dist/analyze/props-destructure.js +272 -0
- package/dist/analyze/props-destructure.mjs +1 -0
- package/dist/analyze/reactive-bindings.cjs +1 -0
- package/dist/analyze/reactive-bindings.d.ts +34 -0
- package/dist/analyze/reactive-bindings.d.ts.map +1 -0
- package/dist/analyze/reactive-bindings.js +153 -0
- package/dist/analyze/reactive-bindings.mjs +1 -0
- package/dist/{babel-GXO3KAVI.mjs → babel-YQ42WUS3.mjs} +1 -1
- package/dist/chunk-545LMC5W.mjs +1 -0
- package/dist/{chunk-TIE4XNAM.mjs → chunk-L2QPV25P.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.mjs +9 -9
- package/dist/integrations.cjs +18 -14
- package/dist/integrations.d.ts +14 -0
- package/dist/integrations.d.ts.map +1 -1
- package/dist/integrations.js +16 -1
- package/dist/integrations.mjs +11 -11
- package/dist/lower/compile-template.cjs +1 -1
- package/dist/lower/compile-template.mjs +1 -1
- package/dist/lower/template.cjs +1 -1
- package/dist/lower/template.d.ts.map +1 -1
- package/dist/lower/template.js +7 -5
- package/dist/lower/template.mjs +1 -1
- package/dist/resolve/component-globals.cjs +9 -9
- package/dist/resolve/component-globals.d.ts +8 -0
- package/dist/resolve/component-globals.d.ts.map +1 -1
- package/dist/resolve/component-globals.js +17 -3
- package/dist/resolve/component-globals.mjs +9 -9
- package/dist/resolve/write-globals.cjs +9 -9
- package/dist/resolve/write-globals.mjs +9 -9
- package/dist/transform/index.cjs +5 -1
- package/dist/transform/index.d.ts +4 -0
- package/dist/transform/index.d.ts.map +1 -1
- package/dist/transform/index.js +2 -0
- package/dist/transform/index.mjs +14 -10
- package/dist/transform/intrinsics.cjs +3 -0
- package/dist/transform/intrinsics.d.ts +22 -0
- package/dist/transform/intrinsics.d.ts.map +1 -0
- package/dist/transform/intrinsics.js +78 -0
- package/dist/transform/intrinsics.mjs +3 -0
- package/dist/transform/props.cjs +3 -0
- package/dist/transform/props.d.ts +46 -0
- package/dist/transform/props.d.ts.map +1 -0
- package/dist/transform/props.js +221 -0
- package/dist/transform/props.mjs +12 -0
- package/dist/transform/templates.cjs +4 -1
- package/dist/transform/templates.d.ts +20 -0
- package/dist/transform/templates.d.ts.map +1 -1
- package/dist/transform/templates.js +41 -6
- package/dist/transform/templates.mjs +13 -10
- package/dist/transform-ZWIHEZVN.mjs +7 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/transform-PJX2GNSV.mjs +0 -3
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
var
|
|
1
|
+
var j=t=>"components"in t;function O(t,o){return t.replace(/\$(\d+)/g,(a,u)=>o[Number(u)]??a)}function _(t,o){return typeof o=="string"?{module:o,export:t}:o}function S(t=[]){let o=new Map,a=[],u=[];for(let n of t){if(!j(n)){u.push(n);continue}for(let[r,l]of Object.entries(n.components)){let c=_(r,l),m=o.get(r);if(m&&m.module!==c.module){let d=a.find(R=>R.name===r);d?d.modules.push(c.module):a.push({name:r,modules:[m.module,c.module]});continue}o.set(r,c)}}let i=new Map;return{resolve:n=>{if(i.has(n))return i.get(n);let r=o.get(n);if(!r)for(let l of u){let c=n.match(new RegExp(l.match.source,l.match.flags.replace("g","")));if(c){r={module:O(l.module,c),export:l.export?O(l.export,c):n};break}}return i.set(n,r),r},names:()=>[...o.keys()],conflicts:()=>a}}var C=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],b=["Suspense","SuspenseList","Await"],$=["Router","Outlet","Redirect","Link"],G=[...C,...b,...$],W=new Set([...C,...b]);function E(t={}){let{controlFlowModule:o="@fluixi/dom",coreModule:a="@fluixi/core",routerModule:u="@fluixi/core/router-next"}=t,i={};for(let p of C)i[p]=o;for(let p of b)i[p]=a;for(let p of $)i[p]=u;return i}var f="@fluixi/reactive/signal",v={$signal:{export:"signal",module:f,returns:"signal-handle"},$memo:{export:"memo",module:f,returns:"memo-handle"},$effect:{export:"effect",module:f,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:f,returns:"resource-handle"},$selector:{export:"createSelector",module:f,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:f,returns:"memo-accessor"},$untrack:{export:"untrack",module:f,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}};var U=new RegExp(`\\$(?:${Object.keys(v).map(t=>t.slice(1)).join("|")})\\s*\\(`);var D=new Set(["Text","Image","Option","Audio","Comment","Range","Selection","Notification","Event","Document","Element","Node","Screen","Window","Location","History","Storage","Response","Request","Headers"]);function P(t){if(t.startsWith(".")||t.startsWith("/")||/^[~@]\//.test(t))return;let o=t.split("/");return t.startsWith("@")?o.slice(0,2).join("/"):o[0]}function M(t){return`_${t.replace(/[^A-Za-z0-9]/g,"_")}`}function z(t,o={}){let{available:a,builtins:u=!0,intrinsics:i=!0,generator:p="@fluixi/compiler",specifier:n=e=>e}=o,r=[...t];u&&r.push({components:E()});let l=S(r),c=a?new Set(a):void 0,m=[],d=[],R=[],h=new Map;for(let e of[...l.names()].sort()){let s=l.resolve(e);if(!s)continue;let g=P(s.module);D.has(e)?d.push(e):c&&g&&!c.has(g)?R.push(e):(m.push(e),h.set(e,s))}let I=i?[...new Set(Object.values(v).map(e=>e.module))]:[],y=[...new Set([...m.map(e=>h.get(e).module),...I])].sort().map(e=>`import * as ${M(e)} from '${n(e)}';`),w=m.map(e=>{let s=h.get(e),g=M(s.module);return s.export==="default"?` const ${e}: typeof ${g}.default;`:` export import ${e} = ${g}.${s.export};`}),N=d.length>0?`//
|
|
2
2
|
// Import these explicitly — lib.dom already declares the name, so an ambient
|
|
3
3
|
// declaration cannot win:
|
|
4
|
-
`+
|
|
5
|
-
`}).join(""):"",
|
|
6
|
-
// ${
|
|
4
|
+
`+d.map(e=>{let s=l.resolve(e)?.module;return`// import { ${e} } from '${s?n(s):""}';
|
|
5
|
+
`}).join(""):"",T=i?Object.entries(v).map(([e,s])=>` const ${e}: typeof ${M(s.module)}.${s.export};`):[],x=t.filter(e=>"match"in e).length,L=x>0?`//
|
|
6
|
+
// ${x} pattern rule${x===1?"":"s"} cannot be declared:
|
|
7
7
|
// a pattern matches unboundedly many names, so there is no list to emit. Those
|
|
8
8
|
// tags still resolve at build time; declare them by hand if the editor needs them.
|
|
9
|
-
`:"";return{source:`// GENERATED by ${
|
|
9
|
+
`:"";return{source:`// GENERATED by ${p} — do not edit.
|
|
10
10
|
//
|
|
11
11
|
// The components \`resolve\` supplies without an import. This describes what the
|
|
12
12
|
// compiler already does; it does not enable it.
|
|
13
|
-
`+
|
|
14
|
-
${
|
|
13
|
+
`+N+L+(y.length>0?`
|
|
14
|
+
${y.join(`
|
|
15
15
|
`)}
|
|
16
16
|
`:`
|
|
17
17
|
`)+`
|
|
18
18
|
declare global {
|
|
19
|
-
${w.join(`
|
|
19
|
+
${[...w,...T].join(`
|
|
20
20
|
`)}
|
|
21
21
|
}
|
|
22
|
-
`,declared:
|
|
22
|
+
`,declared:m,shadowedByDom:d,unavailable:R,patternRules:x}}export{z as componentGlobals};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var y=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var U=(e,t)=>{for(var o in t)y(e,o,{get:t[o],enumerable:!0})},H=(e,t,o,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of B(t))!F.call(e,n)&&n!==o&&y(e,n,{get:()=>t[n],enumerable:!(s=W(t,n))||s.enumerable});return e};var K=e=>H(y({},"__esModule",{value:!0}),e);var te={};U(te,{DEFAULT_GLOBALS_PATH:()=>k,writeComponentGlobals:()=>ee});module.exports=K(te);var f=require("node:fs"),c=require("node:path");var V=e=>"components"in e;function M(e,t){return e.replace(/\$(\d+)/g,(o,s)=>t[Number(s)]??o)}function J(e,t){return typeof t=="string"?{module:t,export:e}:t}function w(e=[]){let t=new Map,o=[],s=[];for(let i of e){if(!V(i)){s.push(i);continue}for(let[l,p]of Object.entries(i.components)){let d=J(l,p),m=t.get(l);if(m&&m.module!==d.module){let g=o.find(v=>v.name===l);g?g.modules.push(d.module):o.push({name:l,modules:[m.module,d.module]});continue}t.set(l,d)}}let n=new Map;return{resolve:i=>{if(n.has(i))return n.get(i);let l=t.get(i);if(!l)for(let p of s){let d=i.match(new RegExp(p.match.source,p.match.flags.replace("g","")));if(d){l={module:M(p.module,d),export:p.export?M(p.export,d):i};break}}return n.set(i,l),l},names:()=>[...t.keys()],conflicts:()=>o}}var O=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],S=["Suspense","SuspenseList","Await"],I=["Router","Outlet","Redirect","Link"],ie=[...O,...S,...I],le=new Set([...O,...S]);function j(e={}){let{controlFlowModule:t="@fluixi/dom",coreModule:o="@fluixi/core",routerModule:s="@fluixi/core/router-next"}=e,n={};for(let a of O)n[a]=t;for(let a of S)n[a]=o;for(let a of I)n[a]=s;return n}var R="@fluixi/reactive/signal",b={$signal:{export:"signal",module:R,returns:"signal-handle"},$memo:{export:"memo",module:R,returns:"memo-handle"},$effect:{export:"effect",module:R,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:R,returns:"resource-handle"},$selector:{export:"createSelector",module:R,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:R,returns:"memo-accessor"},$untrack:{export:"untrack",module:R,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}};var ae=new RegExp(`\\$(?:${Object.keys(b).map(e=>e.slice(1)).join("|")})\\s*\\(`);var q=new Set(["Text","Image","Option","Audio","Comment","Range","Selection","Notification","Event","Document","Element","Node","Screen","Window","Location","History","Storage","Response","Request","Headers"]);function z(e){if(e.startsWith(".")||e.startsWith("/")||/^[~@]\//.test(e))return;let t=e.split("/");return e.startsWith("@")?t.slice(0,2).join("/"):t[0]}function $(e){return`_${e.replace(/[^A-Za-z0-9]/g,"_")}`}function N(e,t={}){let{available:o,builtins:s=!0,intrinsics:n=!0,generator:a="@fluixi/compiler",specifier:i=r=>r}=t,l=[...e];s&&l.push({components:j()});let p=w(l),d=o?new Set(o):void 0,m=[],g=[],v=[],C=new Map;for(let r of[...p.names()].sort()){let u=p.resolve(r);if(!u)continue;let x=z(u.module);q.has(r)?g.push(r):d&&x&&!d.has(x)?v.push(r):(m.push(r),C.set(r,u))}let A=n?[...new Set(Object.values(b).map(r=>r.module))]:[],E=[...new Set([...m.map(r=>C.get(r).module),...A])].sort().map(r=>`import * as ${$(r)} from '${i(r)}';`),D=m.map(r=>{let u=C.get(r),x=$(u.module);return u.export==="default"?` const ${r}: typeof ${x}.default;`:` export import ${r} = ${x}.${u.export};`}),_=g.length>0?`//
|
|
2
2
|
// Import these explicitly — lib.dom already declares the name, so an ambient
|
|
3
3
|
// declaration cannot win:
|
|
4
|
-
`+
|
|
5
|
-
`}).join(""):"",
|
|
6
|
-
// ${
|
|
4
|
+
`+g.map(r=>{let u=p.resolve(r)?.module;return`// import { ${r} } from '${u?i(u):""}';
|
|
5
|
+
`}).join(""):"",G=n?Object.entries(b).map(([r,u])=>` const ${r}: typeof ${$(u.module)}.${u.export};`):[],h=e.filter(r=>"match"in r).length,P=h>0?`//
|
|
6
|
+
// ${h} pattern rule${h===1?"":"s"} cannot be declared:
|
|
7
7
|
// a pattern matches unboundedly many names, so there is no list to emit. Those
|
|
8
8
|
// tags still resolve at build time; declare them by hand if the editor needs them.
|
|
9
|
-
`:"";return{source:`// GENERATED by ${
|
|
9
|
+
`:"";return{source:`// GENERATED by ${a} — do not edit.
|
|
10
10
|
//
|
|
11
11
|
// The components \`resolve\` supplies without an import. This describes what the
|
|
12
12
|
// compiler already does; it does not enable it.
|
|
13
|
-
`+
|
|
14
|
-
${
|
|
13
|
+
`+_+P+(E.length>0?`
|
|
14
|
+
${E.join(`
|
|
15
15
|
`)}
|
|
16
16
|
`:`
|
|
17
17
|
`)+`
|
|
18
18
|
declare global {
|
|
19
|
-
${
|
|
19
|
+
${[...D,...G].join(`
|
|
20
20
|
`)}
|
|
21
21
|
}
|
|
22
|
-
`,declared:
|
|
22
|
+
`,declared:m,shadowedByDom:g,unavailable:v,patternRules:h}}var Z="GENERATED by @fluixi/compiler",k="fluixi.d.ts";function Q(e,t){let o;try{let n=(0,f.readFileSync)((0,c.resolve)(e,"tsconfig.json"),"utf8");o=JSON.parse(n.replace(/^\s*\/\/.*$/gm,""))}catch{return}if(o.extends!==void 0)return;if(!Array.isArray(o.include))return!0;let s=L(e,t);return o.include.some(n=>{if(typeof n!="string")return!1;let a=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*");return new RegExp(`^${a}(?:/.*)?$`).test(s)})}function L(e,t){return(0,c.relative)(e,t).split(c.sep).join("/")}function X(e,t,o){if(!e.startsWith("/"))return e;let s=(0,c.resolve)(o,e.slice(1)),n=(0,c.relative)(t,s).split(c.sep).join("/");return n.startsWith(".")||(n=`./${n}`),n.replace(/\.(tsx|ts|jsx|mts|cts)$/,".js")}function Y(e){try{let t=JSON.parse((0,f.readFileSync)((0,c.resolve)(e,"package.json"),"utf8"));return[...Object.keys(t.dependencies??{}),...Object.keys(t.devDependencies??{}),...Object.keys(t.peerDependencies??{})]}catch{return}}function ee(e,t){if(e.globals===!1)return{status:"skipped",reason:"disabled"};let o=e.resolve??[],s=(0,c.resolve)(t,e.globals??k),n;try{n=(0,f.readFileSync)(s,"utf8")}catch{n=void 0}if(n!==void 0&&!n.includes(Z))return{status:"skipped",reason:"foreign-file",path:s};let{source:a,declared:i}=N(o,{available:Y(t),specifier:l=>X(l,(0,c.dirname)(s),t)});return n===a?{status:"unchanged",path:s,declared:i.length,warning:T(t,s)}:((0,f.mkdirSync)((0,c.dirname)(s),{recursive:!0}),(0,f.writeFileSync)(s,a),{status:"written",path:s,declared:i.length,warning:T(t,s)})}function T(e,t){if(Q(e,t)!==!1)return;let o=L(e,t);return`[fluixi] ${o} is not covered by "include" in tsconfig.json, so TypeScript will ignore it and every resolved component stays "Cannot find name". Add "${o}" to "include".`}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import{mkdirSync as
|
|
1
|
+
import{mkdirSync as K,readFileSync as S,writeFileSync as V}from"node:fs";import{dirname as N,relative as k,sep as L,resolve as h}from"node:path";var B=e=>"components"in e;function E(e,t){return e.replace(/\$(\d+)/g,(r,s)=>t[Number(s)]??r)}function F(e,t){return typeof t=="string"?{module:t,export:e}:t}function M(e=[]){let t=new Map,r=[],s=[];for(let i of e){if(!B(i)){s.push(i);continue}for(let[l,u]of Object.entries(i.components)){let p=F(l,u),d=t.get(l);if(d&&d.module!==p.module){let m=r.find(R=>R.name===l);m?m.modules.push(p.module):r.push({name:l,modules:[d.module,p.module]});continue}t.set(l,p)}}let n=new Map;return{resolve:i=>{if(n.has(i))return n.get(i);let l=t.get(i);if(!l)for(let u of s){let p=i.match(new RegExp(u.match.source,u.match.flags.replace("g","")));if(p){l={module:E(u.module,p),export:u.export?E(u.export,p):i};break}}return n.set(i,l),l},names:()=>[...t.keys()],conflicts:()=>r}}var C=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],y=["Suspense","SuspenseList","Await"],w=["Router","Outlet","Redirect","Link"],te=[...C,...y,...w],ne=new Set([...C,...y]);function I(e={}){let{controlFlowModule:t="@fluixi/dom",coreModule:r="@fluixi/core",routerModule:s="@fluixi/core/router-next"}=e,n={};for(let c of C)n[c]=t;for(let c of y)n[c]=r;for(let c of w)n[c]=s;return n}var f="@fluixi/reactive/signal",v={$signal:{export:"signal",module:f,returns:"signal-handle"},$memo:{export:"memo",module:f,returns:"memo-handle"},$effect:{export:"effect",module:f,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:f,returns:"resource-handle"},$selector:{export:"createSelector",module:f,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:f,returns:"memo-accessor"},$untrack:{export:"untrack",module:f,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}};var re=new RegExp(`\\$(?:${Object.keys(v).map(e=>e.slice(1)).join("|")})\\s*\\(`);var U=new Set(["Text","Image","Option","Audio","Comment","Range","Selection","Notification","Event","Document","Element","Node","Screen","Window","Location","History","Storage","Response","Request","Headers"]);function H(e){if(e.startsWith(".")||e.startsWith("/")||/^[~@]\//.test(e))return;let t=e.split("/");return e.startsWith("@")?t.slice(0,2).join("/"):t[0]}function O(e){return`_${e.replace(/[^A-Za-z0-9]/g,"_")}`}function j(e,t={}){let{available:r,builtins:s=!0,intrinsics:n=!0,generator:c="@fluixi/compiler",specifier:i=o=>o}=t,l=[...e];s&&l.push({components:I()});let u=M(l),p=r?new Set(r):void 0,d=[],m=[],R=[],b=new Map;for(let o of[...u.names()].sort()){let a=u.resolve(o);if(!a)continue;let g=H(a.module);U.has(o)?m.push(o):p&&g&&!p.has(g)?R.push(o):(d.push(o),b.set(o,a))}let D=n?[...new Set(Object.values(v).map(o=>o.module))]:[],$=[...new Set([...d.map(o=>b.get(o).module),...D])].sort().map(o=>`import * as ${O(o)} from '${i(o)}';`),_=d.map(o=>{let a=b.get(o),g=O(a.module);return a.export==="default"?` const ${o}: typeof ${g}.default;`:` export import ${o} = ${g}.${a.export};`}),G=m.length>0?`//
|
|
2
2
|
// Import these explicitly — lib.dom already declares the name, so an ambient
|
|
3
3
|
// declaration cannot win:
|
|
4
|
-
`+
|
|
5
|
-
`}).join(""):"",
|
|
6
|
-
// ${
|
|
4
|
+
`+m.map(o=>{let a=u.resolve(o)?.module;return`// import { ${o} } from '${a?i(a):""}';
|
|
5
|
+
`}).join(""):"",P=n?Object.entries(v).map(([o,a])=>` const ${o}: typeof ${O(a.module)}.${a.export};`):[],x=e.filter(o=>"match"in o).length,W=x>0?`//
|
|
6
|
+
// ${x} pattern rule${x===1?"":"s"} cannot be declared:
|
|
7
7
|
// a pattern matches unboundedly many names, so there is no list to emit. Those
|
|
8
8
|
// tags still resolve at build time; declare them by hand if the editor needs them.
|
|
9
|
-
`:"";return{source:`// GENERATED by ${
|
|
9
|
+
`:"";return{source:`// GENERATED by ${c} — do not edit.
|
|
10
10
|
//
|
|
11
11
|
// The components \`resolve\` supplies without an import. This describes what the
|
|
12
12
|
// compiler already does; it does not enable it.
|
|
13
|
-
`+
|
|
14
|
-
${
|
|
13
|
+
`+G+W+($.length>0?`
|
|
14
|
+
${$.join(`
|
|
15
15
|
`)}
|
|
16
16
|
`:`
|
|
17
17
|
`)+`
|
|
18
18
|
declare global {
|
|
19
|
-
${
|
|
19
|
+
${[..._,...P].join(`
|
|
20
20
|
`)}
|
|
21
21
|
}
|
|
22
|
-
`,declared:
|
|
22
|
+
`,declared:d,shadowedByDom:m,unavailable:R,patternRules:x}}var J="GENERATED by @fluixi/compiler",q="fluixi.d.ts";function z(e,t){let r;try{let n=S(h(e,"tsconfig.json"),"utf8");r=JSON.parse(n.replace(/^\s*\/\/.*$/gm,""))}catch{return}if(r.extends!==void 0)return;if(!Array.isArray(r.include))return!0;let s=A(e,t);return r.include.some(n=>{if(typeof n!="string")return!1;let c=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*");return new RegExp(`^${c}(?:/.*)?$`).test(s)})}function A(e,t){return k(e,t).split(L).join("/")}function Z(e,t,r){if(!e.startsWith("/"))return e;let s=h(r,e.slice(1)),n=k(t,s).split(L).join("/");return n.startsWith(".")||(n=`./${n}`),n.replace(/\.(tsx|ts|jsx|mts|cts)$/,".js")}function Q(e){try{let t=JSON.parse(S(h(e,"package.json"),"utf8"));return[...Object.keys(t.dependencies??{}),...Object.keys(t.devDependencies??{}),...Object.keys(t.peerDependencies??{})]}catch{return}}function me(e,t){if(e.globals===!1)return{status:"skipped",reason:"disabled"};let r=e.resolve??[],s=h(t,e.globals??q),n;try{n=S(s,"utf8")}catch{n=void 0}if(n!==void 0&&!n.includes(J))return{status:"skipped",reason:"foreign-file",path:s};let{source:c,declared:i}=j(r,{available:Q(t),specifier:l=>Z(l,N(s),t)});return n===c?{status:"unchanged",path:s,declared:i.length,warning:T(t,s)}:(K(N(s),{recursive:!0}),V(s,c),{status:"written",path:s,declared:i.length,warning:T(t,s)})}function T(e,t){if(z(e,t)!==!1)return;let r=A(e,t);return`[fluixi] ${r} is not covered by "include" in tsconfig.json, so TypeScript will ignore it and every resolved component stays "Cannot find name". Add "${r}" to "include".`}export{q as DEFAULT_GLOBALS_PATH,me as writeComponentGlobals};
|
package/dist/transform/index.cjs
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
"use strict";var De=Object.create;var L=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var Be=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,He=Object.prototype.hasOwnProperty;var Xe=(e,t)=>{for(var n in t)L(e,n,{get:t[n],enumerable:!0})},ae=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Be(t))!He.call(e,r)&&r!==n&&L(e,r,{get:()=>t[r],enumerable:!(o=_e(t,r))||o.enumerable});return e};var ze=(e,t,n)=>(n=e!=null?De(Fe(e)):{},ae(t||!e||!e.__esModule?L(n,"default",{value:e,enumerable:!0}):n,e)),qe=e=>ae(L({},"__esModule",{value:!0}),e);var jt={};Xe(jt,{moduleBindings:()=>V,shapeOf:()=>R,transformTemplates:()=>je});module.exports=qe(jt);var Pe=require("@babel/parser"),Ae=ze(require("magic-string"),1);function Ve(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 N(e){let t=[],n=new Map,o=r=>{switch(r.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let s of r.children)o(s);return!1;case"fragment":for(let s of r.children)o(s);return!1;case"element":{let s=!0;for(let a of r.children)o(a)||(s=!1);let i;for(let a of r.props)if(i=Ve(a),i)break;return!i&&!s&&(i=We(r)),r.static=!i,i?n.set(r,i):t.push(r),r.static}default:return!1}};for(let r of Array.isArray(e)?e:[e])o(r);return{staticElements:t,reasons:n}}function We(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 J={kind:"eager"},Ue=["pointerdown","focusin","keydown"],le=new Set(["eager","idle","visible","interaction","media","never"]),v=class extends Error{};function G(e){return e.startsWith("load:")}function j(e,t){let n=e.slice(5);if(!le.has(n))throw new v(`Unknown load strategy 'load:${n}'. Expected one of ${[...le].join(", ")}.`);switch(n){case"eager":return J;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?Ge(t):[...Ue]};case"media":if(!t)throw new v(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new v(`Unhandled load strategy '${n}'.`)}}function Ge(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new v("'load:interaction' was given no event names.");return t}function D(e){return e.kind!=="eager"&&e.kind!=="never"}var b=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],C=["Suspense","SuspenseList","Await"],k=["Router","Outlet","Redirect","Link"],Ft=[...b,...C,...k],K=new Set([...b,...C]);function ce(e={}){let{controlFlowModule:t="@fluixi/dom",coreModule:n="@fluixi/core",routerModule:o="@fluixi/core/router-next"}=e,r={};for(let s of b)r[s]=t;for(let s of C)r[s]=n;for(let s of k)r[s]=o;return r}function _(e,t={}){let{resolver:n,isBound:o,modules:r,strategyFor:s}=t,i=ce(r),a=new Map,l=new Set,c=d=>{let{name:p}=d;if(!p||p.includes(".")||o?.(p))return;let f=u(p);if(!f){l.add(p);return}let g=f.origin==="builtin"&&K.has(p)?J:s?.(d)??J;d.source={...f,loading:g},a.set(p,d.source)},u=d=>{if(K.has(d))return{module:i[d],export:d,origin:"builtin"};let p=n?.resolve(d);if(p)return{module:p.module,export:p.export,origin:"rule"};if(k.includes(d))return{module:i[d],export:d,origin:"builtin"}};return B(e,d=>{d.kind==="component"&&c(d)}),{resolved:a,unresolved:[...l]}}function B(e,t){let n=Array.isArray(e)?e:[e];for(let o of n){t(o);let r=o.children;r&&B(r,t)}}function F(e){let t=[];B(e,s=>{s.kind==="component"&&s.source&&t.push(s)});let n=new Set,o=new Set;for(let s of t){let{module:i,loading:a}=s.source;a.kind==="eager"&&n.add(i),a.kind==="never"&&o.add(i)}let r=new Map;for(let s of t){let i=s.source;D(i.loading)&&n.has(i.module)&&(i.loading={kind:"eager"},r.set(i.module,(r.get(i.module)??0)+1))}return{collapsed:r,conflicted:[...o].filter(s=>n.has(s))}}var Ke=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),pe={className:"class",htmlFor:"for"},Ye=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),Ze=new Set(["script","style","textarea","title"]);function Y(e){return Ze.has(e)}function ue(e){return pe[e]??e}function I(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!Ye.has(e.name)}function Z(e){if(!e.static||Y(e.tag))return!1;for(let t of e.props)if(!I(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&Z(t)))return!1;return!0}function T(e){let t=e.props.map(et).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return Ke.has(e.tag)?n:`${n}${e.children.map(Qe).join("")}</${e.tag}>`}function Qe(e){if(e.kind==="text")return nt(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return T(e)}function et(e){let t=pe[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${tt(String(n))}"`}function tt(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function nt(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var rt="<!--fx-->",ot="<!--fx/-->";function X(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function it(e){return e.kind==="text"||e.kind==="element"&&de(e)}function de(e){return e.svg||Y(e.tag)||!e.props.every(t=>I(t))?!1:e.children.every(t=>it(t)||X(t))}function H(e){if(X(e))return!0;let t=e.children;return t?t.some(H):!1}function me(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"||me(t))}function fe(e){if(!de(e)||!me(e)||!e.children.some(H))return null;let t=[],n=[],o=0,r=i=>{let a=`_n$${o++}`;return t.push({ref:a,expr:i}),a};return s(e,"_el$"),{html:st(e),tag:e.tag,steps:t,holes:n};function s(i,a){let l=-1;i.children.forEach((u,d)=>{H(u)&&(l=d)});let c=null;for(let u=0;u<=l;u++){let d=i.children[u],p=c?`${c}.nextSibling`:`${a}.firstChild`;if(X(d)){let g=r(p),P=r(`holeEnd(${g})`);n.push({parentRef:a,startRef:g,endRef:P,node:d}),c=P;continue}let f=r(p);d.kind==="element"&&H(d)&&s(d,f),c=f}}}function st(e){return T(ge(e)).split(he).join(rt+ot)}function ge(e){return{...e,children:e.children.map(t=>X(t)?{kind:"text",value:he}:t.kind==="element"?ge(t):t)}}var he="\0fx-hole\0";var Q={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},Zt={version:2,module:"@fluixi/dom",symbols:[...Q.symbols,"template","cloneTemplate","walk"]};var at={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function lt(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function Re(e){return lt(e)?e:JSON.stringify(e)}function ct(e){return e.expr!==void 0?e.reactive?`() => (${e.expr})`:`(${e.expr})`:JSON.stringify(e.literal??!0)}function pt(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function ut(e,t,n){let o=e.filter(a=>a.kind==="spread"),s=e.filter(a=>a.kind!=="spread").map(a=>`${Re(a.name)}: ${ct(a)}`);t!=null&&s.push(`children: ${t}`);let i=`{ ${s.join(", ")} }`;return o.length>0?(n.add("mergeProps"),`mergeProps(${o.map(a=>a.expr).join(", ")}, ${i})`):i}function ye(e,t,n){return e.length===1?w(e[0],t,n):`[${e.map(o=>w(o,t,n)).join(", ")}]`}function ve(e,t,n,o,r){o.add("createMemo"),o.add("createComponent");let s=t.filter(c=>c.kind==="spread"),a=t.filter(c=>c.kind!=="spread").map(c=>`get ${Re(c.name)}() { return ${pt(c)}; }`);n.length>0&&a.push(`get children() { return ${ye(n,o,r)}; }`);let l=`{ ${a.join(", ")} }`;return s.length>0&&(o.add("mergeProps"),l=`mergeProps(${s.map(c=>c.expr).join(", ")}, ${l})`),`createMemo(() => createComponent(${e}, ${l}))`}function dt(e,t){let n=ue(t.name),o=t.literal;return o===!0||o===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:o===!1||o===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(o))});`}var xe=!1;function w(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":return e.reactive?`() => (${e.code})`:`(${e.code})`;case"fragment":return e.children.length===0?"null":ye(e.children,t,n);case"component":return ve(e.name,e.props,e.children,t,n);case"control":{let o=at[e.control]??e.control;return t.add(o),ve(o,e.props,e.children,t,n)}case"element":{if(n&&e.static&&!e.svg&&Z(e)){t.add("templateNode");let a=`_tmpl$${n.length}`;return n.push({id:a,html:T(e),tag:e.tag,svg:!1}),`templateNode(${a}, ${JSON.stringify(e.tag)})`}if(n&&xe){let a=fe(e);if(a){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let l=`_tmpl$${n.length}`;n.push({id:l,html:a.html,tag:a.tag,svg:!1});let c=[`const _el$ = templateNode(${l}, ${JSON.stringify(a.tag)}, true);`];for(let u of a.steps)c.push(`const ${u.ref} = ${u.expr};`);for(let u of a.holes)c.push(`insert(${u.parentRef}, holeScope(${u.startRef}, () => (${w(u.node,t,n)})), ${u.endRef}, holeContent(${u.startRef}, ${u.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let o=JSON.stringify(e.tag),r="_el$",s=[],i=e.svg?`${o}, true`:o;if(s.push(`const ${r} = createNativeElement(${i});`),e.props.length>0)if(!e.svg&&e.props.every(I))for(let a of e.props)s.push(dt(r,a));else{t.add("spread");let a=e.svg?", isSVG: true":"";s.push(`spread({ element: ${r}, props: ${ut(e.props,null,t)}${a} });`)}for(let a of e.children){t.add("insert");let l=w(a,t,n),c=a.kind==="expr"&&a.reactive||a.kind==="component"||a.kind==="control";s.push(c?`insert(${r}, ${l}, null);`:`insert(${r}, ${l});`)}return s.push(`return ${r};`),`(() => { ${s.join(" ")} })()`}}}function z(e,t){if(!t||t.length===0)return e;let n=new Map(t.map(o=>[o.id,JSON.stringify(o.html)]));return e.replace(/_tmpl\$\d+/g,o=>n.get(o)??o)}var E={name:"imperative",contract:Q,emit(e,t){let n=new Set,o=t?.templateClone!==!1?[]:void 0;return xe=t?.partialTemplates===!0,{code:w(e,n,o),imports:Array.from(n),templates:o}}};var mt=e=>"components"in e;function Ne(e,t){return e.replace(/\$(\d+)/g,(n,o)=>t[Number(o)]??n)}function ft(e,t){return typeof t=="string"?{module:t,export:e}:t}function q(e=[]){let t=new Map,n=[],o=[];for(let i of e){if(!mt(i)){o.push(i);continue}for(let[a,l]of Object.entries(i.components)){let c=ft(a,l),u=t.get(a);if(u&&u.module!==c.module){let d=n.find(p=>p.name===a);d?d.modules.push(c.module):n.push({name:a,modules:[u.module,c.module]});continue}t.set(a,c)}}let r=new Map;return{resolve:i=>{if(r.has(i))return r.get(i);let a=t.get(i);if(!a)for(let l of o){let c=i.match(new RegExp(l.match.source,l.match.flags.replace("g","")));if(c){a={module:Ne(l.module,c),export:l.export?Ne(l.export,c):i};break}}return r.set(i,a),a},names:()=>[...t.keys()],conflicts:()=>n}}var Se=require("@fluixi/template-parser");function $(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let r=0;r<t.length;r++)/[^ \t]/.test(t[r])&&(n=r);let o="";for(let r=0;r<t.length;r++){let s=t[r].replace(/\t/g," ");r!==0&&(s=s.replace(/^ +/,"")),r!==t.length-1&&(s=s.replace(/ +$/,"")),s&&(r!==n&&(s+=" "),o+=s)}return o}var ke=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function gt(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function Ee(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ee=class{constructor(t,n){this.holes=t;this.used=n}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:o,templates:r}=E.emit(t,{});for(let s of o)this.used.add(s);return z(n,r)}lowerRoot(t){let n=this.lowerChildren(t);return n.length===1?n[0]:{kind:"fragment",children:n}}lowerChildren(t){let n=[];for(let o=0;o<t.length;o++){let r=t[o];if(r.kind==="Element"||r.kind==="Component"){let i=r.attributes.find(a=>a.kind==="IfDirective");if(i&&i.kind==="IfDirective"){let a=o+1;a<t.length&&this.isBlankText(t[a])&&a++;let l=t[a],c=l&&(l.kind==="Element"||l.kind==="Component")&&l.attributes.some(u=>u.kind==="ElseDirective");n.push(this.lowerIf(r,i.hole,c?l:null)),c&&(o=a);continue}if(r.attributes.some(a=>a.kind==="EachDirective")){n.push(this.lowerEach(r));continue}}let s=this.lowerNode(r);s&&n.push(s)}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}}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(o=>o.kind==="Attribute"&&o.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let o=t.attributes.filter(s=>s!==n),r=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:o});return r.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),r}return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,o=this.lowerAttributes(t.attributes),{slots:r,rest:s}=this.partitionSlots(t.children);for(let[l,c]of r){let u=c.length===1?c[0]:{kind:"fragment",children:c},d={name:l,kind:"attr",expr:this.emit(u),jsxElement:!0},p=o.findIndex(f=>f.name===l);p>=0?o[p]=d:o.push(d)}let i=t.attributes.find(l=>l.kind==="LoadDirective"),a=i?j(`load:${i.strategy}`,i.modifier):void 0;return{kind:"component",name:n,props:o,children:this.lowerChildren(s),...a?{load:a}:{}}}partitionSlots(t){let n=new Map,o=[];for(let r of t){if(r.kind==="Element"||r.kind==="Component"){let s=r.attributes.find(i=>i.kind==="Attribute"&&i.name==="slot");if(s&&s.value&&s.value.kind==="static"){let i={...r,attributes:r.attributes.filter(c=>c!==s)},a=i.kind==="Element"?this.lowerElement(i):this.lowerComponent(i),l=n.get(s.value.value)??[];l.push(a),n.set(s.value.value,l);continue}}o.push(r)}return{slots:n,rest:o}}lowerIf(t,n,o){let r=this.hole(n),s=[{name:"when",kind:"attr",expr:r.code,reactive:r.reactive}];if(o){let a=this.stripAndLower(o,l=>l.kind==="ElseDirective");s.push({name:"fallback",kind:"attr",expr:this.emit(a),jsxElement:!0})}let i=this.stripAndLower(t,a=>a.kind==="IfDirective");return{kind:"component",name:"Show",props:s,children:[i]}}lowerEach(t){let n=t.attributes.find(l=>l.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let o=this.hole(n.hole),r=[{name:"each",kind:"attr",expr:o.code,reactive:o.reactive}];if(n.key){let l="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;r.push({name:"by",kind:"attr",expr:l})}let s=this.itemArrow(t),i;if(s){let l={kind:"expr",code:s.body,reactive:s.bodyReactive},c=this.rebuildWithChildren(t,[l]);i=`(${s.params.join(", ")}) => (${this.emit(c)})`}else{let l=this.stripAndLower(t,c=>c.kind==="EachDirective");i=`() => (${this.emit(l)})`}return{kind:"component",name:"For",props:r,children:[{kind:"expr",code:i,reactive:!1}]}}itemArrow(t){let n=t.children.filter(o=>!this.isBlankText(o));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let o={...t,attributes:t.attributes.filter(r=>!n(r))};return o.kind==="Element"?this.lowerElement(o):this.lowerComponent(o)}rebuildWithChildren(t,n){let o=this.lowerAttributes(t.attributes.filter(r=>r.kind!=="EachDirective"));return t.kind==="Element"?{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:o,children:n,static:!1}:{kind:"component",name:t.tag,props:o,children:n}}lowerAttributes(t){let n=[],o=[],r=!1,s=[],i=!1,a=[];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});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});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(l.hole).code});break;case"ClassDirective":{let c=this.hole(l.hole);o.push(`${JSON.stringify(l.name)}: ${c.code}`),r=r||c.reactive;break}case"StyleDirective":{let c=this.hole(l.hole);s.push(`${JSON.stringify(l.name)}: ${c.code}`),i=i||c.reactive;break}case"BindDirective":n.push(...this.bindProps(l.name,this.hole(l.hole).code));break;case"UseDirective":{let c=l.name??(l.hole!=null?this.hole(l.hole).code:null);if(!c)break;a.push(l.name!=null&&l.hole!=null?`[${c}, () => (${this.hole(l.hole).code})]`:`[${c}]`);break}}return o.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${o.join(", ")} }`,reactive:r}),s.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${s.join(", ")} }`,reactive:i}),a.length>0&&n.push({name:"use",kind:"attr",expr:`[${a.join(", ")}]`}),n}eventProp(t){let n=t.name.toLowerCase(),o=this.hole(t.hole).code;if(!(t.syntax==="colon"||t.modifiers.length>0))return{name:"on"+Ee(t.name),kind:"event",event:{name:n,delegated:ke.has(n)},expr:o};let s=this.wrapHandler(o,t.modifiers),i=this.eventOptions(t.modifiers),a=i?`[${s}, ${i}]`:s;return{name:"on:"+n,kind:"attr",expr:a}}wrapHandler(t,n){let o=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",r=[];return n.includes("prevent")&&r.push("e.preventDefault();"),n.includes("stop")&&r.push("e.stopPropagation();"),!o&&r.length===0?t:`(e) => { ${o}${r.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 o=t==="checked",r=o?"change":"input",s=o?"checked":"value",i=`(${n})`;return[{name:t,kind:"attr",expr:`${i}[0]()`,reactive:!0},{name:"on"+Ee(r),kind:"event",event:{name:r,delegated:ke.has(r)},expr:`(e) => ${i}[1](e.target.${s})`}]}plainAttr(t){let n=t.value,o=t.name;t.name==="class"?o=n&&n.kind==="hole"&&this.hole(n.hole).object?"classList":"className":t.name==="html"&&(o="innerHTML");let s={name:o,kind:"attr"};if(n==null)return s.literal=!0,s;if(n.kind==="static")return s.literal=n.value,s;if(n.kind==="hole"){let l=this.hole(n.hole);return s.expr=l.code,s.reactive=l.reactive,s}let i=!1,a=n.parts.map(l=>{if("text"in l)return gt(l.text);let c=this.hole(l.hole);return i=i||c.reactive,"${"+c.code+"}"}).join("");return s.expr="`"+a+"`",s.reactive=i,s}};function be(e,t,n,o={}){let{root:r}=(0,Se.parseTemplate)(e,{svg:o.svg});return new ee(t,n).lowerRoot(r.children)}function Ce(e,t,n={}){let o=new Set,r=be(e,[...t],o,{svg:n.svg});N(r),_(r,{resolver:q(n.resolve??[]),modules:{controlFlowModule:n.controlFlowModule??"@fluixi/dom",coreModule:n.coreModule??"@fluixi/core",routerModule:n.routerModule??"@fluixi/core/router-next"},strategyFor:l=>l.load}),F(r);let{code:s,imports:i,templates:a}=E.emit(r,{templateClone:n.templateClone,partialTemplates:n.partialTemplates});for(let l of i)o.add(l);return n.hoistTemplates?{code:s,imports:[...o],ir:r,templates:a}:{code:z(s,a),imports:[...o],ir:r}}var ht="children";function S(e){switch(e.kind){case"call":return!0;case"member":return e.property!==ht;case"compound":return e.parts.some(S);case"opaque":return!1}}var vt=new Set(["CallExpression","OptionalCallExpression"]),Rt=new Set(["MemberExpression","OptionalMemberExpression"]);function R(e){if(!e)return{kind:"opaque"};if(vt.has(e.type))return{kind:"call"};if(Rt.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(O)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(O)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(O)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>O(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(O)}:{kind:"opaque"}}var O=e=>R(e);var yt=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),xt=/^on[A-Z]/,Nt=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),we=e=>S(R(e));function M(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 te=e=>!!e&&typeof M(e)=="string";function kt(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 ne(e){return e.type==="JSXIdentifier"?e.name==="class"?"className":e.name:e.type==="JSXNamespacedName"?`${e.namespace.name}:${e.name.name}`:"unknown"}function Et(e,t){let n=ne(e.name),o=xt.test(n),r=o||n.startsWith("on:")||n==="ref",i={name:n,kind:o?"event":"attr"};if(o){let l=n.slice(2).toLowerCase();i.event={name:l,delegated:Nt.has(l)}}let a=e.value;if(a==null)return i.literal=!0,i;if(te(a))return i.literal=M(a),i;if(a.type==="JSXExpressionContainer"&&a.expression?.type!=="JSXEmptyExpression"){let l=a.expression,c=M(l);return c!==void 0?(i.literal=c,i):(i.expr=t.code(l),i.reactive=r?!1:we(l),(l.type==="JSXElement"||l.type==="JSXFragment")&&(i.jsxElement=!0),i)}return i.literal=!0,i}function Ie(e,t){let n=e.value;return n==null?null:te(n)?JSON.stringify(M(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function St(e,t){let n=[],o=[];for(let r of e){if(r.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(r.argument)});continue}if(r.type!=="JSXAttribute"||G(ne(r.name)))continue;let s=r.name.type==="JSXNamespacedName"?r.name.namespace.name:null;if(s==="use"){let i=r.name.name.name;t.used.add(i);let a=Ie(r,t);o.push(a!=null?`[${i}, () => (${a})]`:`[${i}]`);continue}if(s==="oncapture"){let i=r.name.name.name.toLowerCase(),a=Ie(r,t)??"undefined";n.push({name:"on:"+i,kind:"attr",expr:`[${a}, { capture: true }]`});continue}n.push(Et(r,t))}return o.length>0&&n.push({name:"use",kind:"attr",expr:`[${o.join(", ")}]`}),n}function Te(e,t){let n=[];for(let o of e)if(o.type==="JSXText"){let r=$(o.value);r&&n.push({kind:"text",value:r})}else if(o.type==="JSXExpressionContainer"){if(o.expression?.type!=="JSXEmptyExpression"){let r=o.expression;n.push({kind:"expr",code:t.code(r),reactive:we(r)})}}else o.type==="JSXElement"||o.type==="JSXFragment"?n.push($e(o,t)):o.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(o.expression),reactive:!1});return n}function bt(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=ne(t.name);if(G(n)){if(t.value&&!te(t.value))throw new v(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return j(n,t.value?M(t.value):null)}}}function $e(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:Te(e.children,t)};let{tag:n,component:o}=kt(e.openingElement.name,t),r=St(e.openingElement.attributes,t),s=Te(e.children,t);if(o){let i=bt(e.openingElement.attributes);return{kind:"component",name:n,props:r,children:s,...i?{load:i}:{}}}return{kind:"element",tag:n,svg:yt.has(n),props:r,children:s,static:!1}}function Oe(e,t){let n=$e(e,t);return N(n),n}function y(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"?y(n.argument,t):y(n.value,t);return;case"ArrayPattern":for(let n of e.elements)y(n,t);return;case"AssignmentPattern":y(e.left,t);return;case"RestElement":y(e.argument,t);return}}function Me(e,t){switch(e.type){case"ImportDeclaration":for(let n of e.specifiers)y(n.local,t);return;case"VariableDeclaration":for(let n of e.declarations)y(n.id,t);return;case"FunctionDeclaration":case"ClassDeclaration":y(e.id,t);return;case"ExportNamedDeclaration":case"ExportDefaultDeclaration":e.declaration&&Me(e.declaration,t);return}}function V(e){let t=new Set;for(let n of e.body)Me(n,t);return t}var Ct=new Set(b),It=new Set(C),Tt=new Set(k),wt=new Set(["createMemo","createEffect","createRenderEffect","createRoot","createSignal","onCleanup","batch","untrack"]);function re(e,t,n=null,o=""){if(!(!e||typeof e!="object")){if(Array.isArray(e)){for(let r of e)re(r,t,n,o);return}typeof e.type=="string"&&t(e,n,o);for(let r of Object.keys(e))r==="loc"||r==="leadingComments"||r==="trailingComments"||re(e[r],t,typeof e.type=="string"?e:n,r)}}var oe=e=>e.type==="JSXElement"||e.type==="JSXFragment";function $t(e,t,n){return oe(e)?!(t&&oe(t)&&n==="children"):!1}function Ot(e,t){return e.type==="TaggedTemplateExpression"&&e.tag?.type==="Identifier"&&(e.tag.name===t||e.tag.name==="svg")}function Le(e){return e.filter(t=>!e.some(n=>n!==t&&n.start<=t.start&&n.end>=t.end&&n.end-n.start>t.end-t.start))}function W(e,t,n,o){let r=Le(o.filter(i=>i.start>=t&&i.end<=n)).sort((i,a)=>a.start-i.start),s=e.slice(t,n);for(let i of r)s=s.slice(0,i.start-t)+i.code+s.slice(i.end-t);return s}function Mt(e,t,n){let o={code:W(e,t.start,t.end,n),reactive:S(R(t))};return t.type==="ArrowFunctionExpression"&&t.body?.type!=="BlockStatement"&&(o.arrow={params:t.params.map(r=>W(e,r.start,r.end,n)),body:W(e,t.body.start,t.body.end,n),bodyReactive:S(R(t.body))}),t.type==="ObjectExpression"&&(o.object=!0),o}function Je(e,t,n){if(!t||t.length===0)return e;let o=new Map;for(let r of t){let s=`${r.svg?"svg:":""}${r.html}`,i=n.get(s);i||(i=`_fxTmpl$${n.size}`,n.set(s,i)),o.set(r.id,i)}return e.replace(/_tmpl\$\d+/g,r=>o.get(r)??r)}function ie(e,t){if(e.kind==="component"&&e.source){let n=e.source;n.origin==="builtin"?t.builtins.add(e.name):D(n.loading)&&!t.resolved.has(e.name)?t.deferred.set(e.name,n):(t.deferred.delete(e.name),t.resolved.set(e.name,n))}if("props"in e&&e.props)for(let n of e.props)n.kind==="event"&&n.event?.delegated&&t.delegatedEvents.add(n.event.name);if("children"in e&&e.children)for(let n of e.children)ie(n,t)}function Pt(e){let t=[`kind: ${JSON.stringify(e.kind)}`];return e.kind==="visible"&&e.rootMargin&&t.push(`rootMargin: ${JSON.stringify(e.rootMargin)}`),e.kind==="interaction"&&t.push(`events: ${JSON.stringify(e.events)}`),e.kind==="media"&&t.push(`query: ${JSON.stringify(e.query)}`),`{ ${t.join(", ")} }`}function At(e){let t=[];return e.quasi.quasis.forEach((n,o)=>{if(t.push({kind:"static",text:n.value.cooked??n.value.raw,start:n.start}),o<e.quasi.expressions.length){let r=e.quasi.expressions[o];t.push({kind:"hole",index:o,start:r.start,end:r.end})}}),t}function je(e,t,n={}){let o=n.litTag??"html",r=n.format??"both",s=r!=="jsx",i=r!=="lit";if(!(s&&(e.includes(`${o}\``)||e.includes("svg`")))&&!(i&&e.includes("<")))return null;let l=(0,Pe.parse)(e,{sourceType:"module",plugins:["jsx","typescript"],errorRecovery:!0}),c=[];if(re(l.program,(m,x,U)=>{(s&&Ot(m,o)||i&&$t(m,x,U))&&c.push(m)}),c.length===0)return null;c.sort((m,x)=>x.start-m.start||m.end-x.end);let u=new Set,d={builtins:new Set,resolved:new Map,deferred:new Map,delegatedEvents:new Set},p=new Map,f=[];for(let m of c){let x=c.some(h=>h!==m&&h.start<=m.start&&h.end>=m.end&&h.end-h.start>m.end-m.start);if(oe(m)){f.push({start:m.start,end:m.end,code:Lt(e,m,f,x,u,d,p,n)});continue}let U=m.quasi.expressions.map(h=>Mt(e,h,f)),A=Ce(At(m),U,{...n,hoistTemplates:!0,templateClone:n.templateClone??!0,partialTemplates:x?!1:n.partialTemplates??!0,svg:m.tag.name==="svg"});for(let h of A.imports)u.add(h);ie(A.ir,d),f.push({start:m.start,end:m.end,code:Je(A.code,A.templates,p)})}let g=new Ae.default(e);for(let m of Le(f))g.overwrite(m.start,m.end,m.code);let P=V(l.program),se=Jt(u,d,p,P,n);se&&g.prepend(se);for(let m of l.program.body)m.type==="ImportDeclaration"&&m.source?.value==="@fluixi/core/rx"&&g.overwrite(m.source.start,m.source.end,JSON.stringify("@fluixi/reactive"));return{code:g.toString(),map:g.generateMap({source:t,includeContent:!0,hires:!0})}}function Lt(e,t,n,o,r,s,i,a){let l=Oe(t,{code:u=>W(e,u.start,u.end,n),used:r});N(l),_(l,{resolver:q(a.resolve??[]),modules:{controlFlowModule:a.controlFlowModule??a.runtimeModule??"@fluixi/dom",coreModule:a.coreModule??"@fluixi/core",routerModule:a.routerModule??"@fluixi/core/router-next"},strategyFor:u=>u.load}),F(l);let c=E.emit(l,{templateClone:a.templateClone??!0,partialTemplates:o?!1:a.partialTemplates??!0});for(let u of c.imports)r.add(u);return ie(l,s),Je(c.code,c.templates,i)}function Jt(e,t,n,o,r){let s=r.runtimeModule??"@fluixi/dom",i=r.coreModule??"@fluixi/core",a=new Map,l=(p,f)=>a.set(p,[...a.get(p)??[],f]),c=new Set(e);for(let p of t.builtins)c.add(p);t.delegatedEvents.size>0&&c.add("delegateEvents");for(let p of[...c].sort())o.has(p)||(wt.has(p)?l(r.reactiveModule??"@fluixi/reactive/signal",p):Tt.has(p)?l(r.routerModule??"@fluixi/core/router-next",p):It.has(p)?l(i,p):Ct.has(p)?l(r.controlFlowModule??s,p):l(s,p));for(let[p,f]of t.resolved)o.has(p)||l(f.module,f.export==="default"?`default as ${p}`:p===f.export?p:`${f.export} as ${p}`);let u=[];for(let[p,f]of a)u.push(`import { ${f.join(", ")} } from ${JSON.stringify(p)};`);let d=[...t.deferred].filter(([p])=>!o.has(p));if(d.length>0){o.has("deferred")||u.push(`import { deferred } from ${JSON.stringify(i)};`);for(let[p,f]of d)u.push(`const ${p} = deferred(() => import(${JSON.stringify(f.module)}), { strategy: ${Pt(f.loading)}, export: ${JSON.stringify(f.export)} });`)}for(let[p,f]of n)u.push(`const ${f} = ${JSON.stringify(p.startsWith("svg:")?p.slice(4):p)};`);return t.delegatedEvents.size>0&&u.push(`delegateEvents(${JSON.stringify([...t.delegatedEvents])});`),u.length>0?u.join(`
|
|
1
|
+
"use strict";var mt=Object.create;var z=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var yt=Object.getPrototypeOf,Nt=Object.prototype.hasOwnProperty;var vt=(e,t)=>{for(var n in t)z(e,n,{get:t[n],enumerable:!0})},Se=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ht(t))!Nt.call(e,s)&&s!==n&&z(e,s,{get:()=>t[s],enumerable:!(r=gt(t,s))||r.enumerable});return e};var Ee=(e,t,n)=>(n=e!=null?mt(yt(e)):{},Se(t||!e||!e.__esModule?z(n,"default",{value:e,enumerable:!0}):n,e)),xt=e=>Se(z({},"__esModule",{value:!0}),e);var bn={};vt(bn,{explainBail:()=>se,moduleBindings:()=>O,planPropsDestructure:()=>re,shapeOf:()=>S,transformProps:()=>tt,transformTemplates:()=>ft});module.exports=xt(bn);var ct=require("@babel/parser"),pt=Ee(require("magic-string"),1);function Rt(e){switch(e.kind){case"event":return"event";case"ref":return"ref";case"spread":return"spread";case"class":case"style":return"class-or-style-directive";case"attr":case"prop":return e.reactive?"reactive-prop":e.expr!==void 0?"expression-prop":void 0;default:return"expression-prop"}}function T(e){let t=[],n=new Map,r=s=>{switch(s.kind){case"text":return!0;case"expr":return!1;case"component":case"control":for(let i of s.children)r(i);return!1;case"fragment":for(let i of s.children)r(i);return!1;case"element":{let i=!0;for(let o of s.children)r(o)||(i=!1);let a;for(let o of s.props)if(a=Rt(o),a)break;return!a&&!i&&(a=kt(s)),s.static=!a,a?n.set(s,a):t.push(s),s.static}default:return!1}};for(let s of Array.isArray(e)?e:[e])r(s);return{staticElements:t,reasons:n}}function kt(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 U={kind:"eager"},bt=["pointerdown","focusin","keydown"],Ie=new Set(["eager","idle","visible","interaction","media","never"]),b=class extends Error{};function le(e){return e.startsWith("load:")}function W(e,t){let n=e.slice(5);if(!Ie.has(n))throw new b(`Unknown load strategy 'load:${n}'. Expected one of ${[...Ie].join(", ")}.`);switch(n){case"eager":return U;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?St(t):[...bt]};case"media":if(!t)throw new b(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:t};default:throw new b(`Unhandled load strategy '${n}'.`)}}function St(e){let t=e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new b("'load:interaction' was given no event names.");return t}function q(e){return e.kind!=="eager"&&e.kind!=="never"}var D=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],A=["Suspense","SuspenseList","Await"],$=["Router","Outlet","Redirect","Link"],wn=[...D,...A,...$],ce=new Set([...D,...A]);function we(e={}){let{controlFlowModule:t="@fluixi/dom",coreModule:n="@fluixi/core",routerModule:r="@fluixi/core/router-next"}=e,s={};for(let i of D)s[i]=t;for(let i of A)s[i]=n;for(let i of $)s[i]=r;return s}function K(e,t={}){let{resolver:n,isBound:r,modules:s,strategyFor:i}=t,a=we(s),o=new Map,l=new Set,c=d=>{let{name:u}=d;if(!u||u.includes(".")||r?.(u))return;let g=p(u);if(!g){l.add(u);return}let f=g.origin==="builtin"&&ce.has(u)?U:i?.(d)??U;d.source={...g,loading:f},o.set(u,d.source)},p=d=>{if(ce.has(d))return{module:a[d],export:d,origin:"builtin"};let u=n?.resolve(d);if(u)return{module:u.module,export:u.export,origin:"rule"};if($.includes(d))return{module:a[d],export:d,origin:"builtin"}};return G(e,d=>{d.kind==="component"&&c(d)}),{resolved:o,unresolved:[...l]}}function G(e,t){let n=Array.isArray(e)?e:[e];for(let r of n){t(r);let s=r.children;s&&G(s,t)}}function Z(e){let t=[];G(e,i=>{i.kind==="component"&&i.source&&t.push(i)});let n=new Set,r=new Set;for(let i of t){let{module:a,loading:o}=i.source;o.kind==="eager"&&n.add(a),o.kind==="never"&&r.add(a)}let s=new Map;for(let i of t){let a=i.source;q(a.loading)&&n.has(a.module)&&(a.loading={kind:"eager"},s.set(a.module,(s.get(a.module)??0)+1))}return{collapsed:s,conflicted:[...r].filter(i=>n.has(i))}}var Et=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),Ce={className:"class",htmlFor:"for"},It=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),wt=new Set(["script","style","textarea","title"]);function pe(e){return wt.has(e)}function Te(e){return Ce[e]??e}function j(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!It.has(e.name)}function ue(e){if(!e.static||pe(e.tag))return!1;for(let t of e.props)if(!j(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&ue(t)))return!1;return!0}function L(e){let t=e.props.map(Tt).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return Et.has(e.tag)?n:`${n}${e.children.map(Ct).join("")}</${e.tag}>`}function Ct(e){if(e.kind==="text")return Pt(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return L(e)}function Tt(e){let t=Ce[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${$t(String(n))}"`}function $t(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Pt(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var Mt="<!--fx-->",Ot="<!--fx/-->";function Q(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Dt(e){return e.kind==="text"||e.kind==="element"&&$e(e)}function $e(e){return e.svg||pe(e.tag)||!e.props.every(t=>j(t))?!1:e.children.every(t=>Dt(t)||Q(t))}function Y(e){if(Q(e))return!0;let t=e.children;return t?t.some(Y):!1}function Pe(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"||Pe(t))}function Me(e){if(!$e(e)||!Pe(e)||!e.children.some(Y))return null;let t=[],n=[],r=0,s=a=>{let o=`_n$${r++}`;return t.push({ref:o,expr:a}),o};return i(e,"_el$"),{html:At(e),tag:e.tag,steps:t,holes:n};function i(a,o){let l=-1;a.children.forEach((p,d)=>{Y(p)&&(l=d)});let c=null;for(let p=0;p<=l;p++){let d=a.children[p],u=c?`${c}.nextSibling`:`${o}.firstChild`;if(Q(d)){let f=s(u),h=s(`holeEnd(${f})`);n.push({parentRef:o,startRef:f,endRef:h,node:d}),c=h;continue}let g=s(u);d.kind==="element"&&Y(d)&&i(d,g),c=g}}}function At(e){return L(Oe(e)).split(De).join(Mt+Ot)}function Oe(e){return{...e,children:e.children.map(t=>Q(t)?{kind:"text",value:De}:t.kind==="element"?Oe(t):t)}}var De="\0fx-hole\0";var de={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},Jn={version:2,module:"@fluixi/dom",symbols:[...de.symbols,"template","cloneTemplate","walk"]};var jt={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function Lt(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function je(e){return Lt(e)?e:JSON.stringify(e)}function Jt(e){return e.expr!==void 0?e.reactive?`() => (${e.expr})`:`(${e.expr})`:JSON.stringify(e.literal??!0)}function Bt(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function _t(e,t,n){let r=e.filter(o=>o.kind==="spread"),i=e.filter(o=>o.kind!=="spread").map(o=>`${je(o.name)}: ${Jt(o)}`);t!=null&&i.push(`children: ${t}`);let a=`{ ${i.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(o=>o.expr).join(", ")}, ${a})`):a}function Le(e,t,n){return e.length===1?J(e[0],t,n):`[${e.map(r=>J(r,t,n)).join(", ")}]`}function Ae(e,t,n,r,s){r.add("createMemo"),r.add("createComponent");let i=t.filter(c=>c.kind==="spread"),o=t.filter(c=>c.kind!=="spread").map(c=>`get ${je(c.name)}() { return ${Bt(c)}; }`);n.length>0&&o.push(`get children() { return ${Le(n,r,s)}; }`);let l=`{ ${o.join(", ")} }`;return i.length>0&&(r.add("mergeProps"),l=`mergeProps(${i.map(c=>c.expr).join(", ")}, ${l})`),`createMemo(() => createComponent(${e}, ${l}))`}function Ft(e,t){let n=Te(t.name),r=t.literal;return r===!0||r===void 0?`${e}.setAttribute(${JSON.stringify(n)}, "");`:r===!1||r===null?"":`${e}.setAttribute(${JSON.stringify(n)}, ${JSON.stringify(String(r))});`}var Je=!1;function J(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":return e.reactive?`() => (${e.code})`:`(${e.code})`;case"fragment":return e.children.length===0?"null":Le(e.children,t,n);case"component":return Ae(e.name,e.props,e.children,t,n);case"control":{let r=jt[e.control]??e.control;return t.add(r),Ae(r,e.props,e.children,t,n)}case"element":{if(n&&e.static&&!e.svg&&ue(e)){t.add("templateNode");let o=`_tmpl$${n.length}`;return n.push({id:o,html:L(e),tag:e.tag,svg:!1}),`templateNode(${o}, ${JSON.stringify(e.tag)})`}if(n&&Je){let o=Me(e);if(o){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let l=`_tmpl$${n.length}`;n.push({id:l,html:o.html,tag:o.tag,svg:!1});let c=[`const _el$ = templateNode(${l}, ${JSON.stringify(o.tag)}, true);`];for(let p of o.steps)c.push(`const ${p.ref} = ${p.expr};`);for(let p of o.holes)c.push(`insert(${p.parentRef}, holeScope(${p.startRef}, () => (${J(p.node,t,n)})), ${p.endRef}, holeContent(${p.startRef}, ${p.endRef}));`);return c.push("return _el$;"),`(() => { ${c.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),s="_el$",i=[],a=e.svg?`${r}, true`:r;if(i.push(`const ${s} = createNativeElement(${a});`),e.props.length>0)if(!e.svg&&e.props.every(j))for(let o of e.props)i.push(Ft(s,o));else{t.add("spread");let o=e.svg?", isSVG: true":"";i.push(`spread({ element: ${s}, props: ${_t(e.props,null,t)}${o} });`)}for(let o of e.children){t.add("insert");let l=J(o,t,n),c=o.kind==="expr"&&o.reactive||o.kind==="component"||o.kind==="control";i.push(c?`insert(${s}, ${l}, null);`:`insert(${s}, ${l});`)}return i.push(`return ${s};`),`(() => { ${i.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 P={name:"imperative",contract:de,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return Je=t?.partialTemplates===!0,{code:J(e,n,r),imports:Array.from(n),templates:r}}};var Ht=e=>"components"in e;function Be(e,t){return e.replace(/\$(\d+)/g,(n,r)=>t[Number(r)]??n)}function Xt(e,t){return typeof t=="string"?{module:t,export:e}:t}function te(e=[]){let t=new Map,n=[],r=[];for(let a of e){if(!Ht(a)){r.push(a);continue}for(let[o,l]of Object.entries(a.components)){let c=Xt(o,l),p=t.get(o);if(p&&p.module!==c.module){let d=n.find(u=>u.name===o);d?d.modules.push(c.module):n.push({name:o,modules:[p.module,c.module]});continue}t.set(o,c)}}let s=new Map;return{resolve:a=>{if(s.has(a))return s.get(a);let o=t.get(a);if(!o)for(let l of r){let c=a.match(new RegExp(l.match.source,l.match.flags.replace("g","")));if(c){o={module:Be(l.module,c),export:l.export?Be(l.export,c):a};break}}return s.set(a,o),o},names:()=>[...t.keys()],conflicts:()=>n}}var He=require("@fluixi/template-parser");function B(e){let t=e.split(/\r\n|\n|\r/),n=0;for(let s=0;s<t.length;s++)/[^ \t]/.test(t[s])&&(n=s);let r="";for(let s=0;s<t.length;s++){let i=t[s].replace(/\t/g," ");s!==0&&(i=i.replace(/^ +/,"")),s!==t.length-1&&(i=i.replace(/ +$/,"")),i&&(s!==n&&(i+=" "),r+=i)}return r}var _e=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]);function Vt(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/g,"\\${")}function Fe(e){return e.charAt(0).toUpperCase()+e.slice(1)}var fe=class{constructor(t,n){this.holes=t;this.used=n}hole(t){return this.holes[t]??{code:"undefined",reactive:!1}}emit(t){let{code:n,imports:r,templates:s}=P.emit(t,{});for(let i of r)this.used.add(i);return ee(n,s)}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 s=t[r];if(s.kind==="Element"||s.kind==="Component"){let a=s.attributes.find(o=>o.kind==="IfDirective");if(a&&a.kind==="IfDirective"){let o=r+1;o<t.length&&this.isBlankText(t[o])&&o++;let l=t[o],c=l&&(l.kind==="Element"||l.kind==="Component")&&l.attributes.some(p=>p.kind==="ElseDirective");n.push(this.lowerIf(s,a.hole,c?l:null)),c&&(r=o);continue}if(s.attributes.some(o=>o.kind==="EachDirective")){n.push(this.lowerEach(s));continue}}let i=this.lowerNode(s);i&&n.push(i)}return n}isBlankText(t){return t.kind==="Text"&&!t.raw&&B(t.value)===""}lowerNode(t){switch(t.kind){case"Text":{if(t.raw)return{kind:"text",value:t.value};let n=B(t.value);return n?{kind:"text",value:n}:null}case"Comment":return null;case"Expression":{let n=this.hole(t.hole);return{kind:"expr",code:n.code,reactive:n.reactive}}case"Fragment":return{kind:"fragment",children:this.lowerChildren(t.children)};case"Element":return this.lowerElement(t);case"Component":return this.lowerComponent(t);default:return null}}lowerElement(t){let n=t.attributes.find(r=>r.kind==="Attribute"&&r.name==="is");if(t.tag==="component"&&n&&n.value&&n.value.kind==="hole"){let r=t.attributes.filter(i=>i!==n),s=this.lowerComponent({...t,kind:"Component",tag:"Dynamic",tagHole:null,attributes:r});return s.props.unshift({name:"component",kind:"attr",expr:`() => (${this.hole(n.value.hole).code})`}),s}return{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:this.lowerAttributes(t.attributes),children:this.lowerChildren(t.children),static:!1}}lowerComponent(t){let n=t.tagHole!=null?this.hole(t.tagHole).code:t.tag,r=this.lowerAttributes(t.attributes),{slots:s,rest:i}=this.partitionSlots(t.children);for(let[l,c]of s){let p=c.length===1?c[0]:{kind:"fragment",children:c},d={name:l,kind:"attr",expr:this.emit(p),jsxElement:!0},u=r.findIndex(g=>g.name===l);u>=0?r[u]=d:r.push(d)}let a=t.attributes.find(l=>l.kind==="LoadDirective"),o=a?W(`load:${a.strategy}`,a.modifier):void 0;return{kind:"component",name:n,props:r,children:this.lowerChildren(i),...o?{load:o}:{}}}partitionSlots(t){let n=new Map,r=[];for(let s of t){if(s.kind==="Element"||s.kind==="Component"){let i=s.attributes.find(a=>a.kind==="Attribute"&&a.name==="slot");if(i&&i.value&&i.value.kind==="static"){let a={...s,attributes:s.attributes.filter(c=>c!==i)},o=a.kind==="Element"?this.lowerElement(a):this.lowerComponent(a),l=n.get(i.value.value)??[];l.push(o),n.set(i.value.value,l);continue}}r.push(s)}return{slots:n,rest:r}}lowerIf(t,n,r){let s=this.hole(n),i=[{name:"when",kind:"attr",expr:s.code,reactive:s.reactive}];if(r){let o=this.stripAndLower(r,l=>l.kind==="ElseDirective");i.push({name:"fallback",kind:"attr",expr:this.emit(o),jsxElement:!0})}let a=this.stripAndLower(t,o=>o.kind==="IfDirective");return{kind:"component",name:"Show",props:i,children:[a]}}lowerEach(t){let n=t.attributes.find(l=>l.kind==="EachDirective");if(!n||n.kind!=="EachDirective")return this.lowerNode(t);let r=this.hole(n.hole),s=[{name:"each",kind:"attr",expr:r.code,reactive:r.reactive}];if(n.key){let l="static"in n.key?`(item) => item[${JSON.stringify(n.key.static)}]`:this.hole(n.key.hole).code;s.push({name:"by",kind:"attr",expr:l})}let i=this.itemArrow(t),a;if(i){let l={kind:"expr",code:i.body,reactive:i.bodyReactive},c=this.rebuildWithChildren(t,[l]);a=`(${i.params.join(", ")}) => (${this.emit(c)})`}else{let l=this.stripAndLower(t,c=>c.kind==="EachDirective");a=`() => (${this.emit(l)})`}return{kind:"component",name:"For",props:s,children:[{kind:"expr",code:a,reactive:!1}]}}itemArrow(t){let n=t.children.filter(r=>!this.isBlankText(r));return n.length!==1||n[0].kind!=="Expression"?null:this.hole(n[0].hole).arrow??null}stripAndLower(t,n){let r={...t,attributes:t.attributes.filter(s=>!n(s))};return r.kind==="Element"?this.lowerElement(r):this.lowerComponent(r)}rebuildWithChildren(t,n){let r=this.lowerAttributes(t.attributes.filter(s=>s.kind!=="EachDirective"));return t.kind==="Element"?{kind:"element",tag:t.tag,svg:t.namespace==="svg",props:r,children:n,static:!1}:{kind:"component",name:t.tag,props:r,children:n}}lowerAttributes(t){let n=[],r=[],s=!1,i=[],a=!1,o=[];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});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});break;case"Spread":n.push({name:"",kind:"spread",expr:this.hole(l.hole).code});break;case"ClassDirective":{let c=this.hole(l.hole);r.push(`${JSON.stringify(l.name)}: ${c.code}`),s=s||c.reactive;break}case"StyleDirective":{let c=this.hole(l.hole);i.push(`${JSON.stringify(l.name)}: ${c.code}`),a=a||c.reactive;break}case"BindDirective":n.push(...this.bindProps(l.name,this.hole(l.hole).code));break;case"UseDirective":{let c=l.name??(l.hole!=null?this.hole(l.hole).code:null);if(!c)break;o.push(l.name!=null&&l.hole!=null?`[${c}, () => (${this.hole(l.hole).code})]`:`[${c}]`);break}}return r.length>0&&n.push({name:"classList",kind:"attr",expr:`{ ${r.join(", ")} }`,reactive:s}),i.length>0&&n.push({name:"style",kind:"attr",expr:`{ ${i.join(", ")} }`,reactive:a}),o.length>0&&n.push({name:"use",kind:"attr",expr:`[${o.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"+Fe(t.name),kind:"event",event:{name:n,delegated:_e.has(n)},expr:r};let i=this.wrapHandler(r,t.modifiers),a=this.eventOptions(t.modifiers),o=a?`[${i}, ${a}]`:i;return{name:"on:"+n,kind:"attr",expr:o}}wrapHandler(t,n){let r=n.includes("self")?"if (e.target !== e.currentTarget) return; ":"",s=[];return n.includes("prevent")&&s.push("e.preventDefault();"),n.includes("stop")&&s.push("e.stopPropagation();"),!r&&s.length===0?t:`(e) => { ${r}${s.join(" ")} return (${t})(e); }`}eventOptions(t){let n=[];return t.includes("capture")&&n.push("capture: true"),t.includes("once")&&n.push("once: true"),t.includes("passive")&&n.push("passive: true"),n.length?`{ ${n.join(", ")} }`:null}bindProps(t,n){let r=t==="checked",s=r?"change":"input",i=r?"checked":"value";this.used.add("bindPair");let a=`bindPair(${n})`;return[{name:t,kind:"attr",expr:`${a}[0]()`,reactive:!0},{name:"on"+Fe(s),kind:"event",event:{name:s,delegated:_e.has(s)},expr:`(e) => ${a}[1](e.target.${i})`}]}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 i={name:r,kind:"attr"};if(n==null)return i.literal=!0,i;if(n.kind==="static")return i.literal=n.value,i;if(n.kind==="hole"){let l=this.hole(n.hole);return i.expr=l.code,i.reactive=l.reactive,i}let a=!1,o=n.parts.map(l=>{if("text"in l)return Vt(l.text);let c=this.hole(l.hole);return a=a||c.reactive,"${"+c.code+"}"}).join("");return i.expr="`"+o+"`",i.reactive=a,i}};function Xe(e,t,n,r={}){let{root:s}=(0,He.parseTemplate)(e,{svg:r.svg});return new fe(t,n).lowerRoot(s.children)}function Ve(e,t,n={}){let r=new Set,s=Xe(e,[...t],r,{svg:n.svg});T(s),K(s,{resolver:te(n.resolve??[]),modules:{controlFlowModule:n.controlFlowModule??"@fluixi/dom",coreModule:n.coreModule??"@fluixi/core",routerModule:n.routerModule??"@fluixi/core/router-next"},strategyFor:l=>l.load}),Z(s);let{code:i,imports:a,templates:o}=P.emit(s,{templateClone:n.templateClone,partialTemplates:n.partialTemplates});for(let l of a)r.add(l);return n.hoistTemplates?{code:i,imports:[...r],ir:s,templates:o}:{code:ee(i,o),imports:[...r],ir:s}}var zt="children";function M(e){switch(e.kind){case"call":return!0;case"member":return e.property!==zt;case"compound":return e.parts.some(M);case"opaque":return!1}}var Ut=new Set(["CallExpression","OptionalCallExpression"]),Wt=new Set(["MemberExpression","OptionalMemberExpression"]);function S(e){if(!e)return{kind:"opaque"};if(Ut.has(e.type))return{kind:"call"};if(Wt.has(e.type)){let t=e.property;return{kind:"member",property:!(e.computed===!0)&&t?.type==="Identifier"?t.name:null}}return e.type==="ConditionalExpression"?{kind:"compound",parts:[e.test,e.consequent,e.alternate].map(_)}:e.type==="LogicalExpression"||e.type==="BinaryExpression"?{kind:"compound",parts:[e.left,e.right].map(_)}:e.type==="TemplateLiteral"?{kind:"compound",parts:e.expressions.map(_)}:e.type==="ObjectExpression"?{kind:"compound",parts:e.properties.filter(n=>(n.type==="ObjectProperty"||n.type==="Property")&&n.computed!==!0).map(n=>_(n.value))}:e.type==="ArrayExpression"?{kind:"compound",parts:e.elements.filter(n=>n!=null&&n.type!=="SpreadElement").map(_)}:{kind:"opaque"}}var _=e=>S(e);var qt=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","defs","clipPath","text"]),Kt=/^on[A-Z]/,Gt=new Set(["click","dblclick","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup"]),We=e=>M(S(e));function F(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 me=e=>!!e&&typeof F(e)=="string";function Zt(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 ge(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=ge(e.name),r=Kt.test(n),s=r||n.startsWith("on:")||n==="ref",a={name:n,kind:r?"event":"attr"};if(r){let l=n.slice(2).toLowerCase();a.event={name:l,delegated:Gt.has(l)}}let o=e.value;if(o==null)return a.literal=!0,a;if(me(o))return a.literal=F(o),a;if(o.type==="JSXExpressionContainer"&&o.expression?.type!=="JSXEmptyExpression"){let l=o.expression,c=F(l);return c!==void 0?(a.literal=c,a):(a.expr=t.code(l),a.reactive=s?!1:We(l),(l.type==="JSXElement"||l.type==="JSXFragment")&&(a.jsxElement=!0),a)}return a.literal=!0,a}function ze(e,t){let n=e.value;return n==null?null:me(n)?JSON.stringify(F(n)):n.type==="JSXExpressionContainer"&&n.expression?.type!=="JSXEmptyExpression"?t.code(n.expression):null}function Qt(e,t){let n=[],r=[];for(let s of e){if(s.type==="JSXSpreadAttribute"){n.push({name:"",kind:"spread",expr:t.code(s.argument)});continue}if(s.type!=="JSXAttribute"||le(ge(s.name)))continue;let i=s.name.type==="JSXNamespacedName"?s.name.namespace.name:null;if(i==="use"){let a=s.name.name.name;t.used.add(a);let o=ze(s,t);r.push(o!=null?`[${a}, () => (${o})]`:`[${a}]`);continue}if(i==="oncapture"){let a=s.name.name.name.toLowerCase(),o=ze(s,t)??"undefined";n.push({name:"on:"+a,kind:"attr",expr:`[${o}, { capture: true }]`});continue}n.push(Yt(s,t))}return r.length>0&&n.push({name:"use",kind:"attr",expr:`[${r.join(", ")}]`}),n}function Ue(e,t){let n=[];for(let r of e)if(r.type==="JSXText"){let s=B(r.value);s&&n.push({kind:"text",value:s})}else if(r.type==="JSXExpressionContainer"){if(r.expression?.type!=="JSXEmptyExpression"){let s=r.expression;n.push({kind:"expr",code:t.code(s),reactive:We(s)})}}else r.type==="JSXElement"||r.type==="JSXFragment"?n.push(qe(r,t)):r.type==="JSXSpreadChild"&&n.push({kind:"expr",code:t.code(r.expression),reactive:!1});return n}function en(e){for(let t of e){if(t.type!=="JSXAttribute")continue;let n=ge(t.name);if(le(n)){if(t.value&&!me(t.value))throw new b(`'${n}' needs a literal value, not an expression — the strategy is compile-time.`);return W(n,t.value?F(t.value):null)}}}function qe(e,t){if(e.type==="JSXFragment")return{kind:"fragment",children:Ue(e.children,t)};let{tag:n,component:r}=Zt(e.openingElement.name,t),s=Qt(e.openingElement.attributes,t),i=Ue(e.children,t);if(r){let a=en(e.openingElement.attributes);return{kind:"component",name:n,props:s,children:i,...a?{load:a}:{}}}return{kind:"element",tag:n,svg:qt.has(n),props:s,children:i,static:!1}}function Ke(e,t){let n=qe(e,t);return T(n),n}function E(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"?E(n.argument,t):E(n.value,t);return;case"ArrayPattern":for(let n of e.elements)E(n,t);return;case"AssignmentPattern":E(e.left,t);return;case"RestElement":E(e.argument,t);return}}function Ge(e,t){switch(e.type){case"ImportDeclaration":for(let n of e.specifiers)E(n.local,t);return;case"VariableDeclaration":for(let n of e.declarations)E(n.id,t);return;case"FunctionDeclaration":case"ClassDeclaration":E(e.id,t);return;case"ExportNamedDeclaration":case"ExportDefaultDeclaration":e.declaration&&Ge(e.declaration,t);return}}function O(e){let t=new Set;for(let n of e.body)Ge(n,t);return t}var Qe=require("@babel/parser"),et=Ee(require("magic-string"),1);function N(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"?N(n.argument,t):N(n.value,t);return;case"ArrayPattern":for(let n of e.elements)N(n,t);return;case"AssignmentPattern":N(e.left,t);return;case"RestElement":N(e.argument,t);return}}function he(e){switch(e.type){case"StringLiteral":case"NumericLiteral":case"BooleanLiteral":case"NullLiteral":case"BigIntLiteral":case"RegExpLiteral":case"Identifier":return!0;case"Literal":return!0;case"TemplateLiteral":return e.expressions.every(he);case"UnaryExpression":return he(e.argument);case"MemberExpression":return!1;default:return!1}}function ne(e,t){if(!(!e||typeof e!="object")){t(e);for(let n of Object.keys(e)){if(n==="loc"||n==="range"||n==="leadingComments"||n==="trailingComments")continue;let r=e[n];if(Array.isArray(r))for(let s of r)s&&typeof s=="object"&&ne(s,t);else r&&typeof r=="object"&&typeof r.type=="string"&&ne(r,t)}}}function tn(e){let t=new Set;return ne(e,n=>{if(n.type==="AssignmentExpression")N(n.left,t);else if(n.type==="UpdateExpression"){let r=n.argument;r?.type==="Identifier"&&t.add(r.name)}}),t}function nn(e,t){let n=new Set,r=s=>{let i=new Set;N(s,i);for(let a of i)t.has(a)&&n.add(a)};return ne(e,s=>{switch(s.type){case"VariableDeclarator":r(s.id);return;case"FunctionDeclaration":case"FunctionExpression":case"ArrowFunctionExpression":r(s.id);for(let i of s.params??[])r(i);return;case"CatchClause":r(s.param);return;case"ClassDeclaration":case"ClassExpression":r(s.id);return}}),n}function Ze(e,t,n){for(let r of e.properties??[]){if(r.type==="RestElement"){let p=r.argument;if(p?.type!=="Identifier"||t.length>0){let d=new Set;N(p,d);for(let u of d)n.bails.push({name:u,reason:"rest"});continue}n.rest={name:p.name,keys:[]};continue}if(r.computed){let p=new Set;N(r.value,p);for(let d of p)n.bails.push({name:d,reason:"computed"});continue}let s=r.key,i=s.type==="Identifier"?s.name:s.value,a=r.value,o;a.type==="AssignmentPattern"&&(o=a.right,a=a.left);let l=[...t,i];if(a.type==="Identifier"){if(o&&!he(o)){n.bails.push({name:a.name,reason:"unsafe-default"});continue}n.reads.push({name:a.name,path:l,...o?{fallback:o}:{}});continue}if(a.type==="ObjectPattern"){if(o){let p=new Set;N(a,p);for(let d of p)n.bails.push({name:d,reason:"unsafe-default"});continue}Ze(a,l,n);continue}let c=new Set;N(a,c);for(let p of c)n.bails.push({name:p,reason:"computed"})}}function re(e,t){let n={reads:[],bails:[]};if(e?.type!=="ObjectPattern"||(Ze(e,[],n),n.rest&&(t?.type!=="BlockStatement"?(n.bails.push({name:n.rest.name,reason:"rest"}),delete n.rest):n.rest.keys=(e.properties??[]).filter(o=>o.type!=="RestElement"&&!o.computed).map(o=>{let l=o.key;return l.type==="Identifier"?l.name:l.value})),n.reads.length===0&&!n.rest))return n;let r=new Set(n.reads.map(o=>o.name));n.rest&&r.add(n.rest.name);let s=tn(t),i=nn(t,r),a=[];for(let o of n.reads)s.has(o.name)?n.bails.push({name:o.name,reason:"reassigned"}):i.has(o.name)?n.bails.push({name:o.name,reason:"shadowed"}):a.push(o);return n.reads=a,n.rest&&s.has(n.rest.name)?(n.bails.push({name:n.rest.name,reason:"reassigned"}),delete n.rest):n.rest&&i.has(n.rest.name)&&(n.bails.push({name:n.rest.name,reason:"shadowed"}),delete n.rest),n}function se(e){switch(e){case"rest":return"this rest element cannot be served by splitProps, and copying the props into a plain object would lose the getters";case"computed":return"the property is not known until it runs";case"reassigned":return"the binding is assigned to, and props are read-only";case"shadowed":return"an inner scope binds the same name";case"unsafe-default":return"the default would have to run again on every read"}}function H(e,t,n=null){if(!(!e||typeof e!="object"||typeof e.type!="string")&&!e.type.startsWith("TS")&&t(e,n)!==!1)for(let r of Object.keys(e)){if(r==="loc"||r==="leadingComments"||r==="trailingComments")continue;let s=e[r];if(Array.isArray(s))for(let i of s)H(i,t,e);else s&&typeof s=="object"&&H(s,t,e)}}function Ye(e){return!!e&&e[0]>="A"&&e[0]<="Z"}function rn(e){let t=[];return H(e,n=>{if(n.type==="FunctionDeclaration"&&Ye(n.id?.name)){t.push(n);return}if(n.type==="VariableDeclarator"&&Ye(n.id?.name)){let r=n.init;r&&(r.type==="ArrowFunctionExpression"||r.type==="FunctionExpression")&&t.push(r)}}),t}function sn(e){let t=new Set;return H(e,n=>{n.type==="Identifier"&&t.add(n.name)}),t}function on(e,t){if(!t)return!0;switch(t.type){case"MemberExpression":case"OptionalMemberExpression":return!(t.property===e&&!t.computed);case"ObjectProperty":case"ObjectMethod":case"ClassProperty":case"ClassMethod":return!(t.key===e&&!t.computed);case"LabeledStatement":case"BreakStatement":case"ContinueStatement":return t.label!==e;case"ImportSpecifier":case"ExportSpecifier":return!1;default:return!0}}function ye(e,t,n={}){let r=[],s=[],i=new Set;for(let a of rn(e)){let o=a.params?.[0];if(o?.type!=="ObjectPattern")continue;let l=re(o,a.body);for(let f of l.bails)s.push({name:f.name,reason:f.reason,message:se(f.reason),start:o.start});if(l.bails.length>0||l.reads.length===0&&!l.rest)continue;let c=sn(a),p=n.parameterName??"props";for(;c.has(p);)p=`_${p}`;let d=new Map;for(let f of l.reads){let h=`${p}.${f.path.join(".")}`,y=f.fallback;d.set(f.name,y?`(${h} === undefined ? ${t.slice(y.start,y.end)} : ${h})`:h)}let u=o.typeAnnotation;if(r.push({start:o.start,end:u?.start??o.end,code:p}),l.rest){let f=l.rest.keys.map(y=>JSON.stringify(y)).join(", "),h=a.body;r.push({start:h.start+1,end:h.start+1,code:`
|
|
2
|
+
const [, ${l.rest.name}] = splitProps(${p}, [${f}]);`}),i.add("splitProps")}let g=[];H(a.body,(f,h)=>{if(f.type!=="Identifier")return;let y=d.get(f.name);if(!y)return;let k=h?.type==="ObjectProperty"&&h.shorthand&&h.value===f;if(!k&&!on(f,h))return;let v=l.reads.find(X=>X.name===f.name).path;g.push({node:f,parent:k?h:null,text:y,property:v[v.length-1]})});for(let f of g)f.parent?r.push({start:f.parent.start,end:f.parent.end,code:`${f.node.name}: ${f.text}`}):r.push({start:f.node.start,end:f.node.end,code:f.text}),an(f.node,p,f.property)}return{edits:r,diagnostics:s,used:i}}function an(e,t,n){e.type="MemberExpression",e.computed=!1,e.optional=!1,e.object={type:"Identifier",name:t,start:e.start,end:e.start},e.property={type:"Identifier",name:n,start:e.end,end:e.end},delete e.name}function tt(e,t="module.tsx",n={}){let r=(0,Qe.parse)(e,{sourceType:"module",plugins:["typescript","jsx"],errorRecovery:!0}),{edits:s,diagnostics:i,used:a}=ye(r.program,e,n),o=new et.default(e);for(let l of s)l.start===l.end?o.appendLeft(l.start,l.code):o.overwrite(l.start,l.end,l.code);return a.has("splitProps")&&!O(r.program).has("splitProps")&&o.prepend(`import { splitProps } from ${JSON.stringify(n.runtimeModule??"@fluixi/dom")};
|
|
3
|
+
`),{code:o.toString(),map:o.generateMap({source:t,includeContent:!0,hires:!0}),diagnostics:i,rewritten:s.filter(l=>l.code!==(n.parameterName??"props")).length}}var w="@fluixi/reactive/signal",C={$signal:{export:"signal",module:w,returns:"signal-handle"},$memo:{export:"memo",module:w,returns:"memo-handle"},$effect:{export:"effect",module:w,returns:"effect"},$store:{export:"store",module:"@fluixi/reactive/store",returns:"store-handle"},$resource:{export:"resource",module:w,returns:"resource-handle"},$selector:{export:"createSelector",module:w,returns:"memo-accessor"},$deferred:{export:"createDeferred",module:w,returns:"memo-accessor"},$untrack:{export:"untrack",module:w,returns:"plain"},$untrackStore:{export:"untrackStore",module:"@fluixi/reactive/store",returns:"plain"}},nt={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"},ln=["@fluixi/reactive","@fluixi/reactive/signal","@fluixi/reactive/signal-next","@fluixi/reactive/store","@fluixi/core","@fluixi/core/rx"],cn=new RegExp(`\\$(?:${Object.keys(C).map(e=>e.slice(1)).join("|")})\\s*\\(`);function rt(e){return cn.test(e)}function st(e){return Object.prototype.hasOwnProperty.call(C,e)}function ot(e){return ln.includes(e)}function x(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"?x(n.argument,t):x(n.value,t);return;case"ArrayPattern":for(let n of e.elements??[])x(n,t);return;case"AssignmentPattern":x(e.left,t);return;case"RestElement":x(e.argument,t);return}}function oe(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 s of r)oe(s,t);else r&&typeof r=="object"&&oe(r,t)}}}function pn(e,t){if(e.type!=="CallExpression")return;let n=e.callee;if(n?.type!=="Identifier")return;let r=n.name,s=t.primitives.get(r);if(s)return s;let i=C[r];if(i&&!t.shadowed.has(r))return i.returns}function un(e,t,n){if(Array.isArray(t)){e.type==="ArrayPattern"&&e.elements.forEach((r,s)=>{let i=t[s];r?.type==="Identifier"&&i&&n.set(r.name,i)});return}e.type==="Identifier"&&n.set(e.name,t)}function it(e){let t={kinds:new Map,primitives:new Map,shadowed:new Set},n=e;oe(n,r=>{let s=new Set;if(r.type==="VariableDeclarator")x(r.id,s);else if(r.type==="FunctionDeclaration"||r.type==="ClassDeclaration")x(r.id,s);else if(r.type==="ImportDefaultSpecifier"||r.type==="ImportNamespaceSpecifier")x(r.local,s);else if(r.type==="ImportSpecifier")x(r.local,s);else if(r.type==="FunctionExpression"||r.type==="ArrowFunctionExpression"||r.type==="FunctionDeclaration")for(let i of r.params??[])x(i,s);for(let i of s)C[i]&&t.shadowed.add(i)});for(let r of n.body??[])if(r.type==="ImportDeclaration"&&ot(r.source?.value))for(let s of r.specifiers??[]){if(s.type!=="ImportSpecifier")continue;let i=s.imported,a=i.type==="Identifier"?i.name:i.value,o=nt[a];o&&t.primitives.set(s.local.name,o)}return oe(n,r=>{if(r.type!=="VariableDeclarator"||!r.init)return;let s=pn(r.init,t);s&&un(r.id,s,t.kinds)}),t}function Ne(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 s of r)Ne(s,t);else r&&typeof r=="object"&&Ne(r,t)}}}function at(e){let t=[],n=[],r=new Map,s=new Set,{shadowed:i}=it(e);return Ne(e,a=>{if(a.type!=="CallExpression")return;let o=a.callee;if(o?.type!=="Identifier")return;let l=o.name;if(!st(l))return;if(i.has(l)){s.has(l)||(s.add(l),n.push({name:l,message:`${l} is reserved for the compiler, and this module binds it. The call keeps your binding's meaning; rename it to use the intrinsic.`,start:o.start}));return}let c=C[l];t.push({start:o.start,end:o.end,code:c.export});let p=r.get(c.module)??new Set;p.add(c.export),r.set(c.module,p)}),{edits:t,diagnostics:n,imports:r}}function lt(e,t){let n=[];for(let[r,s]of[...e.imports].sort(([i],[a])=>i.localeCompare(a))){let i=[...s].filter(a=>!t.has(a)).sort();i.length&&n.push(`import { ${i.join(", ")} } from ${JSON.stringify(r)};`)}return n.length?`${n.join(`
|
|
4
|
+
`)}
|
|
5
|
+
`:""}var dn=new Set(D),fn=new Set(A),mn=new Set($),gn=new Set(["createMemo","createEffect","createRenderEffect","createRoot","createSignal","onCleanup","batch","untrack"]);function ve(e,t,n=null,r=""){if(!(!e||typeof e!="object")){if(Array.isArray(e)){for(let s of e)ve(s,t,n,r);return}typeof e.type=="string"&&t(e,n,r);for(let s of Object.keys(e))s==="loc"||s==="leadingComments"||s==="trailingComments"||ve(e[s],t,typeof e.type=="string"?e:n,s)}}var xe=e=>e.type==="JSXElement"||e.type==="JSXFragment";function hn(e,t,n){return xe(e)?!(t&&xe(t)&&n==="children"):!1}function yn(e,t){return e.type==="TaggedTemplateExpression"&&e.tag?.type==="Identifier"&&(e.tag.name===t||e.tag.name==="svg")}function ut(e){return e.filter(t=>!e.some(n=>n!==t&&n.start<=t.start&&n.end>=t.end&&n.end-n.start>t.end-t.start))}function ie(e,t,n,r){let s=ut(r.filter(a=>a.start>=t&&a.end<=n)).sort((a,o)=>o.start-a.start),i=e.slice(t,n);for(let a of s)i=i.slice(0,a.start-t)+a.code+i.slice(a.end-t);return i}function Nn(e,t,n){let r={code:ie(e,t.start,t.end,n),reactive:M(S(t))};return t.type==="ArrowFunctionExpression"&&t.body?.type!=="BlockStatement"&&(r.arrow={params:t.params.map(s=>ie(e,s.start,s.end,n)),body:ie(e,t.body.start,t.body.end,n),bodyReactive:M(S(t.body))}),t.type==="ObjectExpression"&&(r.object=!0),r}function dt(e,t,n){if(!t||t.length===0)return e;let r=new Map;for(let s of t){let i=`${s.svg?"svg:":""}${s.html}`,a=n.get(i);a||(a=`_fxTmpl$${n.size}`,n.set(i,a)),r.set(s.id,a)}return e.replace(/_tmpl\$\d+/g,s=>r.get(s)??s)}function Re(e,t){if(e.kind==="component"&&e.source){let n=e.source;n.origin==="builtin"?t.builtins.add(e.name):q(n.loading)&&!t.resolved.has(e.name)?t.deferred.set(e.name,n):(t.deferred.delete(e.name),t.resolved.set(e.name,n))}if("props"in e&&e.props)for(let n of e.props)n.kind==="event"&&n.event?.delegated&&t.delegatedEvents.add(n.event.name);if("children"in e&&e.children)for(let n of e.children)Re(n,t)}function vn(e){let t=[`kind: ${JSON.stringify(e.kind)}`];return e.kind==="visible"&&e.rootMargin&&t.push(`rootMargin: ${JSON.stringify(e.rootMargin)}`),e.kind==="interaction"&&t.push(`events: ${JSON.stringify(e.events)}`),e.kind==="media"&&t.push(`query: ${JSON.stringify(e.query)}`),`{ ${t.join(", ")} }`}function xn(e){let t=[];return e.quasi.quasis.forEach((n,r)=>{if(t.push({kind:"static",text:n.value.cooked??n.value.raw,start:n.start}),r<e.quasi.expressions.length){let s=e.quasi.expressions[r];t.push({kind:"hole",index:r,start:s.start,end:s.end})}}),t}function ft(e,t,n={}){let r=n.litTag??"html",s=n.format??"both",i=s!=="jsx",a=s!=="lit",o=i&&(e.includes(`${r}\``)||e.includes("svg`")),l=n.intrinsics!==!1&&rt(e);if(!o&&!(a&&e.includes("<"))&&!l)return null;let c=(0,ct.parse)(e,{sourceType:"module",plugins:["jsx","typescript"],errorRecovery:!0}),p=[];ve(c.program,(m,I,ae)=>{(i&&yn(m,r)||a&&hn(m,I,ae))&&p.push(m)});let d=n.propsDestructure?ye(c.program,e,{runtimeModule:n.runtimeModule}):{edits:[],diagnostics:[],used:new Set},u=n.intrinsics===!1?{edits:[],diagnostics:[],imports:new Map}:at(c.program);if(p.length===0&&d.edits.length===0&&u.edits.length===0&&u.diagnostics.length===0&&d.diagnostics.length===0)return null;p.sort((m,I)=>I.start-m.start||m.end-I.end);let f=new Set(d.used),h={builtins:new Set,resolved:new Map,deferred:new Map,delegatedEvents:new Set},y=new Map,k=[...d.edits,...u.edits];for(let m of p){let I=p.some(R=>R!==m&&R.start<=m.start&&R.end>=m.end&&R.end-R.start>m.end-m.start);if(xe(m)){k.push({start:m.start,end:m.end,code:Rn(e,m,k,I,f,h,y,n)});continue}let ae=m.quasi.expressions.map(R=>Nn(e,R,k)),V=Ve(xn(m),ae,{...n,hoistTemplates:!0,templateClone:n.templateClone??!0,partialTemplates:I?!1:n.partialTemplates??!0,svg:m.tag.name==="svg"});for(let R of V.imports)f.add(R);Re(V.ir,h),k.push({start:m.start,end:m.end,code:dt(V.code,V.templates,y)})}let v=new pt.default(e);for(let m of ut(k))m.start===m.end?v.appendLeft(m.start,m.code):v.overwrite(m.start,m.end,m.code);let X=O(c.program),ke=kn(f,h,y,X,n);ke&&v.prepend(ke);let be=lt(u,X);be&&v.prepend(be);for(let m of c.program.body)m.type==="ImportDeclaration"&&m.source?.value==="@fluixi/core/rx"&&v.overwrite(m.source.start,m.source.end,JSON.stringify("@fluixi/reactive"));return{code:v.toString(),map:v.generateMap({source:t,includeContent:!0,hires:!0}),...d.diagnostics.length?{propsDiagnostics:d.diagnostics}:{},...u.diagnostics.length?{intrinsicDiagnostics:u.diagnostics}:{}}}function Rn(e,t,n,r,s,i,a,o){let l=Ke(t,{code:p=>ie(e,p.start,p.end,n),used:s});T(l),K(l,{resolver:te(o.resolve??[]),modules:{controlFlowModule:o.controlFlowModule??o.runtimeModule??"@fluixi/dom",coreModule:o.coreModule??"@fluixi/core",routerModule:o.routerModule??"@fluixi/core/router-next"},strategyFor:p=>p.load}),Z(l);let c=P.emit(l,{templateClone:o.templateClone??!0,partialTemplates:r?!1:o.partialTemplates??!0});for(let p of c.imports)s.add(p);return Re(l,i),dt(c.code,c.templates,a)}function kn(e,t,n,r,s){let i=s.runtimeModule??"@fluixi/dom",a=s.coreModule??"@fluixi/core",o=new Map,l=(u,g)=>o.set(u,[...o.get(u)??[],g]),c=new Set(e);for(let u of t.builtins)c.add(u);t.delegatedEvents.size>0&&c.add("delegateEvents");for(let u of[...c].sort())r.has(u)||(gn.has(u)?l(s.reactiveModule??"@fluixi/reactive/signal",u):mn.has(u)?l(s.routerModule??"@fluixi/core/router-next",u):fn.has(u)?l(a,u):dn.has(u)?l(s.controlFlowModule??i,u):l(i,u));for(let[u,g]of t.resolved)r.has(u)||l(g.module,g.export==="default"?`default as ${u}`:u===g.export?u:`${g.export} as ${u}`);let p=[];for(let[u,g]of o)p.push(`import { ${g.join(", ")} } from ${JSON.stringify(u)};`);let d=[...t.deferred].filter(([u])=>!r.has(u));if(d.length>0){r.has("deferred")||p.push(`import { deferred } from ${JSON.stringify(a)};`);for(let[u,g]of d)p.push(`const ${u} = deferred(() => import(${JSON.stringify(g.module)}), { strategy: ${vn(g.loading)}, export: ${JSON.stringify(g.export)} });`)}for(let[u,g]of n)p.push(`const ${g} = ${JSON.stringify(u.startsWith("svg:")?u.slice(4):u)};`);return t.delegatedEvents.size>0&&p.push(`delegateEvents(${JSON.stringify([...t.delegatedEvents])});`),p.length>0?p.join(`
|
|
2
6
|
`)+`
|
|
3
7
|
`:null}
|
|
@@ -9,4 +9,8 @@ export { transformTemplates } from './templates.js';
|
|
|
9
9
|
export type { TransformOptions, TransformResult } from './templates.js';
|
|
10
10
|
export { moduleBindings } from './bindings.js';
|
|
11
11
|
export { shapeOf } from '../analyze/expr-shape.js';
|
|
12
|
+
export { transformProps } from './props.js';
|
|
13
|
+
export type { PropsTransformOptions, PropsTransformResult, PropsDiagnostic } from './props.js';
|
|
14
|
+
export { planPropsDestructure, explainBail } from '../analyze/props-destructure.js';
|
|
15
|
+
export type { DestructurePlan, DestructureBail, PropsRead } from '../analyze/props-destructure.js';
|
|
12
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transform/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transform/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACpF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dist/transform/index.js
CHANGED
|
@@ -8,3 +8,5 @@
|
|
|
8
8
|
export { transformTemplates } from './templates.js';
|
|
9
9
|
export { moduleBindings } from './bindings.js';
|
|
10
10
|
export { shapeOf } from '../analyze/expr-shape.js';
|
|
11
|
+
export { transformProps } from './props.js';
|
|
12
|
+
export { planPropsDestructure, explainBail } from '../analyze/props-destructure.js';
|