solid-js 1.8.9 → 1.8.11
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.js +307 -544
- package/dist/server.js +75 -170
- package/dist/solid.js +265 -471
- package/h/dist/h.js +8 -34
- package/h/jsx-runtime/dist/jsx.js +1 -1
- package/h/jsx-runtime/types/index.d.ts +8 -11
- package/h/types/hyperscript.d.ts +11 -11
- package/html/dist/html.js +94 -216
- package/html/types/lit.d.ts +33 -47
- package/package.json +1 -1
- package/store/dist/dev.js +42 -117
- package/store/dist/server.js +8 -19
- package/store/dist/store.js +39 -108
- package/store/types/index.d.ts +7 -21
- package/store/types/modifiers.d.ts +3 -6
- package/store/types/mutable.d.ts +2 -5
- package/store/types/server.d.ts +4 -12
- package/store/types/store.d.ts +61 -218
- package/types/index.d.ts +10 -75
- package/types/reactive/array.d.ts +4 -12
- package/types/reactive/observable.d.ts +17 -25
- package/types/reactive/scheduler.d.ts +6 -9
- package/types/reactive/signal.d.ts +142 -233
- package/types/render/Suspense.d.ts +5 -5
- package/types/render/component.d.ts +33 -64
- package/types/render/flow.d.ts +31 -43
- package/types/render/hydration.d.ts +13 -13
- package/types/server/index.d.ts +2 -57
- package/types/server/reactive.d.ts +42 -73
- package/types/server/rendering.d.ts +96 -167
- package/universal/dist/dev.js +12 -28
- package/universal/dist/universal.js +12 -28
- package/universal/types/index.d.ts +1 -3
- package/universal/types/universal.d.ts +1 -0
- package/web/dist/dev.cjs +3 -3
- package/web/dist/dev.js +84 -623
- package/web/dist/server.cjs +25 -17
- package/web/dist/server.js +117 -217
- package/web/dist/storage.js +3 -3
- package/web/dist/web.cjs +3 -3
- package/web/dist/web.js +83 -617
- package/web/types/client.d.ts +2 -2
- package/web/types/core.d.ts +1 -10
- package/web/types/index.d.ts +10 -27
- package/web/types/server-mock.d.ts +32 -47
package/store/dist/dev.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEV as DEV$1, $PROXY, $TRACK, getListener, batch, createSignal } from
|
|
1
|
+
import { DEV as DEV$1, $PROXY, $TRACK, getListener, batch, createSignal } from 'solid-js';
|
|
2
2
|
|
|
3
3
|
const $RAW = Symbol("store-raw"),
|
|
4
4
|
$NODE = Symbol("store-node"),
|
|
@@ -11,7 +11,7 @@ function wrap$1(value) {
|
|
|
11
11
|
let p = value[$PROXY];
|
|
12
12
|
if (!p) {
|
|
13
13
|
Object.defineProperty(value, $PROXY, {
|
|
14
|
-
value:
|
|
14
|
+
value: p = new Proxy(value, proxyTraps$1)
|
|
15
15
|
});
|
|
16
16
|
if (!Array.isArray(value)) {
|
|
17
17
|
const keys = Object.keys(value),
|
|
@@ -31,29 +31,20 @@ function wrap$1(value) {
|
|
|
31
31
|
}
|
|
32
32
|
function isWrappable(obj) {
|
|
33
33
|
let proto;
|
|
34
|
-
return (
|
|
35
|
-
obj != null &&
|
|
36
|
-
typeof obj === "object" &&
|
|
37
|
-
(obj[$PROXY] ||
|
|
38
|
-
!(proto = Object.getPrototypeOf(obj)) ||
|
|
39
|
-
proto === Object.prototype ||
|
|
40
|
-
Array.isArray(obj))
|
|
41
|
-
);
|
|
34
|
+
return obj != null && typeof obj === "object" && (obj[$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));
|
|
42
35
|
}
|
|
43
36
|
function unwrap(item, set = new Set()) {
|
|
44
37
|
let result, unwrapped, v, prop;
|
|
45
|
-
if (
|
|
38
|
+
if (result = item != null && item[$RAW]) return result;
|
|
46
39
|
if (!isWrappable(item) || set.has(item)) return item;
|
|
47
40
|
if (Array.isArray(item)) {
|
|
48
|
-
if (Object.isFrozen(item)) item = item.slice(0);
|
|
49
|
-
else set.add(item);
|
|
41
|
+
if (Object.isFrozen(item)) item = item.slice(0);else set.add(item);
|
|
50
42
|
for (let i = 0, l = item.length; i < l; i++) {
|
|
51
43
|
v = item[i];
|
|
52
44
|
if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;
|
|
53
45
|
}
|
|
54
46
|
} else {
|
|
55
|
-
if (Object.isFrozen(item)) item = Object.assign({}, item);
|
|
56
|
-
else set.add(item);
|
|
47
|
+
if (Object.isFrozen(item)) item = Object.assign({}, item);else set.add(item);
|
|
57
48
|
const keys = Object.keys(item),
|
|
58
49
|
desc = Object.getOwnPropertyDescriptors(item);
|
|
59
50
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
@@ -67,10 +58,9 @@ function unwrap(item, set = new Set()) {
|
|
|
67
58
|
}
|
|
68
59
|
function getNodes(target, symbol) {
|
|
69
60
|
let nodes = target[symbol];
|
|
70
|
-
if (!nodes)
|
|
71
|
-
Object.
|
|
72
|
-
|
|
73
|
-
});
|
|
61
|
+
if (!nodes) Object.defineProperty(target, symbol, {
|
|
62
|
+
value: nodes = Object.create(null)
|
|
63
|
+
});
|
|
74
64
|
return nodes;
|
|
75
65
|
}
|
|
76
66
|
function getNode(nodes, property, value) {
|
|
@@ -80,12 +70,11 @@ function getNode(nodes, property, value) {
|
|
|
80
70
|
internal: true
|
|
81
71
|
});
|
|
82
72
|
s.$ = set;
|
|
83
|
-
return
|
|
73
|
+
return nodes[property] = s;
|
|
84
74
|
}
|
|
85
75
|
function proxyDescriptor$1(target, property) {
|
|
86
76
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
87
|
-
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
|
|
88
|
-
return desc;
|
|
77
|
+
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE) return desc;
|
|
89
78
|
delete desc.value;
|
|
90
79
|
delete desc.writable;
|
|
91
80
|
desc.get = () => target[$PROXY][property];
|
|
@@ -112,25 +101,12 @@ const proxyTraps$1 = {
|
|
|
112
101
|
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
113
102
|
if (!tracked) {
|
|
114
103
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
115
|
-
if (
|
|
116
|
-
getListener() &&
|
|
117
|
-
(typeof value !== "function" || target.hasOwnProperty(property)) &&
|
|
118
|
-
!(desc && desc.get)
|
|
119
|
-
)
|
|
120
|
-
value = getNode(nodes, property, value)();
|
|
104
|
+
if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();
|
|
121
105
|
}
|
|
122
106
|
return isWrappable(value) ? wrap$1(value) : value;
|
|
123
107
|
},
|
|
124
108
|
has(target, property) {
|
|
125
|
-
if (
|
|
126
|
-
property === $RAW ||
|
|
127
|
-
property === $PROXY ||
|
|
128
|
-
property === $TRACK ||
|
|
129
|
-
property === $NODE ||
|
|
130
|
-
property === $HAS ||
|
|
131
|
-
property === "__proto__"
|
|
132
|
-
)
|
|
133
|
-
return true;
|
|
109
|
+
if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
|
|
134
110
|
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
135
111
|
return property in target;
|
|
136
112
|
},
|
|
@@ -159,7 +135,7 @@ function setProperty(state, property, value, deleting = false) {
|
|
|
159
135
|
}
|
|
160
136
|
let nodes = getNodes(state, $NODE),
|
|
161
137
|
node;
|
|
162
|
-
if (
|
|
138
|
+
if (node = getNode(nodes, property, prev)) node.$(() => value);
|
|
163
139
|
if (Array.isArray(state) && state.length !== len) {
|
|
164
140
|
for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
|
|
165
141
|
(node = getNode(nodes, "length", len)) && node.$(state.length);
|
|
@@ -205,7 +181,11 @@ function updatePath(current, path, traversed = []) {
|
|
|
205
181
|
}
|
|
206
182
|
return;
|
|
207
183
|
} else if (isArray && partType === "object") {
|
|
208
|
-
const {
|
|
184
|
+
const {
|
|
185
|
+
from = 0,
|
|
186
|
+
to = current.length - 1,
|
|
187
|
+
by = 1
|
|
188
|
+
} = part;
|
|
209
189
|
for (let i = from; i <= to; i += by) {
|
|
210
190
|
updatePath(current, [i].concat(path), traversed);
|
|
211
191
|
}
|
|
@@ -224,17 +204,14 @@ function updatePath(current, path, traversed = []) {
|
|
|
224
204
|
}
|
|
225
205
|
if (part === undefined && value == undefined) return;
|
|
226
206
|
value = unwrap(value);
|
|
227
|
-
if (part === undefined ||
|
|
207
|
+
if (part === undefined || isWrappable(prev) && isWrappable(value) && !Array.isArray(value)) {
|
|
228
208
|
mergeStoreNode(prev, value);
|
|
229
209
|
} else setProperty(current, part, value);
|
|
230
210
|
}
|
|
231
211
|
function createStore(...[store, options]) {
|
|
232
212
|
const unwrappedStore = unwrap(store || {});
|
|
233
213
|
const isArray = Array.isArray(unwrappedStore);
|
|
234
|
-
if (typeof unwrappedStore !== "object" && typeof unwrappedStore !== "function")
|
|
235
|
-
throw new Error(
|
|
236
|
-
`Unexpected type ${typeof unwrappedStore} received when initializing 'createStore'. Expected an object.`
|
|
237
|
-
);
|
|
214
|
+
if (typeof unwrappedStore !== "object" && typeof unwrappedStore !== "function") throw new Error(`Unexpected type ${typeof unwrappedStore} received when initializing 'createStore'. Expected an object.`);
|
|
238
215
|
const wrappedStore = wrap$1(unwrappedStore);
|
|
239
216
|
DEV$1.registerGraph({
|
|
240
217
|
value: unwrappedStore,
|
|
@@ -242,9 +219,7 @@ function createStore(...[store, options]) {
|
|
|
242
219
|
});
|
|
243
220
|
function setStore(...args) {
|
|
244
221
|
batch(() => {
|
|
245
|
-
isArray && args.length === 1
|
|
246
|
-
? updateArray(unwrappedStore, args[0])
|
|
247
|
-
: updatePath(unwrappedStore, args);
|
|
222
|
+
isArray && args.length === 1 ? updateArray(unwrappedStore, args[0]) : updatePath(unwrappedStore, args);
|
|
248
223
|
});
|
|
249
224
|
}
|
|
250
225
|
return [wrappedStore, setStore];
|
|
@@ -252,19 +227,11 @@ function createStore(...[store, options]) {
|
|
|
252
227
|
|
|
253
228
|
function proxyDescriptor(target, property) {
|
|
254
229
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
255
|
-
if (
|
|
256
|
-
!desc ||
|
|
257
|
-
desc.get ||
|
|
258
|
-
desc.set ||
|
|
259
|
-
!desc.configurable ||
|
|
260
|
-
property === $PROXY ||
|
|
261
|
-
property === $NODE
|
|
262
|
-
)
|
|
263
|
-
return desc;
|
|
230
|
+
if (!desc || desc.get || desc.set || !desc.configurable || property === $PROXY || property === $NODE) return desc;
|
|
264
231
|
delete desc.value;
|
|
265
232
|
delete desc.writable;
|
|
266
233
|
desc.get = () => target[$PROXY][property];
|
|
267
|
-
desc.set = v =>
|
|
234
|
+
desc.set = v => target[$PROXY][property] = v;
|
|
268
235
|
return desc;
|
|
269
236
|
}
|
|
270
237
|
const proxyTraps = {
|
|
@@ -282,24 +249,14 @@ const proxyTraps = {
|
|
|
282
249
|
if (!tracked) {
|
|
283
250
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
284
251
|
const isFunction = typeof value === "function";
|
|
285
|
-
if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get))
|
|
286
|
-
value = getNode(nodes, property, value)();
|
|
287
|
-
else if (value != null && isFunction && value === Array.prototype[property]) {
|
|
252
|
+
if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
|
|
288
253
|
return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
|
|
289
254
|
}
|
|
290
255
|
}
|
|
291
256
|
return isWrappable(value) ? wrap(value) : value;
|
|
292
257
|
},
|
|
293
258
|
has(target, property) {
|
|
294
|
-
if (
|
|
295
|
-
property === $RAW ||
|
|
296
|
-
property === $PROXY ||
|
|
297
|
-
property === $TRACK ||
|
|
298
|
-
property === $NODE ||
|
|
299
|
-
property === $HAS ||
|
|
300
|
-
property === "__proto__"
|
|
301
|
-
)
|
|
302
|
-
return true;
|
|
259
|
+
if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
|
|
303
260
|
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
304
261
|
return property in target;
|
|
305
262
|
},
|
|
@@ -318,7 +275,7 @@ function wrap(value) {
|
|
|
318
275
|
let p = value[$PROXY];
|
|
319
276
|
if (!p) {
|
|
320
277
|
Object.defineProperty(value, $PROXY, {
|
|
321
|
-
value:
|
|
278
|
+
value: p = new Proxy(value, proxyTraps)
|
|
322
279
|
});
|
|
323
280
|
const keys = Object.keys(value),
|
|
324
281
|
desc = Object.getOwnPropertyDescriptors(value);
|
|
@@ -343,10 +300,7 @@ function wrap(value) {
|
|
|
343
300
|
}
|
|
344
301
|
function createMutable(state, options) {
|
|
345
302
|
const unwrappedStore = unwrap(state || {});
|
|
346
|
-
if (typeof unwrappedStore !== "object" && typeof unwrappedStore !== "function")
|
|
347
|
-
throw new Error(
|
|
348
|
-
`Unexpected type ${typeof unwrappedStore} received when initializing 'createMutable'. Expected an object.`
|
|
349
|
-
);
|
|
303
|
+
if (typeof unwrappedStore !== "object" && typeof unwrappedStore !== "function") throw new Error(`Unexpected type ${typeof unwrappedStore} received when initializing 'createMutable'. Expected an object.`);
|
|
350
304
|
const wrappedStore = wrap(unwrappedStore);
|
|
351
305
|
DEV$1.registerGraph({
|
|
352
306
|
value: unwrappedStore,
|
|
@@ -363,42 +317,19 @@ function applyState(target, parent, property, merge, key) {
|
|
|
363
317
|
const previous = parent[property];
|
|
364
318
|
if (target === previous) return;
|
|
365
319
|
const isArray = Array.isArray(target);
|
|
366
|
-
if (
|
|
367
|
-
property !== $ROOT &&
|
|
368
|
-
(!isWrappable(target) ||
|
|
369
|
-
!isWrappable(previous) ||
|
|
370
|
-
isArray !== Array.isArray(previous) ||
|
|
371
|
-
(key && target[key] !== previous[key]))
|
|
372
|
-
) {
|
|
320
|
+
if (property !== $ROOT && (!isWrappable(target) || !isWrappable(previous) || isArray !== Array.isArray(previous) || key && target[key] !== previous[key])) {
|
|
373
321
|
setProperty(parent, property, target);
|
|
374
322
|
return;
|
|
375
323
|
}
|
|
376
324
|
if (isArray) {
|
|
377
|
-
if (
|
|
378
|
-
target.length &&
|
|
379
|
-
previous.length &&
|
|
380
|
-
(!merge || (key && target[0] && target[0][key] != null))
|
|
381
|
-
) {
|
|
325
|
+
if (target.length && previous.length && (!merge || key && target[0] && target[0][key] != null)) {
|
|
382
326
|
let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
|
|
383
|
-
for (
|
|
384
|
-
start = 0, end = Math.min(previous.length, target.length);
|
|
385
|
-
start < end &&
|
|
386
|
-
(previous[start] === target[start] ||
|
|
387
|
-
(key && previous[start] && target[start] && previous[start][key] === target[start][key]));
|
|
388
|
-
start++
|
|
389
|
-
) {
|
|
327
|
+
for (start = 0, end = Math.min(previous.length, target.length); start < end && (previous[start] === target[start] || key && previous[start] && target[start] && previous[start][key] === target[start][key]); start++) {
|
|
390
328
|
applyState(target[start], previous, start, merge, key);
|
|
391
329
|
}
|
|
392
330
|
const temp = new Array(target.length),
|
|
393
331
|
newIndices = new Map();
|
|
394
|
-
for (
|
|
395
|
-
end = previous.length - 1, newEnd = target.length - 1;
|
|
396
|
-
end >= start &&
|
|
397
|
-
newEnd >= start &&
|
|
398
|
-
(previous[end] === target[newEnd] ||
|
|
399
|
-
(key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]));
|
|
400
|
-
end--, newEnd--
|
|
401
|
-
) {
|
|
332
|
+
for (end = previous.length - 1, newEnd = target.length - 1; end >= start && newEnd >= start && (previous[end] === target[newEnd] || key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]); end--, newEnd--) {
|
|
402
333
|
temp[newEnd] = previous[end];
|
|
403
334
|
}
|
|
404
335
|
if (start > newEnd || start > end) {
|
|
@@ -452,19 +383,16 @@ function applyState(target, parent, property, merge, key) {
|
|
|
452
383
|
}
|
|
453
384
|
}
|
|
454
385
|
function reconcile(value, options = {}) {
|
|
455
|
-
const {
|
|
386
|
+
const {
|
|
387
|
+
merge,
|
|
388
|
+
key = "id"
|
|
389
|
+
} = options,
|
|
456
390
|
v = unwrap(value);
|
|
457
391
|
return state => {
|
|
458
392
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
459
|
-
const res = applyState(
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
[$ROOT]: state
|
|
463
|
-
},
|
|
464
|
-
$ROOT,
|
|
465
|
-
merge,
|
|
466
|
-
key
|
|
467
|
-
);
|
|
393
|
+
const res = applyState(v, {
|
|
394
|
+
[$ROOT]: state
|
|
395
|
+
}, $ROOT, merge, key);
|
|
468
396
|
return res === undefined ? state : res;
|
|
469
397
|
};
|
|
470
398
|
}
|
|
@@ -474,10 +402,7 @@ const setterTraps = {
|
|
|
474
402
|
if (property === $RAW) return target;
|
|
475
403
|
const value = target[property];
|
|
476
404
|
let proxy;
|
|
477
|
-
return isWrappable(value)
|
|
478
|
-
? producers.get(value) ||
|
|
479
|
-
(producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
|
|
480
|
-
: value;
|
|
405
|
+
return isWrappable(value) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : value;
|
|
481
406
|
},
|
|
482
407
|
set(target, property, value) {
|
|
483
408
|
setProperty(target, property, unwrap(value));
|
|
@@ -493,7 +418,7 @@ function produce(fn) {
|
|
|
493
418
|
if (isWrappable(state)) {
|
|
494
419
|
let proxy;
|
|
495
420
|
if (!(proxy = producers.get(state))) {
|
|
496
|
-
producers.set(state,
|
|
421
|
+
producers.set(state, proxy = new Proxy(state, setterTraps));
|
|
497
422
|
}
|
|
498
423
|
fn(proxy);
|
|
499
424
|
}
|
|
@@ -505,6 +430,6 @@ const DEV = {
|
|
|
505
430
|
$NODE,
|
|
506
431
|
isWrappable,
|
|
507
432
|
hooks: DevHooks
|
|
508
|
-
};
|
|
433
|
+
} ;
|
|
509
434
|
|
|
510
435
|
export { $RAW, DEV, createMutable, createStore, modifyMutable, produce, reconcile, unwrap };
|
package/store/dist/server.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
const $RAW = Symbol("state-raw");
|
|
2
2
|
function isWrappable(obj) {
|
|
3
|
-
return (
|
|
4
|
-
obj != null &&
|
|
5
|
-
typeof obj === "object" &&
|
|
6
|
-
(Object.getPrototypeOf(obj) === Object.prototype || Array.isArray(obj))
|
|
7
|
-
);
|
|
3
|
+
return obj != null && typeof obj === "object" && (Object.getPrototypeOf(obj) === Object.prototype || Array.isArray(obj));
|
|
8
4
|
}
|
|
9
5
|
function unwrap(item) {
|
|
10
6
|
return item;
|
|
@@ -53,7 +49,11 @@ function updatePath(current, path, traversed = []) {
|
|
|
53
49
|
}
|
|
54
50
|
return;
|
|
55
51
|
} else if (isArray && partType === "object") {
|
|
56
|
-
const {
|
|
52
|
+
const {
|
|
53
|
+
from = 0,
|
|
54
|
+
to = current.length - 1,
|
|
55
|
+
by = 1
|
|
56
|
+
} = part;
|
|
57
57
|
for (let i = from; i <= to; i += by) {
|
|
58
58
|
updatePath(current, [i].concat(path), traversed);
|
|
59
59
|
}
|
|
@@ -71,7 +71,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
71
71
|
if (value === next) return;
|
|
72
72
|
}
|
|
73
73
|
if (part === undefined && value == undefined) return;
|
|
74
|
-
if (part === undefined ||
|
|
74
|
+
if (part === undefined || isWrappable(next) && isWrappable(value) && !Array.isArray(value)) {
|
|
75
75
|
mergeStoreNode(next, value);
|
|
76
76
|
} else setProperty(current, part, value);
|
|
77
77
|
}
|
|
@@ -108,15 +108,4 @@ function produce(fn) {
|
|
|
108
108
|
}
|
|
109
109
|
const DEV = undefined;
|
|
110
110
|
|
|
111
|
-
export {
|
|
112
|
-
$RAW,
|
|
113
|
-
DEV,
|
|
114
|
-
createMutable,
|
|
115
|
-
createStore,
|
|
116
|
-
isWrappable,
|
|
117
|
-
produce,
|
|
118
|
-
reconcile,
|
|
119
|
-
setProperty,
|
|
120
|
-
unwrap,
|
|
121
|
-
updatePath
|
|
122
|
-
};
|
|
111
|
+
export { $RAW, DEV, createMutable, createStore, isWrappable, produce, reconcile, setProperty, unwrap, updatePath };
|
package/store/dist/store.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $PROXY, $TRACK, getListener, batch, createSignal } from
|
|
1
|
+
import { $PROXY, $TRACK, getListener, batch, createSignal } from 'solid-js';
|
|
2
2
|
|
|
3
3
|
const $RAW = Symbol("store-raw"),
|
|
4
4
|
$NODE = Symbol("store-node"),
|
|
@@ -8,7 +8,7 @@ function wrap$1(value) {
|
|
|
8
8
|
let p = value[$PROXY];
|
|
9
9
|
if (!p) {
|
|
10
10
|
Object.defineProperty(value, $PROXY, {
|
|
11
|
-
value:
|
|
11
|
+
value: p = new Proxy(value, proxyTraps$1)
|
|
12
12
|
});
|
|
13
13
|
if (!Array.isArray(value)) {
|
|
14
14
|
const keys = Object.keys(value),
|
|
@@ -28,29 +28,20 @@ function wrap$1(value) {
|
|
|
28
28
|
}
|
|
29
29
|
function isWrappable(obj) {
|
|
30
30
|
let proto;
|
|
31
|
-
return (
|
|
32
|
-
obj != null &&
|
|
33
|
-
typeof obj === "object" &&
|
|
34
|
-
(obj[$PROXY] ||
|
|
35
|
-
!(proto = Object.getPrototypeOf(obj)) ||
|
|
36
|
-
proto === Object.prototype ||
|
|
37
|
-
Array.isArray(obj))
|
|
38
|
-
);
|
|
31
|
+
return obj != null && typeof obj === "object" && (obj[$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));
|
|
39
32
|
}
|
|
40
33
|
function unwrap(item, set = new Set()) {
|
|
41
34
|
let result, unwrapped, v, prop;
|
|
42
|
-
if (
|
|
35
|
+
if (result = item != null && item[$RAW]) return result;
|
|
43
36
|
if (!isWrappable(item) || set.has(item)) return item;
|
|
44
37
|
if (Array.isArray(item)) {
|
|
45
|
-
if (Object.isFrozen(item)) item = item.slice(0);
|
|
46
|
-
else set.add(item);
|
|
38
|
+
if (Object.isFrozen(item)) item = item.slice(0);else set.add(item);
|
|
47
39
|
for (let i = 0, l = item.length; i < l; i++) {
|
|
48
40
|
v = item[i];
|
|
49
41
|
if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;
|
|
50
42
|
}
|
|
51
43
|
} else {
|
|
52
|
-
if (Object.isFrozen(item)) item = Object.assign({}, item);
|
|
53
|
-
else set.add(item);
|
|
44
|
+
if (Object.isFrozen(item)) item = Object.assign({}, item);else set.add(item);
|
|
54
45
|
const keys = Object.keys(item),
|
|
55
46
|
desc = Object.getOwnPropertyDescriptors(item);
|
|
56
47
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
@@ -64,10 +55,9 @@ function unwrap(item, set = new Set()) {
|
|
|
64
55
|
}
|
|
65
56
|
function getNodes(target, symbol) {
|
|
66
57
|
let nodes = target[symbol];
|
|
67
|
-
if (!nodes)
|
|
68
|
-
Object.
|
|
69
|
-
|
|
70
|
-
});
|
|
58
|
+
if (!nodes) Object.defineProperty(target, symbol, {
|
|
59
|
+
value: nodes = Object.create(null)
|
|
60
|
+
});
|
|
71
61
|
return nodes;
|
|
72
62
|
}
|
|
73
63
|
function getNode(nodes, property, value) {
|
|
@@ -77,12 +67,11 @@ function getNode(nodes, property, value) {
|
|
|
77
67
|
internal: true
|
|
78
68
|
});
|
|
79
69
|
s.$ = set;
|
|
80
|
-
return
|
|
70
|
+
return nodes[property] = s;
|
|
81
71
|
}
|
|
82
72
|
function proxyDescriptor$1(target, property) {
|
|
83
73
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
84
|
-
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
|
|
85
|
-
return desc;
|
|
74
|
+
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE) return desc;
|
|
86
75
|
delete desc.value;
|
|
87
76
|
delete desc.writable;
|
|
88
77
|
desc.get = () => target[$PROXY][property];
|
|
@@ -109,25 +98,12 @@ const proxyTraps$1 = {
|
|
|
109
98
|
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
110
99
|
if (!tracked) {
|
|
111
100
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
112
|
-
if (
|
|
113
|
-
getListener() &&
|
|
114
|
-
(typeof value !== "function" || target.hasOwnProperty(property)) &&
|
|
115
|
-
!(desc && desc.get)
|
|
116
|
-
)
|
|
117
|
-
value = getNode(nodes, property, value)();
|
|
101
|
+
if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();
|
|
118
102
|
}
|
|
119
103
|
return isWrappable(value) ? wrap$1(value) : value;
|
|
120
104
|
},
|
|
121
105
|
has(target, property) {
|
|
122
|
-
if (
|
|
123
|
-
property === $RAW ||
|
|
124
|
-
property === $PROXY ||
|
|
125
|
-
property === $TRACK ||
|
|
126
|
-
property === $NODE ||
|
|
127
|
-
property === $HAS ||
|
|
128
|
-
property === "__proto__"
|
|
129
|
-
)
|
|
130
|
-
return true;
|
|
106
|
+
if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
|
|
131
107
|
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
132
108
|
return property in target;
|
|
133
109
|
},
|
|
@@ -153,7 +129,7 @@ function setProperty(state, property, value, deleting = false) {
|
|
|
153
129
|
}
|
|
154
130
|
let nodes = getNodes(state, $NODE),
|
|
155
131
|
node;
|
|
156
|
-
if (
|
|
132
|
+
if (node = getNode(nodes, property, prev)) node.$(() => value);
|
|
157
133
|
if (Array.isArray(state) && state.length !== len) {
|
|
158
134
|
for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
|
|
159
135
|
(node = getNode(nodes, "length", len)) && node.$(state.length);
|
|
@@ -199,7 +175,11 @@ function updatePath(current, path, traversed = []) {
|
|
|
199
175
|
}
|
|
200
176
|
return;
|
|
201
177
|
} else if (isArray && partType === "object") {
|
|
202
|
-
const {
|
|
178
|
+
const {
|
|
179
|
+
from = 0,
|
|
180
|
+
to = current.length - 1,
|
|
181
|
+
by = 1
|
|
182
|
+
} = part;
|
|
203
183
|
for (let i = from; i <= to; i += by) {
|
|
204
184
|
updatePath(current, [i].concat(path), traversed);
|
|
205
185
|
}
|
|
@@ -218,7 +198,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
218
198
|
}
|
|
219
199
|
if (part === undefined && value == undefined) return;
|
|
220
200
|
value = unwrap(value);
|
|
221
|
-
if (part === undefined ||
|
|
201
|
+
if (part === undefined || isWrappable(prev) && isWrappable(value) && !Array.isArray(value)) {
|
|
222
202
|
mergeStoreNode(prev, value);
|
|
223
203
|
} else setProperty(current, part, value);
|
|
224
204
|
}
|
|
@@ -228,9 +208,7 @@ function createStore(...[store, options]) {
|
|
|
228
208
|
const wrappedStore = wrap$1(unwrappedStore);
|
|
229
209
|
function setStore(...args) {
|
|
230
210
|
batch(() => {
|
|
231
|
-
isArray && args.length === 1
|
|
232
|
-
? updateArray(unwrappedStore, args[0])
|
|
233
|
-
: updatePath(unwrappedStore, args);
|
|
211
|
+
isArray && args.length === 1 ? updateArray(unwrappedStore, args[0]) : updatePath(unwrappedStore, args);
|
|
234
212
|
});
|
|
235
213
|
}
|
|
236
214
|
return [wrappedStore, setStore];
|
|
@@ -238,19 +216,11 @@ function createStore(...[store, options]) {
|
|
|
238
216
|
|
|
239
217
|
function proxyDescriptor(target, property) {
|
|
240
218
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
241
|
-
if (
|
|
242
|
-
!desc ||
|
|
243
|
-
desc.get ||
|
|
244
|
-
desc.set ||
|
|
245
|
-
!desc.configurable ||
|
|
246
|
-
property === $PROXY ||
|
|
247
|
-
property === $NODE
|
|
248
|
-
)
|
|
249
|
-
return desc;
|
|
219
|
+
if (!desc || desc.get || desc.set || !desc.configurable || property === $PROXY || property === $NODE) return desc;
|
|
250
220
|
delete desc.value;
|
|
251
221
|
delete desc.writable;
|
|
252
222
|
desc.get = () => target[$PROXY][property];
|
|
253
|
-
desc.set = v =>
|
|
223
|
+
desc.set = v => target[$PROXY][property] = v;
|
|
254
224
|
return desc;
|
|
255
225
|
}
|
|
256
226
|
const proxyTraps = {
|
|
@@ -268,24 +238,14 @@ const proxyTraps = {
|
|
|
268
238
|
if (!tracked) {
|
|
269
239
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
270
240
|
const isFunction = typeof value === "function";
|
|
271
|
-
if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get))
|
|
272
|
-
value = getNode(nodes, property, value)();
|
|
273
|
-
else if (value != null && isFunction && value === Array.prototype[property]) {
|
|
241
|
+
if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
|
|
274
242
|
return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
|
|
275
243
|
}
|
|
276
244
|
}
|
|
277
245
|
return isWrappable(value) ? wrap(value) : value;
|
|
278
246
|
},
|
|
279
247
|
has(target, property) {
|
|
280
|
-
if (
|
|
281
|
-
property === $RAW ||
|
|
282
|
-
property === $PROXY ||
|
|
283
|
-
property === $TRACK ||
|
|
284
|
-
property === $NODE ||
|
|
285
|
-
property === $HAS ||
|
|
286
|
-
property === "__proto__"
|
|
287
|
-
)
|
|
288
|
-
return true;
|
|
248
|
+
if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
|
|
289
249
|
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
290
250
|
return property in target;
|
|
291
251
|
},
|
|
@@ -304,7 +264,7 @@ function wrap(value) {
|
|
|
304
264
|
let p = value[$PROXY];
|
|
305
265
|
if (!p) {
|
|
306
266
|
Object.defineProperty(value, $PROXY, {
|
|
307
|
-
value:
|
|
267
|
+
value: p = new Proxy(value, proxyTraps)
|
|
308
268
|
});
|
|
309
269
|
const keys = Object.keys(value),
|
|
310
270
|
desc = Object.getOwnPropertyDescriptors(value);
|
|
@@ -341,42 +301,19 @@ function applyState(target, parent, property, merge, key) {
|
|
|
341
301
|
const previous = parent[property];
|
|
342
302
|
if (target === previous) return;
|
|
343
303
|
const isArray = Array.isArray(target);
|
|
344
|
-
if (
|
|
345
|
-
property !== $ROOT &&
|
|
346
|
-
(!isWrappable(target) ||
|
|
347
|
-
!isWrappable(previous) ||
|
|
348
|
-
isArray !== Array.isArray(previous) ||
|
|
349
|
-
(key && target[key] !== previous[key]))
|
|
350
|
-
) {
|
|
304
|
+
if (property !== $ROOT && (!isWrappable(target) || !isWrappable(previous) || isArray !== Array.isArray(previous) || key && target[key] !== previous[key])) {
|
|
351
305
|
setProperty(parent, property, target);
|
|
352
306
|
return;
|
|
353
307
|
}
|
|
354
308
|
if (isArray) {
|
|
355
|
-
if (
|
|
356
|
-
target.length &&
|
|
357
|
-
previous.length &&
|
|
358
|
-
(!merge || (key && target[0] && target[0][key] != null))
|
|
359
|
-
) {
|
|
309
|
+
if (target.length && previous.length && (!merge || key && target[0] && target[0][key] != null)) {
|
|
360
310
|
let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
|
|
361
|
-
for (
|
|
362
|
-
start = 0, end = Math.min(previous.length, target.length);
|
|
363
|
-
start < end &&
|
|
364
|
-
(previous[start] === target[start] ||
|
|
365
|
-
(key && previous[start] && target[start] && previous[start][key] === target[start][key]));
|
|
366
|
-
start++
|
|
367
|
-
) {
|
|
311
|
+
for (start = 0, end = Math.min(previous.length, target.length); start < end && (previous[start] === target[start] || key && previous[start] && target[start] && previous[start][key] === target[start][key]); start++) {
|
|
368
312
|
applyState(target[start], previous, start, merge, key);
|
|
369
313
|
}
|
|
370
314
|
const temp = new Array(target.length),
|
|
371
315
|
newIndices = new Map();
|
|
372
|
-
for (
|
|
373
|
-
end = previous.length - 1, newEnd = target.length - 1;
|
|
374
|
-
end >= start &&
|
|
375
|
-
newEnd >= start &&
|
|
376
|
-
(previous[end] === target[newEnd] ||
|
|
377
|
-
(key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]));
|
|
378
|
-
end--, newEnd--
|
|
379
|
-
) {
|
|
316
|
+
for (end = previous.length - 1, newEnd = target.length - 1; end >= start && newEnd >= start && (previous[end] === target[newEnd] || key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]); end--, newEnd--) {
|
|
380
317
|
temp[newEnd] = previous[end];
|
|
381
318
|
}
|
|
382
319
|
if (start > newEnd || start > end) {
|
|
@@ -430,19 +367,16 @@ function applyState(target, parent, property, merge, key) {
|
|
|
430
367
|
}
|
|
431
368
|
}
|
|
432
369
|
function reconcile(value, options = {}) {
|
|
433
|
-
const {
|
|
370
|
+
const {
|
|
371
|
+
merge,
|
|
372
|
+
key = "id"
|
|
373
|
+
} = options,
|
|
434
374
|
v = unwrap(value);
|
|
435
375
|
return state => {
|
|
436
376
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
437
|
-
const res = applyState(
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
[$ROOT]: state
|
|
441
|
-
},
|
|
442
|
-
$ROOT,
|
|
443
|
-
merge,
|
|
444
|
-
key
|
|
445
|
-
);
|
|
377
|
+
const res = applyState(v, {
|
|
378
|
+
[$ROOT]: state
|
|
379
|
+
}, $ROOT, merge, key);
|
|
446
380
|
return res === undefined ? state : res;
|
|
447
381
|
};
|
|
448
382
|
}
|
|
@@ -452,10 +386,7 @@ const setterTraps = {
|
|
|
452
386
|
if (property === $RAW) return target;
|
|
453
387
|
const value = target[property];
|
|
454
388
|
let proxy;
|
|
455
|
-
return isWrappable(value)
|
|
456
|
-
? producers.get(value) ||
|
|
457
|
-
(producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
|
|
458
|
-
: value;
|
|
389
|
+
return isWrappable(value) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : value;
|
|
459
390
|
},
|
|
460
391
|
set(target, property, value) {
|
|
461
392
|
setProperty(target, property, unwrap(value));
|
|
@@ -471,7 +402,7 @@ function produce(fn) {
|
|
|
471
402
|
if (isWrappable(state)) {
|
|
472
403
|
let proxy;
|
|
473
404
|
if (!(proxy = producers.get(state))) {
|
|
474
|
-
producers.set(state,
|
|
405
|
+
producers.set(state, proxy = new Proxy(state, setterTraps));
|
|
475
406
|
}
|
|
476
407
|
fn(proxy);
|
|
477
408
|
}
|