@fluixi/dom 1.0.0-alpha.83 → 1.0.0-alpha.85

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 (182) hide show
  1. package/dist/cdn/dom-client.cjs +1427 -1
  2. package/dist/cdn/dom-client.d.ts +2 -2
  3. package/dist/cdn/dom-client.global.js +2 -1
  4. package/dist/cdn/dom-client.js +3 -3
  5. package/dist/cdn/dom-client.mjs +1430 -1
  6. package/dist/cdn/dom.cjs +3127 -1
  7. package/dist/cdn/dom.d.ts +2 -2
  8. package/dist/cdn/dom.global.js +2 -1
  9. package/dist/cdn/dom.js +4 -4
  10. package/dist/cdn/dom.mjs +3133 -1
  11. package/dist/index.cjs +3155 -1
  12. package/dist/index.js +2 -2
  13. package/dist/index.mjs +3149 -1
  14. package/dist/lib/component/index.cjs +128 -1
  15. package/dist/lib/component/index.mjs +105 -1
  16. package/dist/lib/component/modifiers.cjs +126 -1
  17. package/dist/lib/component/modifiers.d.ts +12 -0
  18. package/dist/lib/component/modifiers.d.ts.map +1 -1
  19. package/dist/lib/component/modifiers.js +12 -84
  20. package/dist/lib/component/modifiers.mjs +105 -1
  21. package/dist/lib/dom/delegate.cjs +60 -1
  22. package/dist/lib/dom/delegate.js +1 -1
  23. package/dist/lib/dom/delegate.mjs +39 -1
  24. package/dist/lib/dom/dynamic-element.cjs +949 -1
  25. package/dist/lib/dom/dynamic-element.d.ts +3 -3
  26. package/dist/lib/dom/dynamic-element.js +2 -2
  27. package/dist/lib/dom/dynamic-element.mjs +928 -1
  28. package/dist/lib/dom/hydration-state.cjs +93 -1
  29. package/dist/lib/dom/hydration-state.d.ts +1 -1
  30. package/dist/lib/dom/hydration-state.js +1 -1
  31. package/dist/lib/dom/hydration-state.mjs +72 -1
  32. package/dist/lib/dom/hydration.cjs +685 -1
  33. package/dist/lib/dom/hydration.js +8 -8
  34. package/dist/lib/dom/hydration.mjs +664 -1
  35. package/dist/lib/dom/index.cjs +2040 -1
  36. package/dist/lib/dom/index.js +1 -1
  37. package/dist/lib/dom/index.mjs +2020 -1
  38. package/dist/lib/dom/integration.cjs +71 -1
  39. package/dist/lib/dom/integration.js +3 -3
  40. package/dist/lib/dom/integration.mjs +51 -1
  41. package/dist/lib/dom/island.cjs +790 -1
  42. package/dist/lib/dom/island.d.ts +1 -1
  43. package/dist/lib/dom/island.js +11 -11
  44. package/dist/lib/dom/island.mjs +769 -1
  45. package/dist/lib/dom/runtime.cjs +1432 -1
  46. package/dist/lib/dom/runtime.d.ts +60 -17
  47. package/dist/lib/dom/runtime.d.ts.map +1 -1
  48. package/dist/lib/dom/runtime.js +122 -79
  49. package/dist/lib/dom/runtime.mjs +1414 -1
  50. package/dist/lib/dom/server/fx-data.cjs +53 -1
  51. package/dist/lib/dom/server/fx-data.d.ts +5 -5
  52. package/dist/lib/dom/server/fx-data.js +6 -6
  53. package/dist/lib/dom/server/fx-data.mjs +32 -1
  54. package/dist/lib/dom/server/host.cjs +66 -1
  55. package/dist/lib/dom/server/host.d.ts +6 -0
  56. package/dist/lib/dom/server/host.d.ts.map +1 -1
  57. package/dist/lib/dom/server/host.js +7 -1
  58. package/dist/lib/dom/server/host.mjs +45 -1
  59. package/dist/lib/dom/server/index.cjs +759 -1
  60. package/dist/lib/dom/server/index.d.ts +1 -1
  61. package/dist/lib/dom/server/index.js +1 -1
  62. package/dist/lib/dom/server/index.mjs +743 -1
  63. package/dist/lib/dom/server/nodes.cjs +302 -1
  64. package/dist/lib/dom/server/nodes.d.ts +2 -2
  65. package/dist/lib/dom/server/nodes.d.ts.map +1 -1
  66. package/dist/lib/dom/server/nodes.js +4 -4
  67. package/dist/lib/dom/server/nodes.mjs +279 -1
  68. package/dist/lib/dom/server/parse-template.cjs +395 -1
  69. package/dist/lib/dom/server/parse-template.d.ts +1 -1
  70. package/dist/lib/dom/server/parse-template.js +4 -4
  71. package/dist/lib/dom/server/parse-template.mjs +372 -1
  72. package/dist/lib/dom/server/render.cjs +691 -1
  73. package/dist/lib/dom/server/render.d.ts +9 -1
  74. package/dist/lib/dom/server/render.d.ts.map +1 -1
  75. package/dist/lib/dom/server/render.js +23 -15
  76. package/dist/lib/dom/server/render.mjs +677 -1
  77. package/dist/lib/dom/server/request-context.cjs +110 -1
  78. package/dist/lib/dom/server/request-context.d.ts +29 -9
  79. package/dist/lib/dom/server/request-context.d.ts.map +1 -1
  80. package/dist/lib/dom/server/request-context.js +28 -8
  81. package/dist/lib/dom/server/request-context.mjs +89 -1
  82. package/dist/lib/dom/server/serialize.cjs +187 -1
  83. package/dist/lib/dom/server/serialize.js +3 -3
  84. package/dist/lib/dom/server/serialize.mjs +164 -1
  85. package/dist/lib/dom/server-renderer.cjs +760 -1
  86. package/dist/lib/dom/server-renderer.js +1 -1
  87. package/dist/lib/dom/server-renderer.mjs +745 -1
  88. package/dist/lib/dom/types.cjs +18 -1
  89. package/dist/lib/dom/utils.cjs +381 -1
  90. package/dist/lib/dom/utils.d.ts +1 -88
  91. package/dist/lib/dom/utils.d.ts.map +1 -1
  92. package/dist/lib/dom/utils.js +2 -99
  93. package/dist/lib/dom/utils.mjs +361 -1
  94. package/dist/lib/dom/versions.cjs +60 -1
  95. package/dist/lib/dom/versions.d.ts +3 -3
  96. package/dist/lib/dom/versions.d.ts.map +1 -1
  97. package/dist/lib/dom/versions.js +17 -5
  98. package/dist/lib/dom/versions.mjs +37 -1
  99. package/dist/lib/element/attributes.cjs +19 -1
  100. package/dist/lib/element/attributes.d.ts +7 -7
  101. package/dist/lib/element/attributes.js +1 -1
  102. package/dist/lib/element/attributes.mjs +1 -0
  103. package/dist/lib/element/index.cjs +19 -1
  104. package/dist/lib/element/index.mjs +1 -0
  105. package/dist/lib/element/types.cjs +18 -1
  106. package/dist/lib/element/types.d.ts +4 -5
  107. package/dist/lib/element/types.d.ts.map +1 -1
  108. package/dist/lib/element/types.js +0 -1
  109. package/dist/lib/flow/class-map.cjs +38 -1
  110. package/dist/lib/flow/class-map.d.ts +3 -3
  111. package/dist/lib/flow/class-map.js +2 -2
  112. package/dist/lib/flow/class-map.mjs +17 -1
  113. package/dist/lib/flow/client-only.cjs +57 -1
  114. package/dist/lib/flow/client-only.d.ts +4 -4
  115. package/dist/lib/flow/client-only.js +3 -3
  116. package/dist/lib/flow/client-only.mjs +36 -1
  117. package/dist/lib/flow/dynamic.cjs +53 -1
  118. package/dist/lib/flow/dynamic.d.ts +2 -2
  119. package/dist/lib/flow/dynamic.js +3 -3
  120. package/dist/lib/flow/dynamic.mjs +32 -1
  121. package/dist/lib/flow/error-boundary.cjs +43 -1
  122. package/dist/lib/flow/error-boundary.d.ts +2 -2
  123. package/dist/lib/flow/error-boundary.js +3 -3
  124. package/dist/lib/flow/error-boundary.mjs +22 -1
  125. package/dist/lib/flow/for.cjs +66 -1
  126. package/dist/lib/flow/for.d.ts +9 -9
  127. package/dist/lib/flow/for.d.ts.map +1 -1
  128. package/dist/lib/flow/for.js +2 -2
  129. package/dist/lib/flow/for.mjs +45 -1
  130. package/dist/lib/flow/index-flow.cjs +67 -1
  131. package/dist/lib/flow/index-flow.d.ts +5 -5
  132. package/dist/lib/flow/index-flow.js +4 -4
  133. package/dist/lib/flow/index-flow.mjs +46 -1
  134. package/dist/lib/flow/index.cjs +805 -1
  135. package/dist/lib/flow/index.mjs +792 -1
  136. package/dist/lib/flow/portal.cjs +538 -1
  137. package/dist/lib/flow/portal.mjs +519 -1
  138. package/dist/lib/flow/show.cjs +81 -1
  139. package/dist/lib/flow/show.d.ts +1 -1
  140. package/dist/lib/flow/show.d.ts.map +1 -1
  141. package/dist/lib/flow/show.js +4 -115
  142. package/dist/lib/flow/show.mjs +67 -1
  143. package/dist/lib/flow/style-map.cjs +43 -1
  144. package/dist/lib/flow/style-map.d.ts +3 -3
  145. package/dist/lib/flow/style-map.js +3 -3
  146. package/dist/lib/flow/style-map.mjs +22 -1
  147. package/dist/lib/flow/switch.cjs +91 -1
  148. package/dist/lib/flow/switch.d.ts +3 -3
  149. package/dist/lib/flow/switch.d.ts.map +1 -1
  150. package/dist/lib/flow/switch.js +6 -6
  151. package/dist/lib/flow/switch.mjs +70 -1
  152. package/dist/lib/flow/utils.cjs +44 -1
  153. package/dist/lib/flow/utils.d.ts +1 -1
  154. package/dist/lib/flow/utils.js +1 -1
  155. package/dist/lib/flow/utils.mjs +23 -1
  156. package/dist/lib/html.cjs +32 -1
  157. package/dist/lib/html.d.ts +6 -6
  158. package/dist/lib/html.js +5 -5
  159. package/dist/lib/html.mjs +11 -1
  160. package/dist/lib/index.cjs +3104 -1
  161. package/dist/lib/index.d.ts +0 -1
  162. package/dist/lib/index.d.ts.map +1 -1
  163. package/dist/lib/index.js +2 -3
  164. package/dist/lib/index.mjs +3097 -1
  165. package/dist/lib/shared/types.cjs +18 -1
  166. package/dist/lib/shared/types.d.ts +8 -8
  167. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  168. package/dist/version.generated.cjs +26 -1
  169. package/dist/version.generated.d.ts +1 -1
  170. package/dist/version.generated.js +2 -2
  171. package/dist/version.generated.mjs +5 -1
  172. package/package.json +7 -6
  173. package/dist/lib/jsx/control-flow/flow.cjs +0 -1
  174. package/dist/lib/jsx/control-flow/flow.d.ts +0 -2
  175. package/dist/lib/jsx/control-flow/flow.d.ts.map +0 -1
  176. package/dist/lib/jsx/control-flow/flow.js +0 -627
  177. package/dist/lib/jsx/control-flow/flow.mjs +0 -0
  178. package/dist/lib/jsx/control-flow/for-flow.cjs +0 -1
  179. package/dist/lib/jsx/control-flow/for-flow.d.ts +0 -2
  180. package/dist/lib/jsx/control-flow/for-flow.d.ts.map +0 -1
  181. package/dist/lib/jsx/control-flow/for-flow.js +0 -1
  182. package/dist/lib/jsx/control-flow/for-flow.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  import { type RequestContext, type RequestEvent } from './request-context.js';
2
2
  export interface RenderOptions {
3
- /** request being rendered exposed to the app via getRequestEvent() */
3
+ /** request being rendered: exposed to the app via getRequestEvent() */
4
4
  event?: RequestEvent;
5
5
  /**
6
6
  * Runs ONCE inside the request context, before the app renders. Use it to resolve
@@ -10,6 +10,14 @@ export interface RenderOptions {
10
10
  */
11
11
  preload?: (event?: RequestEvent) => void | Promise<void>;
12
12
  }
13
+ /**
14
+ * Render an app to an HTML string.
15
+ *
16
+ * Turns on server mode for the duration, so `createNativeElement` builds serializable
17
+ * stand-ins rather than DOM, and restores whatever it was afterwards. Everything runs
18
+ * inside one request context and one owner, so a resource created during the render is
19
+ * collected and its data serialized for the client to hydrate from.
20
+ */
13
21
  export declare function renderToString(app: () => any, options?: RenderOptions): string;
14
22
  /**
15
23
  * Optional redactor: transform (or drop) each resource value before it's serialized
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../src/lib/dom/server/render.ts"],"names":[],"mappings":"AAqCA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAmBlF;AAqBD;;;;;;;;;;;;;;GAcG;AACH,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;AAE5D,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAgCjE;AAKD,oFAAoF;AAEpF;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,GAAG,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAyDjB"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../src/lib/dom/server/render.ts"],"names":[],"mappings":"AAqCA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAmBlF;AAqBD;;;;;;;;;;;;;;GAcG;AACH,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;AAE5D,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAgCjE;AAKD,oFAAoF;AAEpF;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,GAAG,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAyDjB"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Server rendering run an imperative app() under server mode and serialize the
2
+ * Server rendering: run an imperative app() under server mode and serialize the
3
3
  * resulting node tree to HTML. `renderToString` is synchronous render-once (for
4
4
  * loader-free apps); `renderToStringAsync` awaits in-flight resources/Suspense
5
5
  * before serializing. Both wrap the render in createRoot so effects/owner are
@@ -28,6 +28,14 @@ function ensureServerNodes() {
28
28
  }
29
29
  import { escapeFxJson, FX_DATA_ID } from './fx-data.js';
30
30
  import { createRequestContext, runWithRequestContext, getRequestContext, } from './request-context.js';
31
+ /**
32
+ * Render an app to an HTML string.
33
+ *
34
+ * Turns on server mode for the duration, so `createNativeElement` builds serializable
35
+ * stand-ins rather than DOM, and restores whatever it was afterwards. Everything runs
36
+ * inside one request context and one owner, so a resource created during the render is
37
+ * collected and its data serialized for the client to hydrate from.
38
+ */
31
39
  export function renderToString(app, options = {}) {
32
40
  const prev = isServer();
33
41
  ensureServerNodes();
@@ -49,7 +57,7 @@ export function renderToString(app, options = {}) {
49
57
  }
50
58
  }
51
59
  // Install the SSR resource hooks once (never unset). They route to the *current*
52
- // request context so concurrent async renders stay isolated (with an
60
+ // request context, so concurrent async renders stay isolated (with an
53
61
  // AsyncLocalStorage store injected) instead of a per-call setter clobbering a
54
62
  // sibling render's sink.
55
63
  let _hooksInstalled = false;
@@ -84,7 +92,7 @@ export function serializeResourceData(ctx) {
84
92
  for (const [k, v] of ctx.data) {
85
93
  let out = v;
86
94
  if (_redactor) {
87
- // A throwing redactor must not crash the render or leak omit on error.
95
+ // A throwing redactor must not crash the render or leak: omit on error.
88
96
  try {
89
97
  out = _redactor(v, k);
90
98
  }
@@ -93,8 +101,8 @@ export function serializeResourceData(ctx) {
93
101
  }
94
102
  }
95
103
  if (out === undefined)
96
- continue; // redacted omit (client refetches)
97
- // A value JSON cannot represent is not data the client can be seeded with
104
+ continue; // redacted -> omit (client refetches)
105
+ // A value JSON cannot represent is not data the client can be seeded with:
98
106
  // JSON.stringify drops the key silently, so keeping it here only produces an
99
107
  // entry that disappears later. A lazy route's resolved module is the common
100
108
  // case: the resource holds the component function itself.
@@ -106,7 +114,7 @@ export function serializeResourceData(ctx) {
106
114
  return '';
107
115
  // Non-executable JSON block (CSP-friendly; never runs as JS), escaped with the standard
108
116
  // SSR-JSON set so no value can break out of the <script>. The client reads it via
109
- // getServerData() JSON.parse(textContent).
117
+ // getServerData() -> JSON.parse(textContent).
110
118
  const json = escapeFxJson(JSON.stringify(obj));
111
119
  // Decided on the serialized form, not on the map: the checks above catch the
112
120
  // values we know about, and this catches the rest (a nested undefined, a class
@@ -116,7 +124,7 @@ export function serializeResourceData(ctx) {
116
124
  return '';
117
125
  return `<script type="application/json" id="${FX_DATA_ID}">${json}</script>`;
118
126
  }
119
- /** Bound on resolverefetch waterfalls so a buggy loader can't spin forever. */
127
+ /** Bound on resolve -> refetch waterfalls so a buggy loader can't spin forever. */
120
128
  const MAX_ASYNC_ROUNDS = 50;
121
129
  /** Ref-count of in-flight async renders, to scope eager stale-effect scheduling. */
122
130
  /**
@@ -132,7 +140,7 @@ export async function renderToStringAsync(app, options = {}) {
132
140
  const ctx = createRequestContext(options.event);
133
141
  try {
134
142
  return await runWithRequestContext(ctx, async () => {
135
- // Resolve request-scoped state (region/locale/session) BEFORE the app renders,
143
+ // Resolve request-scoped state (region/locale/session) before the app renders,
136
144
  // inside the request context so it can read the event and write into ctx.data
137
145
  // for client transfer. Runs once per request. Guarded so the no-preload path
138
146
  // keeps its original synchronous flow into createRoot (an extra `await undefined`
@@ -151,18 +159,18 @@ export async function renderToStringAsync(app, options = {}) {
151
159
  // lazy subtrees to render, which can CREATE resources; running with the root as
152
160
  // owner makes those resources owned by the root, so dispose() cancels them. If
153
161
  // we serialized with Owner=null (the default after createRoot returns), a
154
- // resource created during serialize would be unowned never cancelled it
155
- // settles AFTER the response is serialized and the root disposed, re-running an
162
+ // resource created during serialize would be unowned -> never cancelled -> it
163
+ // settles after the response is serialized and the root disposed, re-running an
156
164
  // effect on a torn-down/detached tree (the storefront's "page shows, then errors
157
165
  // ~2-3s later" crash). Wrapped because a suspended read may throw its promise.
158
166
  const probe = () => {
159
167
  try {
160
168
  runWithOwner(rootOwner, () => serializeNode(tree));
161
169
  }
162
- catch { /* suspended read resource self-registered */ }
170
+ catch { /* suspended read, resource self-registered */ }
163
171
  };
164
172
  // Force the (lazily-built) component tree to evaluate so every resource/lazy
165
- // load is created and self-registers in ctx.pending BEFORE we drain. A tree
173
+ // load is created and self-registers in ctx.pending before we drain. A tree
166
174
  // behind deferred memos (e.g. a router <Outlet/>) renders NOTHING until serialize.
167
175
  probe();
168
176
  let rounds = 0;
@@ -170,11 +178,11 @@ export async function renderToStringAsync(app, options = {}) {
170
178
  const batch = Array.from(ctx.pending);
171
179
  ctx.pending.clear();
172
180
  await Promise.allSettled(batch);
173
- // resource settle() queues the dependent render effects run them so
181
+ // resource settle() queues the dependent render effects: run them so
174
182
  // the tree reflects resolved data (and any waterfall fetch registers).
175
183
  await flush();
176
- // Re-probe: a freshly-resolved lazy/route reveals its OWN resources only
177
- // when its subtree is evaluated force that so they register for the next round.
184
+ // Re-probe: a freshly-resolved lazy/route reveals its own resources only
185
+ // when its subtree is evaluated: force that so they register for the next round.
178
186
  probe();
179
187
  }
180
188
  // Serialize the resolved resource data so the client seeds it (no refetch).