@fluixi/compiler 1.0.0-alpha.82 → 1.0.0-alpha.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/analyze/expr-shape.cjs +62 -1
  2. package/dist/analyze/expr-shape.d.cts +14 -0
  3. package/dist/analyze/expr-shape.mjs +41 -1
  4. package/dist/analyze/intrinsics.cjs +80 -1
  5. package/dist/analyze/intrinsics.d.cts +66 -0
  6. package/dist/analyze/intrinsics.mjs +59 -1
  7. package/dist/analyze/paren.cjs +134 -0
  8. package/dist/analyze/paren.d.cts +23 -0
  9. package/dist/analyze/paren.d.ts +24 -0
  10. package/dist/analyze/paren.d.ts.map +1 -0
  11. package/dist/analyze/paren.js +168 -0
  12. package/dist/analyze/paren.mjs +113 -0
  13. package/dist/analyze/props-destructure.cjs +226 -1
  14. package/dist/analyze/props-destructure.d.cts +83 -0
  15. package/dist/analyze/props-destructure.mjs +205 -1
  16. package/dist/analyze/reactive-bindings.cjs +190 -1
  17. package/dist/analyze/reactive-bindings.d.cts +42 -0
  18. package/dist/analyze/reactive-bindings.mjs +167 -1
  19. package/dist/analyze/reactive-expr.cjs +38 -1
  20. package/dist/analyze/reactive-expr.d.cts +38 -0
  21. package/dist/analyze/reactive-expr.mjs +17 -1
  22. package/dist/analyze/static-graph.cjs +811 -0
  23. package/dist/analyze/static-graph.d.cts +102 -0
  24. package/dist/analyze/static-graph.d.ts +103 -0
  25. package/dist/analyze/static-graph.d.ts.map +1 -0
  26. package/dist/analyze/static-graph.js +869 -0
  27. package/dist/analyze/static-graph.mjs +793 -0
  28. package/dist/babel-NRW4EFTG.mjs +636 -0
  29. package/dist/chunk-3YKZ4GNH.mjs +11 -0
  30. package/dist/chunk-EZR7NZOY.mjs +1718 -0
  31. package/dist/chunk-FSSWUXUR.mjs +16 -0
  32. package/dist/chunk-MJV3UXIL.mjs +158 -0
  33. package/dist/chunk-R2VHAZAX.mjs +1078 -0
  34. package/dist/codegen/backend.cjs +18 -1
  35. package/dist/codegen/backend.d.cts +35 -0
  36. package/dist/codegen/backends/imperative.cjs +542 -1
  37. package/dist/codegen/backends/imperative.d.cts +11 -0
  38. package/dist/codegen/backends/imperative.d.ts.map +1 -1
  39. package/dist/codegen/backends/imperative.js +68 -13
  40. package/dist/codegen/backends/imperative.mjs +519 -1
  41. package/dist/codegen/contract.cjs +52 -1
  42. package/dist/codegen/contract.d.cts +24 -0
  43. package/dist/codegen/contract.mjs +31 -1
  44. package/dist/codegen/partial-template.cjs +176 -1
  45. package/dist/codegen/partial-template.d.cts +61 -0
  46. package/dist/codegen/partial-template.mjs +153 -1
  47. package/dist/codegen/serialize-static.cjs +125 -1
  48. package/dist/codegen/serialize-static.d.cts +38 -0
  49. package/dist/codegen/serialize-static.d.ts +16 -0
  50. package/dist/codegen/serialize-static.d.ts.map +1 -1
  51. package/dist/codegen/serialize-static.js +25 -0
  52. package/dist/codegen/serialize-static.mjs +104 -1
  53. package/dist/frontend/babel/build-ir-lit.cjs +1509 -1
  54. package/dist/frontend/babel/build-ir-lit.d.cts +26 -0
  55. package/dist/frontend/babel/build-ir-lit.mjs +1478 -1
  56. package/dist/frontend/babel/build-ir.cjs +1524 -1
  57. package/dist/frontend/babel/build-ir.d.cts +35 -0
  58. package/dist/frontend/babel/build-ir.mjs +1495 -1
  59. package/dist/frontend/babel/index.cjs +2186 -1
  60. package/dist/frontend/babel/index.d.cts +33 -0
  61. package/dist/frontend/babel/index.mjs +2156 -1
  62. package/dist/frontend/babel/lower-template.cjs +1507 -1
  63. package/dist/frontend/babel/lower-template.d.cts +23 -0
  64. package/dist/frontend/babel/lower-template.mjs +1478 -1
  65. package/dist/frontend/babel/plugin.cjs +2132 -1
  66. package/dist/frontend/babel/plugin.d.cts +95 -0
  67. package/dist/frontend/babel/plugin.mjs +2103 -1
  68. package/dist/frontend/babel/server-functions.cjs +110 -1
  69. package/dist/frontend/babel/server-functions.d.cts +10 -0
  70. package/dist/frontend/babel/server-functions.mjs +89 -1
  71. package/dist/frontend/babel/types.cjs +18 -1
  72. package/dist/frontend/babel/types.d.cts +33 -0
  73. package/dist/frontend/types.cjs +18 -1
  74. package/dist/frontend/types.d.cts +25 -0
  75. package/dist/frontend/vocabulary.cjs +98 -0
  76. package/dist/frontend/vocabulary.d.cts +79 -0
  77. package/dist/frontend/vocabulary.d.ts +80 -0
  78. package/dist/frontend/vocabulary.d.ts.map +1 -0
  79. package/dist/frontend/vocabulary.js +124 -0
  80. package/dist/frontend/vocabulary.mjs +77 -0
  81. package/dist/index.cjs +1594 -13
  82. package/dist/index.d.cts +27 -0
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +3 -0
  85. package/dist/index.mjs +1574 -13
  86. package/dist/integrations.cjs +4307 -25
  87. package/dist/integrations.d.cts +215 -0
  88. package/dist/integrations.d.ts +16 -0
  89. package/dist/integrations.d.ts.map +1 -1
  90. package/dist/integrations.js +21 -2
  91. package/dist/integrations.mjs +531 -17
  92. package/dist/ir/nodes.cjs +18 -1
  93. package/dist/ir/nodes.d.cts +168 -0
  94. package/dist/ir/nodes.d.ts +46 -0
  95. package/dist/ir/nodes.d.ts.map +1 -1
  96. package/dist/lower/compile-template.cjs +1356 -1
  97. package/dist/lower/compile-template.d.cts +69 -0
  98. package/dist/lower/compile-template.d.ts +12 -0
  99. package/dist/lower/compile-template.d.ts.map +1 -1
  100. package/dist/lower/compile-template.js +5 -1
  101. package/dist/lower/compile-template.mjs +1336 -1
  102. package/dist/lower/jsx.cjs +529 -1
  103. package/dist/lower/jsx.d.cts +25 -0
  104. package/dist/lower/jsx.d.ts +2 -0
  105. package/dist/lower/jsx.d.ts.map +1 -1
  106. package/dist/lower/jsx.js +27 -4
  107. package/dist/lower/jsx.mjs +506 -1
  108. package/dist/lower/template.cjs +1061 -1
  109. package/dist/lower/template.d.cts +53 -0
  110. package/dist/lower/template.d.ts +14 -1
  111. package/dist/lower/template.d.ts.map +1 -1
  112. package/dist/lower/template.js +106 -19
  113. package/dist/lower/template.mjs +1042 -1
  114. package/dist/lower/text.cjs +42 -1
  115. package/dist/lower/text.d.cts +10 -0
  116. package/dist/lower/text.mjs +21 -1
  117. package/dist/optimize/analyze-static.cjs +112 -1
  118. package/dist/optimize/analyze-static.d.cts +39 -0
  119. package/dist/optimize/analyze-static.mjs +91 -1
  120. package/dist/optimize/collapse-strategies.cjs +90 -1
  121. package/dist/optimize/collapse-strategies.d.cts +30 -0
  122. package/dist/optimize/collapse-strategies.mjs +67 -1
  123. package/dist/options.cjs +33 -1
  124. package/dist/options.d.cts +39 -0
  125. package/dist/options.mjs +12 -1
  126. package/dist/resolve/builtins.cjs +73 -1
  127. package/dist/resolve/builtins.d.cts +68 -0
  128. package/dist/resolve/builtins.mjs +53 -1
  129. package/dist/resolve/component-globals.cjs +233 -13
  130. package/dist/resolve/component-globals.d.cts +80 -0
  131. package/dist/resolve/component-globals.mjs +210 -13
  132. package/dist/resolve/component-resolver.cjs +80 -1
  133. package/dist/resolve/component-resolver.d.cts +68 -0
  134. package/dist/resolve/component-resolver.mjs +59 -1
  135. package/dist/resolve/load-directive.cjs +93 -1
  136. package/dist/resolve/load-directive.d.cts +53 -0
  137. package/dist/resolve/load-directive.mjs +72 -1
  138. package/dist/resolve/resolve-ir.cjs +108 -1
  139. package/dist/resolve/resolve-ir.d.cts +53 -0
  140. package/dist/resolve/resolve-ir.mjs +85 -1
  141. package/dist/resolve/write-globals.cjs +318 -13
  142. package/dist/resolve/write-globals.d.cts +30 -0
  143. package/dist/resolve/write-globals.mjs +297 -13
  144. package/dist/server-fns-4ZXN6DYU.mjs +78 -0
  145. package/dist/server-functions-V6D6DRIA.mjs +82 -0
  146. package/dist/transform/bindings.cjs +71 -1
  147. package/dist/transform/bindings.d.cts +16 -0
  148. package/dist/transform/bindings.mjs +50 -1
  149. package/dist/transform/index.cjs +2732 -8
  150. package/dist/transform/index.d.cts +15 -0
  151. package/dist/transform/index.mjs +3773 -17
  152. package/dist/transform/intrinsics.cjs +216 -3
  153. package/dist/transform/intrinsics.d.cts +21 -0
  154. package/dist/transform/intrinsics.mjs +193 -3
  155. package/dist/transform/props.cjs +441 -3
  156. package/dist/transform/props.d.cts +45 -0
  157. package/dist/transform/props.mjs +1482 -12
  158. package/dist/transform/server-fn-id.cjs +35 -1
  159. package/dist/transform/server-fn-id.d.cts +9 -0
  160. package/dist/transform/server-fn-id.mjs +14 -1
  161. package/dist/transform/server-fns.cjs +114 -2
  162. package/dist/transform/server-fns.d.cts +12 -0
  163. package/dist/transform/server-fns.mjs +1155 -11
  164. package/dist/transform/source-locations.cjs +330 -0
  165. package/dist/transform/source-locations.d.cts +43 -0
  166. package/dist/transform/source-locations.d.ts +44 -0
  167. package/dist/transform/source-locations.d.ts.map +1 -0
  168. package/dist/transform/source-locations.js +238 -0
  169. package/dist/transform/source-locations.mjs +307 -0
  170. package/dist/transform/templates.cjs +2701 -7
  171. package/dist/transform/templates.d.cts +69 -0
  172. package/dist/transform/templates.d.ts +12 -4
  173. package/dist/transform/templates.d.ts.map +1 -1
  174. package/dist/transform/templates.js +72 -7
  175. package/dist/transform/templates.mjs +3743 -16
  176. package/dist/transform-BT4MMASR.mjs +893 -0
  177. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  178. package/package.json +6 -5
  179. package/dist/babel-4JUDAR2G.mjs +0 -1
  180. package/dist/chunk-3SAEGOMQ.mjs +0 -1
  181. package/dist/chunk-IBRM4W7I.mjs +0 -10
  182. package/dist/chunk-OHHZCYIQ.mjs +0 -1
  183. package/dist/chunk-PVR2SN3B.mjs +0 -1
  184. package/dist/chunk-QUIYULS2.mjs +0 -1
  185. package/dist/chunk-YR3SAEO7.mjs +0 -1
  186. package/dist/server-fns-6QM243HC.mjs +0 -2
  187. package/dist/server-functions-E3LKCZ4R.mjs +0 -1
  188. package/dist/transform-5WC4FWJE.mjs +0 -8
@@ -1 +1,72 @@
1
- var o={kind:"eager"},a=["pointerdown","focusin","keydown"],r=new Set(["eager","idle","visible","interaction","media","never"]),i=class extends Error{};function d(e){return e.startsWith("load:")}function c(e,n){let t=e.slice(5);if(!r.has(t))throw new i(`Unknown load strategy 'load:${t}'. Expected one of ${[...r].join(", ")}.`);switch(t){case"eager":return o;case"idle":return{kind:"idle"};case"never":return{kind:"never"};case"visible":return n?{kind:"visible",rootMargin:n}:{kind:"visible"};case"interaction":return{kind:"interaction",events:n?s(n):[...a]};case"media":if(!n)throw new i(`'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`);return{kind:"media",query:n};default:throw new i(`Unhandled load strategy '${t}'.`)}}function s(e){let n=e.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean);if(n.length===0)throw new i("'load:interaction' was given no event names.");return n}function l(e){return e.kind!=="eager"&&e.kind!=="never"}function g(e){switch(e.kind){case"visible":return`visible:${e.rootMargin??""}`;case"interaction":return`interaction:${[...e.events].sort().join(",")}`;case"media":return`media:${e.query}`;default:return e.kind}}export{a as DEFAULT_INTERACTION_EVENTS,o as EAGER,i as LoadDirectiveError,l as isDeferred,d as isLoadDirective,c as parseLoadDirective,g as strategyKey};
1
+ // src/resolve/load-directive.ts
2
+ var EAGER = { kind: "eager" };
3
+ var DEFAULT_INTERACTION_EVENTS = ["pointerdown", "focusin", "keydown"];
4
+ var STRATEGIES = /* @__PURE__ */ new Set(["eager", "idle", "visible", "interaction", "media", "never"]);
5
+ var LoadDirectiveError = class extends Error {
6
+ };
7
+ function isLoadDirective(name) {
8
+ return name.startsWith("load:");
9
+ }
10
+ function parseLoadDirective(name, value) {
11
+ const strategy = name.slice("load:".length);
12
+ if (!STRATEGIES.has(strategy)) {
13
+ throw new LoadDirectiveError(
14
+ `Unknown load strategy 'load:${strategy}'. Expected one of ${[...STRATEGIES].join(", ")}.`
15
+ );
16
+ }
17
+ switch (strategy) {
18
+ case "eager":
19
+ return EAGER;
20
+ case "idle":
21
+ return { kind: "idle" };
22
+ case "never":
23
+ return { kind: "never" };
24
+ case "visible":
25
+ return value ? { kind: "visible", rootMargin: value } : { kind: "visible" };
26
+ case "interaction":
27
+ return {
28
+ kind: "interaction",
29
+ events: value ? splitEvents(value) : [...DEFAULT_INTERACTION_EVENTS]
30
+ };
31
+ case "media":
32
+ if (!value) {
33
+ throw new LoadDirectiveError(
34
+ `'load:media' needs a query, e.g. load:media="(min-width: 1024px)".`
35
+ );
36
+ }
37
+ return { kind: "media", query: value };
38
+ default:
39
+ throw new LoadDirectiveError(`Unhandled load strategy '${strategy}'.`);
40
+ }
41
+ }
42
+ function splitEvents(value) {
43
+ const events = value.split(/[\s,]+/).map((e) => e.trim()).filter(Boolean);
44
+ if (events.length === 0) {
45
+ throw new LoadDirectiveError(`'load:interaction' was given no event names.`);
46
+ }
47
+ return events;
48
+ }
49
+ function isDeferred(strategy) {
50
+ return strategy.kind !== "eager" && strategy.kind !== "never";
51
+ }
52
+ function strategyKey(strategy) {
53
+ switch (strategy.kind) {
54
+ case "visible":
55
+ return `visible:${strategy.rootMargin ?? ""}`;
56
+ case "interaction":
57
+ return `interaction:${[...strategy.events].sort().join(",")}`;
58
+ case "media":
59
+ return `media:${strategy.query}`;
60
+ default:
61
+ return strategy.kind;
62
+ }
63
+ }
64
+ export {
65
+ DEFAULT_INTERACTION_EVENTS,
66
+ EAGER,
67
+ LoadDirectiveError,
68
+ isDeferred,
69
+ isLoadDirective,
70
+ parseLoadDirective,
71
+ strategyKey
72
+ };
@@ -1 +1,108 @@
1
- "use strict";var c=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var w=(n,e)=>{for(var i in e)c(n,i,{get:e[i],enumerable:!0})},N=(n,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of y(e))!I.call(n,o)&&o!==i&&c(n,o,{get:()=>e[o],enumerable:!(s=M(e,o))||s.enumerable});return n};var k=n=>N(c({},"__esModule",{value:!0}),n);var h={};w(h,{resolveComponentSources:()=>b,walk:()=>f});module.exports=k(h);var l=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],p=["Suspense","SuspenseList","Await"],a=["Router","Outlet","Redirect","Link"],L=[...l,...p,...a],m=new Set([...l,...p]);function S(n={}){let{controlFlowModule:e="@fluixi/dom",coreModule:i="@fluixi/core",routerModule:s="@fluixi/core/router"}=n,o={};for(let d of l)o[d]=e;for(let d of p)o[d]=i;for(let d of a)o[d]=s;return o}var R={kind:"eager"};function b(n,e={}){let{resolver:i,isBound:s,modules:o,strategyFor:d}=e,g=S(o),v=new Map,x=new Set,E=t=>{let{name:r}=t;if(!r||r.includes(".")||s?.(r))return;let u=O(r);if(!u){x.add(r);return}let C=u.origin==="builtin"&&m.has(r)?R:d?.(t)??R;t.source={...u,loading:C},v.set(r,t.source)},O=t=>{if(m.has(t))return{module:g[t],export:t,origin:"builtin"};let r=i?.resolve(t);if(r)return{module:r.module,export:r.export,origin:"rule"};if(a.includes(t))return{module:g[t],export:t,origin:"builtin"}};return f(n,t=>{t.kind==="component"&&E(t)}),{resolved:v,unresolved:[...x]}}function f(n,e){let i=Array.isArray(n)?n:[n];for(let s of i){e(s);let o=s.children;o&&f(o,e)}}
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/resolve/resolve-ir.ts
21
+ var resolve_ir_exports = {};
22
+ __export(resolve_ir_exports, {
23
+ resolveComponentSources: () => resolveComponentSources,
24
+ walk: () => walk
25
+ });
26
+ module.exports = __toCommonJS(resolve_ir_exports);
27
+
28
+ // src/resolve/builtins.ts
29
+ var DOM_CONTROL_FLOW = [
30
+ "Show",
31
+ "For",
32
+ "Index",
33
+ "Switch",
34
+ "Match",
35
+ "Portal",
36
+ "Dynamic",
37
+ "ErrorBoundary"
38
+ ];
39
+ var CORE_CONTROL_FLOW = ["Suspense", "SuspenseList", "Await"];
40
+ var ROUTER_COMPONENTS = ["Router", "Outlet", "Redirect", "Link"];
41
+ var BUILTIN_COMPONENTS = [
42
+ ...DOM_CONTROL_FLOW,
43
+ ...CORE_CONTROL_FLOW,
44
+ ...ROUTER_COMPONENTS
45
+ ];
46
+ var RESERVED_COMPONENTS = /* @__PURE__ */ new Set([
47
+ ...DOM_CONTROL_FLOW,
48
+ ...CORE_CONTROL_FLOW
49
+ ]);
50
+ function builtinComponentMap(modules = {}) {
51
+ const {
52
+ controlFlowModule = "@fluixi/dom",
53
+ coreModule = "@fluixi/core",
54
+ routerModule = "@fluixi/core/router"
55
+ } = modules;
56
+ const map = {};
57
+ for (const name of DOM_CONTROL_FLOW) map[name] = controlFlowModule;
58
+ for (const name of CORE_CONTROL_FLOW) map[name] = coreModule;
59
+ for (const name of ROUTER_COMPONENTS) map[name] = routerModule;
60
+ return map;
61
+ }
62
+
63
+ // src/resolve/load-directive.ts
64
+ var EAGER = { kind: "eager" };
65
+
66
+ // src/resolve/resolve-ir.ts
67
+ function resolveComponentSources(root, options = {}) {
68
+ const { resolver, isBound, modules, strategyFor } = options;
69
+ const builtins = builtinComponentMap(modules);
70
+ const resolved = /* @__PURE__ */ new Map();
71
+ const unresolved = /* @__PURE__ */ new Set();
72
+ const annotate = (node) => {
73
+ const { name } = node;
74
+ if (!name || name.includes(".")) return;
75
+ if (isBound?.(name)) return;
76
+ const source = sourceFor(name);
77
+ if (!source) {
78
+ unresolved.add(name);
79
+ return;
80
+ }
81
+ const loading = source.origin === "builtin" && RESERVED_COMPONENTS.has(name) ? EAGER : strategyFor?.(node) ?? EAGER;
82
+ node.source = { ...source, loading };
83
+ resolved.set(name, node.source);
84
+ };
85
+ const sourceFor = (name) => {
86
+ if (RESERVED_COMPONENTS.has(name)) {
87
+ return { module: builtins[name], export: name, origin: "builtin" };
88
+ }
89
+ const rule = resolver?.resolve(name);
90
+ if (rule) return { module: rule.module, export: rule.export, origin: "rule" };
91
+ if (ROUTER_COMPONENTS.includes(name)) {
92
+ return { module: builtins[name], export: name, origin: "builtin" };
93
+ }
94
+ return void 0;
95
+ };
96
+ walk(root, (node) => {
97
+ if (node.kind === "component") annotate(node);
98
+ });
99
+ return { resolved, unresolved: [...unresolved] };
100
+ }
101
+ function walk(root, visit) {
102
+ const nodes = Array.isArray(root) ? root : [root];
103
+ for (const node of nodes) {
104
+ visit(node);
105
+ const children = node.children;
106
+ if (children) walk(children, visit);
107
+ }
108
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The resolve pass: annotate component references in the IR with where they come from.
3
+ *
4
+ * Runs between the frontends and the optimizer, so every later pass reads provenance off
5
+ * the node instead of re-deriving it. Nothing here emits code — the pass only records a
6
+ * decision, which is what lets the same answer drive import injection, chunk grouping,
7
+ * hint planning and diagnostics without any of them agreeing by coincidence.
8
+ *
9
+ * Two suppliers, in precedence order:
10
+ *
11
+ * 1. **Control flow** (`Show`, `For`, `Switch`, …) — the name selects a lowering, so a
12
+ * rule cannot re-point it. Recorded as `builtin` so a later pass can tell the
13
+ * difference between "configured here" and "fixed by the compiler".
14
+ * 2. **Configured rules**, then the **router built-ins**. Router components are only an
15
+ * import, so a project's own `Link` wins; see `builtins.ts`.
16
+ *
17
+ * A name bound in the file is not resolved at all: the author's import always wins, and
18
+ * the caller supplies those bindings via `isBound`.
19
+ */
20
+ import type { IRNode, IRComponent, IRComponentSource } from '../ir/nodes.cjs';
21
+ import type { ComponentResolver } from './component-resolver.cjs';
22
+ import { builtinComponentMap } from './builtins.cjs';
23
+ import { type IRLoadStrategy } from './load-directive.cjs';
24
+ export interface ResolveOptions {
25
+ /** Rules configured for the project. Omit when the project configures none. */
26
+ resolver?: ComponentResolver;
27
+ /** True when the name already has a binding in the file — an import the author wrote. */
28
+ isBound?: (name: string) => boolean;
29
+ /** Module overrides, so `routerModule` and friends are honoured. */
30
+ modules?: Parameters<typeof builtinComponentMap>[0];
31
+ /**
32
+ * The `load:` strategy for a reference, when the frontend found one on the tag.
33
+ * Keyed by node so two usages of the same component can load differently — the
34
+ * whole reason timing lives at the usage site and location does not.
35
+ */
36
+ strategyFor?: (node: IRComponent) => IRLoadStrategy | undefined;
37
+ }
38
+ export interface ResolveReport {
39
+ /** Every reference the pass annotated, by name. */
40
+ resolved: Map<string, IRComponentSource>;
41
+ /**
42
+ * Capitalised tags nothing supplies and nothing binds.
43
+ *
44
+ * These compile to a reference to an identifier that does not exist — the build
45
+ * succeeds and the page throws at runtime — so they are the pass's most useful
46
+ * output for diagnostics.
47
+ */
48
+ unresolved: string[];
49
+ }
50
+ /** Annotate every component reference in `root`, returning what was decided. */
51
+ export declare function resolveComponentSources(root: IRNode | IRNode[], options?: ResolveOptions): ResolveReport;
52
+ /** Depth-first walk over every node that can contain children. */
53
+ export declare function walk(root: IRNode | IRNode[], visit: (node: IRNode) => void): void;
@@ -1 +1,85 @@
1
- var c=["Show","For","Index","Switch","Match","Portal","Dynamic","ErrorBoundary"],l=["Suspense","SuspenseList","Await"],a=["Router","Outlet","Redirect","Link"],C=[...c,...l,...a],p=new Set([...c,...l]);function v(t={}){let{controlFlowModule:i="@fluixi/dom",coreModule:d="@fluixi/core",routerModule:s="@fluixi/core/router"}=t,o={};for(let r of c)o[r]=i;for(let r of l)o[r]=d;for(let r of a)o[r]=s;return o}var m={kind:"eager"};function N(t,i={}){let{resolver:d,isBound:s,modules:o,strategyFor:r}=i,R=v(o),f=new Map,g=new Set,S=e=>{let{name:n}=e;if(!n||n.includes(".")||s?.(n))return;let u=E(n);if(!u){g.add(n);return}let O=u.origin==="builtin"&&p.has(n)?m:r?.(e)??m;e.source={...u,loading:O},f.set(n,e.source)},E=e=>{if(p.has(e))return{module:R[e],export:e,origin:"builtin"};let n=d?.resolve(e);if(n)return{module:n.module,export:n.export,origin:"rule"};if(a.includes(e))return{module:R[e],export:e,origin:"builtin"}};return x(t,e=>{e.kind==="component"&&S(e)}),{resolved:f,unresolved:[...g]}}function x(t,i){let d=Array.isArray(t)?t:[t];for(let s of d){i(s);let o=s.children;o&&x(o,i)}}export{N as resolveComponentSources,x as walk};
1
+ // src/resolve/builtins.ts
2
+ var DOM_CONTROL_FLOW = [
3
+ "Show",
4
+ "For",
5
+ "Index",
6
+ "Switch",
7
+ "Match",
8
+ "Portal",
9
+ "Dynamic",
10
+ "ErrorBoundary"
11
+ ];
12
+ var CORE_CONTROL_FLOW = ["Suspense", "SuspenseList", "Await"];
13
+ var ROUTER_COMPONENTS = ["Router", "Outlet", "Redirect", "Link"];
14
+ var BUILTIN_COMPONENTS = [
15
+ ...DOM_CONTROL_FLOW,
16
+ ...CORE_CONTROL_FLOW,
17
+ ...ROUTER_COMPONENTS
18
+ ];
19
+ var RESERVED_COMPONENTS = /* @__PURE__ */ new Set([
20
+ ...DOM_CONTROL_FLOW,
21
+ ...CORE_CONTROL_FLOW
22
+ ]);
23
+ function builtinComponentMap(modules = {}) {
24
+ const {
25
+ controlFlowModule = "@fluixi/dom",
26
+ coreModule = "@fluixi/core",
27
+ routerModule = "@fluixi/core/router"
28
+ } = modules;
29
+ const map = {};
30
+ for (const name of DOM_CONTROL_FLOW) map[name] = controlFlowModule;
31
+ for (const name of CORE_CONTROL_FLOW) map[name] = coreModule;
32
+ for (const name of ROUTER_COMPONENTS) map[name] = routerModule;
33
+ return map;
34
+ }
35
+
36
+ // src/resolve/load-directive.ts
37
+ var EAGER = { kind: "eager" };
38
+
39
+ // src/resolve/resolve-ir.ts
40
+ function resolveComponentSources(root, options = {}) {
41
+ const { resolver, isBound, modules, strategyFor } = options;
42
+ const builtins = builtinComponentMap(modules);
43
+ const resolved = /* @__PURE__ */ new Map();
44
+ const unresolved = /* @__PURE__ */ new Set();
45
+ const annotate = (node) => {
46
+ const { name } = node;
47
+ if (!name || name.includes(".")) return;
48
+ if (isBound?.(name)) return;
49
+ const source = sourceFor(name);
50
+ if (!source) {
51
+ unresolved.add(name);
52
+ return;
53
+ }
54
+ const loading = source.origin === "builtin" && RESERVED_COMPONENTS.has(name) ? EAGER : strategyFor?.(node) ?? EAGER;
55
+ node.source = { ...source, loading };
56
+ resolved.set(name, node.source);
57
+ };
58
+ const sourceFor = (name) => {
59
+ if (RESERVED_COMPONENTS.has(name)) {
60
+ return { module: builtins[name], export: name, origin: "builtin" };
61
+ }
62
+ const rule = resolver?.resolve(name);
63
+ if (rule) return { module: rule.module, export: rule.export, origin: "rule" };
64
+ if (ROUTER_COMPONENTS.includes(name)) {
65
+ return { module: builtins[name], export: name, origin: "builtin" };
66
+ }
67
+ return void 0;
68
+ };
69
+ walk(root, (node) => {
70
+ if (node.kind === "component") annotate(node);
71
+ });
72
+ return { resolved, unresolved: [...unresolved] };
73
+ }
74
+ function walk(root, visit) {
75
+ const nodes = Array.isArray(root) ? root : [root];
76
+ for (const node of nodes) {
77
+ visit(node);
78
+ const children = node.children;
79
+ if (children) walk(children, visit);
80
+ }
81
+ }
82
+ export {
83
+ resolveComponentSources,
84
+ walk
85
+ };