solid-js 1.8.4 → 1.8.5
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 +1 -1
- package/dist/dev.js +299 -534
- package/dist/server.js +75 -170
- package/dist/solid.cjs +1 -1
- package/dist/solid.js +257 -461
- 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 -114
- package/store/dist/server.js +8 -19
- package/store/dist/store.js +39 -105
- 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 +9 -72
- 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 +140 -228
- package/types/render/Suspense.d.ts +5 -5
- package/types/render/component.d.ts +31 -62
- 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 +95 -166
- 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.js +81 -619
- package/web/dist/server.js +94 -177
- package/web/dist/storage.js +3 -3
- package/web/dist/web.js +80 -613
- 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,
|
|
@@ -362,39 +316,19 @@ const $ROOT = Symbol("store-root");
|
|
|
362
316
|
function applyState(target, parent, property, merge, key) {
|
|
363
317
|
const previous = parent[property];
|
|
364
318
|
if (target === previous) return;
|
|
365
|
-
if (
|
|
366
|
-
property !== $ROOT &&
|
|
367
|
-
(!isWrappable(target) || !isWrappable(previous) || (key && target[key] !== previous[key]))
|
|
368
|
-
) {
|
|
319
|
+
if (property !== $ROOT && (!isWrappable(target) || !isWrappable(previous) || key && target[key] !== previous[key])) {
|
|
369
320
|
setProperty(parent, property, target);
|
|
370
321
|
return;
|
|
371
322
|
}
|
|
372
323
|
if (Array.isArray(target)) {
|
|
373
|
-
if (
|
|
374
|
-
target.length &&
|
|
375
|
-
previous.length &&
|
|
376
|
-
(!merge || (key && target[0] && target[0][key] != null))
|
|
377
|
-
) {
|
|
324
|
+
if (target.length && previous.length && (!merge || key && target[0] && target[0][key] != null)) {
|
|
378
325
|
let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
|
|
379
|
-
for (
|
|
380
|
-
start = 0, end = Math.min(previous.length, target.length);
|
|
381
|
-
start < end &&
|
|
382
|
-
(previous[start] === target[start] ||
|
|
383
|
-
(key && previous[start] && target[start] && previous[start][key] === target[start][key]));
|
|
384
|
-
start++
|
|
385
|
-
) {
|
|
326
|
+
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++) {
|
|
386
327
|
applyState(target[start], previous, start, merge, key);
|
|
387
328
|
}
|
|
388
329
|
const temp = new Array(target.length),
|
|
389
330
|
newIndices = new Map();
|
|
390
|
-
for (
|
|
391
|
-
end = previous.length - 1, newEnd = target.length - 1;
|
|
392
|
-
end >= start &&
|
|
393
|
-
newEnd >= start &&
|
|
394
|
-
(previous[end] === target[newEnd] ||
|
|
395
|
-
(key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]));
|
|
396
|
-
end--, newEnd--
|
|
397
|
-
) {
|
|
331
|
+
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--) {
|
|
398
332
|
temp[newEnd] = previous[end];
|
|
399
333
|
}
|
|
400
334
|
if (start > newEnd || start > end) {
|
|
@@ -448,19 +382,16 @@ function applyState(target, parent, property, merge, key) {
|
|
|
448
382
|
}
|
|
449
383
|
}
|
|
450
384
|
function reconcile(value, options = {}) {
|
|
451
|
-
const {
|
|
385
|
+
const {
|
|
386
|
+
merge,
|
|
387
|
+
key = "id"
|
|
388
|
+
} = options,
|
|
452
389
|
v = unwrap(value);
|
|
453
390
|
return state => {
|
|
454
391
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
455
|
-
const res = applyState(
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
[$ROOT]: state
|
|
459
|
-
},
|
|
460
|
-
$ROOT,
|
|
461
|
-
merge,
|
|
462
|
-
key
|
|
463
|
-
);
|
|
392
|
+
const res = applyState(v, {
|
|
393
|
+
[$ROOT]: state
|
|
394
|
+
}, $ROOT, merge, key);
|
|
464
395
|
return res === undefined ? state : res;
|
|
465
396
|
};
|
|
466
397
|
}
|
|
@@ -470,10 +401,7 @@ const setterTraps = {
|
|
|
470
401
|
if (property === $RAW) return target;
|
|
471
402
|
const value = target[property];
|
|
472
403
|
let proxy;
|
|
473
|
-
return isWrappable(value)
|
|
474
|
-
? producers.get(value) ||
|
|
475
|
-
(producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
|
|
476
|
-
: value;
|
|
404
|
+
return isWrappable(value) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : value;
|
|
477
405
|
},
|
|
478
406
|
set(target, property, value) {
|
|
479
407
|
setProperty(target, property, unwrap(value));
|
|
@@ -489,7 +417,7 @@ function produce(fn) {
|
|
|
489
417
|
if (isWrappable(state)) {
|
|
490
418
|
let proxy;
|
|
491
419
|
if (!(proxy = producers.get(state))) {
|
|
492
|
-
producers.set(state,
|
|
420
|
+
producers.set(state, proxy = new Proxy(state, setterTraps));
|
|
493
421
|
}
|
|
494
422
|
fn(proxy);
|
|
495
423
|
}
|
|
@@ -501,6 +429,6 @@ const DEV = {
|
|
|
501
429
|
$NODE,
|
|
502
430
|
isWrappable,
|
|
503
431
|
hooks: DevHooks
|
|
504
|
-
};
|
|
432
|
+
} ;
|
|
505
433
|
|
|
506
434
|
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);
|
|
@@ -340,39 +300,19 @@ const $ROOT = Symbol("store-root");
|
|
|
340
300
|
function applyState(target, parent, property, merge, key) {
|
|
341
301
|
const previous = parent[property];
|
|
342
302
|
if (target === previous) return;
|
|
343
|
-
if (
|
|
344
|
-
property !== $ROOT &&
|
|
345
|
-
(!isWrappable(target) || !isWrappable(previous) || (key && target[key] !== previous[key]))
|
|
346
|
-
) {
|
|
303
|
+
if (property !== $ROOT && (!isWrappable(target) || !isWrappable(previous) || key && target[key] !== previous[key])) {
|
|
347
304
|
setProperty(parent, property, target);
|
|
348
305
|
return;
|
|
349
306
|
}
|
|
350
307
|
if (Array.isArray(target)) {
|
|
351
|
-
if (
|
|
352
|
-
target.length &&
|
|
353
|
-
previous.length &&
|
|
354
|
-
(!merge || (key && target[0] && target[0][key] != null))
|
|
355
|
-
) {
|
|
308
|
+
if (target.length && previous.length && (!merge || key && target[0] && target[0][key] != null)) {
|
|
356
309
|
let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
|
|
357
|
-
for (
|
|
358
|
-
start = 0, end = Math.min(previous.length, target.length);
|
|
359
|
-
start < end &&
|
|
360
|
-
(previous[start] === target[start] ||
|
|
361
|
-
(key && previous[start] && target[start] && previous[start][key] === target[start][key]));
|
|
362
|
-
start++
|
|
363
|
-
) {
|
|
310
|
+
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++) {
|
|
364
311
|
applyState(target[start], previous, start, merge, key);
|
|
365
312
|
}
|
|
366
313
|
const temp = new Array(target.length),
|
|
367
314
|
newIndices = new Map();
|
|
368
|
-
for (
|
|
369
|
-
end = previous.length - 1, newEnd = target.length - 1;
|
|
370
|
-
end >= start &&
|
|
371
|
-
newEnd >= start &&
|
|
372
|
-
(previous[end] === target[newEnd] ||
|
|
373
|
-
(key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]));
|
|
374
|
-
end--, newEnd--
|
|
375
|
-
) {
|
|
315
|
+
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--) {
|
|
376
316
|
temp[newEnd] = previous[end];
|
|
377
317
|
}
|
|
378
318
|
if (start > newEnd || start > end) {
|
|
@@ -426,19 +366,16 @@ function applyState(target, parent, property, merge, key) {
|
|
|
426
366
|
}
|
|
427
367
|
}
|
|
428
368
|
function reconcile(value, options = {}) {
|
|
429
|
-
const {
|
|
369
|
+
const {
|
|
370
|
+
merge,
|
|
371
|
+
key = "id"
|
|
372
|
+
} = options,
|
|
430
373
|
v = unwrap(value);
|
|
431
374
|
return state => {
|
|
432
375
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
433
|
-
const res = applyState(
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
[$ROOT]: state
|
|
437
|
-
},
|
|
438
|
-
$ROOT,
|
|
439
|
-
merge,
|
|
440
|
-
key
|
|
441
|
-
);
|
|
376
|
+
const res = applyState(v, {
|
|
377
|
+
[$ROOT]: state
|
|
378
|
+
}, $ROOT, merge, key);
|
|
442
379
|
return res === undefined ? state : res;
|
|
443
380
|
};
|
|
444
381
|
}
|
|
@@ -448,10 +385,7 @@ const setterTraps = {
|
|
|
448
385
|
if (property === $RAW) return target;
|
|
449
386
|
const value = target[property];
|
|
450
387
|
let proxy;
|
|
451
|
-
return isWrappable(value)
|
|
452
|
-
? producers.get(value) ||
|
|
453
|
-
(producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
|
|
454
|
-
: value;
|
|
388
|
+
return isWrappable(value) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : value;
|
|
455
389
|
},
|
|
456
390
|
set(target, property, value) {
|
|
457
391
|
setProperty(target, property, unwrap(value));
|
|
@@ -467,7 +401,7 @@ function produce(fn) {
|
|
|
467
401
|
if (isWrappable(state)) {
|
|
468
402
|
let proxy;
|
|
469
403
|
if (!(proxy = producers.get(state))) {
|
|
470
|
-
producers.set(state,
|
|
404
|
+
producers.set(state, proxy = new Proxy(state, setterTraps));
|
|
471
405
|
}
|
|
472
406
|
fn(proxy);
|
|
473
407
|
}
|