solid-js 1.4.3 → 1.4.6
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 +37 -31
- package/dist/dev.js +37 -31
- package/dist/solid.cjs +30 -30
- package/dist/solid.js +30 -30
- package/package.json +2 -2
- package/store/dist/dev.cjs +14 -9
- package/store/dist/dev.js +14 -9
- package/store/dist/server.cjs +16 -2
- package/store/dist/server.js +16 -2
- package/store/dist/store.cjs +14 -9
- package/store/dist/store.js +14 -9
- package/store/types/store.d.ts +6 -4
- package/types/index.d.ts +1 -1
- package/types/reactive/signal.d.ts +1 -0
- package/web/dist/dev.cjs +40 -24
- package/web/dist/dev.js +40 -24
- package/web/dist/server.cjs +7 -3
- package/web/dist/server.js +7 -3
- package/web/dist/web.cjs +40 -24
- package/web/dist/web.js +40 -24
- package/web/types/index.d.ts +6 -3
- package/web/types/server-mock.d.ts +1 -1
package/dist/solid.js
CHANGED
|
@@ -156,16 +156,18 @@ let ExecCount = 0;
|
|
|
156
156
|
function createRoot(fn, detachedOwner) {
|
|
157
157
|
const listener = Listener,
|
|
158
158
|
owner = Owner,
|
|
159
|
-
|
|
159
|
+
unowned = fn.length === 0,
|
|
160
|
+
root = unowned && !false ? UNOWNED : {
|
|
160
161
|
owned: null,
|
|
161
162
|
cleanups: null,
|
|
162
163
|
context: null,
|
|
163
164
|
owner: detachedOwner || owner
|
|
164
|
-
}
|
|
165
|
+
},
|
|
166
|
+
updateFn = unowned ? fn : () => fn(() => cleanNode(root));
|
|
165
167
|
Owner = root;
|
|
166
168
|
Listener = null;
|
|
167
169
|
try {
|
|
168
|
-
return runUpdates(
|
|
170
|
+
return runUpdates(updateFn, true);
|
|
169
171
|
} finally {
|
|
170
172
|
Listener = listener;
|
|
171
173
|
Owner = owner;
|
|
@@ -741,10 +743,8 @@ function runUpdates(fn, init) {
|
|
|
741
743
|
completeUpdates(wait);
|
|
742
744
|
return res;
|
|
743
745
|
} catch (err) {
|
|
746
|
+
if (!Updates) Effects = null;
|
|
744
747
|
handleError(err);
|
|
745
|
-
} finally {
|
|
746
|
-
Updates = null;
|
|
747
|
-
if (!wait) Effects = null;
|
|
748
748
|
}
|
|
749
749
|
}
|
|
750
750
|
function completeUpdates(wait) {
|
|
@@ -763,14 +763,16 @@ function completeUpdates(wait) {
|
|
|
763
763
|
return;
|
|
764
764
|
}
|
|
765
765
|
const sources = Transition.sources;
|
|
766
|
+
const disposed = Transition.disposed;
|
|
766
767
|
res = Transition.resolve;
|
|
767
|
-
|
|
768
|
+
for (const e of Effects) {
|
|
768
769
|
"tState" in e && (e.state = e.tState);
|
|
769
770
|
delete e.tState;
|
|
770
|
-
}
|
|
771
|
+
}
|
|
771
772
|
Transition = null;
|
|
772
773
|
batch(() => {
|
|
773
|
-
|
|
774
|
+
for (const d of disposed) cleanNode(d);
|
|
775
|
+
for (const v of sources) {
|
|
774
776
|
v.value = v.tValue;
|
|
775
777
|
if (v.owned) {
|
|
776
778
|
for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);
|
|
@@ -779,7 +781,7 @@ function completeUpdates(wait) {
|
|
|
779
781
|
delete v.tValue;
|
|
780
782
|
delete v.tOwned;
|
|
781
783
|
v.tState = 0;
|
|
782
|
-
}
|
|
784
|
+
}
|
|
783
785
|
setTransPending(false);
|
|
784
786
|
});
|
|
785
787
|
}
|
|
@@ -897,7 +899,7 @@ function reset(node, top) {
|
|
|
897
899
|
function handleError(err) {
|
|
898
900
|
const fns = ERROR && lookup(Owner, ERROR);
|
|
899
901
|
if (!fns) throw err;
|
|
900
|
-
|
|
902
|
+
for (const f of fns) f(err);
|
|
901
903
|
}
|
|
902
904
|
function lookup(owner, key) {
|
|
903
905
|
return owner ? owner.context && owner.context[key] !== undefined ? owner.context[key] : lookup(owner.owner, key) : undefined;
|
|
@@ -1353,27 +1355,24 @@ function ErrorBoundary(props) {
|
|
|
1353
1355
|
|
|
1354
1356
|
const SuspenseListContext = createContext();
|
|
1355
1357
|
function SuspenseList(props) {
|
|
1356
|
-
let
|
|
1357
|
-
suspenseSetter,
|
|
1358
|
-
showContent,
|
|
1359
|
-
showFallback;
|
|
1358
|
+
let suspenseSetter, showContent, showFallback;
|
|
1360
1359
|
const listContext = useContext(SuspenseListContext);
|
|
1361
1360
|
if (listContext) {
|
|
1362
1361
|
const [inFallback, setFallback] = createSignal(false);
|
|
1363
1362
|
suspenseSetter = setFallback;
|
|
1364
1363
|
[showContent, showFallback] = listContext.register(inFallback);
|
|
1365
1364
|
}
|
|
1366
|
-
const registry = [],
|
|
1365
|
+
const [registry, setRegistry] = createSignal([]),
|
|
1367
1366
|
comp = createComponent(SuspenseListContext.Provider, {
|
|
1368
1367
|
value: {
|
|
1369
1368
|
register: inFallback => {
|
|
1370
1369
|
const [showingContent, showContent] = createSignal(false),
|
|
1371
1370
|
[showingFallback, showFallback] = createSignal(false);
|
|
1372
|
-
registry[
|
|
1371
|
+
setRegistry(registry => [...registry, {
|
|
1373
1372
|
inFallback,
|
|
1374
1373
|
showContent,
|
|
1375
1374
|
showFallback
|
|
1376
|
-
};
|
|
1375
|
+
}]);
|
|
1377
1376
|
return [showingContent, showingFallback];
|
|
1378
1377
|
}
|
|
1379
1378
|
},
|
|
@@ -1386,31 +1385,32 @@ function SuspenseList(props) {
|
|
|
1386
1385
|
tail = props.tail,
|
|
1387
1386
|
visibleContent = showContent ? showContent() : true,
|
|
1388
1387
|
visibleFallback = showFallback ? showFallback() : true,
|
|
1388
|
+
reg = registry(),
|
|
1389
1389
|
reverse = reveal === "backwards";
|
|
1390
1390
|
if (reveal === "together") {
|
|
1391
|
-
const all =
|
|
1391
|
+
const all = reg.every(i => !i.inFallback());
|
|
1392
1392
|
suspenseSetter && suspenseSetter(!all);
|
|
1393
|
-
|
|
1393
|
+
reg.forEach(i => {
|
|
1394
1394
|
i.showContent(all && visibleContent);
|
|
1395
1395
|
i.showFallback(visibleFallback);
|
|
1396
1396
|
});
|
|
1397
1397
|
return;
|
|
1398
1398
|
}
|
|
1399
1399
|
let stop = false;
|
|
1400
|
-
for (let i = 0, len =
|
|
1400
|
+
for (let i = 0, len = reg.length; i < len; i++) {
|
|
1401
1401
|
const n = reverse ? len - i - 1 : i,
|
|
1402
|
-
s =
|
|
1402
|
+
s = reg[n].inFallback();
|
|
1403
1403
|
if (!stop && !s) {
|
|
1404
|
-
|
|
1405
|
-
|
|
1404
|
+
reg[n].showContent(visibleContent);
|
|
1405
|
+
reg[n].showFallback(visibleFallback);
|
|
1406
1406
|
} else {
|
|
1407
1407
|
const next = !stop;
|
|
1408
1408
|
if (next && suspenseSetter) suspenseSetter(true);
|
|
1409
1409
|
if (!tail || next && tail === "collapsed") {
|
|
1410
|
-
|
|
1411
|
-
} else
|
|
1410
|
+
reg[n].showFallback(visibleFallback);
|
|
1411
|
+
} else reg[n].showFallback(false);
|
|
1412
1412
|
stop = true;
|
|
1413
|
-
|
|
1413
|
+
reg[n].showContent(next);
|
|
1414
1414
|
}
|
|
1415
1415
|
}
|
|
1416
1416
|
if (!stop && suspenseSetter) suspenseSetter(false);
|
|
@@ -1439,7 +1439,7 @@ function Suspense(props) {
|
|
|
1439
1439
|
resolved: false
|
|
1440
1440
|
},
|
|
1441
1441
|
owner = getOwner();
|
|
1442
|
-
if (sharedConfig.context) {
|
|
1442
|
+
if (sharedConfig.context && sharedConfig.load) {
|
|
1443
1443
|
const key = sharedConfig.context.id + sharedConfig.context.count;
|
|
1444
1444
|
p = sharedConfig.load(key);
|
|
1445
1445
|
if (p) {
|
|
@@ -1472,7 +1472,7 @@ function Suspense(props) {
|
|
|
1472
1472
|
return flicker = undefined;
|
|
1473
1473
|
}
|
|
1474
1474
|
if (ctx && p === undefined) setHydrateContext();
|
|
1475
|
-
const rendered =
|
|
1475
|
+
const rendered = createMemo(() => props.children);
|
|
1476
1476
|
return createMemo(() => {
|
|
1477
1477
|
const inFallback = store.inFallback(),
|
|
1478
1478
|
visibleContent = showContent ? showContent() : true,
|
|
@@ -1482,7 +1482,7 @@ function Suspense(props) {
|
|
|
1482
1482
|
store.resolved = true;
|
|
1483
1483
|
ctx = p = undefined;
|
|
1484
1484
|
resumeEffects(store.effects);
|
|
1485
|
-
return rendered;
|
|
1485
|
+
return rendered();
|
|
1486
1486
|
}
|
|
1487
1487
|
if (!visibleFallback) return;
|
|
1488
1488
|
return createRoot(disposer => {
|
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.4.
|
|
4
|
+
"version": "1.4.6",
|
|
5
5
|
"author": "Ryan Carniato",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://solidjs.com",
|
|
@@ -151,5 +151,5 @@
|
|
|
151
151
|
"compiler",
|
|
152
152
|
"performance"
|
|
153
153
|
],
|
|
154
|
-
"gitHead": "
|
|
154
|
+
"gitHead": "9dc1ba00f653c924cae926ef8a1f1c3da8f41bb5"
|
|
155
155
|
}
|
package/store/dist/dev.cjs
CHANGED
|
@@ -31,7 +31,8 @@ function wrap$1(value, name) {
|
|
|
31
31
|
return p;
|
|
32
32
|
}
|
|
33
33
|
function isWrappable(obj) {
|
|
34
|
-
|
|
34
|
+
let proto;
|
|
35
|
+
return obj != null && typeof obj === "object" && (obj[solidJs.$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));
|
|
35
36
|
}
|
|
36
37
|
function unwrap(item, set = new Set()) {
|
|
37
38
|
let result, unwrapped, v, prop;
|
|
@@ -199,7 +200,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
199
200
|
mergeStoreNode(prev, value);
|
|
200
201
|
} else setProperty(current, part, value);
|
|
201
202
|
}
|
|
202
|
-
function createStore(store, options) {
|
|
203
|
+
function createStore(...[store, options]) {
|
|
203
204
|
const unwrappedStore = unwrap(store || {});
|
|
204
205
|
const isArray = Array.isArray(unwrappedStore);
|
|
205
206
|
if (typeof unwrappedStore !== "object" && typeof unwrappedStore !== "function") throw new Error(`Unexpected type ${typeof unwrappedStore} received when initializing 'createStore'. Expected an object.`);
|
|
@@ -237,11 +238,11 @@ const proxyTraps = {
|
|
|
237
238
|
return isWrappable(value) ? wrap(value, target[$NAME] && `${target[$NAME]}:${property.toString()}`) : value;
|
|
238
239
|
},
|
|
239
240
|
set(target, property, value) {
|
|
240
|
-
setProperty(target, property, unwrap(value));
|
|
241
|
+
solidJs.batch(() => setProperty(target, property, unwrap(value)));
|
|
241
242
|
return true;
|
|
242
243
|
},
|
|
243
244
|
deleteProperty(target, property) {
|
|
244
|
-
setProperty(target, property, undefined);
|
|
245
|
+
solidJs.batch(() => setProperty(target, property, undefined));
|
|
245
246
|
return true;
|
|
246
247
|
},
|
|
247
248
|
ownKeys: ownKeys,
|
|
@@ -293,11 +294,15 @@ function modifyMutable(state, modifier) {
|
|
|
293
294
|
solidJs.batch(() => modifier(unwrap(state)));
|
|
294
295
|
}
|
|
295
296
|
|
|
297
|
+
const $ROOT = Symbol("store-root");
|
|
296
298
|
function applyState(target, parent, property, merge, key) {
|
|
297
299
|
const previous = parent[property];
|
|
298
300
|
if (target === previous) return;
|
|
299
301
|
if (!isWrappable(target) || !isWrappable(previous) || key && target[key] !== previous[key]) {
|
|
300
|
-
target !== previous
|
|
302
|
+
if (target !== previous) {
|
|
303
|
+
if (property === $ROOT) return target;
|
|
304
|
+
setProperty(parent, property, target);
|
|
305
|
+
}
|
|
301
306
|
return;
|
|
302
307
|
}
|
|
303
308
|
if (Array.isArray(target)) {
|
|
@@ -369,10 +374,10 @@ function reconcile(value, options = {}) {
|
|
|
369
374
|
v = unwrap(value);
|
|
370
375
|
return state => {
|
|
371
376
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
372
|
-
|
|
373
|
-
state
|
|
374
|
-
},
|
|
375
|
-
return state;
|
|
377
|
+
const res = applyState(v, {
|
|
378
|
+
[$ROOT]: state
|
|
379
|
+
}, $ROOT, merge, key);
|
|
380
|
+
return res === undefined ? state : res;
|
|
376
381
|
};
|
|
377
382
|
}
|
|
378
383
|
const producers = new WeakMap();
|
package/store/dist/dev.js
CHANGED
|
@@ -27,7 +27,8 @@ function wrap$1(value, name) {
|
|
|
27
27
|
return p;
|
|
28
28
|
}
|
|
29
29
|
function isWrappable(obj) {
|
|
30
|
-
|
|
30
|
+
let proto;
|
|
31
|
+
return obj != null && typeof obj === "object" && (obj[$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));
|
|
31
32
|
}
|
|
32
33
|
function unwrap(item, set = new Set()) {
|
|
33
34
|
let result, unwrapped, v, prop;
|
|
@@ -195,7 +196,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
195
196
|
mergeStoreNode(prev, value);
|
|
196
197
|
} else setProperty(current, part, value);
|
|
197
198
|
}
|
|
198
|
-
function createStore(store, options) {
|
|
199
|
+
function createStore(...[store, options]) {
|
|
199
200
|
const unwrappedStore = unwrap(store || {});
|
|
200
201
|
const isArray = Array.isArray(unwrappedStore);
|
|
201
202
|
if (typeof unwrappedStore !== "object" && typeof unwrappedStore !== "function") throw new Error(`Unexpected type ${typeof unwrappedStore} received when initializing 'createStore'. Expected an object.`);
|
|
@@ -233,11 +234,11 @@ const proxyTraps = {
|
|
|
233
234
|
return isWrappable(value) ? wrap(value, target[$NAME] && `${target[$NAME]}:${property.toString()}`) : value;
|
|
234
235
|
},
|
|
235
236
|
set(target, property, value) {
|
|
236
|
-
setProperty(target, property, unwrap(value));
|
|
237
|
+
batch(() => setProperty(target, property, unwrap(value)));
|
|
237
238
|
return true;
|
|
238
239
|
},
|
|
239
240
|
deleteProperty(target, property) {
|
|
240
|
-
setProperty(target, property, undefined);
|
|
241
|
+
batch(() => setProperty(target, property, undefined));
|
|
241
242
|
return true;
|
|
242
243
|
},
|
|
243
244
|
ownKeys: ownKeys,
|
|
@@ -289,11 +290,15 @@ function modifyMutable(state, modifier) {
|
|
|
289
290
|
batch(() => modifier(unwrap(state)));
|
|
290
291
|
}
|
|
291
292
|
|
|
293
|
+
const $ROOT = Symbol("store-root");
|
|
292
294
|
function applyState(target, parent, property, merge, key) {
|
|
293
295
|
const previous = parent[property];
|
|
294
296
|
if (target === previous) return;
|
|
295
297
|
if (!isWrappable(target) || !isWrappable(previous) || key && target[key] !== previous[key]) {
|
|
296
|
-
target !== previous
|
|
298
|
+
if (target !== previous) {
|
|
299
|
+
if (property === $ROOT) return target;
|
|
300
|
+
setProperty(parent, property, target);
|
|
301
|
+
}
|
|
297
302
|
return;
|
|
298
303
|
}
|
|
299
304
|
if (Array.isArray(target)) {
|
|
@@ -365,10 +370,10 @@ function reconcile(value, options = {}) {
|
|
|
365
370
|
v = unwrap(value);
|
|
366
371
|
return state => {
|
|
367
372
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
368
|
-
|
|
369
|
-
state
|
|
370
|
-
},
|
|
371
|
-
return state;
|
|
373
|
+
const res = applyState(v, {
|
|
374
|
+
[$ROOT]: state
|
|
375
|
+
}, $ROOT, merge, key);
|
|
376
|
+
return res === undefined ? state : res;
|
|
372
377
|
};
|
|
373
378
|
}
|
|
374
379
|
const producers = new WeakMap();
|
package/store/dist/server.cjs
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
const $RAW = Symbol("state-raw");
|
|
6
6
|
function isWrappable(obj) {
|
|
7
|
-
return obj != null && typeof obj === "object" && (obj
|
|
7
|
+
return obj != null && typeof obj === "object" && (Object.getPrototypeOf(obj) === Object.prototype || Array.isArray(obj));
|
|
8
8
|
}
|
|
9
9
|
function unwrap(item) {
|
|
10
10
|
return item;
|
|
@@ -22,6 +22,19 @@ function mergeStoreNode(state, value, force) {
|
|
|
22
22
|
setProperty(state, key, value[key], force);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
+
function updateArray(current, next) {
|
|
26
|
+
if (typeof next === "function") next = next(current);
|
|
27
|
+
if (Array.isArray(next)) {
|
|
28
|
+
if (current === next) return;
|
|
29
|
+
let i = 0,
|
|
30
|
+
len = next.length;
|
|
31
|
+
for (; i < len; i++) {
|
|
32
|
+
const value = next[i];
|
|
33
|
+
if (current[i] !== value) setProperty(current, i, value);
|
|
34
|
+
}
|
|
35
|
+
setProperty(current, "length", len);
|
|
36
|
+
} else mergeStoreNode(current, next);
|
|
37
|
+
}
|
|
25
38
|
function updatePath(current, path, traversed = []) {
|
|
26
39
|
let part,
|
|
27
40
|
next = current;
|
|
@@ -67,8 +80,9 @@ function updatePath(current, path, traversed = []) {
|
|
|
67
80
|
} else setProperty(current, part, value);
|
|
68
81
|
}
|
|
69
82
|
function createStore(state) {
|
|
83
|
+
const isArray = Array.isArray(state);
|
|
70
84
|
function setStore(...args) {
|
|
71
|
-
updatePath(state, args);
|
|
85
|
+
isArray && args.length === 1 ? updateArray(state, args[0]) : updatePath(state, args);
|
|
72
86
|
}
|
|
73
87
|
return [state, setStore];
|
|
74
88
|
}
|
package/store/dist/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const $RAW = Symbol("state-raw");
|
|
2
2
|
function isWrappable(obj) {
|
|
3
|
-
return obj != null && typeof obj === "object" && (obj
|
|
3
|
+
return obj != null && typeof obj === "object" && (Object.getPrototypeOf(obj) === Object.prototype || Array.isArray(obj));
|
|
4
4
|
}
|
|
5
5
|
function unwrap(item) {
|
|
6
6
|
return item;
|
|
@@ -18,6 +18,19 @@ function mergeStoreNode(state, value, force) {
|
|
|
18
18
|
setProperty(state, key, value[key], force);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
function updateArray(current, next) {
|
|
22
|
+
if (typeof next === "function") next = next(current);
|
|
23
|
+
if (Array.isArray(next)) {
|
|
24
|
+
if (current === next) return;
|
|
25
|
+
let i = 0,
|
|
26
|
+
len = next.length;
|
|
27
|
+
for (; i < len; i++) {
|
|
28
|
+
const value = next[i];
|
|
29
|
+
if (current[i] !== value) setProperty(current, i, value);
|
|
30
|
+
}
|
|
31
|
+
setProperty(current, "length", len);
|
|
32
|
+
} else mergeStoreNode(current, next);
|
|
33
|
+
}
|
|
21
34
|
function updatePath(current, path, traversed = []) {
|
|
22
35
|
let part,
|
|
23
36
|
next = current;
|
|
@@ -63,8 +76,9 @@ function updatePath(current, path, traversed = []) {
|
|
|
63
76
|
} else setProperty(current, part, value);
|
|
64
77
|
}
|
|
65
78
|
function createStore(state) {
|
|
79
|
+
const isArray = Array.isArray(state);
|
|
66
80
|
function setStore(...args) {
|
|
67
|
-
updatePath(state, args);
|
|
81
|
+
isArray && args.length === 1 ? updateArray(state, args[0]) : updatePath(state, args);
|
|
68
82
|
}
|
|
69
83
|
return [state, setStore];
|
|
70
84
|
}
|
package/store/dist/store.cjs
CHANGED
|
@@ -28,7 +28,8 @@ function wrap$1(value, name) {
|
|
|
28
28
|
return p;
|
|
29
29
|
}
|
|
30
30
|
function isWrappable(obj) {
|
|
31
|
-
|
|
31
|
+
let proto;
|
|
32
|
+
return obj != null && typeof obj === "object" && (obj[solidJs.$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));
|
|
32
33
|
}
|
|
33
34
|
function unwrap(item, set = new Set()) {
|
|
34
35
|
let result, unwrapped, v, prop;
|
|
@@ -194,7 +195,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
194
195
|
mergeStoreNode(prev, value);
|
|
195
196
|
} else setProperty(current, part, value);
|
|
196
197
|
}
|
|
197
|
-
function createStore(store, options) {
|
|
198
|
+
function createStore(...[store, options]) {
|
|
198
199
|
const unwrappedStore = unwrap(store || {});
|
|
199
200
|
const isArray = Array.isArray(unwrappedStore);
|
|
200
201
|
const wrappedStore = wrap$1(unwrappedStore);
|
|
@@ -225,11 +226,11 @@ const proxyTraps = {
|
|
|
225
226
|
return isWrappable(value) ? wrap(value) : value;
|
|
226
227
|
},
|
|
227
228
|
set(target, property, value) {
|
|
228
|
-
setProperty(target, property, unwrap(value));
|
|
229
|
+
solidJs.batch(() => setProperty(target, property, unwrap(value)));
|
|
229
230
|
return true;
|
|
230
231
|
},
|
|
231
232
|
deleteProperty(target, property) {
|
|
232
|
-
setProperty(target, property, undefined);
|
|
233
|
+
solidJs.batch(() => setProperty(target, property, undefined));
|
|
233
234
|
return true;
|
|
234
235
|
},
|
|
235
236
|
ownKeys: ownKeys,
|
|
@@ -271,11 +272,15 @@ function modifyMutable(state, modifier) {
|
|
|
271
272
|
solidJs.batch(() => modifier(unwrap(state)));
|
|
272
273
|
}
|
|
273
274
|
|
|
275
|
+
const $ROOT = Symbol("store-root");
|
|
274
276
|
function applyState(target, parent, property, merge, key) {
|
|
275
277
|
const previous = parent[property];
|
|
276
278
|
if (target === previous) return;
|
|
277
279
|
if (!isWrappable(target) || !isWrappable(previous) || key && target[key] !== previous[key]) {
|
|
278
|
-
target !== previous
|
|
280
|
+
if (target !== previous) {
|
|
281
|
+
if (property === $ROOT) return target;
|
|
282
|
+
setProperty(parent, property, target);
|
|
283
|
+
}
|
|
279
284
|
return;
|
|
280
285
|
}
|
|
281
286
|
if (Array.isArray(target)) {
|
|
@@ -347,10 +352,10 @@ function reconcile(value, options = {}) {
|
|
|
347
352
|
v = unwrap(value);
|
|
348
353
|
return state => {
|
|
349
354
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
350
|
-
|
|
351
|
-
state
|
|
352
|
-
},
|
|
353
|
-
return state;
|
|
355
|
+
const res = applyState(v, {
|
|
356
|
+
[$ROOT]: state
|
|
357
|
+
}, $ROOT, merge, key);
|
|
358
|
+
return res === undefined ? state : res;
|
|
354
359
|
};
|
|
355
360
|
}
|
|
356
361
|
const producers = new WeakMap();
|
package/store/dist/store.js
CHANGED
|
@@ -24,7 +24,8 @@ function wrap$1(value, name) {
|
|
|
24
24
|
return p;
|
|
25
25
|
}
|
|
26
26
|
function isWrappable(obj) {
|
|
27
|
-
|
|
27
|
+
let proto;
|
|
28
|
+
return obj != null && typeof obj === "object" && (obj[$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));
|
|
28
29
|
}
|
|
29
30
|
function unwrap(item, set = new Set()) {
|
|
30
31
|
let result, unwrapped, v, prop;
|
|
@@ -190,7 +191,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
190
191
|
mergeStoreNode(prev, value);
|
|
191
192
|
} else setProperty(current, part, value);
|
|
192
193
|
}
|
|
193
|
-
function createStore(store, options) {
|
|
194
|
+
function createStore(...[store, options]) {
|
|
194
195
|
const unwrappedStore = unwrap(store || {});
|
|
195
196
|
const isArray = Array.isArray(unwrappedStore);
|
|
196
197
|
const wrappedStore = wrap$1(unwrappedStore);
|
|
@@ -221,11 +222,11 @@ const proxyTraps = {
|
|
|
221
222
|
return isWrappable(value) ? wrap(value) : value;
|
|
222
223
|
},
|
|
223
224
|
set(target, property, value) {
|
|
224
|
-
setProperty(target, property, unwrap(value));
|
|
225
|
+
batch(() => setProperty(target, property, unwrap(value)));
|
|
225
226
|
return true;
|
|
226
227
|
},
|
|
227
228
|
deleteProperty(target, property) {
|
|
228
|
-
setProperty(target, property, undefined);
|
|
229
|
+
batch(() => setProperty(target, property, undefined));
|
|
229
230
|
return true;
|
|
230
231
|
},
|
|
231
232
|
ownKeys: ownKeys,
|
|
@@ -267,11 +268,15 @@ function modifyMutable(state, modifier) {
|
|
|
267
268
|
batch(() => modifier(unwrap(state)));
|
|
268
269
|
}
|
|
269
270
|
|
|
271
|
+
const $ROOT = Symbol("store-root");
|
|
270
272
|
function applyState(target, parent, property, merge, key) {
|
|
271
273
|
const previous = parent[property];
|
|
272
274
|
if (target === previous) return;
|
|
273
275
|
if (!isWrappable(target) || !isWrappable(previous) || key && target[key] !== previous[key]) {
|
|
274
|
-
target !== previous
|
|
276
|
+
if (target !== previous) {
|
|
277
|
+
if (property === $ROOT) return target;
|
|
278
|
+
setProperty(parent, property, target);
|
|
279
|
+
}
|
|
275
280
|
return;
|
|
276
281
|
}
|
|
277
282
|
if (Array.isArray(target)) {
|
|
@@ -343,10 +348,10 @@ function reconcile(value, options = {}) {
|
|
|
343
348
|
v = unwrap(value);
|
|
344
349
|
return state => {
|
|
345
350
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
346
|
-
|
|
347
|
-
state
|
|
348
|
-
},
|
|
349
|
-
return state;
|
|
351
|
+
const res = applyState(v, {
|
|
352
|
+
[$ROOT]: state
|
|
353
|
+
}, $ROOT, merge, key);
|
|
354
|
+
return res === undefined ? state : res;
|
|
350
355
|
};
|
|
351
356
|
}
|
|
352
357
|
const producers = new WeakMap();
|
package/store/types/store.d.ts
CHANGED
|
@@ -34,8 +34,8 @@ export declare type StorePathRange = {
|
|
|
34
34
|
by?: number;
|
|
35
35
|
};
|
|
36
36
|
export declare type ArrayFilterFn<T> = (item: T, index: number) => boolean;
|
|
37
|
-
export declare type StoreSetter<T, U extends PropertyKey[] = []> = ((prevState: T, traversed: U) => T | CustomPartial<T>
|
|
38
|
-
export declare type Part<T, K extends KeyOf<T> = KeyOf<T>> = [K] extends [never] ? never :
|
|
37
|
+
export declare type StoreSetter<T, U extends PropertyKey[] = []> = ((prevState: T, traversed: U) => T | CustomPartial<T>) | T | CustomPartial<T>;
|
|
38
|
+
export declare type Part<T, K extends KeyOf<T> = KeyOf<T>> = K | ([K] extends [never] ? never : readonly K[]) | ([T] extends [readonly unknown[]] ? ArrayFilterFn<T[number]> | StorePathRange : never);
|
|
39
39
|
declare type W<T> = Exclude<T, NotWrappable>;
|
|
40
40
|
declare type KeyOf<T> = number extends keyof T ? 0 extends 1 & T ? keyof T : [T] extends [readonly unknown[]] ? number : [T] extends [never] ? never : keyof T : keyof T;
|
|
41
41
|
declare type Rest<T, U extends PropertyKey[]> = [StoreSetter<T, U>] | (0 extends 1 & T ? [...Part<any>[], StoreSetter<any, PropertyKey[]>] : DistributeRest<W<T>, KeyOf<W<T>>, U>);
|
|
@@ -55,7 +55,9 @@ export interface SetStoreFunction<T> {
|
|
|
55
55
|
*
|
|
56
56
|
* @description https://www.solidjs.com/docs/latest/api#createstore
|
|
57
57
|
*/
|
|
58
|
-
export declare function createStore<T extends
|
|
58
|
+
export declare function createStore<T extends {}>(...[store, options]: {} extends T ? [store?: T | Store<T>, options?: {
|
|
59
59
|
name?: string;
|
|
60
|
-
}
|
|
60
|
+
}] : [store: object & (T | Store<T>), options?: {
|
|
61
|
+
name?: string;
|
|
62
|
+
}]): [get: Store<T>, set: SetStoreFunction<T>];
|
|
61
63
|
export {};
|
package/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createRoot, createSignal, createEffect, createRenderEffect, createComputed, createReaction, createDeferred, createSelector, createMemo, createResource, onMount, onCleanup, onError, untrack, batch, on, enableScheduling, enableExternalSource, startTransition, useTransition, createContext, useContext, children, getListener, getOwner, runWithOwner, equalFn, $DEVCOMP, $PROXY, $TRACK } from "./reactive/signal";
|
|
2
|
-
export type { Accessor, Setter, Signal, Resource, ResourceReturn, ResourceFetcher, ResourceFetcherInfo, Context, ReturnTypes } from "./reactive/signal";
|
|
2
|
+
export type { Accessor, Setter, Signal, Resource, ResourceOptions, ResourceReturn, ResourceFetcher, ResourceFetcherInfo, Context, ReturnTypes, Owner } from "./reactive/signal";
|
|
3
3
|
export * from "./reactive/observable";
|
|
4
4
|
export * from "./reactive/scheduler";
|
|
5
5
|
export * from "./reactive/array";
|
|
@@ -11,6 +11,7 @@ export declare let Transition: TransitionState | null;
|
|
|
11
11
|
declare let ExternalSourceFactory: ExternalSourceFactory | null;
|
|
12
12
|
declare global {
|
|
13
13
|
var _$afterUpdate: () => void;
|
|
14
|
+
var _$afterCreateRoot: (root: Owner) => void;
|
|
14
15
|
}
|
|
15
16
|
export interface SignalState<T> {
|
|
16
17
|
value?: T;
|