solid-js 1.3.0-beta.5 → 1.3.0-beta.9
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 +30 -16
- package/dist/dev.js +30 -17
- package/dist/server.cjs +10 -10
- package/dist/server.js +10 -10
- package/dist/solid.cjs +30 -16
- package/dist/solid.js +30 -17
- package/package.json +14 -2
- package/types/index.d.ts +2 -2
- package/types/reactive/signal.d.ts +15 -4
- package/types/server/rendering.d.ts +0 -1
- package/web/dist/dev.cjs +1 -0
- package/web/dist/dev.js +1 -0
- package/web/dist/server.cjs +19 -18
- package/web/dist/server.js +19 -18
- package/web/dist/web.cjs +1 -0
- package/web/dist/web.js +1 -0
- package/web/types/server-mock.d.ts +0 -3
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,
|
|
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 refreshResources(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,7 +1291,7 @@ function lazy(fn) {
|
|
|
1281
1291
|
(p || (p = fn())).then(mod => {
|
|
1282
1292
|
setHydrateContext(ctx);
|
|
1283
1293
|
set(() => mod.default);
|
|
1284
|
-
setHydrateContext(
|
|
1294
|
+
setHydrateContext();
|
|
1285
1295
|
});
|
|
1286
1296
|
comp = s;
|
|
1287
1297
|
} else if (!comp) {
|
|
@@ -1448,7 +1458,7 @@ function Suspense(props) {
|
|
|
1448
1458
|
showContent,
|
|
1449
1459
|
showFallback,
|
|
1450
1460
|
ctx,
|
|
1451
|
-
|
|
1461
|
+
p,
|
|
1452
1462
|
flicker,
|
|
1453
1463
|
error;
|
|
1454
1464
|
const [inFallback, setFallback] = createSignal(false),
|
|
@@ -1467,8 +1477,8 @@ function Suspense(props) {
|
|
|
1467
1477
|
owner = getOwner();
|
|
1468
1478
|
if (sharedConfig.context) {
|
|
1469
1479
|
const key = sharedConfig.context.id + sharedConfig.context.count;
|
|
1470
|
-
|
|
1471
|
-
if (p) {
|
|
1480
|
+
p = sharedConfig.load(key);
|
|
1481
|
+
if (p && typeof p === "object") {
|
|
1472
1482
|
const [s, set] = createSignal(undefined, {
|
|
1473
1483
|
equals: false
|
|
1474
1484
|
});
|
|
@@ -1476,11 +1486,10 @@ function Suspense(props) {
|
|
|
1476
1486
|
p.then(err => {
|
|
1477
1487
|
if (error = err) return set();
|
|
1478
1488
|
sharedConfig.gather(key);
|
|
1479
|
-
waitingHydration = true;
|
|
1480
1489
|
setHydrateContext(ctx);
|
|
1481
1490
|
set();
|
|
1482
|
-
setHydrateContext(
|
|
1483
|
-
|
|
1491
|
+
setHydrateContext();
|
|
1492
|
+
p = undefined;
|
|
1484
1493
|
});
|
|
1485
1494
|
}
|
|
1486
1495
|
}
|
|
@@ -1493,18 +1502,19 @@ function Suspense(props) {
|
|
|
1493
1502
|
get children() {
|
|
1494
1503
|
return createMemo(() => {
|
|
1495
1504
|
if (error) throw error;
|
|
1505
|
+
ctx = sharedConfig.context;
|
|
1496
1506
|
if (flicker) {
|
|
1497
|
-
ctx = sharedConfig.context;
|
|
1498
1507
|
flicker();
|
|
1499
1508
|
return flicker = undefined;
|
|
1500
1509
|
}
|
|
1510
|
+
if (ctx && p === undefined) setHydrateContext();
|
|
1501
1511
|
const rendered = untrack(() => props.children);
|
|
1502
1512
|
return createMemo(() => {
|
|
1503
1513
|
const inFallback = store.inFallback(),
|
|
1504
1514
|
visibleContent = showContent ? showContent() : true,
|
|
1505
1515
|
visibleFallback = showFallback ? showFallback() : true;
|
|
1506
1516
|
dispose && dispose();
|
|
1507
|
-
if ((!inFallback ||
|
|
1517
|
+
if ((!inFallback || p !== undefined) && visibleContent) {
|
|
1508
1518
|
store.resolved = true;
|
|
1509
1519
|
resumeEffects(store.effects);
|
|
1510
1520
|
return rendered;
|
|
@@ -1512,10 +1522,13 @@ function Suspense(props) {
|
|
|
1512
1522
|
if (!visibleFallback) return;
|
|
1513
1523
|
return createRoot(disposer => {
|
|
1514
1524
|
dispose = disposer;
|
|
1515
|
-
if (
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1525
|
+
if (ctx) {
|
|
1526
|
+
setHydrateContext({
|
|
1527
|
+
id: ctx.id + "f",
|
|
1528
|
+
count: 0
|
|
1529
|
+
});
|
|
1530
|
+
ctx = undefined;
|
|
1531
|
+
}
|
|
1519
1532
|
return props.fallback;
|
|
1520
1533
|
}, owner);
|
|
1521
1534
|
});
|
|
@@ -1577,6 +1590,7 @@ exports.on = on;
|
|
|
1577
1590
|
exports.onCleanup = onCleanup;
|
|
1578
1591
|
exports.onError = onError;
|
|
1579
1592
|
exports.onMount = onMount;
|
|
1593
|
+
exports.refreshResources = refreshResources;
|
|
1580
1594
|
exports.requestCallback = requestCallback;
|
|
1581
1595
|
exports.runWithOwner = runWithOwner;
|
|
1582
1596
|
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,
|
|
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 refreshResources(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,7 +1287,7 @@ function lazy(fn) {
|
|
|
1277
1287
|
(p || (p = fn())).then(mod => {
|
|
1278
1288
|
setHydrateContext(ctx);
|
|
1279
1289
|
set(() => mod.default);
|
|
1280
|
-
setHydrateContext(
|
|
1290
|
+
setHydrateContext();
|
|
1281
1291
|
});
|
|
1282
1292
|
comp = s;
|
|
1283
1293
|
} else if (!comp) {
|
|
@@ -1444,7 +1454,7 @@ function Suspense(props) {
|
|
|
1444
1454
|
showContent,
|
|
1445
1455
|
showFallback,
|
|
1446
1456
|
ctx,
|
|
1447
|
-
|
|
1457
|
+
p,
|
|
1448
1458
|
flicker,
|
|
1449
1459
|
error;
|
|
1450
1460
|
const [inFallback, setFallback] = createSignal(false),
|
|
@@ -1463,8 +1473,8 @@ function Suspense(props) {
|
|
|
1463
1473
|
owner = getOwner();
|
|
1464
1474
|
if (sharedConfig.context) {
|
|
1465
1475
|
const key = sharedConfig.context.id + sharedConfig.context.count;
|
|
1466
|
-
|
|
1467
|
-
if (p) {
|
|
1476
|
+
p = sharedConfig.load(key);
|
|
1477
|
+
if (p && typeof p === "object") {
|
|
1468
1478
|
const [s, set] = createSignal(undefined, {
|
|
1469
1479
|
equals: false
|
|
1470
1480
|
});
|
|
@@ -1472,11 +1482,10 @@ function Suspense(props) {
|
|
|
1472
1482
|
p.then(err => {
|
|
1473
1483
|
if (error = err) return set();
|
|
1474
1484
|
sharedConfig.gather(key);
|
|
1475
|
-
waitingHydration = true;
|
|
1476
1485
|
setHydrateContext(ctx);
|
|
1477
1486
|
set();
|
|
1478
|
-
setHydrateContext(
|
|
1479
|
-
|
|
1487
|
+
setHydrateContext();
|
|
1488
|
+
p = undefined;
|
|
1480
1489
|
});
|
|
1481
1490
|
}
|
|
1482
1491
|
}
|
|
@@ -1489,18 +1498,19 @@ function Suspense(props) {
|
|
|
1489
1498
|
get children() {
|
|
1490
1499
|
return createMemo(() => {
|
|
1491
1500
|
if (error) throw error;
|
|
1501
|
+
ctx = sharedConfig.context;
|
|
1492
1502
|
if (flicker) {
|
|
1493
|
-
ctx = sharedConfig.context;
|
|
1494
1503
|
flicker();
|
|
1495
1504
|
return flicker = undefined;
|
|
1496
1505
|
}
|
|
1506
|
+
if (ctx && p === undefined) setHydrateContext();
|
|
1497
1507
|
const rendered = untrack(() => props.children);
|
|
1498
1508
|
return createMemo(() => {
|
|
1499
1509
|
const inFallback = store.inFallback(),
|
|
1500
1510
|
visibleContent = showContent ? showContent() : true,
|
|
1501
1511
|
visibleFallback = showFallback ? showFallback() : true;
|
|
1502
1512
|
dispose && dispose();
|
|
1503
|
-
if ((!inFallback ||
|
|
1513
|
+
if ((!inFallback || p !== undefined) && visibleContent) {
|
|
1504
1514
|
store.resolved = true;
|
|
1505
1515
|
resumeEffects(store.effects);
|
|
1506
1516
|
return rendered;
|
|
@@ -1508,10 +1518,13 @@ function Suspense(props) {
|
|
|
1508
1518
|
if (!visibleFallback) return;
|
|
1509
1519
|
return createRoot(disposer => {
|
|
1510
1520
|
dispose = disposer;
|
|
1511
|
-
if (
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1521
|
+
if (ctx) {
|
|
1522
|
+
setHydrateContext({
|
|
1523
|
+
id: ctx.id + "f",
|
|
1524
|
+
count: 0
|
|
1525
|
+
});
|
|
1526
|
+
ctx = undefined;
|
|
1527
|
+
}
|
|
1515
1528
|
return props.fallback;
|
|
1516
1529
|
}, owner);
|
|
1517
1530
|
});
|
|
@@ -1533,4 +1546,4 @@ if (globalThis) {
|
|
|
1533
1546
|
if (!globalThis.Solid$$) globalThis.Solid$$ = true;else console.warn("You appear to have multiple instances of Solid. This can lead to unexpected behavior.");
|
|
1534
1547
|
}
|
|
1535
1548
|
|
|
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 };
|
|
1549
|
+
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, refreshResources, 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))
|
|
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
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
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))
|
|
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
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
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,
|
|
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 refreshResources(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,7 +1215,7 @@ function lazy(fn) {
|
|
|
1205
1215
|
(p || (p = fn())).then(mod => {
|
|
1206
1216
|
setHydrateContext(ctx);
|
|
1207
1217
|
set(() => mod.default);
|
|
1208
|
-
setHydrateContext(
|
|
1218
|
+
setHydrateContext();
|
|
1209
1219
|
});
|
|
1210
1220
|
comp = s;
|
|
1211
1221
|
} else if (!comp) {
|
|
@@ -1372,7 +1382,7 @@ function Suspense(props) {
|
|
|
1372
1382
|
showContent,
|
|
1373
1383
|
showFallback,
|
|
1374
1384
|
ctx,
|
|
1375
|
-
|
|
1385
|
+
p,
|
|
1376
1386
|
flicker,
|
|
1377
1387
|
error;
|
|
1378
1388
|
const [inFallback, setFallback] = createSignal(false),
|
|
@@ -1391,8 +1401,8 @@ function Suspense(props) {
|
|
|
1391
1401
|
owner = getOwner();
|
|
1392
1402
|
if (sharedConfig.context) {
|
|
1393
1403
|
const key = sharedConfig.context.id + sharedConfig.context.count;
|
|
1394
|
-
|
|
1395
|
-
if (p) {
|
|
1404
|
+
p = sharedConfig.load(key);
|
|
1405
|
+
if (p && typeof p === "object") {
|
|
1396
1406
|
const [s, set] = createSignal(undefined, {
|
|
1397
1407
|
equals: false
|
|
1398
1408
|
});
|
|
@@ -1400,11 +1410,10 @@ function Suspense(props) {
|
|
|
1400
1410
|
p.then(err => {
|
|
1401
1411
|
if (error = err) return set();
|
|
1402
1412
|
sharedConfig.gather(key);
|
|
1403
|
-
waitingHydration = true;
|
|
1404
1413
|
setHydrateContext(ctx);
|
|
1405
1414
|
set();
|
|
1406
|
-
setHydrateContext(
|
|
1407
|
-
|
|
1415
|
+
setHydrateContext();
|
|
1416
|
+
p = undefined;
|
|
1408
1417
|
});
|
|
1409
1418
|
}
|
|
1410
1419
|
}
|
|
@@ -1417,18 +1426,19 @@ function Suspense(props) {
|
|
|
1417
1426
|
get children() {
|
|
1418
1427
|
return createMemo(() => {
|
|
1419
1428
|
if (error) throw error;
|
|
1429
|
+
ctx = sharedConfig.context;
|
|
1420
1430
|
if (flicker) {
|
|
1421
|
-
ctx = sharedConfig.context;
|
|
1422
1431
|
flicker();
|
|
1423
1432
|
return flicker = undefined;
|
|
1424
1433
|
}
|
|
1434
|
+
if (ctx && p === undefined) setHydrateContext();
|
|
1425
1435
|
const rendered = untrack(() => props.children);
|
|
1426
1436
|
return createMemo(() => {
|
|
1427
1437
|
const inFallback = store.inFallback(),
|
|
1428
1438
|
visibleContent = showContent ? showContent() : true,
|
|
1429
1439
|
visibleFallback = showFallback ? showFallback() : true;
|
|
1430
1440
|
dispose && dispose();
|
|
1431
|
-
if ((!inFallback ||
|
|
1441
|
+
if ((!inFallback || p !== undefined) && visibleContent) {
|
|
1432
1442
|
store.resolved = true;
|
|
1433
1443
|
resumeEffects(store.effects);
|
|
1434
1444
|
return rendered;
|
|
@@ -1436,10 +1446,13 @@ function Suspense(props) {
|
|
|
1436
1446
|
if (!visibleFallback) return;
|
|
1437
1447
|
return createRoot(disposer => {
|
|
1438
1448
|
dispose = disposer;
|
|
1439
|
-
if (
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1449
|
+
if (ctx) {
|
|
1450
|
+
setHydrateContext({
|
|
1451
|
+
id: ctx.id + "f",
|
|
1452
|
+
count: 0
|
|
1453
|
+
});
|
|
1454
|
+
ctx = undefined;
|
|
1455
|
+
}
|
|
1443
1456
|
return props.fallback;
|
|
1444
1457
|
}, owner);
|
|
1445
1458
|
});
|
|
@@ -1491,6 +1504,7 @@ exports.on = on;
|
|
|
1491
1504
|
exports.onCleanup = onCleanup;
|
|
1492
1505
|
exports.onError = onError;
|
|
1493
1506
|
exports.onMount = onMount;
|
|
1507
|
+
exports.refreshResources = refreshResources;
|
|
1494
1508
|
exports.requestCallback = requestCallback;
|
|
1495
1509
|
exports.runWithOwner = runWithOwner;
|
|
1496
1510
|
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,
|
|
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 refreshResources(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,7 +1211,7 @@ function lazy(fn) {
|
|
|
1201
1211
|
(p || (p = fn())).then(mod => {
|
|
1202
1212
|
setHydrateContext(ctx);
|
|
1203
1213
|
set(() => mod.default);
|
|
1204
|
-
setHydrateContext(
|
|
1214
|
+
setHydrateContext();
|
|
1205
1215
|
});
|
|
1206
1216
|
comp = s;
|
|
1207
1217
|
} else if (!comp) {
|
|
@@ -1368,7 +1378,7 @@ function Suspense(props) {
|
|
|
1368
1378
|
showContent,
|
|
1369
1379
|
showFallback,
|
|
1370
1380
|
ctx,
|
|
1371
|
-
|
|
1381
|
+
p,
|
|
1372
1382
|
flicker,
|
|
1373
1383
|
error;
|
|
1374
1384
|
const [inFallback, setFallback] = createSignal(false),
|
|
@@ -1387,8 +1397,8 @@ function Suspense(props) {
|
|
|
1387
1397
|
owner = getOwner();
|
|
1388
1398
|
if (sharedConfig.context) {
|
|
1389
1399
|
const key = sharedConfig.context.id + sharedConfig.context.count;
|
|
1390
|
-
|
|
1391
|
-
if (p) {
|
|
1400
|
+
p = sharedConfig.load(key);
|
|
1401
|
+
if (p && typeof p === "object") {
|
|
1392
1402
|
const [s, set] = createSignal(undefined, {
|
|
1393
1403
|
equals: false
|
|
1394
1404
|
});
|
|
@@ -1396,11 +1406,10 @@ function Suspense(props) {
|
|
|
1396
1406
|
p.then(err => {
|
|
1397
1407
|
if (error = err) return set();
|
|
1398
1408
|
sharedConfig.gather(key);
|
|
1399
|
-
waitingHydration = true;
|
|
1400
1409
|
setHydrateContext(ctx);
|
|
1401
1410
|
set();
|
|
1402
|
-
setHydrateContext(
|
|
1403
|
-
|
|
1411
|
+
setHydrateContext();
|
|
1412
|
+
p = undefined;
|
|
1404
1413
|
});
|
|
1405
1414
|
}
|
|
1406
1415
|
}
|
|
@@ -1413,18 +1422,19 @@ function Suspense(props) {
|
|
|
1413
1422
|
get children() {
|
|
1414
1423
|
return createMemo(() => {
|
|
1415
1424
|
if (error) throw error;
|
|
1425
|
+
ctx = sharedConfig.context;
|
|
1416
1426
|
if (flicker) {
|
|
1417
|
-
ctx = sharedConfig.context;
|
|
1418
1427
|
flicker();
|
|
1419
1428
|
return flicker = undefined;
|
|
1420
1429
|
}
|
|
1430
|
+
if (ctx && p === undefined) setHydrateContext();
|
|
1421
1431
|
const rendered = untrack(() => props.children);
|
|
1422
1432
|
return createMemo(() => {
|
|
1423
1433
|
const inFallback = store.inFallback(),
|
|
1424
1434
|
visibleContent = showContent ? showContent() : true,
|
|
1425
1435
|
visibleFallback = showFallback ? showFallback() : true;
|
|
1426
1436
|
dispose && dispose();
|
|
1427
|
-
if ((!inFallback ||
|
|
1437
|
+
if ((!inFallback || p !== undefined) && visibleContent) {
|
|
1428
1438
|
store.resolved = true;
|
|
1429
1439
|
resumeEffects(store.effects);
|
|
1430
1440
|
return rendered;
|
|
@@ -1432,10 +1442,13 @@ function Suspense(props) {
|
|
|
1432
1442
|
if (!visibleFallback) return;
|
|
1433
1443
|
return createRoot(disposer => {
|
|
1434
1444
|
dispose = disposer;
|
|
1435
|
-
if (
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1445
|
+
if (ctx) {
|
|
1446
|
+
setHydrateContext({
|
|
1447
|
+
id: ctx.id + "f",
|
|
1448
|
+
count: 0
|
|
1449
|
+
});
|
|
1450
|
+
ctx = undefined;
|
|
1451
|
+
}
|
|
1439
1452
|
return props.fallback;
|
|
1440
1453
|
}, owner);
|
|
1441
1454
|
});
|
|
@@ -1446,4 +1459,4 @@ function Suspense(props) {
|
|
|
1446
1459
|
|
|
1447
1460
|
let DEV;
|
|
1448
1461
|
|
|
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 };
|
|
1462
|
+
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, refreshResources, 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.
|
|
4
|
+
"version": "1.3.0-beta.9",
|
|
5
5
|
"author": "Ryan Carniato",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://solidjs.com",
|
|
@@ -37,6 +37,10 @@
|
|
|
37
37
|
"exports": {
|
|
38
38
|
".": {
|
|
39
39
|
"browser": {
|
|
40
|
+
"development": {
|
|
41
|
+
"import": "./dist/dev.js",
|
|
42
|
+
"require": "./dist/dev.cjs"
|
|
43
|
+
},
|
|
40
44
|
"import": "./dist/solid.js",
|
|
41
45
|
"require": "./dist/solid.cjs"
|
|
42
46
|
},
|
|
@@ -54,6 +58,10 @@
|
|
|
54
58
|
"./dist/*": "./dist/*",
|
|
55
59
|
"./store": {
|
|
56
60
|
"browser": {
|
|
61
|
+
"development": {
|
|
62
|
+
"import": "./store/dist/dev.js",
|
|
63
|
+
"require": "./store/dist/dev.cjs"
|
|
64
|
+
},
|
|
57
65
|
"import": "./store/dist/store.js",
|
|
58
66
|
"require": "./store/dist/store.cjs"
|
|
59
67
|
},
|
|
@@ -71,6 +79,10 @@
|
|
|
71
79
|
"./store/dist/*": "./store/dist/*",
|
|
72
80
|
"./web": {
|
|
73
81
|
"browser": {
|
|
82
|
+
"development": {
|
|
83
|
+
"import": "./web/dist/dev.js",
|
|
84
|
+
"require": "./web/dist/dev.cjs"
|
|
85
|
+
},
|
|
74
86
|
"import": "./web/dist/web.js",
|
|
75
87
|
"require": "./web/dist/web.cjs"
|
|
76
88
|
},
|
|
@@ -132,5 +144,5 @@
|
|
|
132
144
|
"compiler",
|
|
133
145
|
"performance"
|
|
134
146
|
],
|
|
135
|
-
"gitHead": "
|
|
147
|
+
"gitHead": "058e842f24e8ef67121296774a526edbb1f7b5ad"
|
|
136
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, refreshResources, 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,
|
|
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 }] =
|
|
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
|
-
*
|
|
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 refreshResources(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
|
/**
|
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);
|
package/web/dist/server.cjs
CHANGED
|
@@ -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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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}", null);`);
|
|
273
|
+
}
|
|
272
274
|
};
|
|
273
275
|
const timeout = new Promise((_, reject) => setTimeout(() => reject("renderToString timed out"), timeoutMs));
|
|
274
276
|
function asyncWrap(fn) {
|
|
@@ -284,6 +286,7 @@ function renderToStringAsync(code, options = {}) {
|
|
|
284
286
|
cache[key] = value;
|
|
285
287
|
registry.delete(key);
|
|
286
288
|
if (error) return scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;
|
|
289
|
+
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}", null, ${serializeError(err)})</script>`);
|
|
363
365
|
});
|
|
364
366
|
},
|
|
365
367
|
registerFragment(key) {
|
|
366
368
|
registry.set(key, []);
|
|
367
|
-
if (!
|
|
368
|
-
|
|
369
|
-
|
|
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
|
|
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,s)=>{o[e]=[new Promise(((e,o)=>(t=e,s=o))),t,s]},e.set=(e,t,s,n)=>{(n=o[e])&&(s?n[2](s):n[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++) {
|
package/web/dist/server.js
CHANGED
|
@@ -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
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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}", null);`);
|
|
270
|
+
}
|
|
269
271
|
};
|
|
270
272
|
const timeout = new Promise((_, reject) => setTimeout(() => reject("renderToString timed out"), timeoutMs));
|
|
271
273
|
function asyncWrap(fn) {
|
|
@@ -281,6 +283,7 @@ function renderToStringAsync(code, options = {}) {
|
|
|
281
283
|
cache[key] = value;
|
|
282
284
|
registry.delete(key);
|
|
283
285
|
if (error) return scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;
|
|
286
|
+
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}", null, ${serializeError(err)})</script>`);
|
|
360
362
|
});
|
|
361
363
|
},
|
|
362
364
|
registerFragment(key) {
|
|
363
365
|
registry.set(key, []);
|
|
364
|
-
if (!
|
|
365
|
-
|
|
366
|
-
|
|
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
|
|
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,s)=>{o[e]=[new Promise(((e,o)=>(t=e,s=o))),t,s]},e.set=(e,t,s,n)=>{(n=o[e])&&(s?n[2](s):n[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;
|