@fluixi/compiler 1.0.0-alpha.70 → 1.0.0-alpha.72
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/babel-E7EQLX36.mjs +2 -0
- package/dist/chunk-EF6V4GTD.mjs +1 -0
- 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.d.ts.map +1 -1
- package/dist/frontend/babel/build-ir.js +5 -2
- package/dist/frontend/babel/build-ir.mjs +1 -1
- package/dist/frontend/babel/index.cjs +2 -2
- package/dist/frontend/babel/index.mjs +2 -2
- package/dist/frontend/babel/lower-template.cjs +1 -1
- package/dist/frontend/babel/lower-template.mjs +1 -1
- package/dist/frontend/babel/plugin.cjs +2 -2
- package/dist/frontend/babel/plugin.js +19 -1
- package/dist/frontend/babel/plugin.mjs +2 -2
- package/dist/index.cjs +22 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.mjs +22 -1
- package/dist/integrations.cjs +27 -6
- package/dist/integrations.d.ts +16 -0
- package/dist/integrations.d.ts.map +1 -1
- package/dist/integrations.js +8 -0
- package/dist/integrations.mjs +27 -6
- package/dist/resolve/component-globals.cjs +22 -0
- package/dist/resolve/component-globals.d.ts +73 -0
- package/dist/resolve/component-globals.d.ts.map +1 -0
- package/dist/resolve/component-globals.js +137 -0
- package/dist/resolve/component-globals.mjs +22 -0
- package/dist/resolve/write-globals.cjs +22 -0
- package/dist/resolve/write-globals.d.ts +31 -0
- package/dist/resolve/write-globals.d.ts.map +1 -0
- package/dist/resolve/write-globals.js +136 -0
- package/dist/resolve/write-globals.mjs +22 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/babel-NY6FXXLW.mjs +0 -2
- package/dist/chunk-3SAEGOMQ.mjs +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1,22 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var j=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var le=Object.prototype.hasOwnProperty;var ae=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})},ce=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of se(t))!le.call(e,i)&&i!==n&&j(e,i,{get:()=>t[i],enumerable:!(r=ie(t,i))||r.enumerable});return e};var pe=e=>ce(j({},"__esModule",{value:!0}),e);var Je={};ae(Je,{BUILTIN_COMPONENTS:()=>me,CORE_CONTROL_FLOW:()=>I,DEFAULT_GLOBALS_PATH:()=>J,DOM_CONTROL_FLOW:()=>k,RESERVED_COMPONENTS:()=>O,ROUTER_COMPONENTS:()=>v,RUNTIME_CONTRACT_V1:()=>T,RUNTIME_CONTRACT_V2:()=>Ee,backends:()=>He,builtinComponentMap:()=>b,builtinComponents:()=>fe,componentGlobals:()=>_,createComponentResolver:()=>P,defaultOptions:()=>Se,imperativeBackend:()=>A,resolveComponentSources:()=>Ce,routerComponents:()=>ge,walk:()=>B,writeComponentGlobals:()=>$e});module.exports=pe(Je);var ue=e=>"components"in e;function W(e,t){return e.replace(/\$(\d+)/g,(n,r)=>t[Number(r)]??n)}function de(e,t){return typeof t=="string"?{module:t,export:e}:t}function P(e=[]){let t=new Map,n=[],r=[];for(let a of e){if(!ue(a)){r.push(a);continue}for(let[o,p]of Object.entries(a.components)){let s=de(o,p),u=t.get(o);if(u&&u.module!==s.module){let c=n.find(m=>m.name===o);c?c.modules.push(s.module):n.push({name:o,modules:[u.module,s.module]});continue}t.set(o,s)}}let i=new Map;return{resolve:a=>{if(i.has(a))return i.get(a);let o=t.get(a);if(!o)for(let p of r){let s=a.match(new RegExp(p.match.source,p.match.flags.replace("g","")));if(s){o={module:W(p.module,s),export:p.export?W(p.export,s):a};break}}return i.set(a,o),o},names:()=>[...t.keys()],conflicts:()=>n}}var k=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],I=["Suspense","SuspenseList","Await"],v=["Router","Outlet","Redirect","Link"],me=[...k,...I,...v],O=new Set([...k,...I]);function b(e={}){let{controlFlowModule:t="@fluixi/dom",coreModule:n="@fluixi/core",routerModule:r="@fluixi/core/router-next"}=e,i={};for(let l of k)i[l]=t;for(let l of I)i[l]=n;for(let l of v)i[l]=r;return i}function fe(e={}){return{components:b(e)}}function ge(e){let t=e??"@fluixi/core/router-next";return{components:Object.fromEntries(v.map(n=>[n,t]))}}var Re=new Set(["Text","Image","Option","Audio","Comment","Range","Selection","Notification","Event","Document","Element","Node","Screen","Window","Location","History","Storage","Response","Request","Headers"]);function he(e){if(e.startsWith(".")||e.startsWith("/")||/^[~@]\//.test(e))return;let t=e.split("/");return e.startsWith("@")?t.slice(0,2).join("/"):t[0]}function F(e){return`_${e.replace(/[^A-Za-z0-9]/g,"_")}`}function _(e,t={}){let{available:n,builtins:r=!0,generator:i="@fluixi/compiler",specifier:l=d=>d}=t,a=[...e];r&&a.push({components:b()});let o=P(a),p=n?new Set(n):void 0,s=[],u=[],c=[],m=new Map;for(let d of[...o.names()].sort()){let g=o.resolve(d);if(!g)continue;let y=he(g.module);Re.has(d)?u.push(d):p&&y&&!p.has(y)?c.push(d):(s.push(d),m.set(d,g))}let x=[...new Set(s.map(d=>m.get(d).module))].sort().map(d=>`import * as ${F(d)} from '${l(d)}';`),E=s.map(d=>{let g=m.get(d),y=F(g.module);return g.export==="default"?` const ${d}: typeof ${y}.default;`:` export import ${d} = ${y}.${g.export};`}),re=u.length>0?`//
|
|
2
|
+
// Import these explicitly — lib.dom already declares the name, so an ambient
|
|
3
|
+
// declaration cannot win:
|
|
4
|
+
`+u.map(d=>{let g=o.resolve(d)?.module;return`// import { ${d} } from '${g?l(g):""}';
|
|
5
|
+
`}).join(""):"",N=e.filter(d=>"match"in d).length,oe=N>0?`//
|
|
6
|
+
// ${N} pattern rule${N===1?"":"s"} cannot be declared:
|
|
7
|
+
// a pattern matches unboundedly many names, so there is no list to emit. Those
|
|
8
|
+
// tags still resolve at build time; declare them by hand if the editor needs them.
|
|
9
|
+
`:"";return{source:`// GENERATED by ${i} — do not edit.
|
|
10
|
+
//
|
|
11
|
+
// The components \`resolve\` supplies without an import. This describes what the
|
|
12
|
+
// compiler already does; it does not enable it.
|
|
13
|
+
`+re+oe+(x.length>0?`
|
|
14
|
+
${x.join(`
|
|
15
|
+
`)}
|
|
16
|
+
`:`
|
|
17
|
+
`)+`
|
|
18
|
+
declare global {
|
|
19
|
+
${E.join(`
|
|
20
|
+
`)}
|
|
21
|
+
}
|
|
22
|
+
`,declared:s,shadowedByDom:u,unavailable:c,patternRules:N}}var R=require("node:fs"),f=require("node:path");var xe="GENERATED by @fluixi/compiler",J="fluixi.d.ts";function ve(e,t){let n;try{let i=(0,R.readFileSync)((0,f.resolve)(e,"tsconfig.json"),"utf8");n=JSON.parse(i.replace(/^\s*\/\/.*$/gm,""))}catch{return}if(n.extends!==void 0)return;if(!Array.isArray(n.include))return!0;let r=z(e,t);return n.include.some(i=>{if(typeof i!="string")return!1;let l=i.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*");return new RegExp(`^${l}(?:/.*)?$`).test(r)})}function z(e,t){return(0,f.relative)(e,t).split(f.sep).join("/")}function be(e,t,n){if(!e.startsWith("/"))return e;let r=(0,f.resolve)(n,e.slice(1)),i=(0,f.relative)(t,r).split(f.sep).join("/");return i.startsWith(".")||(i=`./${i}`),i.replace(/\.(tsx|ts|jsx|mts|cts)$/,".js")}function ye(e){try{let t=JSON.parse((0,R.readFileSync)((0,f.resolve)(e,"package.json"),"utf8"));return[...Object.keys(t.dependencies??{}),...Object.keys(t.devDependencies??{}),...Object.keys(t.peerDependencies??{})]}catch{return}}function $e(e,t){if(e.globals===!1)return{status:"skipped",reason:"disabled"};let n=e.resolve??[],r=(0,f.resolve)(t,e.globals??J),i;try{i=(0,R.readFileSync)(r,"utf8")}catch{i=void 0}if(i!==void 0&&!i.includes(xe))return{status:"skipped",reason:"foreign-file",path:r};let{source:l,declared:a}=_(n,{available:ye(t),specifier:o=>be(o,(0,f.dirname)(r),t)});return i===l?{status:"unchanged",path:r,declared:a.length,warning:H(t,r)}:((0,R.mkdirSync)((0,f.dirname)(r),{recursive:!0}),(0,R.writeFileSync)(r,l),{status:"written",path:r,declared:a.length,warning:H(t,r)})}function H(e,t){if(ve(e,t)!==!1)return;let n=z(e,t);return`[fluixi] ${n} is not covered by "include" in tsconfig.json, so TypeScript will ignore it and every resolved component stays "Cannot find name". Add "${n}" to "include".`}var L={kind:"eager"};function Ce(e,t={}){let{resolver:n,isBound:r,modules:i,strategyFor:l}=t,a=b(i),o=new Map,p=new Set,s=c=>{let{name:m}=c;if(!m||m.includes(".")||r?.(m))return;let h=u(m);if(!h){p.add(m);return}let x=h.origin==="builtin"&&O.has(m)?L:l?.(c)??L;c.source={...h,loading:x},o.set(m,c.source)},u=c=>{if(O.has(c))return{module:a[c],export:c,origin:"builtin"};let m=n?.resolve(c);if(m)return{module:m.module,export:m.export,origin:"rule"};if(v.includes(c))return{module:a[c],export:c,origin:"builtin"}};return B(e,c=>{c.kind==="component"&&s(c)}),{resolved:o,unresolved:[...p]}}function B(e,t){let n=Array.isArray(e)?e:[e];for(let r of n){t(r);let i=r.children;i&&B(i,t)}}var Se={backend:"imperative",generate:"dom",moduleName:"@fluixi/dom",delegateEvents:!0,hydratable:!1,sourceMaps:!0,dev:!1};var T={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},Ee={version:2,module:"@fluixi/dom",symbols:[...T.symbols,"template","cloneTemplate","walk"]};var Ne=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),U={className:"class",htmlFor:"for"},ke=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),Ie=new Set(["script","style","textarea","title"]);function D(e){return Ie.has(e)}function V(e){return U[e]??e}function $(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!ke.has(e.name)}function G(e){if(!e.static||D(e.tag))return!1;for(let t of e.props)if(!$(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&G(t)))return!1;return!0}function C(e){let t=e.props.map(Te).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return Ne.has(e.tag)?n:`${n}${e.children.map(Oe).join("")}</${e.tag}>`}function Oe(e){if(e.kind==="text")return Me(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return C(e)}function Te(e){let t=U[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${we(String(n))}"`}function we(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Me(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var Ae="<!--fx-->",je="<!--fx/-->";function M(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Pe(e){return e.kind==="text"||e.kind==="element"&&q(e)}function q(e){return e.svg||D(e.tag)||!e.props.every(t=>$(t))?!1:e.children.every(t=>Pe(t)||M(t))}function w(e){if(M(e))return!0;let t=e.children;return t?t.some(w):!1}function K(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||K(t))}function Z(e){if(!q(e)||!K(e)||!e.children.some(w))return null;let t=[],n=[],r=0,i=a=>{let o=`_n$${r++}`;return t.push({ref:o,expr:a}),o};return l(e,"_el$"),{html:_e(e),tag:e.tag,steps:t,holes:n};function l(a,o){let p=-1;a.children.forEach((u,c)=>{w(u)&&(p=c)});let s=null;for(let u=0;u<=p;u++){let c=a.children[u],m=s?`${s}.nextSibling`:`${o}.firstChild`;if(M(c)){let x=i(m),E=i(`holeEnd(${x})`);n.push({parentRef:o,startRef:x,endRef:E,node:c}),s=E;continue}let h=i(m);c.kind==="element"&&w(c)&&l(c,h),s=h}}}function _e(e){return C(Y(e)).split(X).join(Ae+je)}function Y(e){return{...e,children:e.children.map(t=>M(t)?{kind:"text",value:X}:t.kind==="element"?Y(t):t)}}var X="\0fx-hole\0";var Le={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function Be(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function ee(e){return Be(e)?e:JSON.stringify(e)}function De(e){return e.expr!==void 0?e.reactive?`() => (${e.expr})`:`(${e.expr})`:JSON.stringify(e.literal??!0)}function Ge(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function We(e,t,n){let r=e.filter(o=>o.kind==="spread"),l=e.filter(o=>o.kind!=="spread").map(o=>`${ee(o.name)}: ${De(o)}`);t!=null&&l.push(`children: ${t}`);let a=`{ ${l.join(", ")} }`;return r.length>0?(n.add("mergeProps"),`mergeProps(${r.map(o=>o.expr).join(", ")}, ${a})`):a}function te(e,t,n){return e.length===1?S(e[0],t,n):`[${e.map(r=>S(r,t,n)).join(", ")}]`}function Q(e,t,n,r,i){r.add("createMemo"),r.add("createComponent");let l=t.filter(s=>s.kind==="spread"),o=t.filter(s=>s.kind!=="spread").map(s=>`get ${ee(s.name)}() { return ${Ge(s)}; }`);n.length>0&&o.push(`get children() { return ${te(n,r,i)}; }`);let p=`{ ${o.join(", ")} }`;return l.length>0&&(r.add("mergeProps"),p=`mergeProps(${l.map(s=>s.expr).join(", ")}, ${p})`),`createMemo(() => createComponent(${e}, ${p}))`}function Fe(e,t){let n=V(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 ne=!1;function S(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":te(e.children,t,n);case"component":return Q(e.name,e.props,e.children,t,n);case"control":{let r=Le[e.control]??e.control;return t.add(r),Q(r,e.props,e.children,t,n)}case"element":{if(n&&e.static&&!e.svg&&G(e)){t.add("templateNode");let o=`_tmpl$${n.length}`;return n.push({id:o,html:C(e),tag:e.tag,svg:!1}),`templateNode(${o}, ${JSON.stringify(e.tag)})`}if(n&&ne){let o=Z(e);if(o){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let p=`_tmpl$${n.length}`;n.push({id:p,html:o.html,tag:o.tag,svg:!1});let s=[`const _el$ = templateNode(${p}, ${JSON.stringify(o.tag)}, true);`];for(let u of o.steps)s.push(`const ${u.ref} = ${u.expr};`);for(let u of o.holes)s.push(`insert(${u.parentRef}, holeScope(${u.startRef}, () => (${S(u.node,t,n)})), ${u.endRef}, holeContent(${u.startRef}, ${u.endRef}));`);return s.push("return _el$;"),`(() => { ${s.join(" ")} })()`}}t.add("createNativeElement");let r=JSON.stringify(e.tag),i="_el$",l=[],a=e.svg?`${r}, true`:r;if(l.push(`const ${i} = createNativeElement(${a});`),e.props.length>0)if(!e.svg&&e.props.every($))for(let o of e.props)l.push(Fe(i,o));else{t.add("spread");let o=e.svg?", isSVG: true":"";l.push(`spread({ element: ${i}, props: ${We(e.props,null,t)}${o} });`)}for(let o of e.children){t.add("insert");let p=S(o,t,n),s=o.kind==="expr"&&o.reactive||o.kind==="component"||o.kind==="control";l.push(s?`insert(${i}, ${p}, null);`:`insert(${i}, ${p});`)}return l.push(`return ${i};`),`(() => { ${l.join(" ")} })()`}}}var A={name:"imperative",contract:T,emit(e,t){let n=new Set,r=t?.templateClone!==!1?[]:void 0;return ne=t?.partialTemplates===!0,{code:S(e,n,r),imports:Array.from(n),templates:r}}};var He={imperative:A};
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export * from './ir/nodes.js';
|
|
11
11
|
export * from './resolve/component-resolver.js';
|
|
12
|
+
export * from './resolve/component-globals.js';
|
|
13
|
+
export * from './resolve/write-globals.js';
|
|
12
14
|
export * from './resolve/builtins.js';
|
|
13
15
|
export * from './resolve/resolve-ir.js';
|
|
14
16
|
export * from './options.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,eAAe,CAAC;AAG9B,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,iFAAiF;AACjF,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAEnD,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,eAAe,CAAC;AAG9B,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,iFAAiF;AACjF,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAEnD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,8 @@ export * from './ir/nodes.js';
|
|
|
11
11
|
// Component resolution — shared by the compiler, the TS plugin (to synthesise the
|
|
12
12
|
// import the author did not write) and codemods, so all three agree on one answer.
|
|
13
13
|
export * from './resolve/component-resolver.js';
|
|
14
|
+
export * from './resolve/component-globals.js';
|
|
15
|
+
export * from './resolve/write-globals.js';
|
|
14
16
|
export * from './resolve/builtins.js';
|
|
15
17
|
export * from './resolve/resolve-ir.js';
|
|
16
18
|
export * from './options.js';
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1,22 @@
|
|
|
1
|
-
var
|
|
1
|
+
var se=e=>"components"in e;function L(e,t){return e.replace(/\$(\d+)/g,(n,o)=>t[Number(o)]??n)}function le(e,t){return typeof t=="string"?{module:t,export:e}:t}function B(e=[]){let t=new Map,n=[],o=[];for(let a of e){if(!se(a)){o.push(a);continue}for(let[r,p]of Object.entries(a.components)){let s=le(r,p),u=t.get(r);if(u&&u.module!==s.module){let c=n.find(m=>m.name===r);c?c.modules.push(s.module):n.push({name:r,modules:[u.module,s.module]});continue}t.set(r,s)}}let i=new Map;return{resolve:a=>{if(i.has(a))return i.get(a);let r=t.get(a);if(!r)for(let p of o){let s=a.match(new RegExp(p.match.source,p.match.flags.replace("g","")));if(s){r={module:L(p.module,s),export:p.export?L(p.export,s):a};break}}return i.set(a,r),r},names:()=>[...t.keys()],conflicts:()=>n}}var I=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],O=["Suspense","SuspenseList","Await"],x=["Router","Outlet","Redirect","Link"],_e=[...I,...O,...x],T=new Set([...I,...O]);function v(e={}){let{controlFlowModule:t="@fluixi/dom",coreModule:n="@fluixi/core",routerModule:o="@fluixi/core/router-next"}=e,i={};for(let l of I)i[l]=t;for(let l of O)i[l]=n;for(let l of x)i[l]=o;return i}function Le(e={}){return{components:v(e)}}function Be(e){let t=e??"@fluixi/core/router-next";return{components:Object.fromEntries(x.map(n=>[n,t]))}}var ae=new Set(["Text","Image","Option","Audio","Comment","Range","Selection","Notification","Event","Document","Element","Node","Screen","Window","Location","History","Storage","Response","Request","Headers"]);function ce(e){if(e.startsWith(".")||e.startsWith("/")||/^[~@]\//.test(e))return;let t=e.split("/");return e.startsWith("@")?t.slice(0,2).join("/"):t[0]}function D(e){return`_${e.replace(/[^A-Za-z0-9]/g,"_")}`}function G(e,t={}){let{available:n,builtins:o=!0,generator:i="@fluixi/compiler",specifier:l=d=>d}=t,a=[...e];o&&a.push({components:v()});let r=B(a),p=n?new Set(n):void 0,s=[],u=[],c=[],m=new Map;for(let d of[...r.names()].sort()){let f=r.resolve(d);if(!f)continue;let h=ce(f.module);ae.has(d)?u.push(d):p&&h&&!p.has(h)?c.push(d):(s.push(d),m.set(d,f))}let R=[...new Set(s.map(d=>m.get(d).module))].sort().map(d=>`import * as ${D(d)} from '${l(d)}';`),C=s.map(d=>{let f=m.get(d),h=D(f.module);return f.export==="default"?` const ${d}: typeof ${h}.default;`:` export import ${d} = ${h}.${f.export};`}),oe=u.length>0?`//
|
|
2
|
+
// Import these explicitly — lib.dom already declares the name, so an ambient
|
|
3
|
+
// declaration cannot win:
|
|
4
|
+
`+u.map(d=>{let f=r.resolve(d)?.module;return`// import { ${d} } from '${f?l(f):""}';
|
|
5
|
+
`}).join(""):"",S=e.filter(d=>"match"in d).length,ie=S>0?`//
|
|
6
|
+
// ${S} pattern rule${S===1?"":"s"} cannot be declared:
|
|
7
|
+
// a pattern matches unboundedly many names, so there is no list to emit. Those
|
|
8
|
+
// tags still resolve at build time; declare them by hand if the editor needs them.
|
|
9
|
+
`:"";return{source:`// GENERATED by ${i} — do not edit.
|
|
10
|
+
//
|
|
11
|
+
// The components \`resolve\` supplies without an import. This describes what the
|
|
12
|
+
// compiler already does; it does not enable it.
|
|
13
|
+
`+oe+ie+(R.length>0?`
|
|
14
|
+
${R.join(`
|
|
15
|
+
`)}
|
|
16
|
+
`:`
|
|
17
|
+
`)+`
|
|
18
|
+
declare global {
|
|
19
|
+
${C.join(`
|
|
20
|
+
`)}
|
|
21
|
+
}
|
|
22
|
+
`,declared:s,shadowedByDom:u,unavailable:c,patternRules:S}}import{mkdirSync as pe,readFileSync as w,writeFileSync as ue}from"node:fs";import{dirname as W,relative as H,sep as J,resolve as E}from"node:path";var de="GENERATED by @fluixi/compiler",me="fluixi.d.ts";function fe(e,t){let n;try{let i=w(E(e,"tsconfig.json"),"utf8");n=JSON.parse(i.replace(/^\s*\/\/.*$/gm,""))}catch{return}if(n.extends!==void 0)return;if(!Array.isArray(n.include))return!0;let o=z(e,t);return n.include.some(i=>{if(typeof i!="string")return!1;let l=i.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*");return new RegExp(`^${l}(?:/.*)?$`).test(o)})}function z(e,t){return H(e,t).split(J).join("/")}function ge(e,t,n){if(!e.startsWith("/"))return e;let o=E(n,e.slice(1)),i=H(t,o).split(J).join("/");return i.startsWith(".")||(i=`./${i}`),i.replace(/\.(tsx|ts|jsx|mts|cts)$/,".js")}function Re(e){try{let t=JSON.parse(w(E(e,"package.json"),"utf8"));return[...Object.keys(t.dependencies??{}),...Object.keys(t.devDependencies??{}),...Object.keys(t.peerDependencies??{})]}catch{return}}function Ue(e,t){if(e.globals===!1)return{status:"skipped",reason:"disabled"};let n=e.resolve??[],o=E(t,e.globals??me),i;try{i=w(o,"utf8")}catch{i=void 0}if(i!==void 0&&!i.includes(de))return{status:"skipped",reason:"foreign-file",path:o};let{source:l,declared:a}=G(n,{available:Re(t),specifier:r=>ge(r,W(o),t)});return i===l?{status:"unchanged",path:o,declared:a.length,warning:F(t,o)}:(pe(W(o),{recursive:!0}),ue(o,l),{status:"written",path:o,declared:a.length,warning:F(t,o)})}function F(e,t){if(fe(e,t)!==!1)return;let n=z(e,t);return`[fluixi] ${n} is not covered by "include" in tsconfig.json, so TypeScript will ignore it and every resolved component stays "Cannot find name". Add "${n}" to "include".`}var M={kind:"eager"};function Ye(e,t={}){let{resolver:n,isBound:o,modules:i,strategyFor:l}=t,a=v(i),r=new Map,p=new Set,s=c=>{let{name:m}=c;if(!m||m.includes(".")||o?.(m))return;let g=u(m);if(!g){p.add(m);return}let R=g.origin==="builtin"&&T.has(m)?M:l?.(c)??M;c.source={...g,loading:R},r.set(m,c.source)},u=c=>{if(T.has(c))return{module:a[c],export:c,origin:"builtin"};let m=n?.resolve(c);if(m)return{module:m.module,export:m.export,origin:"rule"};if(x.includes(c))return{module:a[c],export:c,origin:"builtin"}};return U(e,c=>{c.kind==="component"&&s(c)}),{resolved:r,unresolved:[...p]}}function U(e,t){let n=Array.isArray(e)?e:[e];for(let o of n){t(o);let i=o.children;i&&U(i,t)}}var Qe={backend:"imperative",generate:"dom",moduleName:"@fluixi/dom",delegateEvents:!0,hydratable:!1,sourceMaps:!0,dev:!1};var A={version:1,module:"@fluixi/dom",symbols:["createNativeElement","insert","spread","setAttribute","delegateEvents","createComponent","createMemo","untrack","Show","For","Index","Switch","Match","Dynamic","ErrorBoundary"]},tt={version:2,module:"@fluixi/dom",symbols:[...A.symbols,"template","cloneTemplate","walk"]};var he=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),V={className:"class",htmlFor:"for"},xe=new Set(["innerHTML","outerHTML","innerText","textContent","value","checked","selected","muted","defaultValue","defaultChecked","children","ref"]),ve=new Set(["script","style","textarea","title"]);function j(e){return ve.has(e)}function q(e){return V[e]??e}function b(e){return e.kind!=="attr"||e.expr!==void 0||e.name.includes(":")?!1:!xe.has(e.name)}function P(e){if(!e.static||j(e.tag))return!1;for(let t of e.props)if(!b(t))return!1;for(let t of e.children)if(t.kind!=="text"&&!(t.kind==="element"&&P(t)))return!1;return!0}function y(e){let t=e.props.map(ye).filter(Boolean).join(""),n=`<${e.tag}${t}>`;return he.has(e.tag)?n:`${n}${e.children.map(be).join("")}</${e.tag}>`}function be(e){if(e.kind==="text")return Ce(e.value);if(e.kind!=="element")throw new Error(`serializeStatic: unexpected ${e.kind}`);return y(e)}function ye(e){let t=V[e.name]??e.name,n=e.literal;return n===!0||n===void 0?` ${t}`:n===!1||n===null?"":` ${t}="${$e(String(n))}"`}function $e(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Ce(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var Se="<!--fx-->",Ee="<!--fx/-->";function k(e){return e.kind==="expr"||e.kind==="component"||e.kind==="control"}function Ne(e){return e.kind==="text"||e.kind==="element"&&K(e)}function K(e){return e.svg||j(e.tag)||!e.props.every(t=>b(t))?!1:e.children.every(t=>Ne(t)||k(t))}function N(e){if(k(e))return!0;let t=e.children;return t?t.some(N):!1}function Z(e){for(let t=0;t<e.children.length;t++){let n=e.children[t];if(n.kind==="text"&&(n.value===""||e.children[t+1]?.kind==="text"))return!1}return e.children.every(t=>t.kind!=="element"||Z(t))}function Y(e){if(!K(e)||!Z(e)||!e.children.some(N))return null;let t=[],n=[],o=0,i=a=>{let r=`_n$${o++}`;return t.push({ref:r,expr:a}),r};return l(e,"_el$"),{html:ke(e),tag:e.tag,steps:t,holes:n};function l(a,r){let p=-1;a.children.forEach((u,c)=>{N(u)&&(p=c)});let s=null;for(let u=0;u<=p;u++){let c=a.children[u],m=s?`${s}.nextSibling`:`${r}.firstChild`;if(k(c)){let R=i(m),C=i(`holeEnd(${R})`);n.push({parentRef:r,startRef:R,endRef:C,node:c}),s=C;continue}let g=i(m);c.kind==="element"&&N(c)&&l(c,g),s=g}}}function ke(e){return y(X(e)).split(Q).join(Se+Ee)}function X(e){return{...e,children:e.children.map(t=>k(t)?{kind:"text",value:Q}:t.kind==="element"?X(t):t)}}var Q="\0fx-hole\0";var Ie={show:"Show",for:"For",index:"Index",switch:"Switch",match:"Match",dynamic:"Dynamic",errorBoundary:"ErrorBoundary",suspense:"Suspense"};function Oe(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function te(e){return Oe(e)?e:JSON.stringify(e)}function Te(e){return e.expr!==void 0?e.reactive?`() => (${e.expr})`:`(${e.expr})`:JSON.stringify(e.literal??!0)}function we(e){return e.expr!==void 0?`(${e.expr})`:JSON.stringify(e.literal??!0)}function Me(e,t,n){let o=e.filter(r=>r.kind==="spread"),l=e.filter(r=>r.kind!=="spread").map(r=>`${te(r.name)}: ${Te(r)}`);t!=null&&l.push(`children: ${t}`);let a=`{ ${l.join(", ")} }`;return o.length>0?(n.add("mergeProps"),`mergeProps(${o.map(r=>r.expr).join(", ")}, ${a})`):a}function ne(e,t,n){return e.length===1?$(e[0],t,n):`[${e.map(o=>$(o,t,n)).join(", ")}]`}function ee(e,t,n,o,i){o.add("createMemo"),o.add("createComponent");let l=t.filter(s=>s.kind==="spread"),r=t.filter(s=>s.kind!=="spread").map(s=>`get ${te(s.name)}() { return ${we(s)}; }`);n.length>0&&r.push(`get children() { return ${ne(n,o,i)}; }`);let p=`{ ${r.join(", ")} }`;return l.length>0&&(o.add("mergeProps"),p=`mergeProps(${l.map(s=>s.expr).join(", ")}, ${p})`),`createMemo(() => createComponent(${e}, ${p}))`}function Ae(e,t){let n=q(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 re=!1;function $(e,t,n){switch(e.kind){case"text":return JSON.stringify(e.value);case"expr":return e.reactive?`() => (${e.code})`:`(${e.code})`;case"fragment":return e.children.length===0?"null":ne(e.children,t,n);case"component":return ee(e.name,e.props,e.children,t,n);case"control":{let o=Ie[e.control]??e.control;return t.add(o),ee(o,e.props,e.children,t,n)}case"element":{if(n&&e.static&&!e.svg&&P(e)){t.add("templateNode");let r=`_tmpl$${n.length}`;return n.push({id:r,html:y(e),tag:e.tag,svg:!1}),`templateNode(${r}, ${JSON.stringify(e.tag)})`}if(n&&re){let r=Y(e);if(r){t.add("templateNode"),t.add("insert"),t.add("holeEnd"),t.add("holeContent"),t.add("holeScope");let p=`_tmpl$${n.length}`;n.push({id:p,html:r.html,tag:r.tag,svg:!1});let s=[`const _el$ = templateNode(${p}, ${JSON.stringify(r.tag)}, true);`];for(let u of r.steps)s.push(`const ${u.ref} = ${u.expr};`);for(let u of r.holes)s.push(`insert(${u.parentRef}, holeScope(${u.startRef}, () => (${$(u.node,t,n)})), ${u.endRef}, holeContent(${u.startRef}, ${u.endRef}));`);return s.push("return _el$;"),`(() => { ${s.join(" ")} })()`}}t.add("createNativeElement");let o=JSON.stringify(e.tag),i="_el$",l=[],a=e.svg?`${o}, true`:o;if(l.push(`const ${i} = createNativeElement(${a});`),e.props.length>0)if(!e.svg&&e.props.every(b))for(let r of e.props)l.push(Ae(i,r));else{t.add("spread");let r=e.svg?", isSVG: true":"";l.push(`spread({ element: ${i}, props: ${Me(e.props,null,t)}${r} });`)}for(let r of e.children){t.add("insert");let p=$(r,t,n),s=r.kind==="expr"&&r.reactive||r.kind==="component"||r.kind==="control";l.push(s?`insert(${i}, ${p}, null);`:`insert(${i}, ${p});`)}return l.push(`return ${i};`),`(() => { ${l.join(" ")} })()`}}}var _={name:"imperative",contract:A,emit(e,t){let n=new Set,o=t?.templateClone!==!1?[]:void 0;return re=t?.partialTemplates===!0,{code:$(e,n,o),imports:Array.from(n),templates:o}}};var ut={imperative:_};export{_e as BUILTIN_COMPONENTS,O as CORE_CONTROL_FLOW,me as DEFAULT_GLOBALS_PATH,I as DOM_CONTROL_FLOW,T as RESERVED_COMPONENTS,x as ROUTER_COMPONENTS,A as RUNTIME_CONTRACT_V1,tt as RUNTIME_CONTRACT_V2,ut as backends,v as builtinComponentMap,Le as builtinComponents,G as componentGlobals,B as createComponentResolver,Qe as defaultOptions,_ as imperativeBackend,Ye as resolveComponentSources,Be as routerComponents,U as walk,Ue as writeComponentGlobals};
|