frontend-hamroun 1.2.89 → 1.2.90
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/hooks.d.ts +1 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +23 -2
- package/dist/index.cjs +33 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +33 -8
- package/dist/index.js.map +1 -1
- package/dist/renderComponent.d.ts.map +1 -1
- package/dist/renderComponent.js +16 -8
- package/dist/server-renderer.js +10 -3
- package/package.json +1 -1
package/dist/hooks.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
export declare function setRenderCallback(callback: any, element: any, container: any): void;
|
2
|
-
export declare function prepareRender(component?: any): number;
|
2
|
+
export declare function prepareRender(component?: any, isServerSideRender?: boolean): number;
|
3
3
|
export declare function finishRender(): void;
|
4
4
|
export declare function useState<T>(initial: T): [T, (newValue: T | ((prev: T) => T)) => void];
|
5
5
|
export declare function useEffect(callback: () => void | (() => void), deps?: any[]): void;
|
package/dist/hooks.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAmBA,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,CAInF;AAED,wBAAgB,aAAa,CAAC,SAAS,GAAE,GAAU,EAAE,kBAAkB,GAAE,OAAe,GAAG,MAAM,CAYhG;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAyCrF;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAgCjF;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAqB5D;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAqBpD;AA2BD,wBAAgB,gBAAgB,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,MAAM,IAAI,CAAC,CAG7D;AAGD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/hooks.js
CHANGED
@@ -2,6 +2,7 @@ import { batchUpdates, isBatching } from './batch.js';
|
|
2
2
|
// Current render ID counter
|
3
3
|
let currentRender = 0;
|
4
4
|
let renderContext = null;
|
5
|
+
let isSSR = false;
|
5
6
|
// State storage
|
6
7
|
const states = new Map();
|
7
8
|
const stateIndices = new Map();
|
@@ -17,15 +18,21 @@ export function setRenderCallback(callback, element, container) {
|
|
17
18
|
globalContainer = container;
|
18
19
|
currentElement = element;
|
19
20
|
}
|
20
|
-
export function prepareRender(component = null) {
|
21
|
+
export function prepareRender(component = null, isServerSideRender = false) {
|
21
22
|
currentRender++;
|
22
23
|
renderContext = component;
|
24
|
+
isSSR = isServerSideRender;
|
23
25
|
stateIndices.set(currentRender, 0);
|
26
|
+
// Initialize state array for this render if it doesn't exist
|
27
|
+
if (!states.has(currentRender)) {
|
28
|
+
states.set(currentRender, []);
|
29
|
+
}
|
24
30
|
return currentRender;
|
25
31
|
}
|
26
32
|
export function finishRender() {
|
27
33
|
renderContext = null;
|
28
|
-
currentRender
|
34
|
+
// Don't reset currentRender to 0 immediately to preserve state
|
35
|
+
// currentRender = 0;
|
29
36
|
}
|
30
37
|
export function useState(initial) {
|
31
38
|
if (!currentRender) {
|
@@ -41,6 +48,10 @@ export function useState(initial) {
|
|
41
48
|
}
|
42
49
|
const state = componentStates[index];
|
43
50
|
const setState = (newValue) => {
|
51
|
+
// For SSR, don't actually update state
|
52
|
+
if (isSSR) {
|
53
|
+
return;
|
54
|
+
}
|
44
55
|
const nextValue = typeof newValue === 'function'
|
45
56
|
? newValue(componentStates[index])
|
46
57
|
: newValue;
|
@@ -60,6 +71,12 @@ export function useState(initial) {
|
|
60
71
|
export function useEffect(callback, deps) {
|
61
72
|
if (!currentRender)
|
62
73
|
throw new Error("useEffect must be called within a render");
|
74
|
+
// Skip effects during SSR
|
75
|
+
if (isSSR) {
|
76
|
+
const effectIndex = stateIndices.get(currentRender) || 0;
|
77
|
+
stateIndices.set(currentRender, effectIndex + 1);
|
78
|
+
return;
|
79
|
+
}
|
63
80
|
const effectIndex = stateIndices.get(currentRender) || 0;
|
64
81
|
if (!effects.has(currentRender)) {
|
65
82
|
effects.set(currentRender, []);
|
@@ -116,6 +133,10 @@ export function useRef(initial) {
|
|
116
133
|
}
|
117
134
|
async function rerender(rendererId) {
|
118
135
|
try {
|
136
|
+
// Skip rerender during SSR
|
137
|
+
if (isSSR) {
|
138
|
+
return;
|
139
|
+
}
|
119
140
|
// Clean up effects
|
120
141
|
const componentEffects = effects.get(rendererId);
|
121
142
|
if (componentEffects) {
|
package/dist/index.cjs
CHANGED
@@ -142,6 +142,7 @@ function useContext(context) {
|
|
142
142
|
|
143
143
|
// Current render ID counter
|
144
144
|
let currentRender = 0;
|
145
|
+
let isSSR = false;
|
145
146
|
// State storage
|
146
147
|
const states = new Map();
|
147
148
|
const stateIndices = new Map();
|
@@ -157,13 +158,19 @@ function setRenderCallback(callback, element, container) {
|
|
157
158
|
globalContainer = container;
|
158
159
|
currentElement = element;
|
159
160
|
}
|
160
|
-
function prepareRender(component = null) {
|
161
|
+
function prepareRender(component = null, isServerSideRender = false) {
|
161
162
|
currentRender++;
|
163
|
+
isSSR = isServerSideRender;
|
162
164
|
stateIndices.set(currentRender, 0);
|
165
|
+
// Initialize state array for this render if it doesn't exist
|
166
|
+
if (!states.has(currentRender)) {
|
167
|
+
states.set(currentRender, []);
|
168
|
+
}
|
163
169
|
return currentRender;
|
164
170
|
}
|
165
171
|
function finishRender() {
|
166
|
-
currentRender
|
172
|
+
// Don't reset currentRender to 0 immediately to preserve state
|
173
|
+
// currentRender = 0;
|
167
174
|
}
|
168
175
|
function useState(initial) {
|
169
176
|
if (!currentRender) {
|
@@ -179,6 +186,10 @@ function useState(initial) {
|
|
179
186
|
}
|
180
187
|
const state = componentStates[index];
|
181
188
|
const setState = (newValue) => {
|
189
|
+
// For SSR, don't actually update state
|
190
|
+
if (isSSR) {
|
191
|
+
return;
|
192
|
+
}
|
182
193
|
const nextValue = typeof newValue === 'function'
|
183
194
|
? newValue(componentStates[index])
|
184
195
|
: newValue;
|
@@ -198,6 +209,12 @@ function useState(initial) {
|
|
198
209
|
function useEffect(callback, deps) {
|
199
210
|
if (!currentRender)
|
200
211
|
throw new Error("useEffect must be called within a render");
|
212
|
+
// Skip effects during SSR
|
213
|
+
if (isSSR) {
|
214
|
+
const effectIndex = stateIndices.get(currentRender) || 0;
|
215
|
+
stateIndices.set(currentRender, effectIndex + 1);
|
216
|
+
return;
|
217
|
+
}
|
201
218
|
const effectIndex = stateIndices.get(currentRender) || 0;
|
202
219
|
if (!effects.has(currentRender)) {
|
203
220
|
effects.set(currentRender, []);
|
@@ -254,6 +271,10 @@ function useRef(initial) {
|
|
254
271
|
}
|
255
272
|
async function rerender(rendererId) {
|
256
273
|
try {
|
274
|
+
// Skip rerender during SSR
|
275
|
+
if (isSSR) {
|
276
|
+
return;
|
277
|
+
}
|
257
278
|
// Clean up effects
|
258
279
|
const componentEffects = effects.get(rendererId);
|
259
280
|
if (componentEffects) {
|
@@ -304,8 +325,6 @@ async function render(element, container) {
|
|
304
325
|
}
|
305
326
|
catch (error) {
|
306
327
|
console.error('Error during render:', error);
|
307
|
-
// Clean up render context on error
|
308
|
-
finishRender();
|
309
328
|
throw error;
|
310
329
|
}
|
311
330
|
}
|
@@ -326,13 +345,12 @@ async function hydrate(element, container) {
|
|
326
345
|
}
|
327
346
|
|
328
347
|
async function renderToString(element) {
|
329
|
-
prepareRender(
|
348
|
+
prepareRender(element); // Pass the element to establish render context
|
330
349
|
try {
|
331
350
|
const html = await renderNodeToString(element);
|
332
351
|
return html;
|
333
352
|
}
|
334
353
|
finally {
|
335
|
-
finishRender();
|
336
354
|
}
|
337
355
|
}
|
338
356
|
async function renderNodeToString(node) {
|
@@ -355,8 +373,15 @@ async function renderNodeToString(node) {
|
|
355
373
|
// Handle function components
|
356
374
|
if (typeof type === 'function') {
|
357
375
|
try {
|
358
|
-
|
359
|
-
|
376
|
+
// Set up a new render context for this component
|
377
|
+
const componentRenderId = prepareRender(type);
|
378
|
+
try {
|
379
|
+
const result = await type(props);
|
380
|
+
return await renderNodeToString(result);
|
381
|
+
}
|
382
|
+
finally {
|
383
|
+
finishRender();
|
384
|
+
}
|
360
385
|
}
|
361
386
|
catch (error) {
|
362
387
|
console.error('Error rendering component:', error);
|
package/dist/index.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.js
CHANGED
@@ -138,6 +138,7 @@ function useContext(context) {
|
|
138
138
|
|
139
139
|
// Current render ID counter
|
140
140
|
let currentRender = 0;
|
141
|
+
let isSSR = false;
|
141
142
|
// State storage
|
142
143
|
const states = new Map();
|
143
144
|
const stateIndices = new Map();
|
@@ -153,13 +154,19 @@ function setRenderCallback(callback, element, container) {
|
|
153
154
|
globalContainer = container;
|
154
155
|
currentElement = element;
|
155
156
|
}
|
156
|
-
function prepareRender(component = null) {
|
157
|
+
function prepareRender(component = null, isServerSideRender = false) {
|
157
158
|
currentRender++;
|
159
|
+
isSSR = isServerSideRender;
|
158
160
|
stateIndices.set(currentRender, 0);
|
161
|
+
// Initialize state array for this render if it doesn't exist
|
162
|
+
if (!states.has(currentRender)) {
|
163
|
+
states.set(currentRender, []);
|
164
|
+
}
|
159
165
|
return currentRender;
|
160
166
|
}
|
161
167
|
function finishRender() {
|
162
|
-
currentRender
|
168
|
+
// Don't reset currentRender to 0 immediately to preserve state
|
169
|
+
// currentRender = 0;
|
163
170
|
}
|
164
171
|
function useState(initial) {
|
165
172
|
if (!currentRender) {
|
@@ -175,6 +182,10 @@ function useState(initial) {
|
|
175
182
|
}
|
176
183
|
const state = componentStates[index];
|
177
184
|
const setState = (newValue) => {
|
185
|
+
// For SSR, don't actually update state
|
186
|
+
if (isSSR) {
|
187
|
+
return;
|
188
|
+
}
|
178
189
|
const nextValue = typeof newValue === 'function'
|
179
190
|
? newValue(componentStates[index])
|
180
191
|
: newValue;
|
@@ -194,6 +205,12 @@ function useState(initial) {
|
|
194
205
|
function useEffect(callback, deps) {
|
195
206
|
if (!currentRender)
|
196
207
|
throw new Error("useEffect must be called within a render");
|
208
|
+
// Skip effects during SSR
|
209
|
+
if (isSSR) {
|
210
|
+
const effectIndex = stateIndices.get(currentRender) || 0;
|
211
|
+
stateIndices.set(currentRender, effectIndex + 1);
|
212
|
+
return;
|
213
|
+
}
|
197
214
|
const effectIndex = stateIndices.get(currentRender) || 0;
|
198
215
|
if (!effects.has(currentRender)) {
|
199
216
|
effects.set(currentRender, []);
|
@@ -250,6 +267,10 @@ function useRef(initial) {
|
|
250
267
|
}
|
251
268
|
async function rerender(rendererId) {
|
252
269
|
try {
|
270
|
+
// Skip rerender during SSR
|
271
|
+
if (isSSR) {
|
272
|
+
return;
|
273
|
+
}
|
253
274
|
// Clean up effects
|
254
275
|
const componentEffects = effects.get(rendererId);
|
255
276
|
if (componentEffects) {
|
@@ -300,8 +321,6 @@ async function render(element, container) {
|
|
300
321
|
}
|
301
322
|
catch (error) {
|
302
323
|
console.error('Error during render:', error);
|
303
|
-
// Clean up render context on error
|
304
|
-
finishRender();
|
305
324
|
throw error;
|
306
325
|
}
|
307
326
|
}
|
@@ -322,13 +341,12 @@ async function hydrate(element, container) {
|
|
322
341
|
}
|
323
342
|
|
324
343
|
async function renderToString(element) {
|
325
|
-
prepareRender(
|
344
|
+
prepareRender(element); // Pass the element to establish render context
|
326
345
|
try {
|
327
346
|
const html = await renderNodeToString(element);
|
328
347
|
return html;
|
329
348
|
}
|
330
349
|
finally {
|
331
|
-
finishRender();
|
332
350
|
}
|
333
351
|
}
|
334
352
|
async function renderNodeToString(node) {
|
@@ -351,8 +369,15 @@ async function renderNodeToString(node) {
|
|
351
369
|
// Handle function components
|
352
370
|
if (typeof type === 'function') {
|
353
371
|
try {
|
354
|
-
|
355
|
-
|
372
|
+
// Set up a new render context for this component
|
373
|
+
const componentRenderId = prepareRender(type);
|
374
|
+
try {
|
375
|
+
const result = await type(props);
|
376
|
+
return await renderNodeToString(result);
|
377
|
+
}
|
378
|
+
finally {
|
379
|
+
finishRender();
|
380
|
+
}
|
356
381
|
}
|
357
382
|
catch (error) {
|
358
383
|
console.error('Error rendering component:', error);
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"renderComponent.d.ts","sourceRoot":"","sources":["../src/renderComponent.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"renderComponent.d.ts","sourceRoot":"","sources":["../src/renderComponent.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,GAAE,GAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CA4B5F;AAED,eAAe,eAAe,CAAC"}
|
package/dist/renderComponent.js
CHANGED
@@ -2,19 +2,27 @@
|
|
2
2
|
* Utility for rendering components to strings and hydrating them
|
3
3
|
*/
|
4
4
|
import { renderToString } from './server-renderer.js';
|
5
|
+
import { prepareRender, finishRender } from './hooks.js';
|
5
6
|
/**
|
6
7
|
* Renders a component to an HTML string with error handling
|
7
8
|
*/
|
8
9
|
export async function renderComponent(Component, props = {}) {
|
9
10
|
try {
|
10
|
-
//
|
11
|
-
const
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
// Prepare render context for SSR
|
12
|
+
const renderId = prepareRender(Component, true);
|
13
|
+
try {
|
14
|
+
// Call the component function with props
|
15
|
+
const element = Component(props);
|
16
|
+
// Convert the element to an HTML string
|
17
|
+
const html = await renderToString(element);
|
18
|
+
return {
|
19
|
+
html,
|
20
|
+
success: true
|
21
|
+
};
|
22
|
+
}
|
23
|
+
finally {
|
24
|
+
finishRender();
|
25
|
+
}
|
18
26
|
}
|
19
27
|
catch (error) {
|
20
28
|
console.error('Error rendering component:', error);
|
package/dist/server-renderer.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { prepareRender, finishRender } from './hooks.js';
|
2
2
|
export async function renderToString(element) {
|
3
|
-
const renderId = prepareRender(
|
3
|
+
const renderId = prepareRender(element); // Pass the element to establish render context
|
4
4
|
try {
|
5
5
|
const html = await renderNodeToString(element);
|
6
6
|
return html;
|
@@ -29,8 +29,15 @@ async function renderNodeToString(node) {
|
|
29
29
|
// Handle function components
|
30
30
|
if (typeof type === 'function') {
|
31
31
|
try {
|
32
|
-
|
33
|
-
|
32
|
+
// Set up a new render context for this component
|
33
|
+
const componentRenderId = prepareRender(type);
|
34
|
+
try {
|
35
|
+
const result = await type(props);
|
36
|
+
return await renderNodeToString(result);
|
37
|
+
}
|
38
|
+
finally {
|
39
|
+
finishRender();
|
40
|
+
}
|
34
41
|
}
|
35
42
|
catch (error) {
|
36
43
|
console.error('Error rendering component:', error);
|