solid-js 1.4.8 → 1.5.0-beta.2

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 (58) hide show
  1. package/dist/dev.cjs +119 -134
  2. package/dist/dev.js +119 -134
  3. package/dist/server.cjs +98 -49
  4. package/dist/server.js +98 -49
  5. package/dist/solid.cjs +119 -132
  6. package/dist/solid.js +119 -132
  7. package/h/jsx-runtime/types/jsx.d.ts +8 -1401
  8. package/h/types/hyperscript.d.ts +17 -0
  9. package/html/types/lit.d.ts +37 -0
  10. package/package.json +103 -41
  11. package/store/dist/dev.cjs +40 -22
  12. package/store/dist/dev.js +41 -23
  13. package/store/dist/store.cjs +40 -22
  14. package/store/dist/store.js +40 -22
  15. package/store/types/index.d.ts +4 -4
  16. package/store/types/mutable.d.ts +1 -1
  17. package/store/types/server.d.ts +1 -1
  18. package/store/types/store.d.ts +1 -1
  19. package/types/index.d.ts +8 -8
  20. package/types/jsx.d.ts +196 -1580
  21. package/types/reactive/array.d.ts +1 -1
  22. package/types/reactive/observable.d.ts +1 -1
  23. package/types/reactive/signal.d.ts +69 -34
  24. package/types/render/Suspense.d.ts +1 -1
  25. package/types/render/component.d.ts +22 -7
  26. package/types/render/flow.d.ts +2 -2
  27. package/types/render/index.d.ts +4 -4
  28. package/types/server/index.d.ts +3 -3
  29. package/types/server/reactive.d.ts +8 -3
  30. package/types/server/rendering.d.ts +11 -6
  31. package/universal/dist/dev.cjs +0 -0
  32. package/universal/dist/dev.js +0 -0
  33. package/universal/dist/universal.cjs +0 -0
  34. package/universal/dist/universal.js +0 -0
  35. package/universal/types/index.d.ts +1 -1
  36. package/web/dist/dev.cjs +3 -3
  37. package/web/dist/dev.js +3 -3
  38. package/web/dist/server.cjs +66 -90
  39. package/web/dist/server.js +66 -90
  40. package/web/dist/web.cjs +3 -3
  41. package/web/dist/web.js +3 -3
  42. package/web/types/client.d.ts +1 -1
  43. package/web/types/core.d.ts +3 -3
  44. package/web/types/index.d.ts +8 -9
  45. package/web/types/jsx.d.ts +1 -1
  46. package/web/types/server-mock.d.ts +4 -2
  47. package/web/types/server.d.ts +70 -0
  48. package/h/README.md +0 -99
  49. package/h/jsx-runtime/package.json +0 -8
  50. package/h/package.json +0 -8
  51. package/html/README.md +0 -84
  52. package/html/package.json +0 -8
  53. package/store/README.md +0 -23
  54. package/store/package.json +0 -35
  55. package/universal/README.md +0 -102
  56. package/universal/package.json +0 -18
  57. package/web/README.md +0 -7
  58. package/web/package.json +0 -35
package/dist/server.cjs CHANGED
@@ -7,6 +7,17 @@ const $PROXY = Symbol("solid-proxy");
7
7
  const $DEVCOMP = Symbol("solid-dev-component");
8
8
  const DEV = {};
9
9
  const ERROR = Symbol("error");
10
+ const BRANCH = Symbol("branch");
11
+ function castError(err) {
12
+ if (err instanceof Error || typeof err === "string") return err;
13
+ return new Error("Unknown error");
14
+ }
15
+ function handleError(err) {
16
+ err = castError(err);
17
+ const fns = lookup(Owner, ERROR);
18
+ if (!fns) throw err;
19
+ for (const f of fns) f(err);
20
+ }
10
21
  const UNOWNED = {
11
22
  context: null,
12
23
  owner: null
@@ -24,9 +35,7 @@ function createRoot(fn, detachedOwner) {
24
35
  try {
25
36
  result = fn(() => {});
26
37
  } catch (err) {
27
- const fns = lookup(Owner, ERROR);
28
- if (!fns) throw err;
29
- fns.forEach(f => f(err));
38
+ handleError(err);
30
39
  } finally {
31
40
  Owner = owner;
32
41
  }
@@ -45,9 +54,7 @@ function createComputed(fn, value) {
45
54
  try {
46
55
  fn(value);
47
56
  } catch (err) {
48
- const fns = lookup(Owner, ERROR);
49
- if (!fns) throw err;
50
- fns.forEach(f => f(err));
57
+ handleError(err);
51
58
  } finally {
52
59
  Owner = Owner.owner;
53
60
  }
@@ -68,9 +75,7 @@ function createMemo(fn, value) {
68
75
  try {
69
76
  v = fn(value);
70
77
  } catch (err) {
71
- const fns = lookup(Owner, ERROR);
72
- if (!fns) throw err;
73
- fns.forEach(f => f(err));
78
+ handleError(err);
74
79
  } finally {
75
80
  Owner = Owner.owner;
76
81
  }
@@ -100,11 +105,25 @@ function on(deps, fn, options = {}) {
100
105
  };
101
106
  }
102
107
  function onMount(fn) {}
103
- function onCleanup(fn) {}
108
+ function onCleanup(fn) {
109
+ let node;
110
+ if (Owner && (node = lookup(Owner, BRANCH))) {
111
+ if (!node.cleanups) node.cleanups = [fn];else node.cleanups.push(fn);
112
+ }
113
+ return fn;
114
+ }
115
+ function cleanNode(node) {
116
+ if (node.cleanups) {
117
+ for (let i = 0; i < node.cleanups.length; i++) node.cleanups[i]();
118
+ node.cleanups = undefined;
119
+ }
120
+ }
104
121
  function onError(fn) {
105
- if (Owner === null) console.warn("error handlers created outside a `createRoot` or `render` will never be run");else if (Owner.context === null) Owner.context = {
106
- [ERROR]: [fn]
107
- };else if (!Owner.context[ERROR]) Owner.context[ERROR] = [fn];else Owner.context[ERROR].push(fn);
122
+ if (Owner) {
123
+ if (Owner.context === null) Owner.context = {
124
+ [ERROR]: [fn]
125
+ };else if (!Owner.context[ERROR]) Owner.context[ERROR] = [fn];else Owner.context[ERROR].push(fn);
126
+ }
108
127
  }
109
128
  function getListener() {
110
129
  return null;
@@ -132,6 +151,8 @@ function runWithOwner(o, fn) {
132
151
  Owner = o;
133
152
  try {
134
153
  return fn();
154
+ } catch (err) {
155
+ handleError(err);
135
156
  } finally {
136
157
  Owner = prev;
137
158
  }
@@ -177,31 +198,33 @@ function mapArray(list, mapFn, options = {}) {
177
198
  } else if (options.fallback) s = [options.fallback()];
178
199
  return () => s;
179
200
  }
180
- function getSymbol() {
181
- const SymbolCopy = Symbol;
182
- return SymbolCopy.observable || "@@observable";
183
- }
184
201
  function observable(input) {
185
- const $$observable = getSymbol();
186
202
  return {
187
203
  subscribe(observer) {
188
204
  if (!(observer instanceof Object) || observer == null) {
189
205
  throw new TypeError("Expected the observer to be an object.");
190
206
  }
191
- const handler = "next" in observer ? observer.next : observer;
192
- let complete = false;
193
- createComputed(() => {
194
- if (complete) return;
195
- const v = input();
196
- handler(v);
207
+ const handler = typeof observer === "function" ? observer : observer.next && observer.next.bind(observer);
208
+ if (!handler) {
209
+ return {
210
+ unsubscribe() {}
211
+ };
212
+ }
213
+ const dispose = createRoot(disposer => {
214
+ createEffect(() => {
215
+ const v = input();
216
+ untrack(() => handler(v));
217
+ });
218
+ return disposer;
197
219
  });
220
+ if (getOwner()) onCleanup(dispose);
198
221
  return {
199
222
  unsubscribe() {
200
- complete = true;
223
+ dispose();
201
224
  }
202
225
  };
203
226
  },
204
- [$$observable]() {
227
+ [Symbol.observable || "@@observable"]() {
205
228
  return this;
206
229
  }
207
230
  };
@@ -209,9 +232,11 @@ function observable(input) {
209
232
  function from(producer) {
210
233
  const [s, set] = createSignal(undefined);
211
234
  if ("subscribe" in producer) {
212
- producer.subscribe(v => set(() => v));
235
+ const unsub = producer.subscribe(v => set(() => v));
236
+ onCleanup(() => "unsubscribe" in unsub ? unsub.unsubscribe() : unsub());
213
237
  } else {
214
- producer(set);
238
+ const clean = producer(set);
239
+ onCleanup(clean);
215
240
  }
216
241
  return s;
217
242
  }
@@ -226,7 +251,7 @@ function resolveSSRNode(node) {
226
251
  for (let i = 0, len = node.length; i < len; i++) mapped += resolveSSRNode(node[i]);
227
252
  return mapped;
228
253
  }
229
- if (t === "object") return resolveSSRNode(node.t);
254
+ if (t === "object") return node.t;
230
255
  if (t === "function") return resolveSSRNode(node());
231
256
  return String(node);
232
257
  }
@@ -315,16 +340,16 @@ function Switch(props) {
315
340
  function Match(props) {
316
341
  return props;
317
342
  }
318
- const NoErrors = {};
319
343
  function resetErrorBoundaries() {}
320
344
  function ErrorBoundary(props) {
321
- let error = NoErrors,
322
- res;
345
+ let error,
346
+ res,
347
+ clean,
348
+ sync = true;
323
349
  const ctx = sharedConfig.context;
324
350
  const id = ctx.id + ctx.count;
325
- onError(err => error = err);
326
- createMemo(() => res = props.children);
327
- if (error !== NoErrors) {
351
+ function displayFallback() {
352
+ cleanNode(clean);
328
353
  ctx.writeResource(id, error, true);
329
354
  setHydrateContext({ ...ctx,
330
355
  count: 0
@@ -332,7 +357,23 @@ function ErrorBoundary(props) {
332
357
  const f = props.fallback;
333
358
  return typeof f === "function" && f.length ? f(error, () => {}) : f;
334
359
  }
335
- return res;
360
+ onError(err => {
361
+ error = err;
362
+ !sync && ctx.replace("e" + id, displayFallback);
363
+ sync = true;
364
+ });
365
+ onCleanup(() => cleanNode(clean));
366
+ createMemo(() => {
367
+ Owner.context = {
368
+ [BRANCH]: clean = {}
369
+ };
370
+ return res = props.children;
371
+ });
372
+ if (error) return displayFallback();
373
+ sync = false;
374
+ return {
375
+ t: `<!e${id}>${resolveSSRNode(res)}<!/e${id}>`
376
+ };
336
377
  }
337
378
  const SuspenseContext = createContext();
338
379
  let resourceContext = null;
@@ -412,7 +453,7 @@ function createResource(source, fetcher, options = {}) {
412
453
  return res;
413
454
  }).catch(err => {
414
455
  read.loading = false;
415
- read.error = error = err;
456
+ read.error = error = castError(err);
416
457
  p = null;
417
458
  notifySuspense(contexts);
418
459
  });
@@ -439,6 +480,7 @@ function lazy(fn) {
439
480
  return p;
440
481
  };
441
482
  const contexts = new Set();
483
+ setTimeout(load);
442
484
  const wrap = props => {
443
485
  load();
444
486
  const id = sharedConfig.context.id.slice(0, -1);
@@ -462,10 +504,11 @@ function lazy(fn) {
462
504
  return wrap;
463
505
  }
464
506
  function suspenseComplete(c) {
507
+ if (c.complete) return true;
465
508
  for (const r of c.resources.values()) {
466
509
  if (r.loading) return false;
467
510
  }
468
- return true;
511
+ return c.complete = true;
469
512
  }
470
513
  function notifySuspense(contexts) {
471
514
  for (const c of contexts) {
@@ -488,9 +531,15 @@ function SuspenseList(props) {
488
531
  }
489
532
  function Suspense(props) {
490
533
  let done;
534
+ let clean;
491
535
  const ctx = sharedConfig.context;
492
536
  const id = ctx.id + ctx.count;
493
537
  const o = Owner;
538
+ if (o) {
539
+ if (o.context) o.context[BRANCH] = clean = {};else o.context = {
540
+ [BRANCH]: clean = {}
541
+ };
542
+ }
494
543
  const value = ctx.suspense[id] || (ctx.suspense[id] = {
495
544
  resources: new Map(),
496
545
  completed: () => {
@@ -498,7 +547,8 @@ function Suspense(props) {
498
547
  if (suspenseComplete(value)) {
499
548
  done(resolveSSRNode(res));
500
549
  }
501
- }
550
+ },
551
+ complete: false
502
552
  });
503
553
  function runSuspense() {
504
554
  setHydrateContext({ ...ctx,
@@ -508,36 +558,35 @@ function Suspense(props) {
508
558
  return createComponent(SuspenseContext.Provider, {
509
559
  value,
510
560
  get children() {
561
+ clean && cleanNode(clean);
511
562
  return props.children;
512
563
  }
513
564
  });
514
565
  });
515
566
  }
516
567
  const res = runSuspense();
517
- if (suspenseComplete(value)) {
518
- ctx.writeResource(id, null);
519
- return res;
520
- }
568
+ if (suspenseComplete(value)) return res;
521
569
  onError(err => {
522
- if (!done || !done(undefined, err)) throw err;
570
+ if (!done || !done(undefined, err)) {
571
+ if (o) runWithOwner(o.owner, () => {
572
+ throw err;
573
+ });else throw err;
574
+ }
523
575
  });
524
576
  done = ctx.async ? ctx.registerFragment(id) : undefined;
525
- if (ctx.streaming) {
577
+ if (ctx.async) {
526
578
  setHydrateContext(undefined);
527
579
  const res = {
528
580
  t: `<span id="pl-${id}">${resolveSSRNode(props.fallback)}</span>`
529
581
  };
530
582
  setHydrateContext(ctx);
531
583
  return res;
532
- } else if (ctx.async) {
533
- return {
534
- t: `<![${id}]>`
535
- };
536
584
  }
537
585
  setHydrateContext({ ...ctx,
538
586
  count: 0,
539
587
  id: ctx.id + "0.f"
540
588
  });
589
+ ctx.writeResource(id, "$$f");
541
590
  return props.fallback;
542
591
  }
543
592
 
package/dist/server.js CHANGED
@@ -3,6 +3,17 @@ const $PROXY = Symbol("solid-proxy");
3
3
  const $DEVCOMP = Symbol("solid-dev-component");
4
4
  const DEV = {};
5
5
  const ERROR = Symbol("error");
6
+ const BRANCH = Symbol("branch");
7
+ function castError(err) {
8
+ if (err instanceof Error || typeof err === "string") return err;
9
+ return new Error("Unknown error");
10
+ }
11
+ function handleError(err) {
12
+ err = castError(err);
13
+ const fns = lookup(Owner, ERROR);
14
+ if (!fns) throw err;
15
+ for (const f of fns) f(err);
16
+ }
6
17
  const UNOWNED = {
7
18
  context: null,
8
19
  owner: null
@@ -20,9 +31,7 @@ function createRoot(fn, detachedOwner) {
20
31
  try {
21
32
  result = fn(() => {});
22
33
  } catch (err) {
23
- const fns = lookup(Owner, ERROR);
24
- if (!fns) throw err;
25
- fns.forEach(f => f(err));
34
+ handleError(err);
26
35
  } finally {
27
36
  Owner = owner;
28
37
  }
@@ -41,9 +50,7 @@ function createComputed(fn, value) {
41
50
  try {
42
51
  fn(value);
43
52
  } catch (err) {
44
- const fns = lookup(Owner, ERROR);
45
- if (!fns) throw err;
46
- fns.forEach(f => f(err));
53
+ handleError(err);
47
54
  } finally {
48
55
  Owner = Owner.owner;
49
56
  }
@@ -64,9 +71,7 @@ function createMemo(fn, value) {
64
71
  try {
65
72
  v = fn(value);
66
73
  } catch (err) {
67
- const fns = lookup(Owner, ERROR);
68
- if (!fns) throw err;
69
- fns.forEach(f => f(err));
74
+ handleError(err);
70
75
  } finally {
71
76
  Owner = Owner.owner;
72
77
  }
@@ -96,11 +101,25 @@ function on(deps, fn, options = {}) {
96
101
  };
97
102
  }
98
103
  function onMount(fn) {}
99
- function onCleanup(fn) {}
104
+ function onCleanup(fn) {
105
+ let node;
106
+ if (Owner && (node = lookup(Owner, BRANCH))) {
107
+ if (!node.cleanups) node.cleanups = [fn];else node.cleanups.push(fn);
108
+ }
109
+ return fn;
110
+ }
111
+ function cleanNode(node) {
112
+ if (node.cleanups) {
113
+ for (let i = 0; i < node.cleanups.length; i++) node.cleanups[i]();
114
+ node.cleanups = undefined;
115
+ }
116
+ }
100
117
  function onError(fn) {
101
- if (Owner === null) console.warn("error handlers created outside a `createRoot` or `render` will never be run");else if (Owner.context === null) Owner.context = {
102
- [ERROR]: [fn]
103
- };else if (!Owner.context[ERROR]) Owner.context[ERROR] = [fn];else Owner.context[ERROR].push(fn);
118
+ if (Owner) {
119
+ if (Owner.context === null) Owner.context = {
120
+ [ERROR]: [fn]
121
+ };else if (!Owner.context[ERROR]) Owner.context[ERROR] = [fn];else Owner.context[ERROR].push(fn);
122
+ }
104
123
  }
105
124
  function getListener() {
106
125
  return null;
@@ -128,6 +147,8 @@ function runWithOwner(o, fn) {
128
147
  Owner = o;
129
148
  try {
130
149
  return fn();
150
+ } catch (err) {
151
+ handleError(err);
131
152
  } finally {
132
153
  Owner = prev;
133
154
  }
@@ -173,31 +194,33 @@ function mapArray(list, mapFn, options = {}) {
173
194
  } else if (options.fallback) s = [options.fallback()];
174
195
  return () => s;
175
196
  }
176
- function getSymbol() {
177
- const SymbolCopy = Symbol;
178
- return SymbolCopy.observable || "@@observable";
179
- }
180
197
  function observable(input) {
181
- const $$observable = getSymbol();
182
198
  return {
183
199
  subscribe(observer) {
184
200
  if (!(observer instanceof Object) || observer == null) {
185
201
  throw new TypeError("Expected the observer to be an object.");
186
202
  }
187
- const handler = "next" in observer ? observer.next : observer;
188
- let complete = false;
189
- createComputed(() => {
190
- if (complete) return;
191
- const v = input();
192
- handler(v);
203
+ const handler = typeof observer === "function" ? observer : observer.next && observer.next.bind(observer);
204
+ if (!handler) {
205
+ return {
206
+ unsubscribe() {}
207
+ };
208
+ }
209
+ const dispose = createRoot(disposer => {
210
+ createEffect(() => {
211
+ const v = input();
212
+ untrack(() => handler(v));
213
+ });
214
+ return disposer;
193
215
  });
216
+ if (getOwner()) onCleanup(dispose);
194
217
  return {
195
218
  unsubscribe() {
196
- complete = true;
219
+ dispose();
197
220
  }
198
221
  };
199
222
  },
200
- [$$observable]() {
223
+ [Symbol.observable || "@@observable"]() {
201
224
  return this;
202
225
  }
203
226
  };
@@ -205,9 +228,11 @@ function observable(input) {
205
228
  function from(producer) {
206
229
  const [s, set] = createSignal(undefined);
207
230
  if ("subscribe" in producer) {
208
- producer.subscribe(v => set(() => v));
231
+ const unsub = producer.subscribe(v => set(() => v));
232
+ onCleanup(() => "unsubscribe" in unsub ? unsub.unsubscribe() : unsub());
209
233
  } else {
210
- producer(set);
234
+ const clean = producer(set);
235
+ onCleanup(clean);
211
236
  }
212
237
  return s;
213
238
  }
@@ -222,7 +247,7 @@ function resolveSSRNode(node) {
222
247
  for (let i = 0, len = node.length; i < len; i++) mapped += resolveSSRNode(node[i]);
223
248
  return mapped;
224
249
  }
225
- if (t === "object") return resolveSSRNode(node.t);
250
+ if (t === "object") return node.t;
226
251
  if (t === "function") return resolveSSRNode(node());
227
252
  return String(node);
228
253
  }
@@ -311,16 +336,16 @@ function Switch(props) {
311
336
  function Match(props) {
312
337
  return props;
313
338
  }
314
- const NoErrors = {};
315
339
  function resetErrorBoundaries() {}
316
340
  function ErrorBoundary(props) {
317
- let error = NoErrors,
318
- res;
341
+ let error,
342
+ res,
343
+ clean,
344
+ sync = true;
319
345
  const ctx = sharedConfig.context;
320
346
  const id = ctx.id + ctx.count;
321
- onError(err => error = err);
322
- createMemo(() => res = props.children);
323
- if (error !== NoErrors) {
347
+ function displayFallback() {
348
+ cleanNode(clean);
324
349
  ctx.writeResource(id, error, true);
325
350
  setHydrateContext({ ...ctx,
326
351
  count: 0
@@ -328,7 +353,23 @@ function ErrorBoundary(props) {
328
353
  const f = props.fallback;
329
354
  return typeof f === "function" && f.length ? f(error, () => {}) : f;
330
355
  }
331
- return res;
356
+ onError(err => {
357
+ error = err;
358
+ !sync && ctx.replace("e" + id, displayFallback);
359
+ sync = true;
360
+ });
361
+ onCleanup(() => cleanNode(clean));
362
+ createMemo(() => {
363
+ Owner.context = {
364
+ [BRANCH]: clean = {}
365
+ };
366
+ return res = props.children;
367
+ });
368
+ if (error) return displayFallback();
369
+ sync = false;
370
+ return {
371
+ t: `<!e${id}>${resolveSSRNode(res)}<!/e${id}>`
372
+ };
332
373
  }
333
374
  const SuspenseContext = createContext();
334
375
  let resourceContext = null;
@@ -408,7 +449,7 @@ function createResource(source, fetcher, options = {}) {
408
449
  return res;
409
450
  }).catch(err => {
410
451
  read.loading = false;
411
- read.error = error = err;
452
+ read.error = error = castError(err);
412
453
  p = null;
413
454
  notifySuspense(contexts);
414
455
  });
@@ -435,6 +476,7 @@ function lazy(fn) {
435
476
  return p;
436
477
  };
437
478
  const contexts = new Set();
479
+ setTimeout(load);
438
480
  const wrap = props => {
439
481
  load();
440
482
  const id = sharedConfig.context.id.slice(0, -1);
@@ -458,10 +500,11 @@ function lazy(fn) {
458
500
  return wrap;
459
501
  }
460
502
  function suspenseComplete(c) {
503
+ if (c.complete) return true;
461
504
  for (const r of c.resources.values()) {
462
505
  if (r.loading) return false;
463
506
  }
464
- return true;
507
+ return c.complete = true;
465
508
  }
466
509
  function notifySuspense(contexts) {
467
510
  for (const c of contexts) {
@@ -484,9 +527,15 @@ function SuspenseList(props) {
484
527
  }
485
528
  function Suspense(props) {
486
529
  let done;
530
+ let clean;
487
531
  const ctx = sharedConfig.context;
488
532
  const id = ctx.id + ctx.count;
489
533
  const o = Owner;
534
+ if (o) {
535
+ if (o.context) o.context[BRANCH] = clean = {};else o.context = {
536
+ [BRANCH]: clean = {}
537
+ };
538
+ }
490
539
  const value = ctx.suspense[id] || (ctx.suspense[id] = {
491
540
  resources: new Map(),
492
541
  completed: () => {
@@ -494,7 +543,8 @@ function Suspense(props) {
494
543
  if (suspenseComplete(value)) {
495
544
  done(resolveSSRNode(res));
496
545
  }
497
- }
546
+ },
547
+ complete: false
498
548
  });
499
549
  function runSuspense() {
500
550
  setHydrateContext({ ...ctx,
@@ -504,36 +554,35 @@ function Suspense(props) {
504
554
  return createComponent(SuspenseContext.Provider, {
505
555
  value,
506
556
  get children() {
557
+ clean && cleanNode(clean);
507
558
  return props.children;
508
559
  }
509
560
  });
510
561
  });
511
562
  }
512
563
  const res = runSuspense();
513
- if (suspenseComplete(value)) {
514
- ctx.writeResource(id, null);
515
- return res;
516
- }
564
+ if (suspenseComplete(value)) return res;
517
565
  onError(err => {
518
- if (!done || !done(undefined, err)) throw err;
566
+ if (!done || !done(undefined, err)) {
567
+ if (o) runWithOwner(o.owner, () => {
568
+ throw err;
569
+ });else throw err;
570
+ }
519
571
  });
520
572
  done = ctx.async ? ctx.registerFragment(id) : undefined;
521
- if (ctx.streaming) {
573
+ if (ctx.async) {
522
574
  setHydrateContext(undefined);
523
575
  const res = {
524
576
  t: `<span id="pl-${id}">${resolveSSRNode(props.fallback)}</span>`
525
577
  };
526
578
  setHydrateContext(ctx);
527
579
  return res;
528
- } else if (ctx.async) {
529
- return {
530
- t: `<![${id}]>`
531
- };
532
580
  }
533
581
  setHydrateContext({ ...ctx,
534
582
  count: 0,
535
583
  id: ctx.id + "0.f"
536
584
  });
585
+ ctx.writeResource(id, "$$f");
537
586
  return props.fallback;
538
587
  }
539
588