solid-js 1.3.0-beta.6 → 1.3.0-rc.0

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/dev.cjs CHANGED
@@ -236,6 +236,9 @@ function createResource(source, fetcher, options) {
236
236
  fetcher = source;
237
237
  source = true;
238
238
  }
239
+ Resources || (Resources = new Set());
240
+ Resources.add(load);
241
+ onCleanup(() => Resources.delete(load));
239
242
  const contexts = new Set(),
240
243
  [s, set] = createSignal((options || {}).initialValue),
241
244
  [track, trigger] = createSignal(undefined, {
@@ -297,7 +300,7 @@ function createResource(source, fetcher, options) {
297
300
  }
298
301
  return v;
299
302
  }
300
- function load() {
303
+ function load(refetching = true) {
301
304
  setError(err = undefined);
302
305
  const lookup = dynamic ? source() : source;
303
306
  loadedUnderTransition = Transition && Transition.running;
@@ -306,7 +309,10 @@ function createResource(source, fetcher, options) {
306
309
  return;
307
310
  }
308
311
  if (Transition && pr) Transition.promises.delete(pr);
309
- const p = initP || untrack(() => fetcher(lookup, s));
312
+ const p = initP || untrack(() => fetcher(lookup, {
313
+ value: s(),
314
+ refetching
315
+ }));
310
316
  initP = null;
311
317
  if (typeof p !== "object" || !("then" in p)) {
312
318
  loadEnd(pr, p);
@@ -331,12 +337,16 @@ function createResource(source, fetcher, options) {
331
337
  }
332
338
  }
333
339
  });
334
- if (dynamic) createComputed(load);else load();
340
+ if (dynamic) createComputed(() => load(false));else load(false);
335
341
  return [read, {
336
342
  refetch: load,
337
343
  mutate: set
338
344
  }];
339
345
  }
346
+ let Resources;
347
+ function refetchResources(info) {
348
+ Resources && Resources.forEach(fn => fn(info));
349
+ }
340
350
  function createDeferred(source, options) {
341
351
  let t,
342
352
  timeout = options ? options.timeoutMs : undefined;
@@ -1281,11 +1291,13 @@ function lazy(fn) {
1281
1291
  (p || (p = fn())).then(mod => {
1282
1292
  setHydrateContext(ctx);
1283
1293
  set(() => mod.default);
1284
- setHydrateContext(undefined);
1294
+ setHydrateContext();
1285
1295
  });
1286
1296
  comp = s;
1287
1297
  } else if (!comp) {
1288
- const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));
1298
+ const [s] = createResource((_, {
1299
+ value
1300
+ }) => value || (p || (p = fn())).then(mod => mod.default));
1289
1301
  comp = s;
1290
1302
  } else {
1291
1303
  const c = comp();
@@ -1448,7 +1460,7 @@ function Suspense(props) {
1448
1460
  showContent,
1449
1461
  showFallback,
1450
1462
  ctx,
1451
- waitingHydration,
1463
+ p,
1452
1464
  flicker,
1453
1465
  error;
1454
1466
  const [inFallback, setFallback] = createSignal(false),
@@ -1467,8 +1479,8 @@ function Suspense(props) {
1467
1479
  owner = getOwner();
1468
1480
  if (sharedConfig.context) {
1469
1481
  const key = sharedConfig.context.id + sharedConfig.context.count;
1470
- const p = sharedConfig.load(key);
1471
- if (p) {
1482
+ p = sharedConfig.load(key);
1483
+ if (p && typeof p === "object") {
1472
1484
  const [s, set] = createSignal(undefined, {
1473
1485
  equals: false
1474
1486
  });
@@ -1476,11 +1488,10 @@ function Suspense(props) {
1476
1488
  p.then(err => {
1477
1489
  if (error = err) return set();
1478
1490
  sharedConfig.gather(key);
1479
- waitingHydration = true;
1480
1491
  setHydrateContext(ctx);
1481
1492
  set();
1482
- setHydrateContext(undefined);
1483
- waitingHydration = false;
1493
+ setHydrateContext();
1494
+ p = undefined;
1484
1495
  });
1485
1496
  }
1486
1497
  }
@@ -1493,18 +1504,19 @@ function Suspense(props) {
1493
1504
  get children() {
1494
1505
  return createMemo(() => {
1495
1506
  if (error) throw error;
1507
+ ctx = sharedConfig.context;
1496
1508
  if (flicker) {
1497
- ctx = sharedConfig.context;
1498
1509
  flicker();
1499
1510
  return flicker = undefined;
1500
1511
  }
1512
+ if (ctx && p === undefined) setHydrateContext();
1501
1513
  const rendered = untrack(() => props.children);
1502
1514
  return createMemo(() => {
1503
1515
  const inFallback = store.inFallback(),
1504
1516
  visibleContent = showContent ? showContent() : true,
1505
1517
  visibleFallback = showFallback ? showFallback() : true;
1506
1518
  dispose && dispose();
1507
- if ((!inFallback || waitingHydration) && visibleContent) {
1519
+ if ((!inFallback || p !== undefined) && visibleContent) {
1508
1520
  store.resolved = true;
1509
1521
  resumeEffects(store.effects);
1510
1522
  return rendered;
@@ -1512,10 +1524,13 @@ function Suspense(props) {
1512
1524
  if (!visibleFallback) return;
1513
1525
  return createRoot(disposer => {
1514
1526
  dispose = disposer;
1515
- if (sharedConfig.context) setHydrateContext({
1516
- id: sharedConfig.context.id + "f",
1517
- count: 0
1518
- });
1527
+ if (ctx) {
1528
+ setHydrateContext({
1529
+ id: ctx.id + "f",
1530
+ count: 0
1531
+ });
1532
+ ctx = undefined;
1533
+ }
1519
1534
  return props.fallback;
1520
1535
  }, owner);
1521
1536
  });
@@ -1577,6 +1592,7 @@ exports.on = on;
1577
1592
  exports.onCleanup = onCleanup;
1578
1593
  exports.onError = onError;
1579
1594
  exports.onMount = onMount;
1595
+ exports.refetchResources = refetchResources;
1580
1596
  exports.requestCallback = requestCallback;
1581
1597
  exports.runWithOwner = runWithOwner;
1582
1598
  exports.sharedConfig = sharedConfig;
package/dist/dev.js CHANGED
@@ -232,6 +232,9 @@ function createResource(source, fetcher, options) {
232
232
  fetcher = source;
233
233
  source = true;
234
234
  }
235
+ Resources || (Resources = new Set());
236
+ Resources.add(load);
237
+ onCleanup(() => Resources.delete(load));
235
238
  const contexts = new Set(),
236
239
  [s, set] = createSignal((options || {}).initialValue),
237
240
  [track, trigger] = createSignal(undefined, {
@@ -293,7 +296,7 @@ function createResource(source, fetcher, options) {
293
296
  }
294
297
  return v;
295
298
  }
296
- function load() {
299
+ function load(refetching = true) {
297
300
  setError(err = undefined);
298
301
  const lookup = dynamic ? source() : source;
299
302
  loadedUnderTransition = Transition && Transition.running;
@@ -302,7 +305,10 @@ function createResource(source, fetcher, options) {
302
305
  return;
303
306
  }
304
307
  if (Transition && pr) Transition.promises.delete(pr);
305
- const p = initP || untrack(() => fetcher(lookup, s));
308
+ const p = initP || untrack(() => fetcher(lookup, {
309
+ value: s(),
310
+ refetching
311
+ }));
306
312
  initP = null;
307
313
  if (typeof p !== "object" || !("then" in p)) {
308
314
  loadEnd(pr, p);
@@ -327,12 +333,16 @@ function createResource(source, fetcher, options) {
327
333
  }
328
334
  }
329
335
  });
330
- if (dynamic) createComputed(load);else load();
336
+ if (dynamic) createComputed(() => load(false));else load(false);
331
337
  return [read, {
332
338
  refetch: load,
333
339
  mutate: set
334
340
  }];
335
341
  }
342
+ let Resources;
343
+ function refetchResources(info) {
344
+ Resources && Resources.forEach(fn => fn(info));
345
+ }
336
346
  function createDeferred(source, options) {
337
347
  let t,
338
348
  timeout = options ? options.timeoutMs : undefined;
@@ -1277,11 +1287,13 @@ function lazy(fn) {
1277
1287
  (p || (p = fn())).then(mod => {
1278
1288
  setHydrateContext(ctx);
1279
1289
  set(() => mod.default);
1280
- setHydrateContext(undefined);
1290
+ setHydrateContext();
1281
1291
  });
1282
1292
  comp = s;
1283
1293
  } else if (!comp) {
1284
- const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));
1294
+ const [s] = createResource((_, {
1295
+ value
1296
+ }) => value || (p || (p = fn())).then(mod => mod.default));
1285
1297
  comp = s;
1286
1298
  } else {
1287
1299
  const c = comp();
@@ -1444,7 +1456,7 @@ function Suspense(props) {
1444
1456
  showContent,
1445
1457
  showFallback,
1446
1458
  ctx,
1447
- waitingHydration,
1459
+ p,
1448
1460
  flicker,
1449
1461
  error;
1450
1462
  const [inFallback, setFallback] = createSignal(false),
@@ -1463,8 +1475,8 @@ function Suspense(props) {
1463
1475
  owner = getOwner();
1464
1476
  if (sharedConfig.context) {
1465
1477
  const key = sharedConfig.context.id + sharedConfig.context.count;
1466
- const p = sharedConfig.load(key);
1467
- if (p) {
1478
+ p = sharedConfig.load(key);
1479
+ if (p && typeof p === "object") {
1468
1480
  const [s, set] = createSignal(undefined, {
1469
1481
  equals: false
1470
1482
  });
@@ -1472,11 +1484,10 @@ function Suspense(props) {
1472
1484
  p.then(err => {
1473
1485
  if (error = err) return set();
1474
1486
  sharedConfig.gather(key);
1475
- waitingHydration = true;
1476
1487
  setHydrateContext(ctx);
1477
1488
  set();
1478
- setHydrateContext(undefined);
1479
- waitingHydration = false;
1489
+ setHydrateContext();
1490
+ p = undefined;
1480
1491
  });
1481
1492
  }
1482
1493
  }
@@ -1489,18 +1500,19 @@ function Suspense(props) {
1489
1500
  get children() {
1490
1501
  return createMemo(() => {
1491
1502
  if (error) throw error;
1503
+ ctx = sharedConfig.context;
1492
1504
  if (flicker) {
1493
- ctx = sharedConfig.context;
1494
1505
  flicker();
1495
1506
  return flicker = undefined;
1496
1507
  }
1508
+ if (ctx && p === undefined) setHydrateContext();
1497
1509
  const rendered = untrack(() => props.children);
1498
1510
  return createMemo(() => {
1499
1511
  const inFallback = store.inFallback(),
1500
1512
  visibleContent = showContent ? showContent() : true,
1501
1513
  visibleFallback = showFallback ? showFallback() : true;
1502
1514
  dispose && dispose();
1503
- if ((!inFallback || waitingHydration) && visibleContent) {
1515
+ if ((!inFallback || p !== undefined) && visibleContent) {
1504
1516
  store.resolved = true;
1505
1517
  resumeEffects(store.effects);
1506
1518
  return rendered;
@@ -1508,10 +1520,13 @@ function Suspense(props) {
1508
1520
  if (!visibleFallback) return;
1509
1521
  return createRoot(disposer => {
1510
1522
  dispose = disposer;
1511
- if (sharedConfig.context) setHydrateContext({
1512
- id: sharedConfig.context.id + "f",
1513
- count: 0
1514
- });
1523
+ if (ctx) {
1524
+ setHydrateContext({
1525
+ id: ctx.id + "f",
1526
+ count: 0
1527
+ });
1528
+ ctx = undefined;
1529
+ }
1515
1530
  return props.fallback;
1516
1531
  }, owner);
1517
1532
  });
@@ -1533,4 +1548,4 @@ if (globalThis) {
1533
1548
  if (!globalThis.Solid$$) globalThis.Solid$$ = true;else console.warn("You appear to have multiple instances of Solid. This can lead to unexpected behavior.");
1534
1549
  }
1535
1550
 
1536
- export { $PROXY, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };
1551
+ export { $PROXY, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, refetchResources, requestCallback, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };
package/dist/server.cjs CHANGED
@@ -461,7 +461,6 @@ function Suspense(props) {
461
461
  const value = ctx.suspense[id] || (ctx.suspense[id] = {
462
462
  resources: new Map(),
463
463
  completed: () => {
464
- if (ctx.dataOnly) return done();
465
464
  const res = runSuspense();
466
465
  if (suspenseComplete(value)) {
467
466
  done(resolveSSRNode(res));
@@ -482,20 +481,21 @@ function Suspense(props) {
482
481
  });
483
482
  }
484
483
  const res = runSuspense();
485
- if (suspenseComplete(value)) return res;
484
+ if (suspenseComplete(value)) {
485
+ ctx.writeResource(id, true);
486
+ return res;
487
+ }
486
488
  onError(err => {
487
489
  if (!done || !done(undefined, err)) throw err;
488
490
  });
489
491
  done = ctx.async ? ctx.registerFragment(id) : undefined;
490
492
  if (ctx.streaming) {
491
- if (!ctx.dataOnly) {
492
- setHydrateContext(undefined);
493
- const res = {
494
- t: `<span id="pl${id}">${resolveSSRNode(props.fallback)}</span>`
495
- };
496
- setHydrateContext(ctx);
497
- return res;
498
- }
493
+ setHydrateContext(undefined);
494
+ const res = {
495
+ t: `<span id="pl${id}">${resolveSSRNode(props.fallback)}</span>`
496
+ };
497
+ setHydrateContext(ctx);
498
+ return res;
499
499
  } else if (ctx.async) {
500
500
  return {
501
501
  t: `<![${id}]>`
package/dist/server.js CHANGED
@@ -457,7 +457,6 @@ function Suspense(props) {
457
457
  const value = ctx.suspense[id] || (ctx.suspense[id] = {
458
458
  resources: new Map(),
459
459
  completed: () => {
460
- if (ctx.dataOnly) return done();
461
460
  const res = runSuspense();
462
461
  if (suspenseComplete(value)) {
463
462
  done(resolveSSRNode(res));
@@ -478,20 +477,21 @@ function Suspense(props) {
478
477
  });
479
478
  }
480
479
  const res = runSuspense();
481
- if (suspenseComplete(value)) return res;
480
+ if (suspenseComplete(value)) {
481
+ ctx.writeResource(id, true);
482
+ return res;
483
+ }
482
484
  onError(err => {
483
485
  if (!done || !done(undefined, err)) throw err;
484
486
  });
485
487
  done = ctx.async ? ctx.registerFragment(id) : undefined;
486
488
  if (ctx.streaming) {
487
- if (!ctx.dataOnly) {
488
- setHydrateContext(undefined);
489
- const res = {
490
- t: `<span id="pl${id}">${resolveSSRNode(props.fallback)}</span>`
491
- };
492
- setHydrateContext(ctx);
493
- return res;
494
- }
489
+ setHydrateContext(undefined);
490
+ const res = {
491
+ t: `<span id="pl${id}">${resolveSSRNode(props.fallback)}</span>`
492
+ };
493
+ setHydrateContext(ctx);
494
+ return res;
495
495
  } else if (ctx.async) {
496
496
  return {
497
497
  t: `<![${id}]>`
package/dist/solid.cjs CHANGED
@@ -233,6 +233,9 @@ function createResource(source, fetcher, options) {
233
233
  fetcher = source;
234
234
  source = true;
235
235
  }
236
+ Resources || (Resources = new Set());
237
+ Resources.add(load);
238
+ onCleanup(() => Resources.delete(load));
236
239
  const contexts = new Set(),
237
240
  [s, set] = createSignal((options || {}).initialValue),
238
241
  [track, trigger] = createSignal(undefined, {
@@ -294,7 +297,7 @@ function createResource(source, fetcher, options) {
294
297
  }
295
298
  return v;
296
299
  }
297
- function load() {
300
+ function load(refetching = true) {
298
301
  setError(err = undefined);
299
302
  const lookup = dynamic ? source() : source;
300
303
  loadedUnderTransition = Transition && Transition.running;
@@ -303,7 +306,10 @@ function createResource(source, fetcher, options) {
303
306
  return;
304
307
  }
305
308
  if (Transition && pr) Transition.promises.delete(pr);
306
- const p = initP || untrack(() => fetcher(lookup, s));
309
+ const p = initP || untrack(() => fetcher(lookup, {
310
+ value: s(),
311
+ refetching
312
+ }));
307
313
  initP = null;
308
314
  if (typeof p !== "object" || !("then" in p)) {
309
315
  loadEnd(pr, p);
@@ -328,12 +334,16 @@ function createResource(source, fetcher, options) {
328
334
  }
329
335
  }
330
336
  });
331
- if (dynamic) createComputed(load);else load();
337
+ if (dynamic) createComputed(() => load(false));else load(false);
332
338
  return [read, {
333
339
  refetch: load,
334
340
  mutate: set
335
341
  }];
336
342
  }
343
+ let Resources;
344
+ function refetchResources(info) {
345
+ Resources && Resources.forEach(fn => fn(info));
346
+ }
337
347
  function createDeferred(source, options) {
338
348
  let t,
339
349
  timeout = options ? options.timeoutMs : undefined;
@@ -1205,11 +1215,13 @@ function lazy(fn) {
1205
1215
  (p || (p = fn())).then(mod => {
1206
1216
  setHydrateContext(ctx);
1207
1217
  set(() => mod.default);
1208
- setHydrateContext(undefined);
1218
+ setHydrateContext();
1209
1219
  });
1210
1220
  comp = s;
1211
1221
  } else if (!comp) {
1212
- const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));
1222
+ const [s] = createResource((_, {
1223
+ value
1224
+ }) => value || (p || (p = fn())).then(mod => mod.default));
1213
1225
  comp = s;
1214
1226
  } else {
1215
1227
  const c = comp();
@@ -1372,7 +1384,7 @@ function Suspense(props) {
1372
1384
  showContent,
1373
1385
  showFallback,
1374
1386
  ctx,
1375
- waitingHydration,
1387
+ p,
1376
1388
  flicker,
1377
1389
  error;
1378
1390
  const [inFallback, setFallback] = createSignal(false),
@@ -1391,8 +1403,8 @@ function Suspense(props) {
1391
1403
  owner = getOwner();
1392
1404
  if (sharedConfig.context) {
1393
1405
  const key = sharedConfig.context.id + sharedConfig.context.count;
1394
- const p = sharedConfig.load(key);
1395
- if (p) {
1406
+ p = sharedConfig.load(key);
1407
+ if (p && typeof p === "object") {
1396
1408
  const [s, set] = createSignal(undefined, {
1397
1409
  equals: false
1398
1410
  });
@@ -1400,11 +1412,10 @@ function Suspense(props) {
1400
1412
  p.then(err => {
1401
1413
  if (error = err) return set();
1402
1414
  sharedConfig.gather(key);
1403
- waitingHydration = true;
1404
1415
  setHydrateContext(ctx);
1405
1416
  set();
1406
- setHydrateContext(undefined);
1407
- waitingHydration = false;
1417
+ setHydrateContext();
1418
+ p = undefined;
1408
1419
  });
1409
1420
  }
1410
1421
  }
@@ -1417,18 +1428,19 @@ function Suspense(props) {
1417
1428
  get children() {
1418
1429
  return createMemo(() => {
1419
1430
  if (error) throw error;
1431
+ ctx = sharedConfig.context;
1420
1432
  if (flicker) {
1421
- ctx = sharedConfig.context;
1422
1433
  flicker();
1423
1434
  return flicker = undefined;
1424
1435
  }
1436
+ if (ctx && p === undefined) setHydrateContext();
1425
1437
  const rendered = untrack(() => props.children);
1426
1438
  return createMemo(() => {
1427
1439
  const inFallback = store.inFallback(),
1428
1440
  visibleContent = showContent ? showContent() : true,
1429
1441
  visibleFallback = showFallback ? showFallback() : true;
1430
1442
  dispose && dispose();
1431
- if ((!inFallback || waitingHydration) && visibleContent) {
1443
+ if ((!inFallback || p !== undefined) && visibleContent) {
1432
1444
  store.resolved = true;
1433
1445
  resumeEffects(store.effects);
1434
1446
  return rendered;
@@ -1436,10 +1448,13 @@ function Suspense(props) {
1436
1448
  if (!visibleFallback) return;
1437
1449
  return createRoot(disposer => {
1438
1450
  dispose = disposer;
1439
- if (sharedConfig.context) setHydrateContext({
1440
- id: sharedConfig.context.id + "f",
1441
- count: 0
1442
- });
1451
+ if (ctx) {
1452
+ setHydrateContext({
1453
+ id: ctx.id + "f",
1454
+ count: 0
1455
+ });
1456
+ ctx = undefined;
1457
+ }
1443
1458
  return props.fallback;
1444
1459
  }, owner);
1445
1460
  });
@@ -1491,6 +1506,7 @@ exports.on = on;
1491
1506
  exports.onCleanup = onCleanup;
1492
1507
  exports.onError = onError;
1493
1508
  exports.onMount = onMount;
1509
+ exports.refetchResources = refetchResources;
1494
1510
  exports.requestCallback = requestCallback;
1495
1511
  exports.runWithOwner = runWithOwner;
1496
1512
  exports.sharedConfig = sharedConfig;
package/dist/solid.js CHANGED
@@ -229,6 +229,9 @@ function createResource(source, fetcher, options) {
229
229
  fetcher = source;
230
230
  source = true;
231
231
  }
232
+ Resources || (Resources = new Set());
233
+ Resources.add(load);
234
+ onCleanup(() => Resources.delete(load));
232
235
  const contexts = new Set(),
233
236
  [s, set] = createSignal((options || {}).initialValue),
234
237
  [track, trigger] = createSignal(undefined, {
@@ -290,7 +293,7 @@ function createResource(source, fetcher, options) {
290
293
  }
291
294
  return v;
292
295
  }
293
- function load() {
296
+ function load(refetching = true) {
294
297
  setError(err = undefined);
295
298
  const lookup = dynamic ? source() : source;
296
299
  loadedUnderTransition = Transition && Transition.running;
@@ -299,7 +302,10 @@ function createResource(source, fetcher, options) {
299
302
  return;
300
303
  }
301
304
  if (Transition && pr) Transition.promises.delete(pr);
302
- const p = initP || untrack(() => fetcher(lookup, s));
305
+ const p = initP || untrack(() => fetcher(lookup, {
306
+ value: s(),
307
+ refetching
308
+ }));
303
309
  initP = null;
304
310
  if (typeof p !== "object" || !("then" in p)) {
305
311
  loadEnd(pr, p);
@@ -324,12 +330,16 @@ function createResource(source, fetcher, options) {
324
330
  }
325
331
  }
326
332
  });
327
- if (dynamic) createComputed(load);else load();
333
+ if (dynamic) createComputed(() => load(false));else load(false);
328
334
  return [read, {
329
335
  refetch: load,
330
336
  mutate: set
331
337
  }];
332
338
  }
339
+ let Resources;
340
+ function refetchResources(info) {
341
+ Resources && Resources.forEach(fn => fn(info));
342
+ }
333
343
  function createDeferred(source, options) {
334
344
  let t,
335
345
  timeout = options ? options.timeoutMs : undefined;
@@ -1201,11 +1211,13 @@ function lazy(fn) {
1201
1211
  (p || (p = fn())).then(mod => {
1202
1212
  setHydrateContext(ctx);
1203
1213
  set(() => mod.default);
1204
- setHydrateContext(undefined);
1214
+ setHydrateContext();
1205
1215
  });
1206
1216
  comp = s;
1207
1217
  } else if (!comp) {
1208
- const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));
1218
+ const [s] = createResource((_, {
1219
+ value
1220
+ }) => value || (p || (p = fn())).then(mod => mod.default));
1209
1221
  comp = s;
1210
1222
  } else {
1211
1223
  const c = comp();
@@ -1368,7 +1380,7 @@ function Suspense(props) {
1368
1380
  showContent,
1369
1381
  showFallback,
1370
1382
  ctx,
1371
- waitingHydration,
1383
+ p,
1372
1384
  flicker,
1373
1385
  error;
1374
1386
  const [inFallback, setFallback] = createSignal(false),
@@ -1387,8 +1399,8 @@ function Suspense(props) {
1387
1399
  owner = getOwner();
1388
1400
  if (sharedConfig.context) {
1389
1401
  const key = sharedConfig.context.id + sharedConfig.context.count;
1390
- const p = sharedConfig.load(key);
1391
- if (p) {
1402
+ p = sharedConfig.load(key);
1403
+ if (p && typeof p === "object") {
1392
1404
  const [s, set] = createSignal(undefined, {
1393
1405
  equals: false
1394
1406
  });
@@ -1396,11 +1408,10 @@ function Suspense(props) {
1396
1408
  p.then(err => {
1397
1409
  if (error = err) return set();
1398
1410
  sharedConfig.gather(key);
1399
- waitingHydration = true;
1400
1411
  setHydrateContext(ctx);
1401
1412
  set();
1402
- setHydrateContext(undefined);
1403
- waitingHydration = false;
1413
+ setHydrateContext();
1414
+ p = undefined;
1404
1415
  });
1405
1416
  }
1406
1417
  }
@@ -1413,18 +1424,19 @@ function Suspense(props) {
1413
1424
  get children() {
1414
1425
  return createMemo(() => {
1415
1426
  if (error) throw error;
1427
+ ctx = sharedConfig.context;
1416
1428
  if (flicker) {
1417
- ctx = sharedConfig.context;
1418
1429
  flicker();
1419
1430
  return flicker = undefined;
1420
1431
  }
1432
+ if (ctx && p === undefined) setHydrateContext();
1421
1433
  const rendered = untrack(() => props.children);
1422
1434
  return createMemo(() => {
1423
1435
  const inFallback = store.inFallback(),
1424
1436
  visibleContent = showContent ? showContent() : true,
1425
1437
  visibleFallback = showFallback ? showFallback() : true;
1426
1438
  dispose && dispose();
1427
- if ((!inFallback || waitingHydration) && visibleContent) {
1439
+ if ((!inFallback || p !== undefined) && visibleContent) {
1428
1440
  store.resolved = true;
1429
1441
  resumeEffects(store.effects);
1430
1442
  return rendered;
@@ -1432,10 +1444,13 @@ function Suspense(props) {
1432
1444
  if (!visibleFallback) return;
1433
1445
  return createRoot(disposer => {
1434
1446
  dispose = disposer;
1435
- if (sharedConfig.context) setHydrateContext({
1436
- id: sharedConfig.context.id + "f",
1437
- count: 0
1438
- });
1447
+ if (ctx) {
1448
+ setHydrateContext({
1449
+ id: ctx.id + "f",
1450
+ count: 0
1451
+ });
1452
+ ctx = undefined;
1453
+ }
1439
1454
  return props.fallback;
1440
1455
  }, owner);
1441
1456
  });
@@ -1446,4 +1461,4 @@ function Suspense(props) {
1446
1461
 
1447
1462
  let DEV;
1448
1463
 
1449
- export { $PROXY, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };
1464
+ export { $PROXY, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, refetchResources, requestCallback, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "solid-js",
3
3
  "description": "A declarative JavaScript library for building user interfaces.",
4
- "version": "1.3.0-beta.6",
4
+ "version": "1.3.0-rc.0",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
7
7
  "homepage": "https://solidjs.com",
@@ -144,5 +144,5 @@
144
144
  "compiler",
145
145
  "performance"
146
146
  ],
147
- "gitHead": "76f31202b63d632cdef2ad2a36b158ede07597be"
147
+ "gitHead": "f6e6a9ff9efae848699f66900aa87f46b0707ea5"
148
148
  }
package/types/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { createRoot, createSignal, createEffect, createRenderEffect, createComputed, createDeferred, createSelector, createMemo, createResource, onMount, onCleanup, onError, untrack, batch, on, enableScheduling, enableExternalSource, startTransition, useTransition, createContext, useContext, children, getListener, getOwner, runWithOwner, equalFn, $PROXY } from "./reactive/signal";
2
- export type { Accessor, Setter, Resource, ResourceReturn, Context, ReturnTypes } from "./reactive/signal";
1
+ export { createRoot, createSignal, createEffect, createRenderEffect, createComputed, createDeferred, createSelector, createMemo, createResource, onMount, onCleanup, onError, untrack, batch, on, enableScheduling, enableExternalSource, startTransition, useTransition, refetchResources, createContext, useContext, children, getListener, getOwner, runWithOwner, equalFn, $PROXY } from "./reactive/signal";
2
+ export type { Accessor, Setter, Resource, ResourceReturn, ResourceFetcher, ResourceFetcherInfo, Context, ReturnTypes } from "./reactive/signal";
3
3
  export * from "./reactive/observable";
4
4
  export * from "./reactive/scheduler";
5
5
  export * from "./reactive/array";
@@ -185,11 +185,15 @@ export interface Resource<T> extends Accessor<T> {
185
185
  }
186
186
  export declare type ResourceActions<T> = {
187
187
  mutate: Setter<T>;
188
- refetch: () => void;
188
+ refetch: (info?: unknown) => void;
189
189
  };
190
190
  export declare type ResourceReturn<T> = [Resource<T>, ResourceActions<T>];
191
191
  export declare type ResourceSource<S> = S | false | null | (() => S | false | null);
192
- export declare type ResourceFetcher<S, T> = (k: S, getPrev: Accessor<T>) => T | Promise<T>;
192
+ export declare type ResourceFetcher<S, T> = (k: S, info: ResourceFetcherInfo<T>) => T | Promise<T>;
193
+ export declare type ResourceFetcherInfo<T> = {
194
+ value: T | undefined;
195
+ refetching?: unknown;
196
+ };
193
197
  export declare type ResourceOptions<T> = T extends undefined ? {
194
198
  initialValue?: T;
195
199
  name?: string;
@@ -200,14 +204,14 @@ export declare type ResourceOptions<T> = T extends undefined ? {
200
204
  /**
201
205
  * Creates a resource that wraps a repeated promise in a reactive pattern:
202
206
  * ```typescript
203
- * const [resource, { mutate, refetch }] = crateResource(source, fetcher, options);
207
+ * const [resource, { mutate, refetch }] = createResource(source, fetcher, options);
204
208
  * ```
205
209
  * @param source - reactive data function to toggle the request, optional
206
210
  * @param fetcher - function that receives the source (or true) and an accessor for the last or initial value and returns a value or a Promise with the value:
207
211
  * ```typescript
208
212
  * const fetcher: ResourceFetcher<S, T, > = (
209
213
  * sourceOutput: ReturnValue<typeof source>,
210
- * getPrev: Accessor<T>
214
+ * info: ResourceFetcherInfo<T>
211
215
  * ) => T | Promise<T>;
212
216
  * ```
213
217
  * @param options - an optional object with the initialValue and the name (for debugging purposes)
@@ -226,6 +230,7 @@ export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S,
226
230
  export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
227
231
  export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined>;
228
232
  export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
233
+ export declare function refetchResources(info?: unknown): void;
229
234
  export interface DeferredOptions<T> {
230
235
  equals?: false | ((prev: T, next: T) => boolean);
231
236
  name?: string;
@@ -348,6 +353,12 @@ export declare function getListener(): Computation<any, any> | null;
348
353
  export declare function getOwner(): Owner | null;
349
354
  export declare function runWithOwner(o: Owner, fn: () => any): any;
350
355
  export declare function enableScheduling(scheduler?: typeof requestCallback): void;
356
+ /**
357
+ * ```typescript
358
+ * export function startTransition(fn: () => void, cb?: () => void) => void
359
+ *
360
+ * @description https://www.solidjs.com/docs/latest/api#usetransition
361
+ */
351
362
  export declare function startTransition(fn: () => void, cb?: () => void): void;
352
363
  export declare type Transition = [Accessor<boolean>, (fn: () => void, cb?: () => void) => void];
353
364
  /**
@@ -82,6 +82,7 @@ export declare function createResource<T, U = true>(fetcher: (k: U, getPrev: ()
82
82
  export declare function createResource<T, U>(fn: U | false | (() => U | false), fetcher: (k: U, getPrev: () => T | undefined) => T | Promise<T>, options?: {
83
83
  initialValue?: T;
84
84
  }): ResourceReturn<T>;
85
+ export declare function refetchResources(info?: unknown): void;
85
86
  export declare function lazy(fn: () => Promise<{
86
87
  default: any;
87
88
  }>): (props: any) => string;
@@ -97,7 +98,6 @@ declare type HydrationContext = {
97
98
  registerFragment: (v: string) => (v?: string, err?: any) => boolean;
98
99
  async?: boolean;
99
100
  streaming?: boolean;
100
- dataOnly?: boolean;
101
101
  noHydrate: boolean;
102
102
  };
103
103
  export declare function SuspenseList(props: {
package/web/dist/dev.cjs CHANGED
@@ -403,6 +403,7 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
403
403
  }
404
404
  current = array;
405
405
  } else if (value instanceof Node) {
406
+ if (solidJs.sharedConfig.context) return current = value.parentNode ? value : current;
406
407
  if (Array.isArray(current)) {
407
408
  if (multi) return current = cleanChildren(parent, current, marker, value);
408
409
  cleanChildren(parent, current, null, value);
package/web/dist/dev.js CHANGED
@@ -400,6 +400,7 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
400
400
  }
401
401
  current = array;
402
402
  } else if (value instanceof Node) {
403
+ if (sharedConfig.context) return current = value.parentNode ? value : current;
403
404
  if (Array.isArray(current)) {
404
405
  if (multi) return current = cleanChildren(parent, current, marker, value);
405
406
  cleanChildren(parent, current, null, value);
@@ -243,7 +243,8 @@ function renderToString(code, options = {}) {
243
243
  assets: [],
244
244
  nonce: options.nonce,
245
245
  writeResource(id, p, error) {
246
- if (error) scripts += `_$HY.set("${id}", ${serializeError(p)});`;
246
+ if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
247
+ scripts += `_$HY.set("${id}", ${devalue(p)});`;
247
248
  }
248
249
  };
249
250
  let html = injectAssets(solidJs.sharedConfig.context.assets, resolveSSRNode(escape(code())));
@@ -251,6 +252,7 @@ function renderToString(code, options = {}) {
251
252
  return html;
252
253
  }
253
254
  function renderToStringAsync(code, options = {}) {
255
+ let scripts = "";
254
256
  const {
255
257
  nonce,
256
258
  renderId,
@@ -263,12 +265,12 @@ function renderToStringAsync(code, options = {}) {
263
265
  suspense: {},
264
266
  assets: [],
265
267
  async: true,
266
- nonce
267
- };
268
- let scripts = "";
269
- solidJs.sharedConfig.context.writeResource = (id, p, error) => {
270
- if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
271
- p.then(d => scripts += `_$HY.set("${id}", ${devalue(d)});`).catch(() => scripts += `_$HY.set("${id}", null);`);
268
+ nonce,
269
+ writeResource(id, p, error) {
270
+ if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
271
+ if (typeof p !== "object" || !("then" in p)) return scripts += `_$HY.set("${id}", ${devalue(p)});`;
272
+ p.then(d => scripts += `_$HY.set("${id}", ${devalue(d)});`).catch(() => scripts += `_$HY.set("${id}", {});`);
273
+ }
272
274
  };
273
275
  const timeout = new Promise((_, reject) => setTimeout(() => reject("renderToString timed out"), timeoutMs));
274
276
  function asyncWrap(fn) {
@@ -281,9 +283,10 @@ function renderToStringAsync(code, options = {}) {
281
283
  function register(key) {
282
284
  registry.add(key);
283
285
  return (value = "", error) => {
286
+ if (!registry.has(key)) return;
284
287
  cache[key] = value;
285
288
  registry.delete(key);
286
- if (error) return scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;
289
+ if (error) scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;else scripts += `_$HY.set("${key}", true);`;
287
290
  if (!registry.size) Promise.resolve().then(() => {
288
291
  let source = resolveSSRNode(rendered);
289
292
  let final = "";
@@ -310,7 +313,6 @@ function renderToStream(code, options = {}) {
310
313
  nonce,
311
314
  onCompleteShell,
312
315
  onCompleteAll,
313
- dataOnly,
314
316
  renderId
315
317
  } = options;
316
318
  const tmp = [];
@@ -344,7 +346,6 @@ function renderToStream(code, options = {}) {
344
346
  count: 0,
345
347
  async: true,
346
348
  streaming: true,
347
- dataOnly,
348
349
  resources: {},
349
350
  suspense: {},
350
351
  assets: [],
@@ -355,22 +356,21 @@ function renderToStream(code, options = {}) {
355
356
  scheduled = true;
356
357
  }
357
358
  if (error) return tasks.push(`_$HY.set("${id}", ${serializeError(p)})`);
359
+ if (typeof p !== "object" || !("then" in p)) return tasks.push(`_$HY.set("${id}", ${devalue(p)})`);
358
360
  tasks.push(`_$HY.init("${id}")`);
359
361
  p.then(d => {
360
362
  !completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>_$HY.set("${id}", ${devalue(d)})</script>`);
361
- }).catch(() => {
362
- !completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>_$HY.set("${id}", null)</script>`);
363
+ }).catch(err => {
364
+ !completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>_$HY.set("${id}", {})</script>`);
363
365
  });
364
366
  },
365
367
  registerFragment(key) {
366
368
  registry.set(key, []);
367
- if (!dataOnly) {
368
- if (!scheduled) {
369
- Promise.resolve().then(writeInitialScript);
370
- scheduled = true;
371
- }
372
- tasks.push(`_$HY.init("${key}")`);
369
+ if (!scheduled) {
370
+ Promise.resolve().then(writeInitialScript);
371
+ scheduled = true;
373
372
  }
373
+ tasks.push(`_$HY.init("${key}")`);
374
374
  return (value, error) => {
375
375
  const keys = registry.get(key);
376
376
  registry.delete(key);
@@ -404,6 +404,7 @@ function renderToStream(code, options = {}) {
404
404
  const writer = w.getWriter();
405
405
  writable = {
406
406
  end() {
407
+ writer.releaseLock();
407
408
  w.close();
408
409
  }
409
410
  };
@@ -573,7 +574,7 @@ function generateHydrationScript({
573
574
  eventNames = ["click", "input"],
574
575
  nonce
575
576
  }) {
576
- return `<script${nonce ? ` nonce="${nonce}"` : ""}>((e,t,o={})=>{t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),["${eventNames.join('","')}"].forEach((o=>document.addEventListener(o,(o=>{let n=o.composedPath&&o.composedPath()[0]||o.target,s=t(n);s&&!e.completed.has(s)&&e.events.push([s,o])})))),e.init=(e,t)=>{o[e]=[new Promise((e=>t=e)),t]},e.set=(e,t,n)=>{if(!(n=o[e]))return o[e]=[t];n[1](t)},e.unset=(e)=>{delete o[e]},e.load=(e,t)=>{if(t=o[e])return t[0]}})(window._$HY||(_$HY={events:[],completed:new WeakSet}))</script><!xs>`;
577
+ return `<script${nonce ? ` nonce="${nonce}"` : ""}>((e,t,o={})=>{t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),["${eventNames.join('","')}"].forEach((o=>document.addEventListener(o,(o=>{let s=o.composedPath&&o.composedPath()[0]||o.target,n=t(s);n&&!e.completed.has(n)&&e.events.push([n,o])})))),e.init=(e,t)=>{o[e]=[new Promise(((e,o)=>t=e)),t]},e.set=(e,t,s)=>{(s=o[e])&&s[1](t),o[e]=[t]},e.unset=e=>{delete o[e]},e.load=(e,t)=>{if(t=o[e])return t[0]}})(window._$HY||(_$HY={events:[],completed:new WeakSet}))</script><!xs>`;
577
578
  }
578
579
  function injectAssets(assets, html) {
579
580
  for (let i = 0; i < assets.length; i++) {
@@ -240,7 +240,8 @@ function renderToString(code, options = {}) {
240
240
  assets: [],
241
241
  nonce: options.nonce,
242
242
  writeResource(id, p, error) {
243
- if (error) scripts += `_$HY.set("${id}", ${serializeError(p)});`;
243
+ if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
244
+ scripts += `_$HY.set("${id}", ${devalue(p)});`;
244
245
  }
245
246
  };
246
247
  let html = injectAssets(sharedConfig.context.assets, resolveSSRNode(escape(code())));
@@ -248,6 +249,7 @@ function renderToString(code, options = {}) {
248
249
  return html;
249
250
  }
250
251
  function renderToStringAsync(code, options = {}) {
252
+ let scripts = "";
251
253
  const {
252
254
  nonce,
253
255
  renderId,
@@ -260,12 +262,12 @@ function renderToStringAsync(code, options = {}) {
260
262
  suspense: {},
261
263
  assets: [],
262
264
  async: true,
263
- nonce
264
- };
265
- let scripts = "";
266
- sharedConfig.context.writeResource = (id, p, error) => {
267
- if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
268
- p.then(d => scripts += `_$HY.set("${id}", ${devalue(d)});`).catch(() => scripts += `_$HY.set("${id}", null);`);
265
+ nonce,
266
+ writeResource(id, p, error) {
267
+ if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
268
+ if (typeof p !== "object" || !("then" in p)) return scripts += `_$HY.set("${id}", ${devalue(p)});`;
269
+ p.then(d => scripts += `_$HY.set("${id}", ${devalue(d)});`).catch(() => scripts += `_$HY.set("${id}", {});`);
270
+ }
269
271
  };
270
272
  const timeout = new Promise((_, reject) => setTimeout(() => reject("renderToString timed out"), timeoutMs));
271
273
  function asyncWrap(fn) {
@@ -278,9 +280,10 @@ function renderToStringAsync(code, options = {}) {
278
280
  function register(key) {
279
281
  registry.add(key);
280
282
  return (value = "", error) => {
283
+ if (!registry.has(key)) return;
281
284
  cache[key] = value;
282
285
  registry.delete(key);
283
- if (error) return scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;
286
+ if (error) scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;else scripts += `_$HY.set("${key}", true);`;
284
287
  if (!registry.size) Promise.resolve().then(() => {
285
288
  let source = resolveSSRNode(rendered);
286
289
  let final = "";
@@ -307,7 +310,6 @@ function renderToStream(code, options = {}) {
307
310
  nonce,
308
311
  onCompleteShell,
309
312
  onCompleteAll,
310
- dataOnly,
311
313
  renderId
312
314
  } = options;
313
315
  const tmp = [];
@@ -341,7 +343,6 @@ function renderToStream(code, options = {}) {
341
343
  count: 0,
342
344
  async: true,
343
345
  streaming: true,
344
- dataOnly,
345
346
  resources: {},
346
347
  suspense: {},
347
348
  assets: [],
@@ -352,22 +353,21 @@ function renderToStream(code, options = {}) {
352
353
  scheduled = true;
353
354
  }
354
355
  if (error) return tasks.push(`_$HY.set("${id}", ${serializeError(p)})`);
356
+ if (typeof p !== "object" || !("then" in p)) return tasks.push(`_$HY.set("${id}", ${devalue(p)})`);
355
357
  tasks.push(`_$HY.init("${id}")`);
356
358
  p.then(d => {
357
359
  !completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>_$HY.set("${id}", ${devalue(d)})</script>`);
358
- }).catch(() => {
359
- !completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>_$HY.set("${id}", null)</script>`);
360
+ }).catch(err => {
361
+ !completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>_$HY.set("${id}", {})</script>`);
360
362
  });
361
363
  },
362
364
  registerFragment(key) {
363
365
  registry.set(key, []);
364
- if (!dataOnly) {
365
- if (!scheduled) {
366
- Promise.resolve().then(writeInitialScript);
367
- scheduled = true;
368
- }
369
- tasks.push(`_$HY.init("${key}")`);
366
+ if (!scheduled) {
367
+ Promise.resolve().then(writeInitialScript);
368
+ scheduled = true;
370
369
  }
370
+ tasks.push(`_$HY.init("${key}")`);
371
371
  return (value, error) => {
372
372
  const keys = registry.get(key);
373
373
  registry.delete(key);
@@ -401,6 +401,7 @@ function renderToStream(code, options = {}) {
401
401
  const writer = w.getWriter();
402
402
  writable = {
403
403
  end() {
404
+ writer.releaseLock();
404
405
  w.close();
405
406
  }
406
407
  };
@@ -570,7 +571,7 @@ function generateHydrationScript({
570
571
  eventNames = ["click", "input"],
571
572
  nonce
572
573
  }) {
573
- return `<script${nonce ? ` nonce="${nonce}"` : ""}>((e,t,o={})=>{t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),["${eventNames.join('","')}"].forEach((o=>document.addEventListener(o,(o=>{let n=o.composedPath&&o.composedPath()[0]||o.target,s=t(n);s&&!e.completed.has(s)&&e.events.push([s,o])})))),e.init=(e,t)=>{o[e]=[new Promise((e=>t=e)),t]},e.set=(e,t,n)=>{if(!(n=o[e]))return o[e]=[t];n[1](t)},e.unset=(e)=>{delete o[e]},e.load=(e,t)=>{if(t=o[e])return t[0]}})(window._$HY||(_$HY={events:[],completed:new WeakSet}))</script><!xs>`;
574
+ return `<script${nonce ? ` nonce="${nonce}"` : ""}>((e,t,o={})=>{t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),["${eventNames.join('","')}"].forEach((o=>document.addEventListener(o,(o=>{let s=o.composedPath&&o.composedPath()[0]||o.target,n=t(s);n&&!e.completed.has(n)&&e.events.push([n,o])})))),e.init=(e,t)=>{o[e]=[new Promise(((e,o)=>t=e)),t]},e.set=(e,t,s)=>{(s=o[e])&&s[1](t),o[e]=[t]},e.unset=e=>{delete o[e]},e.load=(e,t)=>{if(t=o[e])return t[0]}})(window._$HY||(_$HY={events:[],completed:new WeakSet}))</script><!xs>`;
574
575
  }
575
576
  function injectAssets(assets, html) {
576
577
  for (let i = 0; i < assets.length; i++) {
package/web/dist/web.cjs CHANGED
@@ -402,6 +402,7 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
402
402
  }
403
403
  current = array;
404
404
  } else if (value instanceof Node) {
405
+ if (solidJs.sharedConfig.context) return current = value.parentNode ? value : current;
405
406
  if (Array.isArray(current)) {
406
407
  if (multi) return current = cleanChildren(parent, current, marker, value);
407
408
  cleanChildren(parent, current, null, value);
package/web/dist/web.js CHANGED
@@ -399,6 +399,7 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
399
399
  }
400
400
  current = array;
401
401
  } else if (value instanceof Node) {
402
+ if (sharedConfig.context) return current = value.parentNode ? value : current;
402
403
  if (Array.isArray(current)) {
403
404
  if (multi) return current = cleanChildren(parent, current, marker, value);
404
405
  cleanChildren(parent, current, null, value);
@@ -9,7 +9,6 @@ export declare function renderToStringAsync<T>(fn: () => T, options?: {
9
9
  }): Promise<string>;
10
10
  export declare function renderToStream<T>(fn: () => T, options?: {
11
11
  nonce?: string;
12
- dataOnly?: boolean;
13
12
  renderId?: string;
14
13
  onCompleteShell?: () => void;
15
14
  onCompleteAll?: () => void;
@@ -42,7 +41,6 @@ export declare type LegacyResults = {
42
41
  */
43
42
  export declare function pipeToWritable<T>(fn: () => T, writable: WritableStream, options?: {
44
43
  nonce?: string;
45
- dataOnly?: boolean;
46
44
  onReady?: (res: LegacyResults) => void;
47
45
  onCompleteAll?: () => void;
48
46
  }): void;
@@ -53,7 +51,6 @@ export declare function pipeToNodeWritable<T>(fn: () => T, writable: {
53
51
  write: (v: string) => void;
54
52
  }, options?: {
55
53
  nonce?: string;
56
- dataOnly?: boolean;
57
54
  onReady?: (res: LegacyResults) => void;
58
55
  onCompleteAll?: () => void;
59
56
  }): void;