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 +33 -17
- package/dist/dev.js +33 -18
- package/dist/server.cjs +10 -10
- package/dist/server.js +10 -10
- package/dist/solid.cjs +33 -17
- package/dist/solid.js +33 -18
- package/package.json +2 -2
- package/types/index.d.ts +2 -2
- package/types/reactive/signal.d.ts +15 -4
- package/types/server/rendering.d.ts +1 -1
- package/web/dist/dev.cjs +1 -0
- package/web/dist/dev.js +1 -0
- package/web/dist/server.cjs +20 -19
- package/web/dist/server.js +20 -19
- 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 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(
|
|
1294
|
+
setHydrateContext();
|
|
1285
1295
|
});
|
|
1286
1296
|
comp = s;
|
|
1287
1297
|
} else if (!comp) {
|
|
1288
|
-
const [s] = createResource((
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
1483
|
-
|
|
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 ||
|
|
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 (
|
|
1516
|
-
|
|
1517
|
-
|
|
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,
|
|
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(
|
|
1290
|
+
setHydrateContext();
|
|
1281
1291
|
});
|
|
1282
1292
|
comp = s;
|
|
1283
1293
|
} else if (!comp) {
|
|
1284
|
-
const [s] = createResource((
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
1479
|
-
|
|
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 ||
|
|
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 (
|
|
1512
|
-
|
|
1513
|
-
|
|
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))
|
|
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 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(
|
|
1218
|
+
setHydrateContext();
|
|
1209
1219
|
});
|
|
1210
1220
|
comp = s;
|
|
1211
1221
|
} else if (!comp) {
|
|
1212
|
-
const [s] = createResource((
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
1407
|
-
|
|
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 ||
|
|
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 (
|
|
1440
|
-
|
|
1441
|
-
|
|
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,
|
|
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(
|
|
1214
|
+
setHydrateContext();
|
|
1205
1215
|
});
|
|
1206
1216
|
comp = s;
|
|
1207
1217
|
} else if (!comp) {
|
|
1208
|
-
const [s] = createResource((
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
1403
|
-
|
|
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 ||
|
|
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 (
|
|
1436
|
-
|
|
1437
|
-
|
|
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-
|
|
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": "
|
|
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,
|
|
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 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);
|
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}", {});`);
|
|
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)
|
|
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}",
|
|
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 (!
|
|
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)=>{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++) {
|
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}", {});`);
|
|
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)
|
|
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}",
|
|
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 (!
|
|
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)=>{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;
|