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 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;
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,CAInF;AAED,wBAAgB,aAAa,CAAC,SAAS,GAAE,GAAU,GAAG,MAAM,CAK3D;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;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,CAoCrF;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAyBjF;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;AAsBD,wBAAgB,gBAAgB,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,MAAM,IAAI,CAAC,CAG7D;AAGD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
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 = 0;
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 = 0;
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(true); // Mark as SSR
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
- const result = await type(props);
359
- return await renderNodeToString(result);
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);
@@ -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 = 0;
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(true); // Mark as SSR
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
- const result = await type(props);
355
- return await renderNodeToString(result);
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":"AAKA;;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,CAqB5F;AAED,eAAe,eAAe,CAAC"}
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"}
@@ -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
- // Call the component function with props
11
- const element = Component(props);
12
- // Convert the element to an HTML string
13
- const html = await renderToString(element);
14
- return {
15
- html,
16
- success: true
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);
@@ -1,6 +1,6 @@
1
1
  import { prepareRender, finishRender } from './hooks.js';
2
2
  export async function renderToString(element) {
3
- const renderId = prepareRender(true); // Mark as SSR
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
- const result = await type(props);
33
- return await renderNodeToString(result);
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frontend-hamroun",
3
- "version": "1.2.89",
3
+ "version": "1.2.90",
4
4
  "description": "A lightweight frontend JavaScript framework with React-like syntax",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",