solid-js 1.3.0-beta.1 → 1.3.0-beta.10
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/README.md +3 -1
- package/dist/dev.cjs +91 -26
- package/dist/dev.js +89 -27
- package/dist/server.cjs +62 -21
- package/dist/server.js +62 -22
- package/dist/solid.cjs +91 -26
- package/dist/solid.js +89 -27
- package/package.json +27 -15
- package/types/index.d.ts +2 -2
- package/types/reactive/signal.d.ts +22 -4
- package/types/render/component.d.ts +4 -1
- package/types/server/index.d.ts +1 -1
- package/types/server/reactive.d.ts +1 -0
- package/types/server/rendering.d.ts +6 -5
- package/web/dist/dev.cjs +13 -15
- package/web/dist/dev.js +14 -15
- package/web/dist/server.cjs +141 -159
- package/web/dist/server.js +141 -159
- package/web/dist/web.cjs +13 -15
- package/web/dist/web.js +14 -15
- package/web/types/client.d.ts +11 -2
- package/web/types/index.d.ts +2 -0
- package/web/types/server-mock.d.ts +33 -20
package/dist/solid.js
CHANGED
|
@@ -145,6 +145,7 @@ const [transPending, setTransPending] = /*@__PURE__*/createSignal(false);
|
|
|
145
145
|
var Owner = null;
|
|
146
146
|
let Transition = null;
|
|
147
147
|
let Scheduler = null;
|
|
148
|
+
let ExternalSourceFactory = null;
|
|
148
149
|
let Listener = null;
|
|
149
150
|
let Pending = null;
|
|
150
151
|
let Updates = null;
|
|
@@ -228,6 +229,9 @@ function createResource(source, fetcher, options) {
|
|
|
228
229
|
fetcher = source;
|
|
229
230
|
source = true;
|
|
230
231
|
}
|
|
232
|
+
Resources || (Resources = new Set());
|
|
233
|
+
Resources.add(load);
|
|
234
|
+
onCleanup(() => Resources.delete(load));
|
|
231
235
|
const contexts = new Set(),
|
|
232
236
|
[s, set] = createSignal((options || {}).initialValue),
|
|
233
237
|
[track, trigger] = createSignal(undefined, {
|
|
@@ -289,7 +293,7 @@ function createResource(source, fetcher, options) {
|
|
|
289
293
|
}
|
|
290
294
|
return v;
|
|
291
295
|
}
|
|
292
|
-
function load() {
|
|
296
|
+
function load(refetching = true) {
|
|
293
297
|
setError(err = undefined);
|
|
294
298
|
const lookup = dynamic ? source() : source;
|
|
295
299
|
loadedUnderTransition = Transition && Transition.running;
|
|
@@ -298,7 +302,10 @@ function createResource(source, fetcher, options) {
|
|
|
298
302
|
return;
|
|
299
303
|
}
|
|
300
304
|
if (Transition && pr) Transition.promises.delete(pr);
|
|
301
|
-
const p = initP || untrack(() => fetcher(lookup,
|
|
305
|
+
const p = initP || untrack(() => fetcher(lookup, {
|
|
306
|
+
value: s(),
|
|
307
|
+
refetching
|
|
308
|
+
}));
|
|
302
309
|
initP = null;
|
|
303
310
|
if (typeof p !== "object" || !("then" in p)) {
|
|
304
311
|
loadEnd(pr, p);
|
|
@@ -323,12 +330,16 @@ function createResource(source, fetcher, options) {
|
|
|
323
330
|
}
|
|
324
331
|
}
|
|
325
332
|
});
|
|
326
|
-
if (dynamic) createComputed(load);else load();
|
|
333
|
+
if (dynamic) createComputed(() => load(false));else load(false);
|
|
327
334
|
return [read, {
|
|
328
335
|
refetch: load,
|
|
329
336
|
mutate: set
|
|
330
337
|
}];
|
|
331
338
|
}
|
|
339
|
+
let Resources;
|
|
340
|
+
function refetchResources(info) {
|
|
341
|
+
Resources && Resources.forEach(fn => fn(info));
|
|
342
|
+
}
|
|
332
343
|
function createDeferred(source, options) {
|
|
333
344
|
let t,
|
|
334
345
|
timeout = options ? options.timeoutMs : undefined;
|
|
@@ -499,6 +510,24 @@ let SuspenseContext;
|
|
|
499
510
|
function getSuspenseContext() {
|
|
500
511
|
return SuspenseContext || (SuspenseContext = createContext({}));
|
|
501
512
|
}
|
|
513
|
+
function enableExternalSource(factory) {
|
|
514
|
+
if (ExternalSourceFactory) {
|
|
515
|
+
const oldFactory = ExternalSourceFactory;
|
|
516
|
+
ExternalSourceFactory = (fn, trigger) => {
|
|
517
|
+
const oldSource = oldFactory(fn, trigger);
|
|
518
|
+
const source = factory(x => oldSource.track(x), trigger);
|
|
519
|
+
return {
|
|
520
|
+
track: x => source.track(x),
|
|
521
|
+
dispose() {
|
|
522
|
+
source.dispose();
|
|
523
|
+
oldSource.dispose();
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
};
|
|
527
|
+
} else {
|
|
528
|
+
ExternalSourceFactory = factory;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
502
531
|
function readSignal() {
|
|
503
532
|
const runningTransition = Transition && Transition.running;
|
|
504
533
|
if (this.sources && (!runningTransition && this.state || runningTransition && this.tState)) {
|
|
@@ -626,6 +655,19 @@ function createComputation(fn, init, pure, state = STALE, options) {
|
|
|
626
655
|
if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);
|
|
627
656
|
}
|
|
628
657
|
}
|
|
658
|
+
if (ExternalSourceFactory) {
|
|
659
|
+
const [track, trigger] = createSignal(undefined, {
|
|
660
|
+
equals: false
|
|
661
|
+
});
|
|
662
|
+
const ordinary = ExternalSourceFactory(c.fn, trigger);
|
|
663
|
+
onCleanup(() => ordinary.dispose());
|
|
664
|
+
const triggerInTransition = () => startTransition(trigger, () => inTransition.dispose());
|
|
665
|
+
const inTransition = ExternalSourceFactory(c.fn, triggerInTransition);
|
|
666
|
+
c.fn = x => {
|
|
667
|
+
track();
|
|
668
|
+
return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);
|
|
669
|
+
};
|
|
670
|
+
}
|
|
629
671
|
return c;
|
|
630
672
|
}
|
|
631
673
|
function runTop(node) {
|
|
@@ -1059,13 +1101,19 @@ function indexArray(list, mapFn, options = {}) {
|
|
|
1059
1101
|
};
|
|
1060
1102
|
}
|
|
1061
1103
|
|
|
1104
|
+
let hydrationEnabled = false;
|
|
1105
|
+
function enableHydration() {
|
|
1106
|
+
hydrationEnabled = true;
|
|
1107
|
+
}
|
|
1062
1108
|
function createComponent(Comp, props) {
|
|
1063
|
-
if (
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1109
|
+
if (hydrationEnabled) {
|
|
1110
|
+
if (sharedConfig.context) {
|
|
1111
|
+
const c = sharedConfig.context;
|
|
1112
|
+
setHydrateContext(nextHydrateContext());
|
|
1113
|
+
const r = untrack(() => Comp(props));
|
|
1114
|
+
setHydrateContext(c);
|
|
1115
|
+
return r;
|
|
1116
|
+
}
|
|
1069
1117
|
}
|
|
1070
1118
|
return untrack(() => Comp(props));
|
|
1071
1119
|
}
|
|
@@ -1154,19 +1202,20 @@ function splitProps(props, ...keys) {
|
|
|
1154
1202
|
}
|
|
1155
1203
|
function lazy(fn) {
|
|
1156
1204
|
let comp;
|
|
1205
|
+
let p;
|
|
1157
1206
|
const wrap = props => {
|
|
1158
1207
|
const ctx = sharedConfig.context;
|
|
1159
1208
|
if (ctx) {
|
|
1160
1209
|
ctx.count++;
|
|
1161
1210
|
const [s, set] = createSignal();
|
|
1162
|
-
fn().then(mod => {
|
|
1211
|
+
(p || (p = fn())).then(mod => {
|
|
1163
1212
|
setHydrateContext(ctx);
|
|
1164
1213
|
set(() => mod.default);
|
|
1165
|
-
setHydrateContext(
|
|
1214
|
+
setHydrateContext();
|
|
1166
1215
|
});
|
|
1167
1216
|
comp = s;
|
|
1168
1217
|
} else if (!comp) {
|
|
1169
|
-
const [s] = createResource(() => fn().then(mod => mod.default));
|
|
1218
|
+
const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));
|
|
1170
1219
|
comp = s;
|
|
1171
1220
|
} else {
|
|
1172
1221
|
const c = comp();
|
|
@@ -1182,7 +1231,7 @@ function lazy(fn) {
|
|
|
1182
1231
|
return r;
|
|
1183
1232
|
}));
|
|
1184
1233
|
};
|
|
1185
|
-
wrap.preload = () =>
|
|
1234
|
+
wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);
|
|
1186
1235
|
return wrap;
|
|
1187
1236
|
}
|
|
1188
1237
|
let counter = 0;
|
|
@@ -1242,7 +1291,11 @@ function Match(props) {
|
|
|
1242
1291
|
return props;
|
|
1243
1292
|
}
|
|
1244
1293
|
function ErrorBoundary(props) {
|
|
1245
|
-
|
|
1294
|
+
let err = undefined;
|
|
1295
|
+
if (sharedConfig.context && sharedConfig.load) {
|
|
1296
|
+
err = sharedConfig.load(sharedConfig.context.id + sharedConfig.context.count);
|
|
1297
|
+
}
|
|
1298
|
+
const [errored, setErrored] = createSignal(err);
|
|
1246
1299
|
let e;
|
|
1247
1300
|
return createMemo(() => {
|
|
1248
1301
|
if ((e = errored()) != null) {
|
|
@@ -1325,8 +1378,9 @@ function Suspense(props) {
|
|
|
1325
1378
|
showContent,
|
|
1326
1379
|
showFallback,
|
|
1327
1380
|
ctx,
|
|
1328
|
-
|
|
1329
|
-
flicker
|
|
1381
|
+
p,
|
|
1382
|
+
flicker,
|
|
1383
|
+
error;
|
|
1330
1384
|
const [inFallback, setFallback] = createSignal(false),
|
|
1331
1385
|
SuspenseContext = getSuspenseContext(),
|
|
1332
1386
|
store = {
|
|
@@ -1341,21 +1395,21 @@ function Suspense(props) {
|
|
|
1341
1395
|
resolved: false
|
|
1342
1396
|
},
|
|
1343
1397
|
owner = getOwner();
|
|
1344
|
-
if (sharedConfig.context
|
|
1398
|
+
if (sharedConfig.context) {
|
|
1345
1399
|
const key = sharedConfig.context.id + sharedConfig.context.count;
|
|
1346
|
-
|
|
1347
|
-
if (p) {
|
|
1400
|
+
p = sharedConfig.load(key);
|
|
1401
|
+
if (p && typeof p === "object") {
|
|
1348
1402
|
const [s, set] = createSignal(undefined, {
|
|
1349
1403
|
equals: false
|
|
1350
1404
|
});
|
|
1351
1405
|
flicker = s;
|
|
1352
|
-
p.then(
|
|
1406
|
+
p.then(err => {
|
|
1407
|
+
if (error = err) return set();
|
|
1353
1408
|
sharedConfig.gather(key);
|
|
1354
|
-
waitingHydration = true;
|
|
1355
1409
|
setHydrateContext(ctx);
|
|
1356
1410
|
set();
|
|
1357
|
-
setHydrateContext(
|
|
1358
|
-
|
|
1411
|
+
setHydrateContext();
|
|
1412
|
+
p = undefined;
|
|
1359
1413
|
});
|
|
1360
1414
|
}
|
|
1361
1415
|
}
|
|
@@ -1367,18 +1421,20 @@ function Suspense(props) {
|
|
|
1367
1421
|
value: store,
|
|
1368
1422
|
get children() {
|
|
1369
1423
|
return createMemo(() => {
|
|
1424
|
+
if (error) throw error;
|
|
1425
|
+
ctx = sharedConfig.context;
|
|
1370
1426
|
if (flicker) {
|
|
1371
|
-
ctx = sharedConfig.context;
|
|
1372
1427
|
flicker();
|
|
1373
1428
|
return flicker = undefined;
|
|
1374
1429
|
}
|
|
1430
|
+
if (ctx && p === undefined) setHydrateContext();
|
|
1375
1431
|
const rendered = untrack(() => props.children);
|
|
1376
1432
|
return createMemo(() => {
|
|
1377
1433
|
const inFallback = store.inFallback(),
|
|
1378
1434
|
visibleContent = showContent ? showContent() : true,
|
|
1379
1435
|
visibleFallback = showFallback ? showFallback() : true;
|
|
1380
1436
|
dispose && dispose();
|
|
1381
|
-
if ((!inFallback ||
|
|
1437
|
+
if ((!inFallback || p !== undefined) && visibleContent) {
|
|
1382
1438
|
store.resolved = true;
|
|
1383
1439
|
resumeEffects(store.effects);
|
|
1384
1440
|
return rendered;
|
|
@@ -1386,7 +1442,13 @@ function Suspense(props) {
|
|
|
1386
1442
|
if (!visibleFallback) return;
|
|
1387
1443
|
return createRoot(disposer => {
|
|
1388
1444
|
dispose = disposer;
|
|
1389
|
-
if (
|
|
1445
|
+
if (ctx) {
|
|
1446
|
+
setHydrateContext({
|
|
1447
|
+
id: ctx.id + "f",
|
|
1448
|
+
count: 0
|
|
1449
|
+
});
|
|
1450
|
+
ctx = undefined;
|
|
1451
|
+
}
|
|
1390
1452
|
return props.fallback;
|
|
1391
1453
|
}, owner);
|
|
1392
1454
|
});
|
|
@@ -1397,4 +1459,4 @@ function Suspense(props) {
|
|
|
1397
1459
|
|
|
1398
1460
|
let DEV;
|
|
1399
1461
|
|
|
1400
|
-
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, 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, refetchResources, requestCallback, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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.10",
|
|
5
5
|
"author": "Ryan Carniato",
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://solidjs.com",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "https://github.com/solidjs/solid"
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
],
|
|
37
37
|
"exports": {
|
|
38
38
|
".": {
|
|
39
|
-
"development": {
|
|
40
|
-
"import": "./dist/dev.js",
|
|
41
|
-
"require": "./dist/dev.cjs"
|
|
42
|
-
},
|
|
43
39
|
"browser": {
|
|
40
|
+
"development": {
|
|
41
|
+
"import": "./dist/dev.js",
|
|
42
|
+
"require": "./dist/dev.cjs"
|
|
43
|
+
},
|
|
44
44
|
"import": "./dist/solid.js",
|
|
45
45
|
"require": "./dist/solid.cjs"
|
|
46
46
|
},
|
|
@@ -48,16 +48,20 @@
|
|
|
48
48
|
"import": "./dist/server.js",
|
|
49
49
|
"require": "./dist/server.cjs"
|
|
50
50
|
},
|
|
51
|
+
"development": {
|
|
52
|
+
"import": "./dist/dev.js",
|
|
53
|
+
"require": "./dist/dev.cjs"
|
|
54
|
+
},
|
|
51
55
|
"import": "./dist/solid.js",
|
|
52
56
|
"require": "./dist/solid.cjs"
|
|
53
57
|
},
|
|
54
58
|
"./dist/*": "./dist/*",
|
|
55
59
|
"./store": {
|
|
56
|
-
"development": {
|
|
57
|
-
"import": "./store/dist/dev.js",
|
|
58
|
-
"require": "./store/dist/dev.cjs"
|
|
59
|
-
},
|
|
60
60
|
"browser": {
|
|
61
|
+
"development": {
|
|
62
|
+
"import": "./store/dist/dev.js",
|
|
63
|
+
"require": "./store/dist/dev.cjs"
|
|
64
|
+
},
|
|
61
65
|
"import": "./store/dist/store.js",
|
|
62
66
|
"require": "./store/dist/store.cjs"
|
|
63
67
|
},
|
|
@@ -65,16 +69,20 @@
|
|
|
65
69
|
"import": "./store/dist/server.js",
|
|
66
70
|
"require": "./store/dist/server.cjs"
|
|
67
71
|
},
|
|
72
|
+
"development": {
|
|
73
|
+
"import": "./store/dist/dev.js",
|
|
74
|
+
"require": "./store/dist/dev.cjs"
|
|
75
|
+
},
|
|
68
76
|
"import": "./store/dist/store.js",
|
|
69
77
|
"require": "./store/dist/store.cjs"
|
|
70
78
|
},
|
|
71
79
|
"./store/dist/*": "./store/dist/*",
|
|
72
80
|
"./web": {
|
|
73
|
-
"development": {
|
|
74
|
-
"import": "./web/dist/dev.js",
|
|
75
|
-
"require": "./web/dist/dev.cjs"
|
|
76
|
-
},
|
|
77
81
|
"browser": {
|
|
82
|
+
"development": {
|
|
83
|
+
"import": "./web/dist/dev.js",
|
|
84
|
+
"require": "./web/dist/dev.cjs"
|
|
85
|
+
},
|
|
78
86
|
"import": "./web/dist/web.js",
|
|
79
87
|
"require": "./web/dist/web.cjs"
|
|
80
88
|
},
|
|
@@ -82,6 +90,10 @@
|
|
|
82
90
|
"import": "./web/dist/server.js",
|
|
83
91
|
"require": "./web/dist/server.cjs"
|
|
84
92
|
},
|
|
93
|
+
"development": {
|
|
94
|
+
"import": "./web/dist/dev.js",
|
|
95
|
+
"require": "./web/dist/dev.cjs"
|
|
96
|
+
},
|
|
85
97
|
"import": "./web/dist/web.js",
|
|
86
98
|
"require": "./web/dist/web.cjs"
|
|
87
99
|
},
|
|
@@ -132,5 +144,5 @@
|
|
|
132
144
|
"compiler",
|
|
133
145
|
"performance"
|
|
134
146
|
],
|
|
135
|
-
"gitHead": "
|
|
147
|
+
"gitHead": "58fd1f992d5ce333a8803cc6880cb431155fda5c"
|
|
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, 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";
|
|
@@ -5,6 +5,7 @@ export declare const $PROXY: unique symbol;
|
|
|
5
5
|
export declare const NOTPENDING: {};
|
|
6
6
|
export declare var Owner: Owner | null;
|
|
7
7
|
export declare let Transition: TransitionState | null;
|
|
8
|
+
declare let ExternalSourceFactory: ExternalSourceFactory | null;
|
|
8
9
|
declare global {
|
|
9
10
|
var _$afterUpdate: () => void;
|
|
10
11
|
}
|
|
@@ -50,6 +51,11 @@ export interface TransitionState {
|
|
|
50
51
|
running: boolean;
|
|
51
52
|
cb: (() => void)[];
|
|
52
53
|
}
|
|
54
|
+
declare type ExternalSourceFactory = <Prev, Next extends Prev = Prev>(fn: EffectFunction<Prev, Next>, trigger: () => void) => ExternalSource;
|
|
55
|
+
export interface ExternalSource {
|
|
56
|
+
track: EffectFunction<any, any>;
|
|
57
|
+
dispose: () => void;
|
|
58
|
+
}
|
|
53
59
|
export declare type RootFunction<T> = (dispose: () => void) => T;
|
|
54
60
|
/**
|
|
55
61
|
* Creates a new non-tracked reactive context that doesn't auto-dispose
|
|
@@ -179,11 +185,15 @@ export interface Resource<T> extends Accessor<T> {
|
|
|
179
185
|
}
|
|
180
186
|
export declare type ResourceActions<T> = {
|
|
181
187
|
mutate: Setter<T>;
|
|
182
|
-
refetch: () => void;
|
|
188
|
+
refetch: (info?: unknown) => void;
|
|
183
189
|
};
|
|
184
190
|
export declare type ResourceReturn<T> = [Resource<T>, ResourceActions<T>];
|
|
185
191
|
export declare type ResourceSource<S> = S | false | null | (() => S | false | null);
|
|
186
|
-
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
|
+
};
|
|
187
197
|
export declare type ResourceOptions<T> = T extends undefined ? {
|
|
188
198
|
initialValue?: T;
|
|
189
199
|
name?: string;
|
|
@@ -194,14 +204,14 @@ export declare type ResourceOptions<T> = T extends undefined ? {
|
|
|
194
204
|
/**
|
|
195
205
|
* Creates a resource that wraps a repeated promise in a reactive pattern:
|
|
196
206
|
* ```typescript
|
|
197
|
-
* const [resource, { mutate, refetch }] =
|
|
207
|
+
* const [resource, { mutate, refetch }] = createResource(source, fetcher, options);
|
|
198
208
|
* ```
|
|
199
209
|
* @param source - reactive data function to toggle the request, optional
|
|
200
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:
|
|
201
211
|
* ```typescript
|
|
202
212
|
* const fetcher: ResourceFetcher<S, T, > = (
|
|
203
213
|
* sourceOutput: ReturnValue<typeof source>,
|
|
204
|
-
*
|
|
214
|
+
* info: ResourceFetcherInfo<T>
|
|
205
215
|
* ) => T | Promise<T>;
|
|
206
216
|
* ```
|
|
207
217
|
* @param options - an optional object with the initialValue and the name (for debugging purposes)
|
|
@@ -220,6 +230,7 @@ export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S,
|
|
|
220
230
|
export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
|
|
221
231
|
export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined>;
|
|
222
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;
|
|
223
234
|
export interface DeferredOptions<T> {
|
|
224
235
|
equals?: false | ((prev: T, next: T) => boolean);
|
|
225
236
|
name?: string;
|
|
@@ -342,6 +353,12 @@ export declare function getListener(): Computation<any, any> | null;
|
|
|
342
353
|
export declare function getOwner(): Owner | null;
|
|
343
354
|
export declare function runWithOwner(o: Owner, fn: () => any): any;
|
|
344
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
|
+
*/
|
|
345
362
|
export declare function startTransition(fn: () => void, cb?: () => void): void;
|
|
346
363
|
export declare type Transition = [Accessor<boolean>, (fn: () => void, cb?: () => void) => void];
|
|
347
364
|
/**
|
|
@@ -423,6 +440,7 @@ declare type SuspenseContext = Context<SuspenseContextType> & {
|
|
|
423
440
|
};
|
|
424
441
|
declare let SuspenseContext: SuspenseContext;
|
|
425
442
|
export declare function getSuspenseContext(): SuspenseContext;
|
|
443
|
+
export declare function enableExternalSource(factory: ExternalSourceFactory): void;
|
|
426
444
|
export declare function readSignal(this: SignalState<any> | Memo<any>): any;
|
|
427
445
|
export declare function writeSignal(node: SignalState<any> | Memo<any>, value: any, isComp?: boolean): any;
|
|
428
446
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { JSX } from "../jsx";
|
|
2
|
+
export declare function enableHydration(): void;
|
|
2
3
|
export declare type PropsWithChildren<P = {}> = P & {
|
|
3
4
|
children?: JSX.Element;
|
|
4
5
|
};
|
|
@@ -36,7 +37,9 @@ export declare function splitProps<T extends object, K1 extends keyof T, K2 exte
|
|
|
36
37
|
export declare function lazy<T extends Component<any>>(fn: () => Promise<{
|
|
37
38
|
default: T;
|
|
38
39
|
}>): T & {
|
|
39
|
-
preload: () =>
|
|
40
|
+
preload: () => Promise<{
|
|
41
|
+
default: T;
|
|
42
|
+
}>;
|
|
40
43
|
};
|
|
41
44
|
export declare function createUniqueId(): string;
|
|
42
45
|
export {};
|
package/types/server/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { createRoot, createSignal, createComputed, createRenderEffect, createEffect, createDeferred, createSelector, createMemo, getListener, onMount, onCleanup, onError, untrack, batch, on, children, createContext, useContext, getOwner, runWithOwner, equalFn, requestCallback, mapArray, observable, from, $PROXY, DEV } from "./reactive";
|
|
1
|
+
export { createRoot, createSignal, createComputed, createRenderEffect, createEffect, createDeferred, createSelector, createMemo, getListener, onMount, onCleanup, onError, untrack, batch, on, children, createContext, useContext, getOwner, runWithOwner, equalFn, requestCallback, mapArray, observable, from, $PROXY, DEV, enableExternalSource } from "./reactive";
|
|
2
2
|
export { mergeProps, splitProps, createComponent, For, Index, Show, Switch, Match, ErrorBoundary, Suspense, SuspenseList, createResource, enableScheduling, startTransition, useTransition, createUniqueId, lazy, sharedConfig } from "./rendering";
|
|
3
3
|
export type { Component, Resource } from "./rendering";
|
|
@@ -56,9 +56,9 @@ declare type MatchProps<T> = {
|
|
|
56
56
|
};
|
|
57
57
|
export declare function Match<T>(props: MatchProps<T>): MatchProps<T>;
|
|
58
58
|
export declare function ErrorBoundary(props: {
|
|
59
|
-
fallback: string | ((err: any) => string);
|
|
59
|
+
fallback: string | ((err: any, reset: () => void) => string);
|
|
60
60
|
children: string;
|
|
61
|
-
}):
|
|
61
|
+
}): any;
|
|
62
62
|
export interface Resource<T> {
|
|
63
63
|
(): T | undefined;
|
|
64
64
|
loading: boolean;
|
|
@@ -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;
|
|
@@ -91,10 +92,10 @@ export declare function useTransition(): [() => boolean, (fn: () => any) => void
|
|
|
91
92
|
declare type HydrationContext = {
|
|
92
93
|
id: string;
|
|
93
94
|
count: number;
|
|
94
|
-
writeResource?: (id: string, v: Promise<any>) => void;
|
|
95
|
+
writeResource?: (id: string, v: Promise<any> | any, error?: boolean) => void;
|
|
95
96
|
resources: Record<string, any>;
|
|
96
97
|
suspense: Record<string, SuspenseContextType>;
|
|
97
|
-
registerFragment: (v: string) => (v?: string) =>
|
|
98
|
+
registerFragment: (v: string) => (v?: string, err?: any) => boolean;
|
|
98
99
|
async?: boolean;
|
|
99
100
|
streaming?: boolean;
|
|
100
101
|
noHydrate: boolean;
|
|
@@ -105,7 +106,7 @@ export declare function SuspenseList(props: {
|
|
|
105
106
|
tail?: "collapsed" | "hidden";
|
|
106
107
|
}): string;
|
|
107
108
|
export declare function Suspense(props: {
|
|
108
|
-
fallback
|
|
109
|
+
fallback?: string;
|
|
109
110
|
children: string;
|
|
110
111
|
}): any;
|
|
111
112
|
export {};
|
package/web/dist/dev.cjs
CHANGED
|
@@ -98,7 +98,7 @@ function render(code, element, init) {
|
|
|
98
98
|
let disposer;
|
|
99
99
|
solidJs.createRoot(dispose => {
|
|
100
100
|
disposer = dispose;
|
|
101
|
-
insert(element, code(), element.firstChild ? null : undefined, init);
|
|
101
|
+
element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);
|
|
102
102
|
});
|
|
103
103
|
return () => {
|
|
104
104
|
disposer();
|
|
@@ -218,22 +218,17 @@ function assign(node, props, isSVG, skipChildren, prevProps = {}) {
|
|
|
218
218
|
prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG);
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
|
-
function hydrate(code, element) {
|
|
222
|
-
if (!globalThis._$HY.sync) {
|
|
223
|
-
let dispose;
|
|
224
|
-
globalThis._$HY.queue.push(() => dispose = hydrate(code, element));
|
|
225
|
-
return () => dispose();
|
|
226
|
-
}
|
|
221
|
+
function hydrate$1(code, element, options = {}) {
|
|
227
222
|
solidJs.sharedConfig.completed = globalThis._$HY.completed;
|
|
228
223
|
solidJs.sharedConfig.events = globalThis._$HY.events;
|
|
229
224
|
solidJs.sharedConfig.load = globalThis._$HY.load;
|
|
230
225
|
solidJs.sharedConfig.gather = root => gatherHydratable(element, root);
|
|
231
226
|
solidJs.sharedConfig.registry = new Map();
|
|
232
227
|
solidJs.sharedConfig.context = {
|
|
233
|
-
id: "",
|
|
228
|
+
id: options.renderId || "",
|
|
234
229
|
count: 0
|
|
235
230
|
};
|
|
236
|
-
gatherHydratable(element);
|
|
231
|
+
gatherHydratable(element, options.renderId);
|
|
237
232
|
const dispose = render(code, element, [...element.childNodes]);
|
|
238
233
|
solidJs.sharedConfig.context = null;
|
|
239
234
|
return dispose;
|
|
@@ -387,8 +382,8 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
|
|
|
387
382
|
return () => current;
|
|
388
383
|
}
|
|
389
384
|
if (solidJs.sharedConfig.context && current && current.length) {
|
|
390
|
-
for (let i; i < array.length; i++) {
|
|
391
|
-
if (array[i].parentNode) return array;
|
|
385
|
+
for (let i = 0; i < array.length; i++) {
|
|
386
|
+
if (array[i].parentNode) return current = array;
|
|
392
387
|
}
|
|
393
388
|
return current;
|
|
394
389
|
}
|
|
@@ -408,6 +403,7 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
|
|
|
408
403
|
}
|
|
409
404
|
current = array;
|
|
410
405
|
} else if (value instanceof Node) {
|
|
406
|
+
if (solidJs.sharedConfig.context) return current = value.parentNode ? value : current;
|
|
411
407
|
if (Array.isArray(current)) {
|
|
412
408
|
if (multi) return current = cleanChildren(parent, current, marker, value);
|
|
413
409
|
cleanChildren(parent, current, null, value);
|
|
@@ -480,8 +476,7 @@ function NoHydration(props) {
|
|
|
480
476
|
|
|
481
477
|
function renderToString(fn, options) {}
|
|
482
478
|
function renderToStringAsync(fn, options) {}
|
|
483
|
-
function
|
|
484
|
-
function pipeToWritable(fn, writable, options) {}
|
|
479
|
+
function renderToStream(fn, options) {}
|
|
485
480
|
function ssr(template, ...nodes) {}
|
|
486
481
|
function resolveSSRNode(node) {}
|
|
487
482
|
function ssrClassList(value) {}
|
|
@@ -497,6 +492,10 @@ const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
|
|
|
497
492
|
function createElement(tagName, isSVG = false) {
|
|
498
493
|
return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName);
|
|
499
494
|
}
|
|
495
|
+
const hydrate = (...args) => {
|
|
496
|
+
solidJs.enableHydration();
|
|
497
|
+
return hydrate$1(...args);
|
|
498
|
+
};
|
|
500
499
|
function Portal(props) {
|
|
501
500
|
const {
|
|
502
501
|
useShadow
|
|
@@ -650,9 +649,8 @@ exports.hydrate = hydrate;
|
|
|
650
649
|
exports.insert = insert;
|
|
651
650
|
exports.isServer = isServer;
|
|
652
651
|
exports.memo = memo;
|
|
653
|
-
exports.pipeToNodeWritable = pipeToNodeWritable;
|
|
654
|
-
exports.pipeToWritable = pipeToWritable;
|
|
655
652
|
exports.render = render;
|
|
653
|
+
exports.renderToStream = renderToStream;
|
|
656
654
|
exports.renderToString = renderToString;
|
|
657
655
|
exports.renderToStringAsync = renderToStringAsync;
|
|
658
656
|
exports.resolveSSRNode = resolveSSRNode;
|