solid-js 1.8.2 → 1.8.4
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 +534 -299
- package/dist/server.js +170 -75
- package/dist/solid.cjs +1 -1
- package/dist/solid.js +461 -257
- package/h/dist/h.js +34 -8
- package/h/jsx-runtime/dist/jsx.js +1 -1
- package/h/jsx-runtime/types/index.d.ts +11 -8
- package/h/types/hyperscript.d.ts +11 -11
- package/html/dist/html.js +216 -94
- package/html/types/lit.d.ts +47 -31
- package/package.json +7 -3
- package/store/dist/dev.js +114 -42
- package/store/dist/server.js +19 -8
- package/store/dist/store.js +105 -39
- package/store/types/index.d.ts +21 -7
- package/store/types/modifiers.d.ts +6 -3
- package/store/types/mutable.d.ts +5 -2
- package/store/types/server.d.ts +12 -4
- package/store/types/store.d.ts +218 -61
- package/types/index.d.ts +72 -9
- package/types/reactive/array.d.ts +12 -4
- package/types/reactive/observable.d.ts +25 -17
- package/types/reactive/scheduler.d.ts +9 -6
- package/types/reactive/signal.d.ts +228 -140
- package/types/render/Suspense.d.ts +5 -5
- package/types/render/component.d.ts +62 -31
- package/types/render/flow.d.ts +43 -31
- package/types/render/hydration.d.ts +13 -13
- package/types/server/index.d.ts +57 -2
- package/types/server/reactive.d.ts +73 -42
- package/types/server/rendering.d.ts +166 -95
- package/universal/dist/dev.js +28 -12
- package/universal/dist/universal.js +28 -12
- package/universal/types/index.d.ts +3 -1
- package/universal/types/universal.d.ts +0 -1
- package/web/dist/dev.cjs +3 -0
- package/web/dist/dev.js +620 -81
- package/web/dist/server.cjs +17 -5
- package/web/dist/server.js +188 -95
- package/web/dist/storage.cjs +12 -0
- package/web/dist/storage.js +10 -0
- package/web/dist/web.cjs +3 -0
- package/web/dist/web.js +614 -80
- package/web/types/client.d.ts +8 -3
- package/web/types/core.d.ts +10 -1
- package/web/types/index.d.ts +27 -10
- package/web/types/server-mock.d.ts +47 -32
- package/web/types/server.d.ts +10 -1
- package/web/types/storage.d.ts +2 -0
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: p = new Proxy(value, proxyTraps$1)
|
|
11
|
+
value: (p = new Proxy(value, proxyTraps$1))
|
|
12
12
|
});
|
|
13
13
|
if (!Array.isArray(value)) {
|
|
14
14
|
const keys = Object.keys(value),
|
|
@@ -28,20 +28,29 @@ function wrap$1(value) {
|
|
|
28
28
|
}
|
|
29
29
|
function isWrappable(obj) {
|
|
30
30
|
let proto;
|
|
31
|
-
return
|
|
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
|
+
);
|
|
32
39
|
}
|
|
33
40
|
function unwrap(item, set = new Set()) {
|
|
34
41
|
let result, unwrapped, v, prop;
|
|
35
|
-
if (result = item != null && item[$RAW]) return result;
|
|
42
|
+
if ((result = item != null && item[$RAW])) return result;
|
|
36
43
|
if (!isWrappable(item) || set.has(item)) return item;
|
|
37
44
|
if (Array.isArray(item)) {
|
|
38
|
-
if (Object.isFrozen(item)) item = item.slice(0);
|
|
45
|
+
if (Object.isFrozen(item)) item = item.slice(0);
|
|
46
|
+
else set.add(item);
|
|
39
47
|
for (let i = 0, l = item.length; i < l; i++) {
|
|
40
48
|
v = item[i];
|
|
41
49
|
if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;
|
|
42
50
|
}
|
|
43
51
|
} else {
|
|
44
|
-
if (Object.isFrozen(item)) item = Object.assign({}, item);
|
|
52
|
+
if (Object.isFrozen(item)) item = Object.assign({}, item);
|
|
53
|
+
else set.add(item);
|
|
45
54
|
const keys = Object.keys(item),
|
|
46
55
|
desc = Object.getOwnPropertyDescriptors(item);
|
|
47
56
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
@@ -55,9 +64,10 @@ function unwrap(item, set = new Set()) {
|
|
|
55
64
|
}
|
|
56
65
|
function getNodes(target, symbol) {
|
|
57
66
|
let nodes = target[symbol];
|
|
58
|
-
if (!nodes)
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
if (!nodes)
|
|
68
|
+
Object.defineProperty(target, symbol, {
|
|
69
|
+
value: (nodes = Object.create(null))
|
|
70
|
+
});
|
|
61
71
|
return nodes;
|
|
62
72
|
}
|
|
63
73
|
function getNode(nodes, property, value) {
|
|
@@ -67,11 +77,12 @@ function getNode(nodes, property, value) {
|
|
|
67
77
|
internal: true
|
|
68
78
|
});
|
|
69
79
|
s.$ = set;
|
|
70
|
-
return nodes[property] = s;
|
|
80
|
+
return (nodes[property] = s);
|
|
71
81
|
}
|
|
72
82
|
function proxyDescriptor$1(target, property) {
|
|
73
83
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
74
|
-
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
|
|
84
|
+
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
|
|
85
|
+
return desc;
|
|
75
86
|
delete desc.value;
|
|
76
87
|
delete desc.writable;
|
|
77
88
|
desc.get = () => target[$PROXY][property];
|
|
@@ -98,12 +109,25 @@ const proxyTraps$1 = {
|
|
|
98
109
|
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
99
110
|
if (!tracked) {
|
|
100
111
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
101
|
-
if (
|
|
112
|
+
if (
|
|
113
|
+
getListener() &&
|
|
114
|
+
(typeof value !== "function" || target.hasOwnProperty(property)) &&
|
|
115
|
+
!(desc && desc.get)
|
|
116
|
+
)
|
|
117
|
+
value = getNode(nodes, property, value)();
|
|
102
118
|
}
|
|
103
119
|
return isWrappable(value) ? wrap$1(value) : value;
|
|
104
120
|
},
|
|
105
121
|
has(target, property) {
|
|
106
|
-
if (
|
|
122
|
+
if (
|
|
123
|
+
property === $RAW ||
|
|
124
|
+
property === $PROXY ||
|
|
125
|
+
property === $TRACK ||
|
|
126
|
+
property === $NODE ||
|
|
127
|
+
property === $HAS ||
|
|
128
|
+
property === "__proto__"
|
|
129
|
+
)
|
|
130
|
+
return true;
|
|
107
131
|
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
108
132
|
return property in target;
|
|
109
133
|
},
|
|
@@ -129,7 +153,7 @@ function setProperty(state, property, value, deleting = false) {
|
|
|
129
153
|
}
|
|
130
154
|
let nodes = getNodes(state, $NODE),
|
|
131
155
|
node;
|
|
132
|
-
if (node = getNode(nodes, property, prev)) node.$(() => value);
|
|
156
|
+
if ((node = getNode(nodes, property, prev))) node.$(() => value);
|
|
133
157
|
if (Array.isArray(state) && state.length !== len) {
|
|
134
158
|
for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
|
|
135
159
|
(node = getNode(nodes, "length", len)) && node.$(state.length);
|
|
@@ -175,11 +199,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
175
199
|
}
|
|
176
200
|
return;
|
|
177
201
|
} else if (isArray && partType === "object") {
|
|
178
|
-
const {
|
|
179
|
-
from = 0,
|
|
180
|
-
to = current.length - 1,
|
|
181
|
-
by = 1
|
|
182
|
-
} = part;
|
|
202
|
+
const { from = 0, to = current.length - 1, by = 1 } = part;
|
|
183
203
|
for (let i = from; i <= to; i += by) {
|
|
184
204
|
updatePath(current, [i].concat(path), traversed);
|
|
185
205
|
}
|
|
@@ -198,7 +218,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
198
218
|
}
|
|
199
219
|
if (part === undefined && value == undefined) return;
|
|
200
220
|
value = unwrap(value);
|
|
201
|
-
if (part === undefined || isWrappable(prev) && isWrappable(value) && !Array.isArray(value)) {
|
|
221
|
+
if (part === undefined || (isWrappable(prev) && isWrappable(value) && !Array.isArray(value))) {
|
|
202
222
|
mergeStoreNode(prev, value);
|
|
203
223
|
} else setProperty(current, part, value);
|
|
204
224
|
}
|
|
@@ -208,7 +228,9 @@ function createStore(...[store, options]) {
|
|
|
208
228
|
const wrappedStore = wrap$1(unwrappedStore);
|
|
209
229
|
function setStore(...args) {
|
|
210
230
|
batch(() => {
|
|
211
|
-
isArray && args.length === 1
|
|
231
|
+
isArray && args.length === 1
|
|
232
|
+
? updateArray(unwrappedStore, args[0])
|
|
233
|
+
: updatePath(unwrappedStore, args);
|
|
212
234
|
});
|
|
213
235
|
}
|
|
214
236
|
return [wrappedStore, setStore];
|
|
@@ -216,11 +238,19 @@ function createStore(...[store, options]) {
|
|
|
216
238
|
|
|
217
239
|
function proxyDescriptor(target, property) {
|
|
218
240
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
219
|
-
if (
|
|
241
|
+
if (
|
|
242
|
+
!desc ||
|
|
243
|
+
desc.get ||
|
|
244
|
+
desc.set ||
|
|
245
|
+
!desc.configurable ||
|
|
246
|
+
property === $PROXY ||
|
|
247
|
+
property === $NODE
|
|
248
|
+
)
|
|
249
|
+
return desc;
|
|
220
250
|
delete desc.value;
|
|
221
251
|
delete desc.writable;
|
|
222
252
|
desc.get = () => target[$PROXY][property];
|
|
223
|
-
desc.set = v => target[$PROXY][property] = v;
|
|
253
|
+
desc.set = v => (target[$PROXY][property] = v);
|
|
224
254
|
return desc;
|
|
225
255
|
}
|
|
226
256
|
const proxyTraps = {
|
|
@@ -238,14 +268,24 @@ const proxyTraps = {
|
|
|
238
268
|
if (!tracked) {
|
|
239
269
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
240
270
|
const isFunction = typeof value === "function";
|
|
241
|
-
if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get))
|
|
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]) {
|
|
242
274
|
return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
|
|
243
275
|
}
|
|
244
276
|
}
|
|
245
277
|
return isWrappable(value) ? wrap(value) : value;
|
|
246
278
|
},
|
|
247
279
|
has(target, property) {
|
|
248
|
-
if (
|
|
280
|
+
if (
|
|
281
|
+
property === $RAW ||
|
|
282
|
+
property === $PROXY ||
|
|
283
|
+
property === $TRACK ||
|
|
284
|
+
property === $NODE ||
|
|
285
|
+
property === $HAS ||
|
|
286
|
+
property === "__proto__"
|
|
287
|
+
)
|
|
288
|
+
return true;
|
|
249
289
|
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
250
290
|
return property in target;
|
|
251
291
|
},
|
|
@@ -264,7 +304,7 @@ function wrap(value) {
|
|
|
264
304
|
let p = value[$PROXY];
|
|
265
305
|
if (!p) {
|
|
266
306
|
Object.defineProperty(value, $PROXY, {
|
|
267
|
-
value: p = new Proxy(value, proxyTraps)
|
|
307
|
+
value: (p = new Proxy(value, proxyTraps))
|
|
268
308
|
});
|
|
269
309
|
const keys = Object.keys(value),
|
|
270
310
|
desc = Object.getOwnPropertyDescriptors(value);
|
|
@@ -300,19 +340,39 @@ const $ROOT = Symbol("store-root");
|
|
|
300
340
|
function applyState(target, parent, property, merge, key) {
|
|
301
341
|
const previous = parent[property];
|
|
302
342
|
if (target === previous) return;
|
|
303
|
-
if (
|
|
343
|
+
if (
|
|
344
|
+
property !== $ROOT &&
|
|
345
|
+
(!isWrappable(target) || !isWrappable(previous) || (key && target[key] !== previous[key]))
|
|
346
|
+
) {
|
|
304
347
|
setProperty(parent, property, target);
|
|
305
348
|
return;
|
|
306
349
|
}
|
|
307
350
|
if (Array.isArray(target)) {
|
|
308
|
-
if (
|
|
351
|
+
if (
|
|
352
|
+
target.length &&
|
|
353
|
+
previous.length &&
|
|
354
|
+
(!merge || (key && target[0] && target[0][key] != null))
|
|
355
|
+
) {
|
|
309
356
|
let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
|
|
310
|
-
for (
|
|
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
|
+
) {
|
|
311
364
|
applyState(target[start], previous, start, merge, key);
|
|
312
365
|
}
|
|
313
366
|
const temp = new Array(target.length),
|
|
314
367
|
newIndices = new Map();
|
|
315
|
-
for (
|
|
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
|
+
) {
|
|
316
376
|
temp[newEnd] = previous[end];
|
|
317
377
|
}
|
|
318
378
|
if (start > newEnd || start > end) {
|
|
@@ -366,16 +426,19 @@ function applyState(target, parent, property, merge, key) {
|
|
|
366
426
|
}
|
|
367
427
|
}
|
|
368
428
|
function reconcile(value, options = {}) {
|
|
369
|
-
const {
|
|
370
|
-
merge,
|
|
371
|
-
key = "id"
|
|
372
|
-
} = options,
|
|
429
|
+
const { merge, key = "id" } = options,
|
|
373
430
|
v = unwrap(value);
|
|
374
431
|
return state => {
|
|
375
432
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
376
|
-
const res = applyState(
|
|
377
|
-
|
|
378
|
-
|
|
433
|
+
const res = applyState(
|
|
434
|
+
v,
|
|
435
|
+
{
|
|
436
|
+
[$ROOT]: state
|
|
437
|
+
},
|
|
438
|
+
$ROOT,
|
|
439
|
+
merge,
|
|
440
|
+
key
|
|
441
|
+
);
|
|
379
442
|
return res === undefined ? state : res;
|
|
380
443
|
};
|
|
381
444
|
}
|
|
@@ -385,7 +448,10 @@ const setterTraps = {
|
|
|
385
448
|
if (property === $RAW) return target;
|
|
386
449
|
const value = target[property];
|
|
387
450
|
let proxy;
|
|
388
|
-
return isWrappable(value)
|
|
451
|
+
return isWrappable(value)
|
|
452
|
+
? producers.get(value) ||
|
|
453
|
+
(producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
|
|
454
|
+
: value;
|
|
389
455
|
},
|
|
390
456
|
set(target, property, value) {
|
|
391
457
|
setProperty(target, property, unwrap(value));
|
|
@@ -401,7 +467,7 @@ function produce(fn) {
|
|
|
401
467
|
if (isWrappable(state)) {
|
|
402
468
|
let proxy;
|
|
403
469
|
if (!(proxy = producers.get(state))) {
|
|
404
|
-
producers.set(state, proxy = new Proxy(state, setterTraps));
|
|
470
|
+
producers.set(state, (proxy = new Proxy(state, setterTraps)));
|
|
405
471
|
}
|
|
406
472
|
fn(proxy);
|
|
407
473
|
}
|
package/store/types/index.d.ts
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
export { $RAW, createStore, unwrap } from "./store.js";
|
|
2
|
-
export type {
|
|
2
|
+
export type {
|
|
3
|
+
ArrayFilterFn,
|
|
4
|
+
DeepMutable,
|
|
5
|
+
DeepReadonly,
|
|
6
|
+
NotWrappable,
|
|
7
|
+
Part,
|
|
8
|
+
SetStoreFunction,
|
|
9
|
+
SolidStore,
|
|
10
|
+
Store,
|
|
11
|
+
StoreNode,
|
|
12
|
+
StorePathRange,
|
|
13
|
+
StoreSetter
|
|
14
|
+
} from "./store.js";
|
|
3
15
|
export * from "./mutable.js";
|
|
4
16
|
export * from "./modifiers.js";
|
|
5
17
|
import { $NODE, isWrappable } from "./store.js";
|
|
6
|
-
export declare const DEV:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
18
|
+
export declare const DEV:
|
|
19
|
+
| {
|
|
20
|
+
readonly $NODE: typeof $NODE;
|
|
21
|
+
readonly isWrappable: typeof isWrappable;
|
|
22
|
+
readonly hooks: {
|
|
10
23
|
onStoreNodeUpdate: import("./store.js").OnStoreNodeUpdate | null;
|
|
11
|
-
|
|
12
|
-
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
| undefined;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export type ReconcileOptions = {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
key?: string | null;
|
|
3
|
+
merge?: boolean;
|
|
4
4
|
};
|
|
5
|
-
export declare function reconcile<T extends U, U>(
|
|
5
|
+
export declare function reconcile<T extends U, U>(
|
|
6
|
+
value: T,
|
|
7
|
+
options?: ReconcileOptions
|
|
8
|
+
): (state: U) => T;
|
|
6
9
|
export declare function produce<T>(fn: (state: T) => void): (state: T) => T;
|
package/store/types/mutable.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { StoreNode } from "./store.js";
|
|
2
|
-
export declare function createMutable<T extends StoreNode>(
|
|
2
|
+
export declare function createMutable<T extends StoreNode>(
|
|
3
|
+
state: T,
|
|
4
|
+
options?: {
|
|
3
5
|
name?: string;
|
|
4
|
-
}
|
|
6
|
+
}
|
|
7
|
+
): T;
|
|
5
8
|
export declare function modifyMutable<T>(state: T, modifier: (state: T) => T): void;
|
package/store/types/server.d.ts
CHANGED
|
@@ -2,15 +2,23 @@ import type { SetStoreFunction, Store } from "./store.js";
|
|
|
2
2
|
export declare const $RAW: unique symbol;
|
|
3
3
|
export declare function isWrappable(obj: any): boolean;
|
|
4
4
|
export declare function unwrap<T>(item: T): T;
|
|
5
|
-
export declare function setProperty(
|
|
5
|
+
export declare function setProperty(
|
|
6
|
+
state: any,
|
|
7
|
+
property: PropertyKey,
|
|
8
|
+
value: any,
|
|
9
|
+
force?: boolean
|
|
10
|
+
): void;
|
|
6
11
|
export declare function updatePath(current: any, path: any[], traversed?: PropertyKey[]): void;
|
|
7
12
|
export declare function createStore<T>(state: T | Store<T>): [Store<T>, SetStoreFunction<T>];
|
|
8
13
|
export declare function createMutable<T>(state: T | Store<T>): T;
|
|
9
14
|
type ReconcileOptions = {
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
key?: string | null;
|
|
16
|
+
merge?: boolean;
|
|
12
17
|
};
|
|
13
|
-
export declare function reconcile<T extends U, U extends object>(
|
|
18
|
+
export declare function reconcile<T extends U, U extends object>(
|
|
19
|
+
value: T,
|
|
20
|
+
options?: ReconcileOptions
|
|
21
|
+
): (state: U) => T;
|
|
14
22
|
export declare function produce<T>(fn: (state: T) => void): (state: T) => T;
|
|
15
23
|
export declare const DEV: undefined;
|
|
16
24
|
export {};
|